├── .github └── workflows │ ├── deploy.yaml │ ├── main.yml │ ├── release.yaml │ └── spellcheck.yaml ├── .gitignore ├── .gitmodules ├── .redocly.yml ├── LICENSE ├── README.md ├── apis └── builder │ ├── blinded_blocks.yaml │ ├── blinded_blocks_v2.yaml │ ├── header.yaml │ ├── status.yaml │ └── validators.yaml ├── assets └── ethereum_logo.png ├── builder-oapi.yaml ├── dist ├── favicon-16x16.png ├── favicon-32x32.png ├── oauth2-redirect.html ├── swagger-ui-bundle.js ├── swagger-ui-bundle.js.map ├── swagger-ui-es-bundle-core.js ├── swagger-ui-es-bundle-core.js.map ├── swagger-ui-es-bundle.js ├── swagger-ui-es-bundle.js.map ├── swagger-ui-standalone-preset.js ├── swagger-ui-standalone-preset.js.map ├── swagger-ui.css ├── swagger-ui.css.map ├── swagger-ui.js ├── swagger-ui.js.map └── theme-material.css ├── examples ├── bellatrix │ ├── execution_payload.json │ ├── execution_payload.ssz │ ├── signed_blinded_beacon_block.json │ ├── signed_blinded_beacon_block.ssz │ ├── signed_builder_bid.json │ ├── signed_builder_bid.ssz │ ├── signed_validator_registrations.json │ └── signed_validator_registrations.ssz ├── capella │ ├── execution_payload.json │ ├── execution_payload.ssz │ ├── signed_blinded_beacon_block.json │ ├── signed_blinded_beacon_block.ssz │ ├── signed_builder_bid.json │ └── signed_builder_bid.ssz ├── deneb │ ├── execution_payload_and_blobs_bundle.json │ ├── execution_payload_and_blobs_bundle.ssz │ ├── signed_blinded_beacon_block.json │ ├── signed_blinded_beacon_block.ssz │ ├── signed_builder_bid.json │ └── signed_builder_bid.ssz ├── electra │ ├── execution_payload_and_blobs_bundle.json │ ├── execution_payload_and_blobs_bundle.ssz │ ├── signed_blinded_beacon_block.json │ ├── signed_blinded_beacon_block.ssz │ ├── signed_builder_bid.json │ └── signed_builder_bid.ssz └── fulu │ ├── execution_payload_and_blobs_bundle.json │ ├── execution_payload_and_blobs_bundle.ssz │ ├── signed_blinded_beacon_block.json │ ├── signed_blinded_beacon_block.ssz │ ├── signed_builder_bid.json │ └── signed_builder_bid.ssz ├── index.html ├── specs ├── bellatrix │ ├── builder.md │ └── validator.md ├── capella │ └── builder.md ├── deneb │ └── builder.md ├── electra │ └── builder.md └── fulu │ └── builder.md ├── spellcheck.yaml ├── types ├── bellatrix │ └── bid.yaml ├── capella │ └── bid.yaml ├── deneb │ ├── bid.yaml │ ├── blobs_bundle.yaml │ └── execution_payload_and_blobs_bundle.yaml ├── electra │ └── bid.yaml ├── fulu │ ├── blobs_bundle.yaml │ └── execution_payload_and_blobs_bundle.yaml └── http.yaml └── wordlist.txt /.github/workflows/deploy.yaml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | 3 | on: 4 | push: 5 | branches: 6 | - "main" 7 | 8 | jobs: 9 | setup: 10 | runs-on: ubuntu-latest 11 | outputs: 12 | releases: ${{ steps.releases.outputs.releases }} 13 | steps: 14 | - id: releases 15 | run: | 16 | echo "releases=$(curl -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -H "X-GitHub-Api-Version: 2022-11-28" "https://api.github.com/repos/${{github.repository}}/releases?per_page=100" | jq -c '[.[].tag_name]')" >> $GITHUB_OUTPUT 17 | releases: 18 | needs: setup 19 | runs-on: ubuntu-latest 20 | strategy: 21 | matrix: 22 | release: ${{fromJson(needs.setup.outputs.releases)}} 23 | steps: 24 | - uses: dsaltares/fetch-gh-release-asset@1.1.0 25 | with: 26 | version: 'tags/${{ matrix.release }}' 27 | file: 'builder-oapi.json' 28 | target: 'deploy/releases/${{ matrix.release }}/builder-oapi.json' 29 | - name: Save releases (artifact) 30 | uses: actions/upload-artifact@v4 31 | with: 32 | name: releases-${{ matrix.release }} 33 | retention-days: 7 34 | path: | 35 | deploy/releases 36 | deploy: 37 | needs: releases 38 | runs-on: ubuntu-latest 39 | steps: 40 | - uses: actions/checkout@v4 41 | with: 42 | submodules: true 43 | - uses: actions/setup-node@v2 44 | - run: npm i -g @apidevtools/swagger-cli@4 45 | - name: Prepare deploy directory 46 | run: | 47 | mkdir ./deploy 48 | cp -r dist ./deploy 49 | cp -r assets ./deploy 50 | cp index.html ./deploy 51 | - name: Restore releases 52 | uses: actions/download-artifact@v4 53 | with: 54 | path: deploy/releases 55 | pattern: releases-* 56 | merge-multiple: true 57 | - name: Bundle spec 58 | run: "swagger-cli bundle ./builder-oapi.yaml -r -t yaml -o ./deploy/builder-oapi.yaml" 59 | - name: Publish to Github Pages 60 | uses: peaceiris/actions-gh-pages@v4 61 | with: 62 | github_token: ${{ secrets.GITHUB_TOKEN }} 63 | publish_dir: ./deploy 64 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | 9 | steps: 10 | - uses: actions/checkout@v3 11 | with: 12 | submodules: true 13 | - uses: actions/setup-node@v2 14 | - run: npm i -g @apidevtools/swagger-cli@4 @redocly/cli@1.0.0-beta.111 15 | 16 | - name: Lint spec 17 | run: redocly lint ./builder-oapi.yaml 18 | 19 | - name: Bundle spec 20 | run: "swagger-cli bundle ./builder-oapi.yaml -r -t yaml -o ./deploy/builder-oapi.yaml" 21 | -------------------------------------------------------------------------------- /.github/workflows/release.yaml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | tags: 6 | - "v*" 7 | 8 | jobs: 9 | release: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v3 13 | with: 14 | submodules: true 15 | - uses: actions/setup-node@v2 16 | - run: npm i -g @apidevtools/swagger-cli@4 17 | - name: Bundle yaml spec 18 | run: "swagger-cli bundle ./builder-oapi.yaml -r -t yaml -o ./deploy/builder-oapi.yaml" 19 | - name: Bundle json spec 20 | run: "swagger-cli bundle ./builder-oapi.yaml -r -t json -o ./deploy/builder-oapi.json" 21 | - name: Create Release 22 | id: create_release 23 | uses: actions/create-release@v1 24 | env: 25 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token 26 | with: 27 | tag_name: ${{ github.ref }} 28 | release_name: ${{ github.ref }} 29 | draft: false 30 | prerelease: false 31 | - name: Upload Yaml Bundle 32 | uses: actions/upload-release-asset@v1 33 | env: 34 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 35 | with: 36 | upload_url: ${{ steps.create_release.outputs.upload_url }} 37 | asset_path: ./deploy/builder-oapi.yaml 38 | asset_name: builder-oapi.yaml 39 | asset_content_type: text/x-yaml 40 | - name: Upload Json Bundle 41 | uses: actions/upload-release-asset@v1 42 | env: 43 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 44 | with: 45 | upload_url: ${{ steps.create_release.outputs.upload_url }} 46 | asset_path: ./deploy/builder-oapi.json 47 | asset_name: builder-oapi.json 48 | asset_content_type: application/json 49 | - name: Rollback Release 50 | if: failure() 51 | uses: author/action-rollback@stable 52 | with: 53 | # Using a known release ID 54 | id: ${{ steps.create_release.id }} 55 | # Using a tag name 56 | tag: ${{ github.ref }} 57 | # Always delete the tag, even if a release is not associated with it. 58 | always_delete_tag: true 59 | env: 60 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 61 | -------------------------------------------------------------------------------- /.github/workflows/spellcheck.yaml: -------------------------------------------------------------------------------- 1 | name: Spellcheck 2 | on: [push, pull_request, workflow_dispatch] 3 | 4 | jobs: 5 | build: 6 | name: Spellcheck 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@master 10 | - uses: rojopolis/spellcheck-github-actions@0.35.0 11 | name: Spellcheck 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | package*json 3 | deploy 4 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "beacon-apis"] 2 | path = beacon-apis 3 | url = https://github.com/ethereum/beacon-apis 4 | -------------------------------------------------------------------------------- /.redocly.yml: -------------------------------------------------------------------------------- 1 | extends: 2 | - recommended 3 | rules: 4 | no-unused-components: error 5 | operation-4xx-response: off 6 | operation-tag-defined: error 7 | security-defined: off 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | CC0 1.0 Universal 2 | 3 | Statement of Purpose 4 | 5 | The laws of most jurisdictions throughout the world automatically confer 6 | exclusive Copyright and Related Rights (defined below) upon the creator and 7 | subsequent owner(s) (each and all, an "owner") of an original work of 8 | authorship and/or a database (each, a "Work"). 9 | 10 | Certain owners wish to permanently relinquish those rights to a Work for the 11 | purpose of contributing to a commons of creative, cultural and scientific 12 | works ("Commons") that the public can reliably and without fear of later 13 | claims of infringement build upon, modify, incorporate in other works, reuse 14 | and redistribute as freely as possible in any form whatsoever and for any 15 | purposes, including without limitation commercial purposes. These owners may 16 | contribute to the Commons to promote the ideal of a free culture and the 17 | further production of creative, cultural and scientific works, or to gain 18 | reputation or greater distribution for their Work in part through the use and 19 | efforts of others. 20 | 21 | For these and/or other purposes and motivations, and without any expectation 22 | of additional consideration or compensation, the person associating CC0 with a 23 | Work (the "Affirmer"), to the extent that he or she is an owner of Copyright 24 | and Related Rights in the Work, voluntarily elects to apply CC0 to the Work 25 | and publicly distribute the Work under its terms, with knowledge of his or her 26 | Copyright and Related Rights in the Work and the meaning and intended legal 27 | effect of CC0 on those rights. 28 | 29 | 1. Copyright and Related Rights. A Work made available under CC0 may be 30 | protected by copyright and related or neighboring rights ("Copyright and 31 | Related Rights"). Copyright and Related Rights include, but are not limited 32 | to, the following: 33 | 34 | i. the right to reproduce, adapt, distribute, perform, display, communicate, 35 | and translate a Work; 36 | 37 | ii. moral rights retained by the original author(s) and/or performer(s); 38 | 39 | iii. publicity and privacy rights pertaining to a person's image or likeness 40 | depicted in a Work; 41 | 42 | iv. rights protecting against unfair competition in regards to a Work, 43 | subject to the limitations in paragraph 4(a), below; 44 | 45 | v. rights protecting the extraction, dissemination, use and reuse of data in 46 | a Work; 47 | 48 | vi. database rights (such as those arising under Directive 96/9/EC of the 49 | European Parliament and of the Council of 11 March 1996 on the legal 50 | protection of databases, and under any national implementation thereof, 51 | including any amended or successor version of such directive); and 52 | 53 | vii. other similar, equivalent or corresponding rights throughout the world 54 | based on applicable law or treaty, and any national implementations thereof. 55 | 56 | 2. Waiver. To the greatest extent permitted by, but not in contravention of, 57 | applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and 58 | unconditionally waives, abandons, and surrenders all of Affirmer's Copyright 59 | and Related Rights and associated claims and causes of action, whether now 60 | known or unknown (including existing as well as future claims and causes of 61 | action), in the Work (i) in all territories worldwide, (ii) for the maximum 62 | duration provided by applicable law or treaty (including future time 63 | extensions), (iii) in any current or future medium and for any number of 64 | copies, and (iv) for any purpose whatsoever, including without limitation 65 | commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes 66 | the Waiver for the benefit of each member of the public at large and to the 67 | detriment of Affirmer's heirs and successors, fully intending that such Waiver 68 | shall not be subject to revocation, rescission, cancellation, termination, or 69 | any other legal or equitable action to disrupt the quiet enjoyment of the Work 70 | by the public as contemplated by Affirmer's express Statement of Purpose. 71 | 72 | 3. Public License Fallback. Should any part of the Waiver for any reason be 73 | judged legally invalid or ineffective under applicable law, then the Waiver 74 | shall be preserved to the maximum extent permitted taking into account 75 | Affirmer's express Statement of Purpose. In addition, to the extent the Waiver 76 | is so judged Affirmer hereby grants to each affected person a royalty-free, 77 | non transferable, non sublicensable, non exclusive, irrevocable and 78 | unconditional license to exercise Affirmer's Copyright and Related Rights in 79 | the Work (i) in all territories worldwide, (ii) for the maximum duration 80 | provided by applicable law or treaty (including future time extensions), (iii) 81 | in any current or future medium and for any number of copies, and (iv) for any 82 | purpose whatsoever, including without limitation commercial, advertising or 83 | promotional purposes (the "License"). The License shall be deemed effective as 84 | of the date CC0 was applied by Affirmer to the Work. Should any part of the 85 | License for any reason be judged legally invalid or ineffective under 86 | applicable law, such partial invalidity or ineffectiveness shall not 87 | invalidate the remainder of the License, and in such case Affirmer hereby 88 | affirms that he or she will not (i) exercise any of his or her remaining 89 | Copyright and Related Rights in the Work or (ii) assert any associated claims 90 | and causes of action with respect to the Work, in either case contrary to 91 | Affirmer's express Statement of Purpose. 92 | 93 | 4. Limitations and Disclaimers. 94 | 95 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 96 | surrendered, licensed or otherwise affected by this document. 97 | 98 | b. Affirmer offers the Work as-is and makes no representations or warranties 99 | of any kind concerning the Work, express, implied, statutory or otherwise, 100 | including without limitation warranties of title, merchantability, fitness 101 | for a particular purpose, non infringement, or the absence of latent or 102 | other defects, accuracy, or the present or absence of errors, whether or not 103 | discoverable, all to the greatest extent permissible under applicable law. 104 | 105 | c. Affirmer disclaims responsibility for clearing rights of other persons 106 | that may apply to the Work or any use thereof, including without limitation 107 | any person's Copyright and Related Rights in the Work. Further, Affirmer 108 | disclaims responsibility for obtaining any necessary consents, permissions 109 | or other rights required for any use of the Work. 110 | 111 | d. Affirmer understands and acknowledges that Creative Commons is not a 112 | party to this document and has no duty or obligation with respect to this 113 | CC0 or use of the Work. 114 | 115 | For more information, please see 116 | 117 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Ethereum Builder API Specification 2 | 3 | ![CI][ci] 4 | 5 | The Builder API is an interface for consensus layer clients to source blocks 6 | built by external entities. 7 | 8 | In this repository is the [API specification][oas-spec] along with specifications for actors in this ecosystem broken out by fork. 9 | 10 | ### Why? 11 | 12 | Block building is a specialized activity that requires high fixed costs to be 13 | an efficient validator. This creates an advantage for staking pools as they can 14 | effectively distribute the cost across many validators. 15 | 16 | [Proposer-builder separation][pbs] (PBS) fixes this by splitting the roles of a 17 | validator into block proposing and block building. However, PBS requires 18 | modifications to the Beacon chain and will therefore not be possible at the 19 | time of the merge. 20 | 21 | The Builder API is a temporary solution that requires higher trust assumptions 22 | than PBS, but can be fully implemented without modification to the base 23 | protocol. This is done by providing the proposer with a "blind" execution layer 24 | header to incorporate into a block and a "value" amount which will be 25 | transferred to the proposer once they create a block with the aforementioned 26 | header. Once the proposer signs a block with the header, they are bound to the 27 | choice (or risk being slashed due to equivocation). That allows the builder to 28 | reveal the blinded transactions without the possibility of the proposer 29 | tampering with them. 30 | 31 | This design is based on the original proposal for trusted external builders: 32 | ["MEV-Boost: Merge ready Flashbots Architecture"][mev-boost-ethr]. 33 | 34 | #### Builder software 35 | 36 | Users will typically connect their CL clients to builders with builder 37 | multiplexers. Please see their respective repositories for more information: 38 | 39 | * [`mev-boost`][mev-boost] 40 | * [`mev-rs`][mev-rs] 41 | * [`commit-boost`][commit-boost] 42 | 43 | ## Contributing 44 | 45 | The API specification is checked for lint errors before merging pull requests. 46 | 47 | To run the linter locally, install it with: 48 | ```console 49 | npm install -g @redocly/cli 50 | ``` 51 | and then run it: 52 | ```console 53 | redocly lint builder-oapi.yaml 54 | ``` 55 | 56 | ### Render API Specification 57 | 58 | To render spec in browser, you will simply need an HTTP server to load the 59 | `index.html` file in root of the repo. 60 | 61 | For example: 62 | ```console 63 | python -m http.server 8080 64 | ``` 65 | 66 | The spec will render at [http://localhost:8080](http://localhost:8080). 67 | 68 | ### Usage 69 | 70 | Local changes will be observable if "dev" is selected in the "Select a 71 | definition" drop-down in the web UI. 72 | 73 | It may be necessary to tick the "Disable Cache" box in their browser's 74 | developer tools to see changes after modifying the source. 75 | 76 | ## Releasing 77 | 78 | 1. Create and push tag 79 | - Make sure `info.version` in `builder-oapi.yaml` file is updated before 80 | tagging. 81 | - CI will create a github release and upload bundled spec file 82 | 2. Add release entrypoint in `index.html` 83 | 84 | In `SwaggerUIBundle` configuration (inside `index.html` file), add another 85 | entry in `urls` field. Entry should be in following format (replace `` 86 | with real tag name from step 1.): 87 | 88 | ```javascript 89 | { url: "./releases//builder-oapi.json", name: "" }, 90 | ``` 91 | 92 | [ci]: https://github.com/ethereum/builder-specs/workflows/CI/badge.svg 93 | [oas-spec]: https://ethereum.github.io/builder-specs/ 94 | [pbs]: https://ethresear.ch/t/proposer-block-builder-separation-friendly-fee-market-designs/9725 95 | [mev-boost-ethr]: https://ethresear.ch/t/mev-boost-merge-ready-flashbots-architecture/11177 96 | [mev-boost]: https://github.com/flashbots/mev-boost 97 | [mev-rs]: https://github.com/ralexstokes/mev-rs 98 | [commit-boost]: https://github.com/Commit-Boost/commit-boost-client 99 | -------------------------------------------------------------------------------- /apis/builder/blinded_blocks.yaml: -------------------------------------------------------------------------------- 1 | post: 2 | operationId: "submitBlindedBlock" 3 | summary: Submit a signed blinded block and get unblinded execution payload. 4 | deprecated: true 5 | description: | 6 | Submits a `SignedBlindedBeaconBlock` to the builder, binding the proposer 7 | to the block. 8 | 9 | A success response (200) indicates that the signed blinded beacon block was 10 | valid. If the signed blinded beacon block was invalid, then the builder 11 | must return an error response (400) with a description of the validation 12 | failure. 13 | 14 | After Deneb, this endpoint will additionally return the associated blobs in the response. 15 | 16 | After Fulu, this endpoint will be deprecated. 17 | 18 | Note: SSZ support can be determined by requesting an SSZ encoded response in the `getHeader` 19 | request. 20 | tags: 21 | - Builder 22 | parameters: 23 | - in: header 24 | schema: 25 | $ref: "../../builder-oapi.yaml#/components/schemas/ConsensusVersion" 26 | required: false 27 | name: Eth-Consensus-Version 28 | description: "The active consensus version to which the block being submitted belongs. Required if request is SSZ encoded." 29 | requestBody: 30 | description: A `SignedBlindedBeaconBlock`. 31 | required: true 32 | content: 33 | application/json: 34 | schema: 35 | anyOf: 36 | - $ref: "../../builder-oapi.yaml#/components/schemas/Bellatrix.SignedBlindedBeaconBlock" 37 | - $ref: "../../builder-oapi.yaml#/components/schemas/Capella.SignedBlindedBeaconBlock" 38 | - $ref: "../../builder-oapi.yaml#/components/schemas/Deneb.SignedBlindedBeaconBlock" 39 | - $ref: "../../builder-oapi.yaml#/components/schemas/Electra.SignedBlindedBeaconBlock" 40 | examples: 41 | bellatrix: 42 | $ref: "../../builder-oapi.yaml#/components/examples/Bellatrix.SignedBlindedBeaconBlock" 43 | capella: 44 | $ref: "../../builder-oapi.yaml#/components/examples/Capella.SignedBlindedBeaconBlock" 45 | deneb: 46 | $ref: "../../builder-oapi.yaml#/components/examples/Deneb.SignedBlindedBeaconBlock" 47 | electra: 48 | $ref: "../../builder-oapi.yaml#/components/examples/Electra.SignedBlindedBeaconBlock" 49 | fulu: 50 | $ref: "../../builder-oapi.yaml#/components/examples/Fulu.SignedBlindedBeaconBlock" 51 | application/octet-stream: 52 | schema: 53 | description: "SSZ serialized `SignedBlindedBeaconBlock` bytes. Use content type header to indicate that SSZ data is contained in the request body." 54 | responses: 55 | "200": 56 | description: Success response. 57 | headers: 58 | Eth-Consensus-Version: 59 | $ref: "../../builder-oapi.yaml#/components/headers/Eth-Consensus-Version" 60 | required: false 61 | content: 62 | application/json: 63 | schema: 64 | title: SubmitBlindedBlockResponse 65 | type: object 66 | required: [version, data] 67 | properties: 68 | version: 69 | type: string 70 | enum: [bellatrix, capella, deneb, electra, fulu] 71 | example: "bellatrix" 72 | data: 73 | anyOf: 74 | - $ref: "../../builder-oapi.yaml#/components/schemas/Bellatrix.ExecutionPayload" 75 | - $ref: "../../builder-oapi.yaml#/components/schemas/Capella.ExecutionPayload" 76 | - $ref: "../../builder-oapi.yaml#/components/schemas/Deneb.ExecutionPayloadAndBlobsBundle" 77 | - $ref: "../../builder-oapi.yaml#/components/schemas/Fulu.ExecutionPayloadAndBlobsBundle" 78 | examples: 79 | bellatrix: 80 | $ref: "../../builder-oapi.yaml#/components/examples/Bellatrix.ExecutionPayload" 81 | capella: 82 | $ref: "../../builder-oapi.yaml#/components/examples/Capella.ExecutionPayload" 83 | deneb: 84 | $ref: "../../builder-oapi.yaml#/components/examples/Deneb.ExecutionPayloadAndBlobsBundle" 85 | electra: 86 | $ref: "../../builder-oapi.yaml#/components/examples/Electra.ExecutionPayloadAndBlobsBundle" 87 | fulu: 88 | $ref: "../../builder-oapi.yaml#/components/examples/Fulu.ExecutionPayloadAndBlobsBundle" 89 | application/octet-stream: 90 | schema: 91 | description: "SSZ serialized `ExecutionPayload` or `ExecutionPayloadAndBlobsBundle` bytes. Use Accept header to choose this response type" 92 | "400": 93 | description: Error response. 94 | content: 95 | application/json: 96 | schema: 97 | $ref: "../../builder-oapi.yaml#/components/schemas/ErrorMessage" 98 | example: 99 | code: 400 100 | message: "Invalid block: missing signature" 101 | "406": 102 | $ref: "../../builder-oapi.yaml#/components/responses/NotAcceptable" 103 | "415": 104 | $ref: "../../builder-oapi.yaml#/components/responses/UnsupportedMediaType" 105 | "500": 106 | $ref: "../../builder-oapi.yaml#/components/responses/InternalError" -------------------------------------------------------------------------------- /apis/builder/blinded_blocks_v2.yaml: -------------------------------------------------------------------------------- 1 | post: 2 | operationId: "submitBlindedBlockV2" 3 | summary: Submit a signed blinded beacon block, the builder publishes the signed unblinded beacon block and blobs to the network. 4 | description: | 5 | Submits a `SignedBlindedBeaconBlock` to the builder, binding the proposer 6 | to the block. 7 | 8 | A success response (202) indicates that the signed blinded beacon block was 9 | valid. If the signed blinded beacon block was invalid, then the builder 10 | must return an error response (400) with a description of the validation 11 | failure. 12 | 13 | The builder MUST publish the signed unblinded beacon block and blobs to the network. 14 | 15 | Note: SSZ support can be determined by requesting an SSZ encoded response in the `getHeader` 16 | request. 17 | tags: 18 | - Builder 19 | parameters: 20 | - in: header 21 | schema: 22 | $ref: "../../builder-oapi.yaml#/components/schemas/ConsensusVersion" 23 | required: false 24 | name: Eth-Consensus-Version 25 | description: "The active consensus version to which the block being submitted belongs. Required if request is SSZ encoded." 26 | requestBody: 27 | description: A `SignedBlindedBeaconBlock`. 28 | required: true 29 | content: 30 | application/json: 31 | schema: 32 | anyOf: 33 | - $ref: "../../builder-oapi.yaml#/components/schemas/Bellatrix.SignedBlindedBeaconBlock" 34 | - $ref: "../../builder-oapi.yaml#/components/schemas/Capella.SignedBlindedBeaconBlock" 35 | - $ref: "../../builder-oapi.yaml#/components/schemas/Deneb.SignedBlindedBeaconBlock" 36 | - $ref: "../../builder-oapi.yaml#/components/schemas/Electra.SignedBlindedBeaconBlock" 37 | examples: 38 | bellatrix: 39 | $ref: "../../builder-oapi.yaml#/components/examples/Bellatrix.SignedBlindedBeaconBlock" 40 | capella: 41 | $ref: "../../builder-oapi.yaml#/components/examples/Capella.SignedBlindedBeaconBlock" 42 | deneb: 43 | $ref: "../../builder-oapi.yaml#/components/examples/Deneb.SignedBlindedBeaconBlock" 44 | electra: 45 | $ref: "../../builder-oapi.yaml#/components/examples/Electra.SignedBlindedBeaconBlock" 46 | fulu: 47 | $ref: "../../builder-oapi.yaml#/components/examples/Fulu.SignedBlindedBeaconBlock" 48 | application/octet-stream: 49 | schema: 50 | description: "SSZ serialized `SignedBlindedBeaconBlock` bytes. Use content type header to indicate that SSZ data is contained in the request body." 51 | responses: 52 | "202": 53 | description: Success response. 54 | "400": 55 | description: Error response. 56 | content: 57 | application/json: 58 | schema: 59 | $ref: "../../builder-oapi.yaml#/components/schemas/ErrorMessage" 60 | example: 61 | code: 400 62 | message: "Invalid block: missing signature" 63 | "415": 64 | $ref: "../../builder-oapi.yaml#/components/responses/UnsupportedMediaType" 65 | "500": 66 | $ref: "../../builder-oapi.yaml#/components/responses/InternalError" 67 | -------------------------------------------------------------------------------- /apis/builder/header.yaml: -------------------------------------------------------------------------------- 1 | get: 2 | operationId: "getHeader" 3 | summary: Get an execution payload header. 4 | description: | 5 | Requests a builder node to produce a valid execution payload header, which 6 | can be integrated into a blinded beacon block and signed. 7 | 8 | If the builder is unable to produce a valid execution payload header, then 9 | the builder MUST return a 204 response. If the request is invalid, then the 10 | builder MUST return an error response (400) with a description of the 11 | validation failure. 12 | 13 | After Deneb, return the KZG commitments for any associated blobs attached to the execution payload. 14 | tags: 15 | - Builder 16 | parameters: 17 | - name: slot 18 | in: path 19 | required: true 20 | description: The slot for which the block should be proposed. 21 | schema: 22 | $ref: "../../builder-oapi.yaml#/components/schemas/Uint64" 23 | - name: parent_hash 24 | in: path 25 | required: true 26 | description: Hash of execution layer block the proposer will build on. 27 | schema: 28 | $ref: "../../builder-oapi.yaml#/components/schemas/Root" 29 | - name: pubkey 30 | in: path 31 | required: true 32 | description: The validator's BLS public key. 33 | schema: 34 | $ref: "../../builder-oapi.yaml#/components/schemas/Pubkey" 35 | - name: Date-Milliseconds 36 | in: header 37 | required: false 38 | description: | 39 | Optional header containing a Unix timestamp in milliseconds representing 40 | the point-in-time the request was sent. This header can be used to measure 41 | latency. 42 | schema: 43 | type: integer 44 | format: int64 45 | example: 1710338135000 46 | - name: X-Timeout-Ms 47 | in: header 48 | required: false 49 | description: | 50 | Optional header containing the proposer's timeout for the request in milliseconds. 51 | Relays should use this header to adjust the amount of time by which they delay getHeader 52 | requests to maximise block rewards. Otherwise, getHeader requests will timeout and the proposer 53 | will not receive the header in time. 54 | schema: 55 | type: integer 56 | format: int64 57 | example: 10000 58 | responses: 59 | "200": 60 | description: Success response. 61 | headers: 62 | Eth-Consensus-Version: 63 | $ref: "../../builder-oapi.yaml#/components/headers/Eth-Consensus-Version" 64 | required: false 65 | content: 66 | application/json: 67 | schema: 68 | title: GetHeaderResponse 69 | type: object 70 | required: [version, data] 71 | properties: 72 | version: 73 | type: string 74 | enum: [ bellatrix, capella, deneb, electra, fulu ] 75 | example: "bellatrix" 76 | data: 77 | anyOf: 78 | - $ref: "../../builder-oapi.yaml#/components/schemas/Bellatrix.SignedBuilderBid" 79 | - $ref: "../../builder-oapi.yaml#/components/schemas/Capella.SignedBuilderBid" 80 | - $ref: "../../builder-oapi.yaml#/components/schemas/Deneb.SignedBuilderBid" 81 | - $ref: "../../builder-oapi.yaml#/components/schemas/Electra.SignedBuilderBid" 82 | examples: 83 | bellatrix: 84 | $ref: "../../builder-oapi.yaml#/components/examples/Bellatrix.SignedBuilderBid" 85 | capella: 86 | $ref: "../../builder-oapi.yaml#/components/examples/Capella.SignedBuilderBid" 87 | deneb: 88 | $ref: "../../builder-oapi.yaml#/components/examples/Deneb.SignedBuilderBid" 89 | electra: 90 | $ref: "../../builder-oapi.yaml#/components/examples/Electra.SignedBuilderBid" 91 | fulu: 92 | $ref: "../../builder-oapi.yaml#/components/examples/Fulu.SignedBuilderBid" 93 | application/octet-stream: 94 | schema: 95 | description: "SSZ serialized `SignedBuilderBid` bytes. Use Accept header to choose this response type" 96 | "204": 97 | description: No header is available. 98 | "400": 99 | description: Error response. 100 | content: 101 | application/json: 102 | schema: 103 | $ref: "../../builder-oapi.yaml#/components/schemas/ErrorMessage" 104 | examples: 105 | InvalidRequest: 106 | value: 107 | code: 400 108 | message: "Unknown hash: missing parent hash" 109 | "406": 110 | $ref: "../../builder-oapi.yaml#/components/responses/NotAcceptable" 111 | "500": 112 | $ref: "../../builder-oapi.yaml#/components/responses/InternalError" 113 | -------------------------------------------------------------------------------- /apis/builder/status.yaml: -------------------------------------------------------------------------------- 1 | get: 2 | operationId: "status" 3 | summary: Check if builder is healthy. 4 | description: Checks if builder can respond to requests normally. 5 | tags: 6 | - Builder 7 | responses: 8 | "200": 9 | description: Success response. 10 | "500": 11 | $ref: "../../builder-oapi.yaml#/components/responses/InternalError" 12 | -------------------------------------------------------------------------------- /apis/builder/validators.yaml: -------------------------------------------------------------------------------- 1 | post: 2 | operationId: "registerValidator" 3 | summary: Register or update a validator's block building preferences. 4 | description: | 5 | Registers a validator's preferred fee recipient and gas limit. 6 | 7 | A success response (200) indicates that the registration was valid. If the 8 | registration passes validation, then the builder MUST integrate the 9 | registration into its state, such that future blocks built for the 10 | validator conform to the preferences expressed in the registration. If the 11 | registration is invalid, then the builder MUST return an error response 12 | (400) with a description of the validation failure. 13 | tags: 14 | - Builder 15 | requestBody: 16 | description: | 17 | A signed declaration of a validator's block building preferences. 18 | required: true 19 | content: 20 | application/json: 21 | schema: 22 | type: array 23 | items: 24 | $ref: "../../builder-oapi.yaml#/components/schemas/SignedValidatorRegistration" 25 | example: 26 | $ref: "../../builder-oapi.yaml#/components/examples/SignedValidatorRegistrations/value" 27 | application/octet-stream: 28 | schema: 29 | description: "SSZ serialized `List[SignedValidatorRegistrationV1, VALIDATOR_REGISTRY_LIMIT]` bytes. Use content type header to indicate that SSZ data is contained in the request body." 30 | responses: 31 | "200": 32 | description: Success response. 33 | "400": 34 | description: Error response. 35 | content: 36 | application/json: 37 | schema: 38 | $ref: "../../builder-oapi.yaml#/components/schemas/ErrorMessage" 39 | example: 40 | code: 400 41 | message: "unknown validator" 42 | "415": 43 | $ref: "../../builder-oapi.yaml#/components/responses/UnsupportedMediaType" 44 | "500": 45 | $ref: "../../builder-oapi.yaml#/components/responses/InternalError" 46 | -------------------------------------------------------------------------------- /assets/ethereum_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/assets/ethereum_logo.png -------------------------------------------------------------------------------- /builder-oapi.yaml: -------------------------------------------------------------------------------- 1 | openapi: "3.1.0" 2 | 3 | info: 4 | title: Builder API 5 | description: | 6 | API specification for external builder nodes. This interface enables 7 | validators to delegate block building duties. 8 | 9 | All requests by default send and receive JSON, and as such should have either or both of the "Content-Type: application/json" 10 | and "Accept: application/json" headers. In addition, some requests can send and receive data in the SSZ format. The header 11 | "Content-Type: application/octet-stream" should be set in requests that contain SSZ data; a preference to receive SSZ data in 12 | response can be indicated by setting the "Accept: application/octet-stream;q=1.0,application/json;q=0.9" header. Note that 13 | only a subset of requests can respond with data in SSZ format; these are noted in each individual request. 14 | 15 | When handling requests, the server should return a 415 status code if the "Content-Type" header in the request specifies a format 16 | that is not supported. Similarly, it should return a 406 status code if it cannot produce a response in the format accepted by 17 | the client as specified in the "Accept" header; if no "Accept" header is provided then it is assumed to be "application/json". 18 | In any case, the server should indicate the format of the response by setting the corresponding "Content-Type" header. 19 | 20 | API endpoints are individually versioned. As such, there is no direct 21 | relationship between all v1 endpoints, all v2 endpoints, _etc._ and no such 22 | relationship should be inferred. The rules that require an increase in 23 | version number are as follows: 24 | 25 | - no field that is listed in an endpoint shall be removed without an 26 | increase in the version number 27 | - no field that is listed in an endpoint shall be altered in terms of 28 | format (_e.g._ from a string to an array) without an increase in the 29 | version number 30 | 31 | Note that it is possible for a field to be added to an endpoint's data or 32 | metadata without an increase in the version number. 33 | version: "dev" 34 | contact: 35 | name: Ethereum Github 36 | url: https://github.com/ethereum/builder-specs/issues 37 | license: 38 | name: "CC0-1.0" 39 | url: "https://creativecommons.org/publicdomain/zero/1.0/" 40 | 41 | servers: 42 | - url: "{server_url}" 43 | variables: 44 | server_url: 45 | description: "Builder node URL" 46 | default: "http://localhost:18550" 47 | 48 | tags: 49 | - name: Builder 50 | description: Set of endpoints to interact with an external block builder. 51 | paths: 52 | /eth/v1/builder/validators: 53 | $ref: "./apis/builder/validators.yaml" 54 | /eth/v1/builder/header/{slot}/{parent_hash}/{pubkey}: 55 | $ref: "./apis/builder/header.yaml" 56 | /eth/v1/builder/blinded_blocks: 57 | $ref: "./apis/builder/blinded_blocks.yaml" 58 | /eth/v2/builder/blinded_blocks: 59 | $ref: "./apis/builder/blinded_blocks_v2.yaml" 60 | /eth/v1/builder/status: 61 | $ref: "./apis/builder/status.yaml" 62 | 63 | components: 64 | schemas: 65 | Uint64: 66 | $ref: "./beacon-apis/types/primitive.yaml#/Uint64" 67 | Root: 68 | $ref: "./beacon-apis/types/primitive.yaml#/Root" 69 | Pubkey: 70 | $ref: "./beacon-apis/types/primitive.yaml#/Pubkey" 71 | ErrorMessage: 72 | $ref: "./beacon-apis/types/http.yaml#/ErrorMessage" 73 | ConsensusVersion: 74 | $ref: "./beacon-apis/beacon-node-oapi.yaml#/components/schemas/ConsensusVersion" 75 | enum: [bellatrix, capella, deneb, electra, fulu] 76 | example: "bellatrix" 77 | Bellatrix.ExecutionPayload: 78 | $ref: "./beacon-apis/types/bellatrix/execution_payload.yaml#/Bellatrix/ExecutionPayload" 79 | Bellatrix.SignedBlindedBeaconBlock: 80 | $ref: "./beacon-apis/types/bellatrix/block.yaml#/Bellatrix/SignedBlindedBeaconBlock" 81 | Bellatrix.SignedBuilderBid: 82 | $ref: "./types/bellatrix/bid.yaml#/Bellatrix/SignedBuilderBid" 83 | Capella.ExecutionPayload: 84 | $ref: "./beacon-apis/types/capella/execution_payload.yaml#/Capella/ExecutionPayload" 85 | Capella.SignedBlindedBeaconBlock: 86 | $ref: "./beacon-apis/types/capella/block.yaml#/Capella/SignedBlindedBeaconBlock" 87 | Capella.SignedBuilderBid: 88 | $ref: "./types/capella/bid.yaml#/Capella/SignedBuilderBid" 89 | Deneb.SignedBlindedBeaconBlock: 90 | $ref: "./beacon-apis/types/deneb/block.yaml#/Deneb/SignedBlindedBeaconBlock" 91 | Deneb.SignedBuilderBid: 92 | $ref: "./types/deneb/bid.yaml#/Deneb/SignedBuilderBid" 93 | Deneb.ExecutionPayloadAndBlobsBundle: 94 | $ref: "./types/deneb/execution_payload_and_blobs_bundle.yaml#/Deneb/ExecutionPayloadAndBlobsBundle" 95 | SignedValidatorRegistration: 96 | $ref: "./beacon-apis/types/registration.yaml#/SignedValidatorRegistration" 97 | Electra.SignedBlindedBeaconBlock: 98 | $ref: "./beacon-apis/types/electra/block.yaml#/Electra/SignedBlindedBeaconBlock" 99 | Electra.SignedBuilderBid: 100 | $ref: "./types/electra/bid.yaml#/Electra/SignedBuilderBid" 101 | Fulu.BlobsBundle: 102 | $ref: "./types/fulu/blobs_bundle.yaml#/Fulu/BlobsBundle" 103 | Fulu.ExecutionPayloadAndBlobsBundle: 104 | $ref: "./types/fulu/execution_payload_and_blobs_bundle.yaml#/Fulu/ExecutionPayloadAndBlobsBundle" 105 | 106 | responses: 107 | InternalError: 108 | $ref: "./types/http.yaml#/InternalError" 109 | NotAcceptable: 110 | $ref: "./types/http.yaml#/NotAcceptable" 111 | UnsupportedMediaType: 112 | $ref: "./types/http.yaml#/UnsupportedMediaType" 113 | 114 | headers: 115 | Eth-Consensus-Version: 116 | $ref: "./beacon-apis/beacon-node-oapi.yaml#/components/headers/Eth-Consensus-Version" 117 | description: "The active consensus version to which the data belongs. Required if response is SSZ encoded." 118 | schema: 119 | $ref: "#/components/schemas/ConsensusVersion" 120 | 121 | examples: 122 | SignedValidatorRegistrations: 123 | $ref: "./examples/bellatrix/signed_validator_registrations.json" 124 | Bellatrix.SignedBlindedBeaconBlock: 125 | $ref: "./examples/bellatrix/signed_blinded_beacon_block.json" 126 | Bellatrix.ExecutionPayload: 127 | $ref: "./examples/bellatrix/execution_payload.json" 128 | Bellatrix.SignedBuilderBid: 129 | $ref: "./examples/bellatrix/signed_builder_bid.json" 130 | Capella.SignedBlindedBeaconBlock: 131 | $ref: "./examples/capella/signed_blinded_beacon_block.json" 132 | Capella.ExecutionPayload: 133 | $ref: "./examples/capella/execution_payload.json" 134 | Capella.SignedBuilderBid: 135 | $ref: "./examples/capella/signed_builder_bid.json" 136 | Deneb.SignedBlindedBeaconBlock: 137 | $ref: "./examples/deneb/signed_blinded_beacon_block.json" 138 | Deneb.ExecutionPayloadAndBlobsBundle: 139 | $ref: "./examples/deneb/execution_payload_and_blobs_bundle.json" 140 | Deneb.SignedBuilderBid: 141 | $ref: "./examples/deneb/signed_builder_bid.json" 142 | Electra.SignedBlindedBeaconBlock: 143 | $ref: "./examples/electra/signed_blinded_beacon_block.json" 144 | Electra.SignedBuilderBid: 145 | $ref: "./examples/electra/signed_builder_bid.json" 146 | Electra.ExecutionPayloadAndBlobsBundle: 147 | $ref: "./examples/electra/execution_payload_and_blobs_bundle.json" 148 | Fulu.ExecutionPayloadAndBlobsBundle: 149 | $ref: "./examples/fulu/execution_payload_and_blobs_bundle.json" 150 | Fulu.SignedBlindedBeaconBlock: 151 | $ref: "./examples/fulu/signed_blinded_beacon_block.json" 152 | Fulu.SignedBuilderBid: 153 | $ref: "./examples/fulu/signed_builder_bid.json" 154 | -------------------------------------------------------------------------------- /dist/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/dist/favicon-16x16.png -------------------------------------------------------------------------------- /dist/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/dist/favicon-32x32.png -------------------------------------------------------------------------------- /dist/oauth2-redirect.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Swagger UI: OAuth2 Redirect 5 | 6 | 7 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /dist/theme-material.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | .swagger-ui html { 3 | box-sizing: border-box 4 | } 5 | 6 | .swagger-ui *, .swagger-ui :after, .swagger-ui :before { 7 | box-sizing: inherit 8 | } 9 | 10 | .swagger-ui body { 11 | margin: 0; 12 | background: #fafafa 13 | } 14 | 15 | .swagger-ui .wrapper { 16 | width: 100%; 17 | max-width: 1460px; 18 | margin: 0 auto; 19 | padding: 0 20px 20 | } 21 | 22 | .swagger-ui .opblock-tag-section { 23 | display: -webkit-box; 24 | display: -ms-flexbox; 25 | display: flex; 26 | -webkit-box-orient: vertical; 27 | -webkit-box-direction: normal; 28 | -ms-flex-direction: column; 29 | flex-direction: column 30 | } 31 | 32 | .swagger-ui .opblock-tag { 33 | display: -webkit-box; 34 | display: -ms-flexbox; 35 | display: flex; 36 | padding: 10px 20px 10px 10px; 37 | cursor: pointer; 38 | -webkit-transition: all .2s; 39 | transition: all .2s; 40 | border-bottom: 1px solid rgba(59, 65, 81, .3); 41 | -webkit-box-align: center; 42 | -ms-flex-align: center; 43 | align-items: center 44 | } 45 | 46 | .swagger-ui .opblock-tag:hover { 47 | background: rgba(0, 0, 0, .02) 48 | } 49 | 50 | .swagger-ui .opblock-tag { 51 | font-size: 24px; 52 | margin: 0 0 5px; 53 | font-family: Titillium Web, sans-serif; 54 | color: #3b4151 55 | } 56 | 57 | .swagger-ui .opblock-tag.no-desc span { 58 | -webkit-box-flex: 1; 59 | -ms-flex: 1; 60 | flex: 1 61 | } 62 | 63 | .swagger-ui .opblock-tag svg { 64 | -webkit-transition: all .4s; 65 | transition: all .4s 66 | } 67 | 68 | .swagger-ui .opblock-tag small { 69 | font-size: 14px; 70 | font-weight: 400; 71 | padding: 0 10px; 72 | -webkit-box-flex: 1; 73 | -ms-flex: 1; 74 | flex: 1; 75 | font-family: Open Sans, sans-serif; 76 | color: #3b4151 77 | } 78 | 79 | .swagger-ui .parаmeter__type { 80 | font-size: 12px; 81 | padding: 5px 0; 82 | font-family: Source Code Pro, monospace; 83 | font-weight: 600; 84 | color: #3b4151 85 | } 86 | 87 | .swagger-ui .view-line-link { 88 | position: relative; 89 | top: 3px; 90 | width: 20px; 91 | margin: 0 5px; 92 | cursor: pointer; 93 | -webkit-transition: all .5s; 94 | transition: all .5s 95 | } 96 | 97 | .swagger-ui .opblock { 98 | margin: 0 0 15px; 99 | border: 1px solid #000; 100 | border-radius: 4px; 101 | box-shadow: 0 0 3px rgba(0, 0, 0, .19) 102 | } 103 | 104 | .swagger-ui .opblock.is-open .opblock-summary { 105 | border-bottom: 1px solid #000 106 | } 107 | 108 | .swagger-ui .opblock .opblock-section-header { 109 | padding: 8px 20px; 110 | background: hsla(0, 0%, 100%, .8); 111 | box-shadow: 0 1px 2px rgba(0, 0, 0, .1) 112 | } 113 | 114 | .swagger-ui .opblock .opblock-section-header, .swagger-ui .opblock .opblock-section-header label { 115 | display: -webkit-box; 116 | display: -ms-flexbox; 117 | display: flex; 118 | -webkit-box-align: center; 119 | -ms-flex-align: center; 120 | align-items: center 121 | } 122 | 123 | .swagger-ui .opblock .opblock-section-header label { 124 | font-size: 12px; 125 | font-weight: 700; 126 | margin: 0; 127 | font-family: Titillium Web, sans-serif; 128 | color: #3b4151 129 | } 130 | 131 | .swagger-ui .opblock .opblock-section-header label span { 132 | padding: 0 10px 0 0 133 | } 134 | 135 | .swagger-ui .opblock .opblock-section-header h4 { 136 | font-size: 14px; 137 | margin: 0; 138 | -webkit-box-flex: 1; 139 | -ms-flex: 1; 140 | flex: 1; 141 | font-family: Titillium Web, sans-serif; 142 | color: #3b4151 143 | } 144 | 145 | .swagger-ui .opblock .opblock-summary-method { 146 | font-size: 14px; 147 | font-weight: 700; 148 | min-width: 80px; 149 | padding: 6px 15px; 150 | text-align: center; 151 | border-radius: 3px; 152 | background: #000; 153 | text-shadow: 0 1px 0 rgba(0, 0, 0, .1); 154 | font-family: Titillium Web, sans-serif; 155 | color: #fff 156 | } 157 | 158 | .swagger-ui .opblock .opblock-summary-path, .swagger-ui .opblock .opblock-summary-path__deprecated { 159 | font-size: 16px; 160 | display: -webkit-box; 161 | display: -ms-flexbox; 162 | display: flex; 163 | padding: 0 10px; 164 | font-family: Source Code Pro, monospace; 165 | font-weight: 600; 166 | color: #3b4151; 167 | -webkit-box-align: center; 168 | -ms-flex-align: center; 169 | align-items: center 170 | } 171 | 172 | .swagger-ui .opblock .opblock-summary-path .view-line-link, .swagger-ui .opblock .opblock-summary-path__deprecated .view-line-link { 173 | position: relative; 174 | top: 2px; 175 | width: 0; 176 | margin: 0; 177 | cursor: pointer; 178 | -webkit-transition: all .5s; 179 | transition: all .5s 180 | } 181 | 182 | .swagger-ui .opblock .opblock-summary-path:hover .view-line-link, .swagger-ui .opblock .opblock-summary-path__deprecated:hover .view-line-link { 183 | width: 18px; 184 | margin: 0 5px 185 | } 186 | 187 | .swagger-ui .opblock .opblock-summary-path__deprecated { 188 | text-decoration: line-through 189 | } 190 | 191 | .swagger-ui .opblock .opblock-summary-description { 192 | font-size: 13px; 193 | -webkit-box-flex: 1; 194 | -ms-flex: 1; 195 | flex: 1; 196 | font-family: Open Sans, sans-serif; 197 | color: #3b4151 198 | } 199 | 200 | .swagger-ui .opblock .opblock-summary { 201 | display: -webkit-box; 202 | display: -ms-flexbox; 203 | display: flex; 204 | padding: 5px; 205 | cursor: pointer; 206 | -webkit-box-align: center; 207 | -ms-flex-align: center; 208 | align-items: center 209 | } 210 | 211 | .swagger-ui .opblock.opblock-post { 212 | border-color: #49cc90; 213 | background: rgba(73, 204, 144, .1) 214 | } 215 | 216 | .swagger-ui .opblock.opblock-post .opblock-summary-method { 217 | background: #49cc90 218 | } 219 | 220 | .swagger-ui .opblock.opblock-post .opblock-summary { 221 | border-color: #49cc90 222 | } 223 | 224 | .swagger-ui .opblock.opblock-put { 225 | border-color: #fca130; 226 | background: rgba(252, 161, 48, .1) 227 | } 228 | 229 | .swagger-ui .opblock.opblock-put .opblock-summary-method { 230 | background: #fca130 231 | } 232 | 233 | .swagger-ui .opblock.opblock-put .opblock-summary { 234 | border-color: #fca130 235 | } 236 | 237 | .swagger-ui .opblock.opblock-delete { 238 | border-color: #f93e3e; 239 | background: rgba(249, 62, 62, .1) 240 | } 241 | 242 | .swagger-ui .opblock.opblock-delete .opblock-summary-method { 243 | background: #f93e3e 244 | } 245 | 246 | .swagger-ui .opblock.opblock-delete .opblock-summary { 247 | border-color: #f93e3e 248 | } 249 | 250 | .swagger-ui .opblock.opblock-get { 251 | border-color: #61affe; 252 | background: rgba(97, 175, 254, .1) 253 | } 254 | 255 | .swagger-ui .opblock.opblock-get .opblock-summary-method { 256 | background: #61affe 257 | } 258 | 259 | .swagger-ui .opblock.opblock-get .opblock-summary { 260 | border-color: #61affe 261 | } 262 | 263 | .swagger-ui .opblock.opblock-patch { 264 | border-color: #50e3c2; 265 | background: rgba(80, 227, 194, .1) 266 | } 267 | 268 | .swagger-ui .opblock.opblock-patch .opblock-summary-method { 269 | background: #50e3c2 270 | } 271 | 272 | .swagger-ui .opblock.opblock-patch .opblock-summary { 273 | border-color: #50e3c2 274 | } 275 | 276 | .swagger-ui .opblock.opblock-head { 277 | border-color: #9012fe; 278 | background: rgba(144, 18, 254, .1) 279 | } 280 | 281 | .swagger-ui .opblock.opblock-head .opblock-summary-method { 282 | background: #9012fe 283 | } 284 | 285 | .swagger-ui .opblock.opblock-head .opblock-summary { 286 | border-color: #9012fe 287 | } 288 | 289 | .swagger-ui .opblock.opblock-options { 290 | border-color: #0d5aa7; 291 | background: rgba(13, 90, 167, .1) 292 | } 293 | 294 | .swagger-ui .opblock.opblock-options .opblock-summary-method { 295 | background: #0d5aa7 296 | } 297 | 298 | .swagger-ui .opblock.opblock-options .opblock-summary { 299 | border-color: #0d5aa7 300 | } 301 | 302 | .swagger-ui .opblock.opblock-deprecated { 303 | opacity: .6; 304 | border-color: #ebebeb; 305 | background: hsla(0, 0%, 92%, .1) 306 | } 307 | 308 | .swagger-ui .opblock.opblock-deprecated .opblock-summary-method { 309 | background: #ebebeb 310 | } 311 | 312 | .swagger-ui .opblock.opblock-deprecated .opblock-summary { 313 | border-color: #ebebeb 314 | } 315 | 316 | .swagger-ui .tab { 317 | display: -webkit-box; 318 | display: -ms-flexbox; 319 | display: flex; 320 | margin: 20px 0 10px; 321 | padding: 0; 322 | list-style: none 323 | } 324 | 325 | .swagger-ui .tab li { 326 | font-size: 12px; 327 | min-width: 100px; 328 | min-width: 90px; 329 | padding: 0; 330 | cursor: pointer; 331 | font-family: Titillium Web, sans-serif; 332 | color: #3b4151 333 | } 334 | 335 | .swagger-ui .tab li:first-of-type { 336 | position: relative; 337 | padding-left: 0 338 | } 339 | 340 | .swagger-ui .tab li:first-of-type:after { 341 | position: absolute; 342 | top: 0; 343 | right: 6px; 344 | width: 1px; 345 | height: 100%; 346 | content: ""; 347 | background: rgba(0, 0, 0, .2) 348 | } 349 | 350 | .swagger-ui .tab li.active { 351 | font-weight: 700 352 | } 353 | 354 | .swagger-ui .opblock-description-wrapper, .swagger-ui .opblock-title_normal { 355 | padding: 15px 20px 356 | } 357 | 358 | .swagger-ui .opblock-description-wrapper, .swagger-ui .opblock-description-wrapper h4, .swagger-ui .opblock-title_normal, .swagger-ui .opblock-title_normal h4 { 359 | font-size: 12px; 360 | margin: 0 0 5px; 361 | font-family: Open Sans, sans-serif; 362 | color: #3b4151 363 | } 364 | 365 | .swagger-ui .opblock-description-wrapper p, .swagger-ui .opblock-title_normal p { 366 | font-size: 14px; 367 | margin: 0; 368 | font-family: Open Sans, sans-serif; 369 | color: #3b4151 370 | } 371 | 372 | .swagger-ui .execute-wrapper { 373 | padding: 20px; 374 | text-align: right 375 | } 376 | 377 | .swagger-ui .execute-wrapper .btn { 378 | width: 100%; 379 | padding: 8px 40px 380 | } 381 | 382 | .swagger-ui .body-param-options { 383 | display: -webkit-box; 384 | display: -ms-flexbox; 385 | display: flex; 386 | -webkit-box-orient: vertical; 387 | -webkit-box-direction: normal; 388 | -ms-flex-direction: column; 389 | flex-direction: column 390 | } 391 | 392 | .swagger-ui .body-param-options .body-param-edit { 393 | padding: 10px 0 394 | } 395 | 396 | .swagger-ui .body-param-options label { 397 | padding: 8px 0 398 | } 399 | 400 | .swagger-ui .body-param-options label select { 401 | margin: 3px 0 0 402 | } 403 | 404 | .swagger-ui .responses-inner { 405 | padding: 20px 406 | } 407 | 408 | .swagger-ui .responses-inner h4, .swagger-ui .responses-inner h5 { 409 | font-size: 12px; 410 | margin: 10px 0 5px; 411 | font-family: Open Sans, sans-serif; 412 | color: #3b4151 413 | } 414 | 415 | .swagger-ui .response-col_status { 416 | font-size: 14px; 417 | font-family: Open Sans, sans-serif; 418 | color: #3b4151 419 | } 420 | 421 | .swagger-ui .response-col_status .response-undocumented { 422 | font-size: 11px; 423 | font-family: Source Code Pro, monospace; 424 | font-weight: 600; 425 | color: #999 426 | } 427 | 428 | .swagger-ui .response-col_description__inner span { 429 | font-size: 12px; 430 | font-style: italic; 431 | display: block; 432 | margin: 10px 0; 433 | padding: 10px; 434 | border-radius: 4px; 435 | background: #41444e; 436 | font-family: Source Code Pro, monospace; 437 | font-weight: 600; 438 | color: #fff 439 | } 440 | 441 | .swagger-ui .response-col_description__inner span p { 442 | margin: 0 443 | } 444 | 445 | .swagger-ui .opblock-body pre { 446 | font-size: 12px; 447 | margin: 0; 448 | padding: 10px; 449 | white-space: pre-wrap; 450 | border-radius: 4px; 451 | background: #41444e; 452 | font-family: Source Code Pro, monospace; 453 | font-weight: 600; 454 | color: #fff 455 | } 456 | 457 | .swagger-ui .opblock-body pre span { 458 | color: #fff!important 459 | } 460 | 461 | .swagger-ui .scheme-container { 462 | margin: 0 0 20px; 463 | padding: 30px 0; 464 | background: #fff; 465 | box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .15) 466 | } 467 | 468 | .swagger-ui .scheme-container .schemes { 469 | display: -webkit-box; 470 | display: -ms-flexbox; 471 | display: flex; 472 | -webkit-box-align: center; 473 | -ms-flex-align: center; 474 | align-items: center 475 | } 476 | 477 | .swagger-ui .scheme-container .schemes>label { 478 | font-size: 12px; 479 | font-weight: 700; 480 | display: -webkit-box; 481 | display: -ms-flexbox; 482 | display: flex; 483 | -webkit-box-orient: vertical; 484 | -webkit-box-direction: normal; 485 | -ms-flex-direction: column; 486 | flex-direction: column; 487 | margin: -20px 15px 0 0; 488 | font-family: Titillium Web, sans-serif; 489 | color: #3b4151 490 | } 491 | 492 | .swagger-ui .scheme-container .schemes>label select { 493 | min-width: 130px; 494 | text-transform: uppercase 495 | } 496 | 497 | .swagger-ui .loading-container { 498 | padding: 40px 0 60px 499 | } 500 | 501 | .swagger-ui .loading-container .loading { 502 | position: relative 503 | } 504 | 505 | .swagger-ui .loading-container .loading:after { 506 | font-size: 10px; 507 | font-weight: 700; 508 | position: absolute; 509 | top: 50%; 510 | left: 50%; 511 | content: "loading"; 512 | -webkit-transform: translate(-50%, -50%); 513 | transform: translate(-50%, -50%); 514 | text-transform: uppercase; 515 | font-family: Titillium Web, sans-serif; 516 | color: #3b4151 517 | } 518 | 519 | .swagger-ui .loading-container .loading:before { 520 | position: absolute; 521 | top: 50%; 522 | left: 50%; 523 | display: block; 524 | width: 60px; 525 | height: 60px; 526 | margin: -30px; 527 | content: ""; 528 | -webkit-animation: rotation 1s infinite linear, opacity .5s; 529 | animation: rotation 1s infinite linear, opacity .5s; 530 | opacity: 1; 531 | border: 2px solid rgba(85, 85, 85, .1); 532 | border-top-color: rgba(0, 0, 0, .6); 533 | border-radius: 100%; 534 | -webkit-backface-visibility: hidden; 535 | backface-visibility: hidden 536 | } 537 | 538 | @-webkit-keyframes rotation { 539 | to { 540 | -webkit-transform: rotate(1turn); 541 | transform: rotate(1turn) 542 | } 543 | } 544 | 545 | @keyframes rotation { 546 | to { 547 | -webkit-transform: rotate(1turn); 548 | transform: rotate(1turn) 549 | } 550 | } 551 | 552 | @-webkit-keyframes blinker { 553 | 50% { 554 | opacity: 0 555 | } 556 | } 557 | 558 | @keyframes blinker { 559 | 50% { 560 | opacity: 0 561 | } 562 | } 563 | 564 | .swagger-ui .btn { 565 | font-size: 14px; 566 | font-weight: 700; 567 | padding: 5px 23px; 568 | -webkit-transition: all .3s; 569 | transition: all .3s; 570 | border: 2px solid #888; 571 | border-radius: 4px; 572 | background: transparent; 573 | box-shadow: 0 1px 2px rgba(0, 0, 0, .1); 574 | font-family: Titillium Web, sans-serif; 575 | color: #3b4151 576 | } 577 | 578 | .swagger-ui .btn[disabled] { 579 | cursor: not-allowed; 580 | opacity: .3 581 | } 582 | 583 | .swagger-ui .btn:hover { 584 | box-shadow: 0 0 5px rgba(0, 0, 0, .3) 585 | } 586 | 587 | .swagger-ui .btn.cancel { 588 | border-color: #ff6060; 589 | font-family: Titillium Web, sans-serif; 590 | color: #ff6060 591 | } 592 | 593 | .swagger-ui .btn.authorize { 594 | line-height: 1; 595 | display: inline; 596 | color: #49cc90; 597 | border-color: #49cc90 598 | } 599 | 600 | .swagger-ui .btn.authorize span { 601 | float: left; 602 | padding: 4px 20px 0 0 603 | } 604 | 605 | .swagger-ui .btn.authorize svg { 606 | fill: #49cc90 607 | } 608 | 609 | .swagger-ui .btn.execute { 610 | -webkit-animation: pulse 2s infinite; 611 | animation: pulse 2s infinite; 612 | color: #fff; 613 | border-color: #4990e2 614 | } 615 | 616 | @-webkit-keyframes pulse { 617 | 0% { 618 | color: #fff; 619 | background: #4990e2; 620 | box-shadow: 0 0 0 0 rgba(73, 144, 226, .8) 621 | } 622 | 70% { 623 | box-shadow: 0 0 0 5px rgba(73, 144, 226, 0) 624 | } 625 | to { 626 | color: #fff; 627 | background: #4990e2; 628 | box-shadow: 0 0 0 0 rgba(73, 144, 226, 0) 629 | } 630 | } 631 | 632 | @keyframes pulse { 633 | 0% { 634 | color: #fff; 635 | background: #4990e2; 636 | box-shadow: 0 0 0 0 rgba(73, 144, 226, .8) 637 | } 638 | 70% { 639 | box-shadow: 0 0 0 5px rgba(73, 144, 226, 0) 640 | } 641 | to { 642 | color: #fff; 643 | background: #4990e2; 644 | box-shadow: 0 0 0 0 rgba(73, 144, 226, 0) 645 | } 646 | } 647 | 648 | .swagger-ui .btn-group { 649 | display: -webkit-box; 650 | display: -ms-flexbox; 651 | display: flex; 652 | padding: 30px 653 | } 654 | 655 | .swagger-ui .btn-group .btn { 656 | -webkit-box-flex: 1; 657 | -ms-flex: 1; 658 | flex: 1 659 | } 660 | 661 | .swagger-ui .btn-group .btn:first-child { 662 | border-radius: 4px 0 0 4px 663 | } 664 | 665 | .swagger-ui .btn-group .btn:last-child { 666 | border-radius: 0 4px 4px 0 667 | } 668 | 669 | .swagger-ui .authorization__btn { 670 | padding: 0 10px; 671 | border: none; 672 | background: none 673 | } 674 | 675 | .swagger-ui .authorization__btn.locked { 676 | opacity: 1 677 | } 678 | 679 | .swagger-ui .authorization__btn.unlocked { 680 | opacity: .4 681 | } 682 | 683 | .swagger-ui .expand-methods, .swagger-ui .expand-operation { 684 | border: none; 685 | background: none 686 | } 687 | 688 | .swagger-ui .expand-methods svg, .swagger-ui .expand-operation svg { 689 | width: 20px; 690 | height: 20px 691 | } 692 | 693 | .swagger-ui .expand-methods { 694 | padding: 0 10px 695 | } 696 | 697 | .swagger-ui .expand-methods:hover svg { 698 | fill: #444 699 | } 700 | 701 | .swagger-ui .expand-methods svg { 702 | -webkit-transition: all .3s; 703 | transition: all .3s; 704 | fill: #777 705 | } 706 | 707 | .swagger-ui button { 708 | cursor: pointer; 709 | outline: none 710 | } 711 | 712 | .swagger-ui select { 713 | font-size: 14px; 714 | font-weight: 700; 715 | padding: 5px 40px 5px 10px; 716 | border: 2px solid #41444e; 717 | border-radius: 4px; 718 | background: #f7f7f7 url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCI+ICAgIDxwYXRoIGQ9Ik0xMy40MTggNy44NTljLjI3MS0uMjY4LjcwOS0uMjY4Ljk3OCAwIC4yNy4yNjguMjcyLjcwMSAwIC45NjlsLTMuOTA4IDMuODNjLS4yNy4yNjgtLjcwNy4yNjgtLjk3OSAwbC0zLjkwOC0zLjgzYy0uMjctLjI2Ny0uMjctLjcwMSAwLS45NjkuMjcxLS4yNjguNzA5LS4yNjguOTc4IDBMMTAgMTFsMy40MTgtMy4xNDF6Ii8+PC9zdmc+) right 10px center no-repeat; 719 | background-size: 20px; 720 | box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .25); 721 | font-family: Titillium Web, sans-serif; 722 | color: #3b4151; 723 | -webkit-appearance: none; 724 | -moz-appearance: none; 725 | appearance: none 726 | } 727 | 728 | .swagger-ui select[multiple] { 729 | margin: 5px 0; 730 | padding: 5px; 731 | background: #f7f7f7 732 | } 733 | 734 | .swagger-ui .opblock-body select { 735 | min-width: 230px 736 | } 737 | 738 | .swagger-ui label { 739 | font-size: 12px; 740 | font-weight: 700; 741 | margin: 0 0 5px; 742 | font-family: Titillium Web, sans-serif; 743 | color: #3b4151 744 | } 745 | 746 | .swagger-ui input[type=email], .swagger-ui input[type=password], .swagger-ui input[type=search], .swagger-ui input[type=text] { 747 | min-width: 100px; 748 | margin: 5px 0; 749 | padding: 8px 10px; 750 | border: 1px solid #d9d9d9; 751 | border-radius: 4px; 752 | background: #fff 753 | } 754 | 755 | .swagger-ui input[type=email].invalid, .swagger-ui input[type=password].invalid, .swagger-ui input[type=search].invalid, .swagger-ui input[type=text].invalid { 756 | -webkit-animation: shake .4s 1; 757 | animation: shake .4s 1; 758 | border-color: #f93e3e; 759 | background: #feebeb 760 | } 761 | 762 | @-webkit-keyframes shake { 763 | 10%, 90% { 764 | -webkit-transform: translate3d(-1px, 0, 0); 765 | transform: translate3d(-1px, 0, 0) 766 | } 767 | 20%, 80% { 768 | -webkit-transform: translate3d(2px, 0, 0); 769 | transform: translate3d(2px, 0, 0) 770 | } 771 | 30%, 50%, 70% { 772 | -webkit-transform: translate3d(-4px, 0, 0); 773 | transform: translate3d(-4px, 0, 0) 774 | } 775 | 40%, 60% { 776 | -webkit-transform: translate3d(4px, 0, 0); 777 | transform: translate3d(4px, 0, 0) 778 | } 779 | } 780 | 781 | @keyframes shake { 782 | 10%, 90% { 783 | -webkit-transform: translate3d(-1px, 0, 0); 784 | transform: translate3d(-1px, 0, 0) 785 | } 786 | 20%, 80% { 787 | -webkit-transform: translate3d(2px, 0, 0); 788 | transform: translate3d(2px, 0, 0) 789 | } 790 | 30%, 50%, 70% { 791 | -webkit-transform: translate3d(-4px, 0, 0); 792 | transform: translate3d(-4px, 0, 0) 793 | } 794 | 40%, 60% { 795 | -webkit-transform: translate3d(4px, 0, 0); 796 | transform: translate3d(4px, 0, 0) 797 | } 798 | } 799 | 800 | .swagger-ui textarea { 801 | font-size: 12px; 802 | width: 100%; 803 | min-height: 280px; 804 | padding: 10px; 805 | border: none; 806 | border-radius: 4px; 807 | outline: none; 808 | background: hsla(0, 0%, 100%, .8); 809 | font-family: Source Code Pro, monospace; 810 | font-weight: 600; 811 | color: #3b4151 812 | } 813 | 814 | .swagger-ui textarea:focus { 815 | border: 2px solid #61affe 816 | } 817 | 818 | .swagger-ui textarea.curl { 819 | font-size: 12px; 820 | min-height: 100px; 821 | margin: 0; 822 | padding: 10px; 823 | resize: none; 824 | border-radius: 4px; 825 | background: #41444e; 826 | font-family: Source Code Pro, monospace; 827 | font-weight: 600; 828 | color: #fff 829 | } 830 | 831 | .swagger-ui .checkbox { 832 | padding: 5px 0 10px; 833 | -webkit-transition: opacity .5s; 834 | transition: opacity .5s; 835 | color: #333 836 | } 837 | 838 | .swagger-ui .checkbox label { 839 | display: -webkit-box; 840 | display: -ms-flexbox; 841 | display: flex 842 | } 843 | 844 | .swagger-ui .checkbox p { 845 | font-weight: 400!important; 846 | font-style: italic; 847 | margin: 0!important; 848 | font-family: Source Code Pro, monospace; 849 | font-weight: 600; 850 | color: #3b4151 851 | } 852 | 853 | .swagger-ui .checkbox input[type=checkbox] { 854 | display: none 855 | } 856 | 857 | .swagger-ui .checkbox input[type=checkbox]+label>.item { 858 | position: relative; 859 | top: 3px; 860 | display: inline-block; 861 | width: 16px; 862 | height: 16px; 863 | margin: 0 8px 0 0; 864 | padding: 5px; 865 | cursor: pointer; 866 | border-radius: 1px; 867 | background: #e8e8e8; 868 | box-shadow: 0 0 0 2px #e8e8e8; 869 | -webkit-box-flex: 0; 870 | -ms-flex: none; 871 | flex: none 872 | } 873 | 874 | .swagger-ui .checkbox input[type=checkbox]+label>.item:active { 875 | -webkit-transform: scale(.9); 876 | transform: scale(.9) 877 | } 878 | 879 | .swagger-ui .checkbox input[type=checkbox]:checked+label>.item { 880 | background: #e8e8e8 url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='8' viewBox='3 7 10 8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%2341474E' fill-rule='evenodd' d='M6.333 15L3 11.667l1.333-1.334 2 2L11.667 7 13 8.333z'/%3E%3C/svg%3E") 50% no-repeat 881 | } 882 | 883 | .swagger-ui .dialog-ux { 884 | position: fixed; 885 | z-index: 9999; 886 | top: 0; 887 | right: 0; 888 | bottom: 0; 889 | left: 0 890 | } 891 | 892 | .swagger-ui .dialog-ux .backdrop-ux { 893 | position: fixed; 894 | top: 0; 895 | right: 0; 896 | bottom: 0; 897 | left: 0; 898 | background: rgba(0, 0, 0, .8) 899 | } 900 | 901 | .swagger-ui .dialog-ux .modal-ux { 902 | position: absolute; 903 | z-index: 9999; 904 | top: 50%; 905 | left: 50%; 906 | width: 100%; 907 | min-width: 300px; 908 | max-width: 650px; 909 | -webkit-transform: translate(-50%, -50%); 910 | transform: translate(-50%, -50%); 911 | border: 1px solid #ebebeb; 912 | border-radius: 4px; 913 | background: #fff; 914 | box-shadow: 0 10px 30px 0 rgba(0, 0, 0, .2) 915 | } 916 | 917 | .swagger-ui .dialog-ux .modal-ux-content { 918 | overflow-y: auto; 919 | max-height: 540px; 920 | padding: 20px 921 | } 922 | 923 | .swagger-ui .dialog-ux .modal-ux-content p { 924 | font-size: 12px; 925 | margin: 0 0 5px; 926 | color: #41444e; 927 | font-family: Open Sans, sans-serif; 928 | color: #3b4151 929 | } 930 | 931 | .swagger-ui .dialog-ux .modal-ux-content h4 { 932 | font-size: 18px; 933 | font-weight: 600; 934 | margin: 15px 0 0; 935 | font-family: Titillium Web, sans-serif; 936 | color: #3b4151 937 | } 938 | 939 | .swagger-ui .dialog-ux .modal-ux-header { 940 | display: -webkit-box; 941 | display: -ms-flexbox; 942 | display: flex; 943 | padding: 12px 0; 944 | border-bottom: 1px solid #ebebeb; 945 | -webkit-box-align: center; 946 | -ms-flex-align: center; 947 | align-items: center 948 | } 949 | 950 | .swagger-ui .dialog-ux .modal-ux-header .close-modal { 951 | padding: 0 10px; 952 | border: none; 953 | background: none; 954 | -webkit-appearance: none; 955 | -moz-appearance: none; 956 | appearance: none 957 | } 958 | 959 | .swagger-ui .dialog-ux .modal-ux-header h3 { 960 | font-size: 20px; 961 | font-weight: 600; 962 | margin: 0; 963 | padding: 0 20px; 964 | -webkit-box-flex: 1; 965 | -ms-flex: 1; 966 | flex: 1; 967 | font-family: Titillium Web, sans-serif; 968 | color: #3b4151 969 | } 970 | 971 | .swagger-ui .model { 972 | font-size: 12px; 973 | font-weight: 300; 974 | font-family: Source Code Pro, monospace; 975 | font-weight: 600; 976 | color: #3b4151 977 | } 978 | 979 | .swagger-ui .model-toggle { 980 | font-size: 10px; 981 | position: relative; 982 | top: 6px; 983 | display: inline-block; 984 | margin: auto .3em; 985 | cursor: pointer; 986 | -webkit-transition: -webkit-transform .15s ease-in; 987 | transition: -webkit-transform .15s ease-in; 988 | transition: transform .15s ease-in; 989 | transition: transform .15s ease-in, -webkit-transform .15s ease-in; 990 | -webkit-transform: rotate(90deg); 991 | transform: rotate(90deg); 992 | -webkit-transform-origin: 50% 50%; 993 | transform-origin: 50% 50% 994 | } 995 | 996 | .swagger-ui .model-toggle.collapsed { 997 | -webkit-transform: rotate(0deg); 998 | transform: rotate(0deg) 999 | } 1000 | 1001 | .swagger-ui .model-toggle:after { 1002 | display: block; 1003 | width: 20px; 1004 | height: 20px; 1005 | content: ""; 1006 | background: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z'/%3E%3C/svg%3E") 50% no-repeat; 1007 | background-size: 100% 1008 | } 1009 | 1010 | .swagger-ui .model-jump-to-path { 1011 | position: relative; 1012 | cursor: pointer 1013 | } 1014 | 1015 | .swagger-ui .model-jump-to-path .view-line-link { 1016 | position: absolute; 1017 | top: -.4em; 1018 | cursor: pointer 1019 | } 1020 | 1021 | .swagger-ui .model-title { 1022 | position: relative 1023 | } 1024 | 1025 | .swagger-ui .model-title:hover .model-hint { 1026 | visibility: visible 1027 | } 1028 | 1029 | .swagger-ui .model-hint { 1030 | position: absolute; 1031 | top: -1.8em; 1032 | visibility: hidden; 1033 | padding: .1em .5em; 1034 | white-space: nowrap; 1035 | color: #ebebeb; 1036 | border-radius: 4px; 1037 | background: rgba(0, 0, 0, .7) 1038 | } 1039 | 1040 | .swagger-ui section.models { 1041 | margin: 30px 0; 1042 | border: 1px solid rgba(59, 65, 81, .3); 1043 | border-radius: 4px 1044 | } 1045 | 1046 | .swagger-ui section.models.is-open { 1047 | padding: 0 0 20px 1048 | } 1049 | 1050 | .swagger-ui section.models.is-open h4 { 1051 | margin: 0 0 5px; 1052 | border-bottom: 1px solid rgba(59, 65, 81, .3) 1053 | } 1054 | 1055 | .swagger-ui section.models.is-open h4 svg { 1056 | -webkit-transform: rotate(90deg); 1057 | transform: rotate(90deg) 1058 | } 1059 | 1060 | .swagger-ui section.models h4 { 1061 | font-size: 16px; 1062 | display: -webkit-box; 1063 | display: -ms-flexbox; 1064 | display: flex; 1065 | margin: 0; 1066 | padding: 10px 20px 10px 10px; 1067 | cursor: pointer; 1068 | -webkit-transition: all .2s; 1069 | transition: all .2s; 1070 | font-family: Titillium Web, sans-serif; 1071 | color: #777; 1072 | -webkit-box-align: center; 1073 | -ms-flex-align: center; 1074 | align-items: center 1075 | } 1076 | 1077 | .swagger-ui section.models h4 svg { 1078 | -webkit-transition: all .4s; 1079 | transition: all .4s 1080 | } 1081 | 1082 | .swagger-ui section.models h4 span { 1083 | -webkit-box-flex: 1; 1084 | -ms-flex: 1; 1085 | flex: 1 1086 | } 1087 | 1088 | .swagger-ui section.models h4:hover { 1089 | background: rgba(0, 0, 0, .02) 1090 | } 1091 | 1092 | .swagger-ui section.models h5 { 1093 | font-size: 16px; 1094 | margin: 0 0 10px; 1095 | font-family: Titillium Web, sans-serif; 1096 | color: #777 1097 | } 1098 | 1099 | .swagger-ui section.models .model-jump-to-path { 1100 | position: relative; 1101 | top: 5px 1102 | } 1103 | 1104 | .swagger-ui section.models .model-container { 1105 | margin: 0 20px 15px; 1106 | -webkit-transition: all .5s; 1107 | transition: all .5s; 1108 | border-radius: 4px; 1109 | background: rgba(0, 0, 0, .05) 1110 | } 1111 | 1112 | .swagger-ui section.models .model-container:hover { 1113 | background: rgba(0, 0, 0, .07) 1114 | } 1115 | 1116 | .swagger-ui section.models .model-container:first-of-type { 1117 | margin: 20px 1118 | } 1119 | 1120 | .swagger-ui section.models .model-container:last-of-type { 1121 | margin: 0 20px 1122 | } 1123 | 1124 | .swagger-ui section.models .model-box { 1125 | background: none 1126 | } 1127 | 1128 | .swagger-ui .model-box { 1129 | padding: 10px; 1130 | border-radius: 4px; 1131 | background: rgba(0, 0, 0, .1) 1132 | } 1133 | 1134 | .swagger-ui .model-box .model-jump-to-path { 1135 | position: relative; 1136 | top: 4px 1137 | } 1138 | 1139 | .swagger-ui .model-title { 1140 | font-size: 16px; 1141 | font-family: Titillium Web, sans-serif; 1142 | color: #555 1143 | } 1144 | 1145 | .swagger-ui span>span.model, .swagger-ui span>span.model .brace-close { 1146 | padding: 0 0 0 10px 1147 | } 1148 | 1149 | .swagger-ui .prop-type { 1150 | color: #55a 1151 | } 1152 | 1153 | .swagger-ui .prop-enum { 1154 | display: block 1155 | } 1156 | 1157 | .swagger-ui .prop-format { 1158 | color: #999 1159 | } 1160 | 1161 | .swagger-ui table { 1162 | width: 100%; 1163 | padding: 0 10px; 1164 | border-collapse: collapse 1165 | } 1166 | 1167 | .swagger-ui table.model tbody tr td { 1168 | padding: 0; 1169 | vertical-align: top 1170 | } 1171 | 1172 | .swagger-ui table.model tbody tr td:first-of-type { 1173 | width: 100px; 1174 | padding: 0 1175 | } 1176 | 1177 | .swagger-ui table.headers td { 1178 | font-size: 12px; 1179 | font-weight: 300; 1180 | vertical-align: middle; 1181 | font-family: Source Code Pro, monospace; 1182 | font-weight: 600; 1183 | color: #3b4151 1184 | } 1185 | 1186 | .swagger-ui table tbody tr td { 1187 | padding: 10px 0 0; 1188 | vertical-align: top 1189 | } 1190 | 1191 | .swagger-ui table tbody tr td:first-of-type { 1192 | width: 20%; 1193 | padding: 10px 0 1194 | } 1195 | 1196 | .swagger-ui table thead tr td, .swagger-ui table thead tr th { 1197 | font-size: 12px; 1198 | font-weight: 700; 1199 | padding: 12px 0; 1200 | text-align: left; 1201 | border-bottom: 1px solid rgba(59, 65, 81, .2); 1202 | font-family: Open Sans, sans-serif; 1203 | color: #3b4151 1204 | } 1205 | 1206 | .swagger-ui .parameters-col_description p { 1207 | font-size: 14px; 1208 | margin: 0; 1209 | font-family: Open Sans, sans-serif; 1210 | color: #3b4151 1211 | } 1212 | 1213 | .swagger-ui .parameters-col_description input[type=text] { 1214 | width: 100%; 1215 | max-width: 340px 1216 | } 1217 | 1218 | .swagger-ui .parameter__name { 1219 | font-size: 16px; 1220 | font-weight: 400; 1221 | font-family: Titillium Web, sans-serif; 1222 | color: #3b4151 1223 | } 1224 | 1225 | .swagger-ui .parameter__name.required { 1226 | font-weight: 700 1227 | } 1228 | 1229 | .swagger-ui .parameter__name.required:after { 1230 | font-size: 10px; 1231 | position: relative; 1232 | top: -6px; 1233 | padding: 5px; 1234 | content: "required"; 1235 | color: rgba(255, 0, 0, .6) 1236 | } 1237 | 1238 | .swagger-ui .parameter__in { 1239 | font-size: 12px; 1240 | font-style: italic; 1241 | font-family: Source Code Pro, monospace; 1242 | font-weight: 600; 1243 | color: #888 1244 | } 1245 | 1246 | .swagger-ui .table-container { 1247 | padding: 20px 1248 | } 1249 | 1250 | .swagger-ui .topbar { 1251 | padding: 8px 30px; 1252 | background-color: #89bf04 1253 | } 1254 | 1255 | .swagger-ui .topbar .topbar-wrapper { 1256 | -ms-flex-align: center 1257 | } 1258 | 1259 | .swagger-ui .topbar .topbar-wrapper, .swagger-ui .topbar a { 1260 | display: -webkit-box; 1261 | display: -ms-flexbox; 1262 | display: flex; 1263 | -webkit-box-align: center; 1264 | align-items: center 1265 | } 1266 | 1267 | .swagger-ui .topbar a { 1268 | font-size: 1.5em; 1269 | font-weight: 700; 1270 | text-decoration: none; 1271 | -webkit-box-flex: 1; 1272 | -ms-flex: 1; 1273 | flex: 1; 1274 | -ms-flex-align: center; 1275 | font-family: Titillium Web, sans-serif; 1276 | color: #fff 1277 | } 1278 | 1279 | .swagger-ui .topbar a span { 1280 | margin: 0; 1281 | padding: 0 10px 1282 | } 1283 | 1284 | .swagger-ui .topbar .download-url-wrapper { 1285 | display: -webkit-box; 1286 | display: -ms-flexbox; 1287 | display: flex 1288 | } 1289 | 1290 | .swagger-ui .topbar .download-url-wrapper label.select-label span { 1291 | color: white; 1292 | } 1293 | 1294 | .swagger-ui .topbar .download-url-wrapper input[type=text] { 1295 | min-width: 350px; 1296 | margin: 0; 1297 | border: 2px solid #547f00; 1298 | border-radius: 4px 0 0 4px; 1299 | outline: none 1300 | } 1301 | 1302 | .swagger-ui .topbar .download-url-wrapper .download-url-button { 1303 | font-size: 16px; 1304 | font-weight: 700; 1305 | padding: 4px 40px; 1306 | border: none; 1307 | border-radius: 0 4px 4px 0; 1308 | background: #547f00; 1309 | font-family: Titillium Web, sans-serif; 1310 | color: #fff 1311 | } 1312 | 1313 | .swagger-ui .info { 1314 | margin: 50px 0 1315 | } 1316 | 1317 | .swagger-ui .info hgroup.main { 1318 | margin: 0 0 20px 1319 | } 1320 | 1321 | .swagger-ui .info hgroup.main a { 1322 | font-size: 12px 1323 | } 1324 | 1325 | .swagger-ui .info p { 1326 | font-size: 14px; 1327 | font-family: Open Sans, sans-serif; 1328 | color: #3b4151 1329 | } 1330 | 1331 | .swagger-ui .info code { 1332 | padding: 3px 5px; 1333 | border-radius: 4px; 1334 | background: rgba(0, 0, 0, .05); 1335 | font-family: Source Code Pro, monospace; 1336 | font-weight: 600; 1337 | color: #9012fe 1338 | } 1339 | 1340 | .swagger-ui .info a { 1341 | font-size: 14px; 1342 | -webkit-transition: all .4s; 1343 | transition: all .4s; 1344 | font-family: Open Sans, sans-serif; 1345 | color: #4990e2 1346 | } 1347 | 1348 | .swagger-ui .info a:hover { 1349 | color: #1f69c0 1350 | } 1351 | 1352 | .swagger-ui .info>div { 1353 | margin: 0 0 5px 1354 | } 1355 | 1356 | .swagger-ui .info .base-url { 1357 | font-size: 12px; 1358 | font-weight: 300!important; 1359 | margin: 0; 1360 | font-family: Source Code Pro, monospace; 1361 | font-weight: 600; 1362 | color: #3b4151 1363 | } 1364 | 1365 | .swagger-ui .info .title { 1366 | font-size: 36px; 1367 | margin: 0; 1368 | font-family: Open Sans, sans-serif; 1369 | color: #3b4151 1370 | } 1371 | 1372 | .swagger-ui .info .title small { 1373 | font-size: 10px; 1374 | position: relative; 1375 | top: -5px; 1376 | display: inline-block; 1377 | margin: 0 0 0 5px; 1378 | padding: 2px 4px; 1379 | vertical-align: super; 1380 | border-radius: 57px; 1381 | background: #7d8492 1382 | } 1383 | 1384 | .swagger-ui .info .title small pre { 1385 | margin: 0; 1386 | font-family: Titillium Web, sans-serif; 1387 | color: #fff 1388 | } 1389 | 1390 | .swagger-ui .auth-btn-wrapper { 1391 | display: -webkit-box; 1392 | display: -ms-flexbox; 1393 | display: flex; 1394 | padding: 10px 0; 1395 | -webkit-box-pack: center; 1396 | -ms-flex-pack: center; 1397 | justify-content: center 1398 | } 1399 | 1400 | .swagger-ui .auth-wrapper { 1401 | display: -webkit-box; 1402 | display: -ms-flexbox; 1403 | display: flex; 1404 | -webkit-box-flex: 1; 1405 | -ms-flex: 1; 1406 | flex: 1; 1407 | -webkit-box-pack: end; 1408 | -ms-flex-pack: end; 1409 | justify-content: flex-end 1410 | } 1411 | 1412 | .swagger-ui .auth-wrapper .authorize { 1413 | padding-right: 20px 1414 | } 1415 | 1416 | .swagger-ui .auth-container { 1417 | margin: 0 0 10px; 1418 | padding: 10px 20px; 1419 | border-bottom: 1px solid #ebebeb 1420 | } 1421 | 1422 | .swagger-ui .auth-container:last-of-type { 1423 | margin: 0; 1424 | padding: 10px 20px; 1425 | border: 0 1426 | } 1427 | 1428 | .swagger-ui .auth-container h4 { 1429 | margin: 5px 0 15px!important 1430 | } 1431 | 1432 | .swagger-ui .auth-container .wrapper { 1433 | margin: 0; 1434 | padding: 0 1435 | } 1436 | 1437 | .swagger-ui .auth-container input[type=password], .swagger-ui .auth-container input[type=text] { 1438 | min-width: 230px 1439 | } 1440 | 1441 | .swagger-ui .auth-container .errors { 1442 | font-size: 12px; 1443 | padding: 10px; 1444 | border-radius: 4px; 1445 | font-family: Source Code Pro, monospace; 1446 | font-weight: 600; 1447 | color: #3b4151 1448 | } 1449 | 1450 | .swagger-ui .scopes h2 { 1451 | font-size: 14px; 1452 | font-family: Titillium Web, sans-serif; 1453 | color: #3b4151 1454 | } 1455 | 1456 | .swagger-ui .scope-def { 1457 | padding: 0 0 20px 1458 | } 1459 | 1460 | .swagger-ui .errors-wrapper { 1461 | margin: 20px; 1462 | padding: 10px 20px; 1463 | -webkit-animation: scaleUp .5s; 1464 | animation: scaleUp .5s; 1465 | border: 2px solid #f93e3e; 1466 | border-radius: 4px; 1467 | background: rgba(249, 62, 62, .1) 1468 | } 1469 | 1470 | .swagger-ui .errors-wrapper .error-wrapper { 1471 | margin: 0 0 10px 1472 | } 1473 | 1474 | .swagger-ui .errors-wrapper .errors h4 { 1475 | font-size: 14px; 1476 | margin: 0; 1477 | font-family: Source Code Pro, monospace; 1478 | font-weight: 600; 1479 | color: #3b4151 1480 | } 1481 | 1482 | .swagger-ui .errors-wrapper hgroup { 1483 | display: -webkit-box; 1484 | display: -ms-flexbox; 1485 | display: flex; 1486 | -webkit-box-align: center; 1487 | -ms-flex-align: center; 1488 | align-items: center 1489 | } 1490 | 1491 | .swagger-ui .errors-wrapper hgroup h4 { 1492 | font-size: 20px; 1493 | margin: 0; 1494 | -webkit-box-flex: 1; 1495 | -ms-flex: 1; 1496 | flex: 1; 1497 | font-family: Titillium Web, sans-serif; 1498 | color: #3b4151 1499 | } 1500 | 1501 | @-webkit-keyframes scaleUp { 1502 | 0% { 1503 | -webkit-transform: scale(.8); 1504 | transform: scale(.8); 1505 | opacity: 0 1506 | } 1507 | to { 1508 | -webkit-transform: scale(1); 1509 | transform: scale(1); 1510 | opacity: 1 1511 | } 1512 | } 1513 | 1514 | @keyframes scaleUp { 1515 | 0% { 1516 | -webkit-transform: scale(.8); 1517 | transform: scale(.8); 1518 | opacity: 0 1519 | } 1520 | to { 1521 | -webkit-transform: scale(1); 1522 | transform: scale(1); 1523 | opacity: 1 1524 | } 1525 | } 1526 | 1527 | .swagger-ui .Resizer.vertical.disabled { 1528 | display: none 1529 | } 1530 | 1531 | /*# sourceMappingURL=swagger-ui.css.map*/ 1532 | 1533 | /** 1534 | * Swagger UI Theme Overrides 1535 | * 1536 | * Theme: Material 1537 | * Author: Mark Ostrander 1538 | * Github: https://github.com/ostranme/swagger-ui-themes 1539 | */ 1540 | 1541 | .swagger-ui .opblock.opblock-post { 1542 | border-color: #ffffff; 1543 | background: #ffffff; 1544 | } 1545 | 1546 | .swagger-ui .opblock.opblock-post .opblock-summary-method { 1547 | background: #009688; 1548 | } 1549 | 1550 | .swagger-ui .opblock.opblock-post .opblock-summary { 1551 | border-color: #ffffff; 1552 | } 1553 | 1554 | .swagger-ui .opblock.opblock-post .tab-header .tab-item.active h4 span:after { 1555 | background: #009688; 1556 | } 1557 | 1558 | .swagger-ui .opblock.opblock-put { 1559 | border-color: #ffffff; 1560 | background: #ffffff; 1561 | } 1562 | 1563 | .swagger-ui .opblock.opblock-put .opblock-summary-method { 1564 | background: #ff9800; 1565 | } 1566 | 1567 | .swagger-ui .opblock.opblock-put .opblock-summary { 1568 | border-color: #ffffff; 1569 | } 1570 | 1571 | .swagger-ui .opblock.opblock-put .tab-header .tab-item.active h4 span:after { 1572 | background: #ff9800; 1573 | } 1574 | 1575 | .swagger-ui .opblock.opblock-delete { 1576 | border-color: #ffffff; 1577 | background: #ffffff; 1578 | } 1579 | 1580 | .swagger-ui .opblock.opblock-delete .opblock-summary-method { 1581 | background: #f44336; 1582 | } 1583 | 1584 | .swagger-ui .opblock.opblock-delete .opblock-summary { 1585 | border-color: #ffffff; 1586 | } 1587 | 1588 | .swagger-ui .opblock.opblock-delete .tab-header .tab-item.active h4 span:after { 1589 | background: #f44336; 1590 | } 1591 | 1592 | .swagger-ui .opblock.opblock-get { 1593 | border-color: #ffffff; 1594 | background: #ffffff; 1595 | } 1596 | 1597 | .swagger-ui .opblock.opblock-get .opblock-summary-method { 1598 | background: #3f51b5; 1599 | } 1600 | 1601 | .swagger-ui .opblock.opblock-get .opblock-summary { 1602 | border-color: #ffffff; 1603 | } 1604 | 1605 | .swagger-ui .opblock.opblock-get .tab-header .tab-item.active h4 span:after { 1606 | background: #3f51b5; 1607 | } 1608 | 1609 | .swagger-ui .opblock.opblock-patch { 1610 | border-color: #ffffff; 1611 | background: #ffffff; 1612 | } 1613 | 1614 | .swagger-ui .opblock.opblock-patch .opblock-summary-method { 1615 | background: #f57c00; 1616 | } 1617 | 1618 | .swagger-ui .opblock.opblock-patch .opblock-summary { 1619 | border-color: #ffffff; 1620 | } 1621 | 1622 | .swagger-ui .opblock.opblock-patch .tab-header .tab-item.active h4 span:after { 1623 | background: #f57c00; 1624 | } 1625 | 1626 | .swagger-ui .opblock.opblock-head { 1627 | border-color: #ffffff; 1628 | background: #ffffff; 1629 | } 1630 | 1631 | .swagger-ui .opblock.opblock-head .opblock-summary-method { 1632 | background: #3f51b5; 1633 | } 1634 | 1635 | .swagger-ui .opblock.opblock-head .opblock-summary { 1636 | border-color: #ffffff; 1637 | } 1638 | 1639 | .swagger-ui .opblock.opblock-head .tab-header .tab-item.active h4 span:after { 1640 | background: #3f51b5; 1641 | } 1642 | 1643 | .swagger-ui .opblock.opblock-options { 1644 | border-color: #ffffff; 1645 | background: #ffffff; 1646 | } 1647 | 1648 | .swagger-ui .opblock.opblock-options .opblock-summary-method { 1649 | background: #3f51b5; 1650 | } 1651 | 1652 | .swagger-ui .opblock.opblock-options .opblock-summary { 1653 | border-color: #ffffff; 1654 | } 1655 | 1656 | .swagger-ui .opblock.opblock-options .tab-header .tab-item.active h4 span:after { 1657 | background: #3f51b5; 1658 | } 1659 | 1660 | .swagger-ui .topbar { 1661 | padding: 8px 30px; 1662 | background-color: #3f51b5; 1663 | box-shadow: 0 5px 5px 0 rgba(0,0,0,.4), 0 3px 1px -2px rgba(0,0,0,.2), 0 1px 5px 0 rgba(0,0,0,.12); 1664 | } 1665 | 1666 | .swagger-ui .topbar .download-url-wrapper input[type=text] { 1667 | min-width: 350px; 1668 | margin: 0; 1669 | border: 2px solid #DADFE1; 1670 | border-radius: 4px 0 0 4px; 1671 | outline: none; 1672 | } 1673 | 1674 | .swagger-ui .topbar .download-url-wrapper .download-url-button { 1675 | font-size: 16px; 1676 | font-weight: 700; 1677 | padding: 4px 40px; 1678 | border: none; 1679 | border-radius: 0 4px 4px 0; 1680 | background: #ffffff; 1681 | font-family: Titillium Web, sans-serif; 1682 | color: #222222; 1683 | } 1684 | 1685 | .swagger-ui .info a { 1686 | font-size: 14px; 1687 | -webkit-transition: all .4s; 1688 | transition: all .4s; 1689 | font-family: Open Sans, sans-serif; 1690 | color: #3f51b5; 1691 | } 1692 | 1693 | .swagger-ui .info a:hover { 1694 | color: #3f51b5; 1695 | } 1696 | 1697 | .swagger-ui .btn.authorize { 1698 | line-height: 1; 1699 | display: inline; 1700 | color: #3f51b5; 1701 | border-color: #3f51b5; 1702 | } 1703 | 1704 | .swagger-ui .btn.authorize svg { 1705 | fill: #3f51b5; 1706 | } 1707 | 1708 | body { 1709 | margin:0; 1710 | background: #ffffff; 1711 | font-family: "Roboto","Helvetica","Arial",sans-serif; 1712 | } 1713 | 1714 | .swagger-ui .opblock { 1715 | margin: 0 0 15px; 1716 | border: none; 1717 | border-radius: 2px; 1718 | box-shadow: 0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12); 1719 | } 1720 | -------------------------------------------------------------------------------- /examples/bellatrix/execution_payload.json: -------------------------------------------------------------------------------- 1 | { 2 | "value": { 3 | "version": "bellatrix", 4 | "data": { 5 | "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 6 | "fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 7 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 8 | "receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 9 | "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 10 | "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 11 | "block_number": "1", 12 | "gas_limit": "1", 13 | "gas_used": "1", 14 | "timestamp": "1", 15 | "extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 16 | "base_fee_per_gas": "1", 17 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 18 | "transactions": [ 19 | "0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86" 20 | ] 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /examples/bellatrix/execution_payload.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/bellatrix/execution_payload.ssz -------------------------------------------------------------------------------- /examples/bellatrix/signed_blinded_beacon_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "value": { 3 | "message": { 4 | "slot": "1", 5 | "proposer_index": "1", 6 | "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 7 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 8 | "body": { 9 | "randao_reveal": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 10 | "eth1_data": { 11 | "deposit_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 12 | "deposit_count": "1", 13 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 14 | }, 15 | "graffiti": "0xdeadbeefc0ffeedeadbeefc0ffeedeadbeefc0ffeedeadbeefc0ffeedeadbeef", 16 | "proposer_slashings": [ 17 | { 18 | "signed_header_1": { 19 | "message": { 20 | "slot": "1", 21 | "proposer_index": "1", 22 | "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 23 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 24 | "body_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 25 | }, 26 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 27 | }, 28 | "signed_header_2": { 29 | "message": { 30 | "slot": "1", 31 | "proposer_index": "1", 32 | "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 33 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 34 | "body_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 35 | }, 36 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 37 | } 38 | } 39 | ], 40 | "attester_slashings": [ 41 | { 42 | "attestation_1": { 43 | "attesting_indices": [ 44 | "1" 45 | ], 46 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 47 | "data": { 48 | "slot": "1", 49 | "index": "1", 50 | "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 51 | "source": { 52 | "epoch": "1", 53 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 54 | }, 55 | "target": { 56 | "epoch": "1", 57 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 58 | } 59 | } 60 | }, 61 | "attestation_2": { 62 | "attesting_indices": [ 63 | "1" 64 | ], 65 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 66 | "data": { 67 | "slot": "1", 68 | "index": "1", 69 | "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 70 | "source": { 71 | "epoch": "1", 72 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 73 | }, 74 | "target": { 75 | "epoch": "1", 76 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 77 | } 78 | } 79 | } 80 | } 81 | ], 82 | "attestations": [ 83 | { 84 | "aggregation_bits": "0xffffffffffffffffffffffffffffffff", 85 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 86 | "data": { 87 | "slot": "1", 88 | "index": "1", 89 | "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 90 | "source": { 91 | "epoch": "1", 92 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 93 | }, 94 | "target": { 95 | "epoch": "1", 96 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 97 | } 98 | } 99 | } 100 | ], 101 | "deposits": [ 102 | { 103 | "proof": [ 104 | "0xeeffb6c21a01d3abf09cd6c56e5d48f5ea0fc3bb0de906e3beea3e73776329cb", 105 | "0x601c3b24a99d023224d50811bed19449890febb719a31d09ac414c4632f3c0ba", 106 | "0xbb5e485e0a366e16510de33731d71204ad2fe0f7c600861fc2ac4685212c34e3", 107 | "0x0006964745296a3e6ebf3954a1541e73205f1eefaddfc48ca9dc856bf159bca2", 108 | "0x2c6020f1f9712b89f59550aec05b7c23cb1b113762399c0ca5b8fdd2fa85ce57", 109 | "0x1c15634783e1d9d2cb969da66fd72cafca5026191d911b83211318d183c5ea59", 110 | "0xdfbdf99a1fde57899df1545be1f91bc8a8a9f46c4bac619e28e92aff276de41f", 111 | "0xfe9b0f0c05fde6bd26ce63d394058844ad4451f70b6d2547f49c5c2a5c7891a1", 112 | "0x165f84ee467d18dbafdb07275dc42fb988ab696b0a7ad94c52f4d7a27144b994", 113 | "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", 114 | "0xecdbe5e5056b968aa726a08f1aa33f5d41540eed42f59ace020431cf38a5144e", 115 | "0xc4498c5eb1feeb0b225a3f332bdf523dbc013a5b336a851fce1c055b4019a457", 116 | "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", 117 | "0x8a9b66ad79116c9fc6eed14bde76e8f486669e59b0b5bb0c60a6b3caea38b83d", 118 | "0x267c5455e4806b5d0ad5573552d0162e0983595bac25dacd9078174a2766643a", 119 | "0x27e0c6357985de4d6026d6da14f31e8bfe14524056fec69dc06d6f8a239344af", 120 | "0xf8455aebc24849bea870fbcef1235e2d27c8fd27db24e26d30d0173f3b207874", 121 | "0xaba01bf7fe57be4373f47ff8ea6adc4348fab087b69b2518ce630820f95f4150", 122 | "0xd47152335d9460f2b6fb7aba05ced32a52e9f46659ccd3daa2059661d75a6308", 123 | "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", 124 | "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", 125 | "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", 126 | "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", 127 | "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", 128 | "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", 129 | "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", 130 | "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", 131 | "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", 132 | "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", 133 | "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", 134 | "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", 135 | "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7", 136 | "0xf7ed070000000000000000000000000000000000000000000000000000000000" 137 | ], 138 | "data": { 139 | "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 140 | "withdrawal_credentials": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 141 | "amount": "1", 142 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 143 | } 144 | } 145 | ], 146 | "voluntary_exits": [ 147 | { 148 | "message": { 149 | "epoch": "1", 150 | "validator_index": "1" 151 | }, 152 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 153 | } 154 | ], 155 | "sync_aggregate": { 156 | "sync_committee_bits": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffbffffffffffffffffffffbffffffffffffff", 157 | "sync_committee_signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 158 | }, 159 | "execution_payload_header": { 160 | "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 161 | "fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 162 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 163 | "receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 164 | "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 165 | "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 166 | "block_number": "1", 167 | "gas_limit": "1", 168 | "gas_used": "1", 169 | "timestamp": "1", 170 | "extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 171 | "base_fee_per_gas": "1", 172 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 173 | "transactions_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 174 | } 175 | } 176 | }, 177 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 178 | } 179 | } -------------------------------------------------------------------------------- /examples/bellatrix/signed_blinded_beacon_block.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/bellatrix/signed_blinded_beacon_block.ssz -------------------------------------------------------------------------------- /examples/bellatrix/signed_builder_bid.json: -------------------------------------------------------------------------------- 1 | { 2 | "value": { 3 | "version": "bellatrix", 4 | "data": { 5 | "message": { 6 | "header": { 7 | "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 8 | "fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 9 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 10 | "receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 11 | "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 12 | "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 13 | "block_number": "1", 14 | "gas_limit": "1", 15 | "gas_used": "1", 16 | "timestamp": "1", 17 | "extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 18 | "base_fee_per_gas": "1", 19 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 20 | "transactions_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 21 | }, 22 | "value": "1", 23 | "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a" 24 | }, 25 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /examples/bellatrix/signed_builder_bid.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/bellatrix/signed_builder_bid.ssz -------------------------------------------------------------------------------- /examples/bellatrix/signed_validator_registrations.json: -------------------------------------------------------------------------------- 1 | { 2 | "value": [ 3 | { 4 | "message": { 5 | "fee_recipient": "0x000102030405060708090a0b0c0d0e0f10111213", 6 | "gas_limit": "100", 7 | "timestamp": "100", 8 | "pubkey": "0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f" 9 | }, 10 | "signature": "0x606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /examples/bellatrix/signed_validator_registrations.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/bellatrix/signed_validator_registrations.ssz -------------------------------------------------------------------------------- /examples/capella/execution_payload.json: -------------------------------------------------------------------------------- 1 | { 2 | "value": { 3 | "version": "capella", 4 | "data": { 5 | "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 6 | "fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 7 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 8 | "receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 9 | "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 10 | "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 11 | "block_number": "1", 12 | "gas_limit": "1", 13 | "gas_used": "1", 14 | "timestamp": "1", 15 | "extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 16 | "base_fee_per_gas": "1", 17 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 18 | "transactions": [ 19 | "0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86" 20 | ], 21 | "withdrawals": [ 22 | { 23 | "index": "1", 24 | "validator_index": "1", 25 | "address": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 26 | "amount": "32000000000" 27 | } 28 | ] 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /examples/capella/execution_payload.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/capella/execution_payload.ssz -------------------------------------------------------------------------------- /examples/capella/signed_blinded_beacon_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "value": { 3 | "message": { 4 | "slot": "1", 5 | "proposer_index": "1", 6 | "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 7 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 8 | "body": { 9 | "randao_reveal": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 10 | "eth1_data": { 11 | "deposit_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 12 | "deposit_count": "1", 13 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 14 | }, 15 | "graffiti": "0xdeadbeefc0ffeedeadbeefc0ffeedeadbeefc0ffeedeadbeefc0ffeedeadbeef", 16 | "proposer_slashings": [ 17 | { 18 | "signed_header_1": { 19 | "message": { 20 | "slot": "1", 21 | "proposer_index": "1", 22 | "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 23 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 24 | "body_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 25 | }, 26 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 27 | }, 28 | "signed_header_2": { 29 | "message": { 30 | "slot": "1", 31 | "proposer_index": "1", 32 | "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 33 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 34 | "body_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 35 | }, 36 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 37 | } 38 | } 39 | ], 40 | "attester_slashings": [ 41 | { 42 | "attestation_1": { 43 | "attesting_indices": [ 44 | "1" 45 | ], 46 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 47 | "data": { 48 | "slot": "1", 49 | "index": "1", 50 | "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 51 | "source": { 52 | "epoch": "1", 53 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 54 | }, 55 | "target": { 56 | "epoch": "1", 57 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 58 | } 59 | } 60 | }, 61 | "attestation_2": { 62 | "attesting_indices": [ 63 | "1" 64 | ], 65 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 66 | "data": { 67 | "slot": "1", 68 | "index": "1", 69 | "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 70 | "source": { 71 | "epoch": "1", 72 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 73 | }, 74 | "target": { 75 | "epoch": "1", 76 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 77 | } 78 | } 79 | } 80 | } 81 | ], 82 | "attestations": [ 83 | { 84 | "aggregation_bits": "0xffffffffffffffffffffffffffffffff", 85 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 86 | "data": { 87 | "slot": "1", 88 | "index": "1", 89 | "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 90 | "source": { 91 | "epoch": "1", 92 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 93 | }, 94 | "target": { 95 | "epoch": "1", 96 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 97 | } 98 | } 99 | } 100 | ], 101 | "deposits": [ 102 | { 103 | "proof": [ 104 | "0xeeffb6c21a01d3abf09cd6c56e5d48f5ea0fc3bb0de906e3beea3e73776329cb", 105 | "0x601c3b24a99d023224d50811bed19449890febb719a31d09ac414c4632f3c0ba", 106 | "0xbb5e485e0a366e16510de33731d71204ad2fe0f7c600861fc2ac4685212c34e3", 107 | "0x0006964745296a3e6ebf3954a1541e73205f1eefaddfc48ca9dc856bf159bca2", 108 | "0x2c6020f1f9712b89f59550aec05b7c23cb1b113762399c0ca5b8fdd2fa85ce57", 109 | "0x1c15634783e1d9d2cb969da66fd72cafca5026191d911b83211318d183c5ea59", 110 | "0xdfbdf99a1fde57899df1545be1f91bc8a8a9f46c4bac619e28e92aff276de41f", 111 | "0xfe9b0f0c05fde6bd26ce63d394058844ad4451f70b6d2547f49c5c2a5c7891a1", 112 | "0x165f84ee467d18dbafdb07275dc42fb988ab696b0a7ad94c52f4d7a27144b994", 113 | "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", 114 | "0xecdbe5e5056b968aa726a08f1aa33f5d41540eed42f59ace020431cf38a5144e", 115 | "0xc4498c5eb1feeb0b225a3f332bdf523dbc013a5b336a851fce1c055b4019a457", 116 | "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", 117 | "0x8a9b66ad79116c9fc6eed14bde76e8f486669e59b0b5bb0c60a6b3caea38b83d", 118 | "0x267c5455e4806b5d0ad5573552d0162e0983595bac25dacd9078174a2766643a", 119 | "0x27e0c6357985de4d6026d6da14f31e8bfe14524056fec69dc06d6f8a239344af", 120 | "0xf8455aebc24849bea870fbcef1235e2d27c8fd27db24e26d30d0173f3b207874", 121 | "0xaba01bf7fe57be4373f47ff8ea6adc4348fab087b69b2518ce630820f95f4150", 122 | "0xd47152335d9460f2b6fb7aba05ced32a52e9f46659ccd3daa2059661d75a6308", 123 | "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", 124 | "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", 125 | "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", 126 | "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", 127 | "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", 128 | "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", 129 | "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", 130 | "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", 131 | "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", 132 | "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", 133 | "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", 134 | "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", 135 | "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7", 136 | "0xf7ed070000000000000000000000000000000000000000000000000000000000" 137 | ], 138 | "data": { 139 | "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 140 | "withdrawal_credentials": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 141 | "amount": "1", 142 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 143 | } 144 | } 145 | ], 146 | "voluntary_exits": [ 147 | { 148 | "message": { 149 | "epoch": "1", 150 | "validator_index": "1" 151 | }, 152 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 153 | } 154 | ], 155 | "sync_aggregate": { 156 | "sync_committee_bits": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffbffffffffffffffffffffbffffffffffffff", 157 | "sync_committee_signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 158 | }, 159 | "execution_payload_header": { 160 | "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 161 | "fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 162 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 163 | "receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 164 | "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 165 | "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 166 | "block_number": "1", 167 | "gas_limit": "1", 168 | "gas_used": "1", 169 | "timestamp": "1", 170 | "extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 171 | "base_fee_per_gas": "1", 172 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 173 | "transactions_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 174 | "withdrawals_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 175 | }, 176 | "bls_to_execution_changes": [ 177 | { 178 | "message": { 179 | "validator_index": "1", 180 | "from_bls_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 181 | "to_execution_address": "0xabcf8e0d4e9587369b2301d0790347320302cc09" 182 | }, 183 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 184 | } 185 | ] 186 | } 187 | }, 188 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 189 | } 190 | } -------------------------------------------------------------------------------- /examples/capella/signed_blinded_beacon_block.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/capella/signed_blinded_beacon_block.ssz -------------------------------------------------------------------------------- /examples/capella/signed_builder_bid.json: -------------------------------------------------------------------------------- 1 | { 2 | "value": { 3 | "version": "capella", 4 | "data": { 5 | "message": { 6 | "header": { 7 | "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 8 | "fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 9 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 10 | "receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 11 | "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 12 | "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 13 | "block_number": "1", 14 | "gas_limit": "1", 15 | "gas_used": "1", 16 | "timestamp": "1", 17 | "extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 18 | "base_fee_per_gas": "1", 19 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 20 | "transactions_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 21 | "withdrawals_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 22 | }, 23 | "value": "1", 24 | "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a" 25 | }, 26 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /examples/capella/signed_builder_bid.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/capella/signed_builder_bid.ssz -------------------------------------------------------------------------------- /examples/deneb/execution_payload_and_blobs_bundle.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/deneb/execution_payload_and_blobs_bundle.ssz -------------------------------------------------------------------------------- /examples/deneb/signed_blinded_beacon_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "value": { 3 | "message": { 4 | "slot": "1", 5 | "proposer_index": "1", 6 | "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 7 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 8 | "body": { 9 | "randao_reveal": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 10 | "eth1_data": { 11 | "deposit_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 12 | "deposit_count": "1", 13 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 14 | }, 15 | "graffiti": "0xdeadbeefc0ffeedeadbeefc0ffeedeadbeefc0ffeedeadbeefc0ffeedeadbeef", 16 | "proposer_slashings": [ 17 | { 18 | "signed_header_1": { 19 | "message": { 20 | "slot": "1", 21 | "proposer_index": "1", 22 | "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 23 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 24 | "body_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 25 | }, 26 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 27 | }, 28 | "signed_header_2": { 29 | "message": { 30 | "slot": "1", 31 | "proposer_index": "1", 32 | "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 33 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 34 | "body_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 35 | }, 36 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 37 | } 38 | } 39 | ], 40 | "attester_slashings": [ 41 | { 42 | "attestation_1": { 43 | "attesting_indices": [ 44 | "1" 45 | ], 46 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 47 | "data": { 48 | "slot": "1", 49 | "index": "1", 50 | "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 51 | "source": { 52 | "epoch": "1", 53 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 54 | }, 55 | "target": { 56 | "epoch": "1", 57 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 58 | } 59 | } 60 | }, 61 | "attestation_2": { 62 | "attesting_indices": [ 63 | "1" 64 | ], 65 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 66 | "data": { 67 | "slot": "1", 68 | "index": "1", 69 | "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 70 | "source": { 71 | "epoch": "1", 72 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 73 | }, 74 | "target": { 75 | "epoch": "1", 76 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 77 | } 78 | } 79 | } 80 | } 81 | ], 82 | "attestations": [ 83 | { 84 | "aggregation_bits": "0xffffffffffffffffffffffffffffffff", 85 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 86 | "data": { 87 | "slot": "1", 88 | "index": "1", 89 | "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 90 | "source": { 91 | "epoch": "1", 92 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 93 | }, 94 | "target": { 95 | "epoch": "1", 96 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 97 | } 98 | } 99 | } 100 | ], 101 | "deposits": [ 102 | { 103 | "proof": [ 104 | "0xeeffb6c21a01d3abf09cd6c56e5d48f5ea0fc3bb0de906e3beea3e73776329cb", 105 | "0x601c3b24a99d023224d50811bed19449890febb719a31d09ac414c4632f3c0ba", 106 | "0xbb5e485e0a366e16510de33731d71204ad2fe0f7c600861fc2ac4685212c34e3", 107 | "0x0006964745296a3e6ebf3954a1541e73205f1eefaddfc48ca9dc856bf159bca2", 108 | "0x2c6020f1f9712b89f59550aec05b7c23cb1b113762399c0ca5b8fdd2fa85ce57", 109 | "0x1c15634783e1d9d2cb969da66fd72cafca5026191d911b83211318d183c5ea59", 110 | "0xdfbdf99a1fde57899df1545be1f91bc8a8a9f46c4bac619e28e92aff276de41f", 111 | "0xfe9b0f0c05fde6bd26ce63d394058844ad4451f70b6d2547f49c5c2a5c7891a1", 112 | "0x165f84ee467d18dbafdb07275dc42fb988ab696b0a7ad94c52f4d7a27144b994", 113 | "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", 114 | "0xecdbe5e5056b968aa726a08f1aa33f5d41540eed42f59ace020431cf38a5144e", 115 | "0xc4498c5eb1feeb0b225a3f332bdf523dbc013a5b336a851fce1c055b4019a457", 116 | "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", 117 | "0x8a9b66ad79116c9fc6eed14bde76e8f486669e59b0b5bb0c60a6b3caea38b83d", 118 | "0x267c5455e4806b5d0ad5573552d0162e0983595bac25dacd9078174a2766643a", 119 | "0x27e0c6357985de4d6026d6da14f31e8bfe14524056fec69dc06d6f8a239344af", 120 | "0xf8455aebc24849bea870fbcef1235e2d27c8fd27db24e26d30d0173f3b207874", 121 | "0xaba01bf7fe57be4373f47ff8ea6adc4348fab087b69b2518ce630820f95f4150", 122 | "0xd47152335d9460f2b6fb7aba05ced32a52e9f46659ccd3daa2059661d75a6308", 123 | "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", 124 | "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", 125 | "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", 126 | "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", 127 | "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", 128 | "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", 129 | "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", 130 | "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", 131 | "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", 132 | "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", 133 | "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", 134 | "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", 135 | "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7", 136 | "0xf7ed070000000000000000000000000000000000000000000000000000000000" 137 | ], 138 | "data": { 139 | "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 140 | "withdrawal_credentials": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 141 | "amount": "1", 142 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 143 | } 144 | } 145 | ], 146 | "voluntary_exits": [ 147 | { 148 | "message": { 149 | "epoch": "1", 150 | "validator_index": "1" 151 | }, 152 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 153 | } 154 | ], 155 | "sync_aggregate": { 156 | "sync_committee_bits": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffbffffffffffffffffffffbffffffffffffff", 157 | "sync_committee_signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 158 | }, 159 | "execution_payload_header": { 160 | "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 161 | "fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 162 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 163 | "receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 164 | "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 165 | "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 166 | "block_number": "1", 167 | "gas_limit": "1", 168 | "gas_used": "1", 169 | "timestamp": "1", 170 | "extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 171 | "base_fee_per_gas": "1", 172 | "blob_gas_used": "1", 173 | "excess_blob_gas": "1", 174 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 175 | "transactions_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 176 | "withdrawals_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 177 | }, 178 | "bls_to_execution_changes": [ 179 | { 180 | "message": { 181 | "validator_index": "1", 182 | "from_bls_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 183 | "to_execution_address": "0xabcf8e0d4e9587369b2301d0790347320302cc09" 184 | }, 185 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 186 | } 187 | ], 188 | "blob_kzg_commitments": [ 189 | "0xa94170080872584e54a1cf092d845703b13907f2e6b3b1c0ad573b910530499e3bcd48c6378846b80d2bfa58c81cf3d5" 190 | ] 191 | } 192 | }, 193 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 194 | } 195 | } 196 | -------------------------------------------------------------------------------- /examples/deneb/signed_blinded_beacon_block.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/deneb/signed_blinded_beacon_block.ssz -------------------------------------------------------------------------------- /examples/deneb/signed_builder_bid.json: -------------------------------------------------------------------------------- 1 | { 2 | "value": { 3 | "version": "deneb", 4 | "data": { 5 | "message": { 6 | "header": { 7 | "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 8 | "fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 9 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 10 | "receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 11 | "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 12 | "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 13 | "block_number": "1", 14 | "gas_limit": "1", 15 | "gas_used": "1", 16 | "timestamp": "1", 17 | "extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 18 | "base_fee_per_gas": "1", 19 | "blob_gas_used": "1", 20 | "excess_blob_gas": "1", 21 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 22 | "transactions_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 23 | "withdrawals_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 24 | }, 25 | "blob_kzg_commitments": [ 26 | "0xa94170080872584e54a1cf092d845703b13907f2e6b3b1c0ad573b910530499e3bcd48c6378846b80d2bfa58c81cf3d5" 27 | ], 28 | "value": "1", 29 | "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a" 30 | }, 31 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /examples/deneb/signed_builder_bid.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/deneb/signed_builder_bid.ssz -------------------------------------------------------------------------------- /examples/electra/execution_payload_and_blobs_bundle.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/electra/execution_payload_and_blobs_bundle.ssz -------------------------------------------------------------------------------- /examples/electra/signed_blinded_beacon_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "value": { 3 | "message": { 4 | "slot": "1", 5 | "proposer_index": "1", 6 | "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 7 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 8 | "body": { 9 | "randao_reveal": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 10 | "eth1_data": { 11 | "deposit_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 12 | "deposit_count": "1", 13 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 14 | }, 15 | "graffiti": "0xdeadbeefc0ffeedeadbeefc0ffeedeadbeefc0ffeedeadbeefc0ffeedeadbeef", 16 | "proposer_slashings": [ 17 | { 18 | "signed_header_1": { 19 | "message": { 20 | "slot": "1", 21 | "proposer_index": "1", 22 | "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 23 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 24 | "body_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 25 | }, 26 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 27 | }, 28 | "signed_header_2": { 29 | "message": { 30 | "slot": "1", 31 | "proposer_index": "1", 32 | "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 33 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 34 | "body_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 35 | }, 36 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 37 | } 38 | } 39 | ], 40 | "attester_slashings": [ 41 | { 42 | "attestation_1": { 43 | "attesting_indices": [ 44 | "1" 45 | ], 46 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 47 | "data": { 48 | "slot": "1", 49 | "index": "1", 50 | "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 51 | "source": { 52 | "epoch": "1", 53 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 54 | }, 55 | "target": { 56 | "epoch": "1", 57 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 58 | } 59 | } 60 | }, 61 | "attestation_2": { 62 | "attesting_indices": [ 63 | "1" 64 | ], 65 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 66 | "data": { 67 | "slot": "1", 68 | "index": "1", 69 | "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 70 | "source": { 71 | "epoch": "1", 72 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 73 | }, 74 | "target": { 75 | "epoch": "1", 76 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 77 | } 78 | } 79 | } 80 | } 81 | ], 82 | "attestations": [ 83 | { 84 | "aggregation_bits": "0xffffffffffffffffffffffffffffffff", 85 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 86 | "data": { 87 | "slot": "1", 88 | "index": "1", 89 | "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 90 | "source": { 91 | "epoch": "1", 92 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 93 | }, 94 | "target": { 95 | "epoch": "1", 96 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 97 | } 98 | }, 99 | "committee_bits": "0x0000000000000001" 100 | } 101 | ], 102 | "deposits": [ 103 | { 104 | "proof": [ 105 | "0xeeffb6c21a01d3abf09cd6c56e5d48f5ea0fc3bb0de906e3beea3e73776329cb", 106 | "0x601c3b24a99d023224d50811bed19449890febb719a31d09ac414c4632f3c0ba", 107 | "0xbb5e485e0a366e16510de33731d71204ad2fe0f7c600861fc2ac4685212c34e3", 108 | "0x0006964745296a3e6ebf3954a1541e73205f1eefaddfc48ca9dc856bf159bca2", 109 | "0x2c6020f1f9712b89f59550aec05b7c23cb1b113762399c0ca5b8fdd2fa85ce57", 110 | "0x1c15634783e1d9d2cb969da66fd72cafca5026191d911b83211318d183c5ea59", 111 | "0xdfbdf99a1fde57899df1545be1f91bc8a8a9f46c4bac619e28e92aff276de41f", 112 | "0xfe9b0f0c05fde6bd26ce63d394058844ad4451f70b6d2547f49c5c2a5c7891a1", 113 | "0x165f84ee467d18dbafdb07275dc42fb988ab696b0a7ad94c52f4d7a27144b994", 114 | "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", 115 | "0xecdbe5e5056b968aa726a08f1aa33f5d41540eed42f59ace020431cf38a5144e", 116 | "0xc4498c5eb1feeb0b225a3f332bdf523dbc013a5b336a851fce1c055b4019a457", 117 | "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", 118 | "0x8a9b66ad79116c9fc6eed14bde76e8f486669e59b0b5bb0c60a6b3caea38b83d", 119 | "0x267c5455e4806b5d0ad5573552d0162e0983595bac25dacd9078174a2766643a", 120 | "0x27e0c6357985de4d6026d6da14f31e8bfe14524056fec69dc06d6f8a239344af", 121 | "0xf8455aebc24849bea870fbcef1235e2d27c8fd27db24e26d30d0173f3b207874", 122 | "0xaba01bf7fe57be4373f47ff8ea6adc4348fab087b69b2518ce630820f95f4150", 123 | "0xd47152335d9460f2b6fb7aba05ced32a52e9f46659ccd3daa2059661d75a6308", 124 | "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", 125 | "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", 126 | "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", 127 | "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", 128 | "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", 129 | "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", 130 | "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", 131 | "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", 132 | "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", 133 | "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", 134 | "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", 135 | "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", 136 | "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7", 137 | "0xf7ed070000000000000000000000000000000000000000000000000000000000" 138 | ], 139 | "data": { 140 | "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 141 | "withdrawal_credentials": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 142 | "amount": "1", 143 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 144 | } 145 | } 146 | ], 147 | "voluntary_exits": [ 148 | { 149 | "message": { 150 | "epoch": "1", 151 | "validator_index": "1" 152 | }, 153 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 154 | } 155 | ], 156 | "sync_aggregate": { 157 | "sync_committee_bits": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffbffffffffffffffffffffbffffffffffffff", 158 | "sync_committee_signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 159 | }, 160 | "execution_payload_header": { 161 | "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 162 | "fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 163 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 164 | "receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 165 | "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 166 | "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 167 | "block_number": "1", 168 | "gas_limit": "1", 169 | "gas_used": "1", 170 | "timestamp": "1", 171 | "extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 172 | "base_fee_per_gas": "1", 173 | "blob_gas_used": "1", 174 | "excess_blob_gas": "1", 175 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 176 | "transactions_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 177 | "withdrawals_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 178 | }, 179 | "bls_to_execution_changes": [ 180 | { 181 | "message": { 182 | "validator_index": "1", 183 | "from_bls_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 184 | "to_execution_address": "0xabcf8e0d4e9587369b2301d0790347320302cc09" 185 | }, 186 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 187 | } 188 | ], 189 | "blob_kzg_commitments": [ 190 | "0xa94170080872584e54a1cf092d845703b13907f2e6b3b1c0ad573b910530499e3bcd48c6378846b80d2bfa58c81cf3d5" 191 | ], 192 | "execution_requests": { 193 | "deposits": [ 194 | { 195 | "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 196 | "withdrawal_credentials": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 197 | "amount": "1", 198 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 199 | "index": "1" 200 | } 201 | ], 202 | "withdrawals": [ 203 | { 204 | "source_address": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 205 | "validator_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 206 | "amount": "1" 207 | } 208 | ], 209 | "consolidations": [ 210 | { 211 | "source_address": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 212 | "source_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 213 | "target_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a" 214 | } 215 | ] 216 | } 217 | } 218 | }, 219 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 220 | } 221 | } 222 | -------------------------------------------------------------------------------- /examples/electra/signed_blinded_beacon_block.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/electra/signed_blinded_beacon_block.ssz -------------------------------------------------------------------------------- /examples/electra/signed_builder_bid.json: -------------------------------------------------------------------------------- 1 | { 2 | "value": { 3 | "version": "electra", 4 | "data": { 5 | "message": { 6 | "header": { 7 | "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 8 | "fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 9 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 10 | "receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 11 | "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 12 | "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 13 | "block_number": "1", 14 | "gas_limit": "1", 15 | "gas_used": "1", 16 | "timestamp": "1", 17 | "extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 18 | "base_fee_per_gas": "1", 19 | "blob_gas_used": "1", 20 | "excess_blob_gas": "1", 21 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 22 | "transactions_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 23 | "withdrawals_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 24 | }, 25 | "blob_kzg_commitments": [ 26 | "0xa94170080872584e54a1cf092d845703b13907f2e6b3b1c0ad573b910530499e3bcd48c6378846b80d2bfa58c81cf3d5" 27 | ], 28 | "execution_requests": { 29 | "deposits": [ 30 | { 31 | "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 32 | "withdrawal_credentials": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 33 | "amount": "1", 34 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 35 | "index": "1" 36 | } 37 | ], 38 | "withdrawals": [ 39 | { 40 | "source_address": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 41 | "validator_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 42 | "amount": "1" 43 | } 44 | ], 45 | "consolidations": [ 46 | { 47 | "source_address": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 48 | "source_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 49 | "target_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a" 50 | } 51 | ] 52 | }, 53 | "value": "1", 54 | "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a" 55 | }, 56 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /examples/electra/signed_builder_bid.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/electra/signed_builder_bid.ssz -------------------------------------------------------------------------------- /examples/fulu/execution_payload_and_blobs_bundle.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/fulu/execution_payload_and_blobs_bundle.ssz -------------------------------------------------------------------------------- /examples/fulu/signed_blinded_beacon_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "value": { 3 | "message": { 4 | "slot": "1", 5 | "proposer_index": "1", 6 | "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 7 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 8 | "body": { 9 | "randao_reveal": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 10 | "eth1_data": { 11 | "deposit_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 12 | "deposit_count": "1", 13 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 14 | }, 15 | "graffiti": "0xdeadbeefc0ffeedeadbeefc0ffeedeadbeefc0ffeedeadbeefc0ffeedeadbeef", 16 | "proposer_slashings": [ 17 | { 18 | "signed_header_1": { 19 | "message": { 20 | "slot": "1", 21 | "proposer_index": "1", 22 | "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 23 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 24 | "body_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 25 | }, 26 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 27 | }, 28 | "signed_header_2": { 29 | "message": { 30 | "slot": "1", 31 | "proposer_index": "1", 32 | "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 33 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 34 | "body_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 35 | }, 36 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 37 | } 38 | } 39 | ], 40 | "attester_slashings": [ 41 | { 42 | "attestation_1": { 43 | "attesting_indices": [ 44 | "1" 45 | ], 46 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 47 | "data": { 48 | "slot": "1", 49 | "index": "1", 50 | "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 51 | "source": { 52 | "epoch": "1", 53 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 54 | }, 55 | "target": { 56 | "epoch": "1", 57 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 58 | } 59 | } 60 | }, 61 | "attestation_2": { 62 | "attesting_indices": [ 63 | "1" 64 | ], 65 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 66 | "data": { 67 | "slot": "1", 68 | "index": "1", 69 | "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 70 | "source": { 71 | "epoch": "1", 72 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 73 | }, 74 | "target": { 75 | "epoch": "1", 76 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 77 | } 78 | } 79 | } 80 | } 81 | ], 82 | "attestations": [ 83 | { 84 | "aggregation_bits": "0xffffffffffffffffffffffffffffffff", 85 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 86 | "data": { 87 | "slot": "1", 88 | "index": "1", 89 | "beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 90 | "source": { 91 | "epoch": "1", 92 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 93 | }, 94 | "target": { 95 | "epoch": "1", 96 | "root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 97 | } 98 | }, 99 | "committee_bits": "0x0000000000000001" 100 | } 101 | ], 102 | "deposits": [ 103 | { 104 | "proof": [ 105 | "0xeeffb6c21a01d3abf09cd6c56e5d48f5ea0fc3bb0de906e3beea3e73776329cb", 106 | "0x601c3b24a99d023224d50811bed19449890febb719a31d09ac414c4632f3c0ba", 107 | "0xbb5e485e0a366e16510de33731d71204ad2fe0f7c600861fc2ac4685212c34e3", 108 | "0x0006964745296a3e6ebf3954a1541e73205f1eefaddfc48ca9dc856bf159bca2", 109 | "0x2c6020f1f9712b89f59550aec05b7c23cb1b113762399c0ca5b8fdd2fa85ce57", 110 | "0x1c15634783e1d9d2cb969da66fd72cafca5026191d911b83211318d183c5ea59", 111 | "0xdfbdf99a1fde57899df1545be1f91bc8a8a9f46c4bac619e28e92aff276de41f", 112 | "0xfe9b0f0c05fde6bd26ce63d394058844ad4451f70b6d2547f49c5c2a5c7891a1", 113 | "0x165f84ee467d18dbafdb07275dc42fb988ab696b0a7ad94c52f4d7a27144b994", 114 | "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", 115 | "0xecdbe5e5056b968aa726a08f1aa33f5d41540eed42f59ace020431cf38a5144e", 116 | "0xc4498c5eb1feeb0b225a3f332bdf523dbc013a5b336a851fce1c055b4019a457", 117 | "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", 118 | "0x8a9b66ad79116c9fc6eed14bde76e8f486669e59b0b5bb0c60a6b3caea38b83d", 119 | "0x267c5455e4806b5d0ad5573552d0162e0983595bac25dacd9078174a2766643a", 120 | "0x27e0c6357985de4d6026d6da14f31e8bfe14524056fec69dc06d6f8a239344af", 121 | "0xf8455aebc24849bea870fbcef1235e2d27c8fd27db24e26d30d0173f3b207874", 122 | "0xaba01bf7fe57be4373f47ff8ea6adc4348fab087b69b2518ce630820f95f4150", 123 | "0xd47152335d9460f2b6fb7aba05ced32a52e9f46659ccd3daa2059661d75a6308", 124 | "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", 125 | "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", 126 | "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", 127 | "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", 128 | "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", 129 | "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", 130 | "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", 131 | "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", 132 | "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", 133 | "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", 134 | "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", 135 | "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", 136 | "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7", 137 | "0xf7ed070000000000000000000000000000000000000000000000000000000000" 138 | ], 139 | "data": { 140 | "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 141 | "withdrawal_credentials": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 142 | "amount": "1", 143 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 144 | } 145 | } 146 | ], 147 | "voluntary_exits": [ 148 | { 149 | "message": { 150 | "epoch": "1", 151 | "validator_index": "1" 152 | }, 153 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 154 | } 155 | ], 156 | "sync_aggregate": { 157 | "sync_committee_bits": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffbffffffffffffffffffffbffffffffffffff", 158 | "sync_committee_signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 159 | }, 160 | "execution_payload_header": { 161 | "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 162 | "fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 163 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 164 | "receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 165 | "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 166 | "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 167 | "block_number": "1", 168 | "gas_limit": "1", 169 | "gas_used": "1", 170 | "timestamp": "1", 171 | "extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 172 | "base_fee_per_gas": "1", 173 | "blob_gas_used": "1", 174 | "excess_blob_gas": "1", 175 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 176 | "transactions_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 177 | "withdrawals_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 178 | }, 179 | "bls_to_execution_changes": [ 180 | { 181 | "message": { 182 | "validator_index": "1", 183 | "from_bls_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 184 | "to_execution_address": "0xabcf8e0d4e9587369b2301d0790347320302cc09" 185 | }, 186 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 187 | } 188 | ], 189 | "blob_kzg_commitments": [ 190 | "0xa94170080872584e54a1cf092d845703b13907f2e6b3b1c0ad573b910530499e3bcd48c6378846b80d2bfa58c81cf3d5" 191 | ], 192 | "execution_requests": { 193 | "deposits": [ 194 | { 195 | "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 196 | "withdrawal_credentials": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 197 | "amount": "1", 198 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 199 | "index": "1" 200 | } 201 | ], 202 | "withdrawals": [ 203 | { 204 | "source_address": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 205 | "validator_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 206 | "amount": "1" 207 | } 208 | ], 209 | "consolidations": [ 210 | { 211 | "source_address": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 212 | "source_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 213 | "target_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a" 214 | } 215 | ] 216 | } 217 | } 218 | }, 219 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 220 | } 221 | } 222 | -------------------------------------------------------------------------------- /examples/fulu/signed_blinded_beacon_block.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/fulu/signed_blinded_beacon_block.ssz -------------------------------------------------------------------------------- /examples/fulu/signed_builder_bid.json: -------------------------------------------------------------------------------- 1 | { 2 | "value": { 3 | "version": "fulu", 4 | "data": { 5 | "message": { 6 | "header": { 7 | "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 8 | "fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 9 | "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 10 | "receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 11 | "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 12 | "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 13 | "block_number": "1", 14 | "gas_limit": "1", 15 | "gas_used": "1", 16 | "timestamp": "1", 17 | "extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 18 | "base_fee_per_gas": "1", 19 | "blob_gas_used": "1", 20 | "excess_blob_gas": "1", 21 | "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 22 | "transactions_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 23 | "withdrawals_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2" 24 | }, 25 | "blob_kzg_commitments": [ 26 | "0xa94170080872584e54a1cf092d845703b13907f2e6b3b1c0ad573b910530499e3bcd48c6378846b80d2bfa58c81cf3d5" 27 | ], 28 | "execution_requests": { 29 | "deposits": [ 30 | { 31 | "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 32 | "withdrawal_credentials": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", 33 | "amount": "1", 34 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505", 35 | "index": "1" 36 | } 37 | ], 38 | "withdrawals": [ 39 | { 40 | "source_address": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 41 | "validator_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 42 | "amount": "1" 43 | } 44 | ], 45 | "consolidations": [ 46 | { 47 | "source_address": "0xabcf8e0d4e9587369b2301d0790347320302cc09", 48 | "source_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a", 49 | "target_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a" 50 | } 51 | ] 52 | }, 53 | "value": "1", 54 | "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a" 55 | }, 56 | "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505" 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /examples/fulu/signed_builder_bid.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/builder-specs/db7c5ee0363c6449997e2a1d5bc9481ed87ba223/examples/fulu/signed_builder_bid.ssz -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Builder-API 8 | 9 | 10 | 17 | 18 | 19 | 37 | 38 | 39 | 40 |
41 | 42 | 43 | 44 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /specs/bellatrix/builder.md: -------------------------------------------------------------------------------- 1 | # Bellatrix -- Builder Specification 2 | 3 | ## Table of Contents 4 | 5 | 6 | 7 | 8 | - [Constants](#constants) 9 | - [Domain types](#domain-types) 10 | - [Time parameters](#time-parameters) 11 | - [Containers](#containers) 12 | - [Independently Versioned](#independently-versioned) 13 | - [`ValidatorRegistrationV1`](#validatorregistrationv1) 14 | - [`SignedValidatorRegistrationV1`](#signedvalidatorregistrationv1) 15 | - [Fork Versioned](#fork-versioned) 16 | - [Bellatrix](#bellatrix) 17 | - [`BuilderBid`](#builderbid) 18 | - [`SignedBuilderBid`](#signedbuilderbid) 19 | - [`BlindedBeaconBlockBody`](#blindedbeaconblockbody) 20 | - [`BlindedBeaconBlock`](#blindedbeaconblock) 21 | - [`SignedBlindedBeaconBlock`](#signedblindedbeaconblock) 22 | - [Signing](#signing) 23 | - [Validator registration processing](#validator-registration-processing) 24 | - [`is_pending_validator`](#is_pending_validator) 25 | - [`is_eligible_for_registration`](#is_eligible_for_registration) 26 | - [`verify_registration_signature`](#verify_registration_signature) 27 | - [`process_registration`](#process_registration) 28 | - [Building](#building) 29 | - [Bidding](#bidding) 30 | - [Constructing the `ExecutionPayloadHeader`](#constructing-the-executionpayloadheader) 31 | - [Constructing the `BuilderBid`](#constructing-the-builderbid) 32 | - [Packaging into a `SignedBuilderBid`](#packaging-into-a-signedbuilderbid) 33 | - [Revealing the `ExecutionPayload`](#revealing-the-executionpayload) 34 | - [Blinded block processing](#blinded-block-processing) 35 | - [`verify_blinded_block_signature`](#verify_blinded_block_signature) 36 | - [Endpoints](#endpoints) 37 | 38 | 39 | 40 | ## Constants 41 | 42 | ### Domain types 43 | 44 | | Name | Value | 45 | | - | - | 46 | | `DOMAIN_APPLICATION_BUILDER` | `DomainType('0x00000001')` | 47 | 48 | ### Time parameters 49 | 50 | | Name | Value | Unit | Duration | 51 | | - | - | - | - | 52 | | `MAX_REGISTRATION_LOOKAHEAD` | `uint64(10)` | seconds | 10 seconds | 53 | 54 | ## Containers 55 | 56 | Consider the following definitions supplementary to the definitions in 57 | [`consensus-specs`][consensus-specs]. For information on how containers are 58 | signed, see [Signing](#signing). 59 | 60 | ### Independently Versioned 61 | 62 | Some objects can be updated independently of the `consensus-specs`, because 63 | they originate solely from this specification. The objects are postfixed with 64 | `VX` to denote their revision. 65 | 66 | #### `ValidatorRegistrationV1` 67 | 68 | ```python 69 | class ValidatorRegistrationV1(Container): 70 | fee_recipient: ExecutionAddress 71 | gas_limit: uint64 72 | timestamp: uint64 73 | pubkey: BLSPubkey 74 | ``` 75 | 76 | #### `SignedValidatorRegistrationV1` 77 | 78 | ```python 79 | class SignedValidatorRegistrationV1(Container): 80 | message: ValidatorRegistrationV1 81 | signature: BLSSignature 82 | ``` 83 | 84 | ### Fork Versioned 85 | 86 | Other objects are derivatives of `consensus-specs` types and depend on the 87 | latest canonical fork. These objects are namespaced by their fork (e.g. 88 | Bellatrix). 89 | 90 | #### Bellatrix 91 | 92 | ##### `BuilderBid` 93 | 94 | ```python 95 | class BuilderBid(Container): 96 | header: ExecutionPayloadHeader 97 | value: uint256 98 | pubkey: BLSPubkey 99 | ``` 100 | 101 | ##### `SignedBuilderBid` 102 | 103 | ```python 104 | class SignedBuilderBid(Container): 105 | message: BuilderBid 106 | signature: BLSSignature 107 | ``` 108 | 109 | ##### `BlindedBeaconBlockBody` 110 | 111 | ```python 112 | class BlindedBeaconBlockBody(Container): 113 | randao_reveal: BLSSignature 114 | eth1_data: Eth1Data 115 | graffiti: Bytes32 116 | proposer_slashings: List[ProposerSlashing, MAX_PROPOSER_SLASHINGS] 117 | attester_slashings: List[AttesterSlashing, MAX_ATTESTER_SLASHINGS] 118 | attestations: List[Attestation, MAX_ATTESTATIONS] 119 | deposits: List[Deposit, MAX_DEPOSITS] 120 | voluntary_exits: List[SignedVoluntaryExit, MAX_VOLUNTARY_EXITS] 121 | sync_aggregate: SyncAggregate 122 | execution_payload_header: ExecutionPayloadHeader 123 | ``` 124 | 125 | ##### `BlindedBeaconBlock` 126 | 127 | ```python 128 | class BlindedBeaconBlock(Container): 129 | slot: Slot 130 | proposer_index: ValidatorIndex 131 | parent_root: Root 132 | state_root: Root 133 | body: BlindedBeaconBlockBody 134 | ``` 135 | 136 | ##### `SignedBlindedBeaconBlock` 137 | 138 | ```python 139 | class SignedBlindedBeaconBlock(Container): 140 | message: BlindedBeaconBlock 141 | signature: BLSSignature 142 | ``` 143 | 144 | ### Signing 145 | 146 | All signature operations should follow the [standard BLS operations][bls] 147 | interface defined in `consensus-specs`. 148 | 149 | To assist in signing, we use a function from the [consensus specs][consensus-specs]: 150 | [`compute_domain`][compute-domain] 151 | 152 | There are two types of data to sign over in the Builder API: 153 | * In-protocol messages, e.g. [`BlindedBeaconBlock`](#blindedbeaconblock), which 154 | should compute the signing root using [`compute_signing_root`][compute-root] 155 | and use the domain specified for beacon block proposals. 156 | * Builder API messages, e.g. validator registration and signed builder bid, which should compute the 157 | signing root using [`compute_signing_root`][compute-root] with domain given by 158 | `compute_domain(DOMAIN_APPLICATION_BUILDER, fork_version=None, genesis_validators_root=None)`. 159 | As `compute_signing_root` takes `SSZObject` as input, client software should 160 | convert in-protocol messages to their SSZ representation to compute the signing 161 | root and Builder API messages to the SSZ representations defined 162 | [above](#containers). 163 | 164 | ## Validator registration processing 165 | 166 | Validators must submit registrations before they can work with builders. 167 | 168 | To assist in registration processing, we use the following functions from the [consensus specs][consensus-specs]: 169 | 170 | * [`get_current_epoch`][get-current-epoch] 171 | * [`is_active_validator`][is-active-validator] 172 | 173 | ### `is_pending_validator` 174 | 175 | ```python 176 | def is_pending_validator(validator: Validator, epoch: Epoch) -> bool: 177 | """ 178 | Check if ``validator`` is pending in ``epoch``. 179 | """ 180 | return validator.activation_epoch > epoch 181 | ``` 182 | 183 | ### `is_eligible_for_registration` 184 | 185 | ```python 186 | def is_eligible_for_registration(state: BeaconState, validator: Validator) -> bool: 187 | """ 188 | Check if ``validator`` is active or pending. 189 | """ 190 | epoch = get_current_epoch(state) 191 | return is_active_validator(validator, epoch) or is_pending_validator(validator, epoch) 192 | ``` 193 | 194 | ### `verify_registration_signature` 195 | 196 | ```python 197 | def verify_registration_signature(state: BeaconState, signed_registration: SignedValidatorRegistrationV1) -> bool: 198 | pubkey = signed_registration.message.pubkey 199 | domain = compute_domain(DOMAIN_APPLICATION_BUILDER) 200 | signing_root = compute_signing_root(signed_registration.message, domain) 201 | return bls.Verify(pubkey, signing_root, signed_registration.signature) 202 | ``` 203 | 204 | ### `process_registration` 205 | 206 | A `registration` is considered valid if the following function completes without raising any assertions: 207 | 208 | ```python 209 | def process_registration(state: BeaconState, 210 | registration: SignedValidatorRegistrationV1, 211 | registrations: Dict[BLSPubkey, ValidatorRegistrationV1], 212 | current_timestamp: uint64): 213 | signature = registration.signature 214 | registration = registration.message 215 | 216 | # Verify BLS public key corresponds to a registered validator 217 | validator_pubkeys = [v.pubkey for v in state.validators] 218 | assert pubkey in validator_pubkeys 219 | 220 | index = ValidatorIndex(validator_pubkeys.index(pubkey)) 221 | validator = state.validators[index] 222 | 223 | # Verify validator registration elibility 224 | assert is_eligible_for_registration(state, validator) 225 | 226 | # Verify timestamp is not too far in the future 227 | assert registration.timestamp <= current_timestamp + MAX_REGISTRATION_LOOKAHEAD 228 | 229 | # Verify timestamp is not less than the timestamp of the previous registration (if it exists) 230 | if registration.pubkey in registrations: 231 | prev_registration = registrations[registration.pubkey] 232 | assert registration.timestamp >= prev_registration.timestamp 233 | 234 | # Verify registration signature 235 | assert verify_registration_signature(state, registration) 236 | ``` 237 | 238 | ## Building 239 | 240 | The builder builds execution payloads for registered validators and submits them to an auction that happens each slot. 241 | When a validator goes to propose, they select the winning `SignedBuilderBid` offered in that slot by constructing a `SignedBlindedBeaconBlock`. 242 | The builder only reveals the full execution payload once they receive a valid `SignedBlindedBeaconBlock`. 243 | The validator accepts a bid and commits to a specific `ExecutionPayload` with a `SignedBlindedBeaconBlock`. 244 | 245 | ### Bidding 246 | 247 | To assist in bidding, we use the following functions from the [consensus specs][consensus-specs]: 248 | 249 | * [`get_beacon_proposer_index`][get-beacon-proposer-index] 250 | * [`hash_tree_root`][hash-tree-root] 251 | 252 | Execution payloads are built for a specific `slot`, `parent_hash`, and `pubkey` tuple corresponding to a unique beacon block serving as the parent. 253 | 254 | The builder validates requests for bids according to `is_eligible_for_bid(state, registrations, slot, parent_hash, pubkey)` where: 255 | 256 | * `state` is the builder's consensus state transitioned to `slot`, including the application of any blocks before `slot`. 257 | * `registrations` is the registry of validators [successfully registered](#process-registration) with the builder. 258 | 259 | ```python 260 | def is_eligible_for_bid(state: BeaconState, 261 | registrations: Dict[BLSPubkey, ValidatorRegistrationV1], 262 | slot: Slot, 263 | parent_hash: Hash32, 264 | pubkey: BLSPubkey) -> bool: 265 | # Verify slot 266 | if slot != state.slot: 267 | return False 268 | 269 | # Verify BLS public key corresponds to a registered validator 270 | if pubkey not in registrations: 271 | return False 272 | 273 | # Verify BLS public key corresponds to the proposer for the slot 274 | proposer_index = get_beacon_proposer_index(state) 275 | if pubkey != state.validators[proposer_index].pubkey: 276 | return False 277 | 278 | # Verify parent hash 279 | return parent_hash == state.latest_execution_payload_header.block_hash 280 | ``` 281 | 282 | #### Constructing the `ExecutionPayloadHeader` 283 | 284 | The builder MUST provide a bid for the valid execution payload that is able to pay the `fee_recipient` in the validator registration for the registered `pubkey` the most. 285 | The builder MUST build an execution payload whose `gas_limit` is equal to the `gas_limit` of the latest registration for `pubkey`, or as close as is possible under the consensus rules. 286 | 287 | #### Constructing the `BuilderBid` 288 | 289 | ```python 290 | def get_bid(execution_payload: ExecutionPayload, value: uint256, pubkey: BLSPubkey) -> BuilderBid: 291 | header = ExecutionPayloadHeader( 292 | parent_hash=payload.parent_hash, 293 | fee_recipient=payload.fee_recipient, 294 | state_root=payload.state_root, 295 | receipts_root=payload.receipts_root, 296 | logs_bloom=payload.logs_bloom, 297 | prev_randao=payload.prev_randao, 298 | block_number=payload.block_number, 299 | gas_limit=payload.gas_limit, 300 | gas_used=payload.gas_used, 301 | timestamp=payload.timestamp, 302 | extra_data=payload.extra_data, 303 | base_fee_per_gas=payload.base_fee_per_gas, 304 | block_hash=payload.block_hash, 305 | transactions_root=hash_tree_root(payload.transactions), 306 | ) 307 | return BuilderBid(header=header, value=value, pubkey=pubkey) 308 | ``` 309 | 310 | #### Packaging into a `SignedBuilderBid` 311 | 312 | The builder packages `bid` into a `SignedBuilderBid`, denoted `signed_bid`, with `signed_bid=SignedBuilderBid(bid=bid, signature=signature)` where `signature` is obtained from: 313 | 314 | ```python 315 | def get_bid_signature(state: BeaconState, bid: BuilderBid, privkey: int) -> BLSSignature: 316 | domain = compute_domain(DOMAIN_APPLICATION_BUILDER) 317 | signing_root = compute_signing_root(bid, domain) 318 | return bls.Sign(privkey, signing_root) 319 | ``` 320 | 321 | ### Revealing the `ExecutionPayload` 322 | 323 | #### Blinded block processing 324 | 325 | To assist in blinded block processing, we use the following functions from the [consensus specs][consensus-specs]: 326 | 327 | * [`get_beacon_proposer_index`][get-beacon-proposer-index] 328 | * [`get_current_epoch`][get-current-epoch] 329 | * [`compute_epoch_at_slot`][compute-epoch-at-slot] 330 | * [`get_domain`][get-domain] 331 | 332 | A proposer selects a bid by constructing a valid `SignedBlindedBeaconBlock`. 333 | The proposer MUST accept at most one bid for a given `slot`. 334 | Otherwise, the builder can produce a [`ProposerSlashing`][proposer-slashing]. 335 | 336 | The builder must ensure the `SignedBlindedBeaconBlock` is valid according to the rules of consensus and also that the signature is correct for the expected proposer using `verify_blinded_block_signature`: 337 | 338 | ##### `verify_blinded_block_signature` 339 | 340 | ```python 341 | def verify_blinded_block_signature(state: BeaconState, signed_block: SignedBlindedBeaconBlock) -> bool: 342 | proposer = state.validators[get_beacon_proposer_index(state)] 343 | epoch = get_current_epoch(state) 344 | signing_root = compute_signing_root(signed_block.message, get_domain(state, DOMAIN_BEACON_PROPOSER, epoch)) 345 | return bls.Verify(proposer.pubkey, signing_root, signed_block.signature) 346 | ``` 347 | 348 | ## Endpoints 349 | 350 | Builder API endpoints are defined in `builder-oapi.yaml` in the root of the 351 | repository. A rendered version can be viewed at 352 | https://ethereum.github.io/builder-specs/. 353 | 354 | [consensus-specs]: https://github.com/ethereum/consensus-specs 355 | [bls]: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#bls-signatures 356 | [compute-root]: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#compute_signing_root 357 | [compute-domain]: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#compute_domain 358 | [get-current-epoch]: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#get_current_epoch 359 | [is-active-validator]: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#is_active_validator 360 | [hash-tree-root]: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#hash_tree_root 361 | [get-domain]: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#get_domain 362 | [compute-epoch-at-slot]: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#compute_epoch_at_slot 363 | [get-beacon-proposer-index]: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#get_beacon_proposer_index 364 | [proposer-slashing]: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#proposerslashing 365 | -------------------------------------------------------------------------------- /specs/bellatrix/validator.md: -------------------------------------------------------------------------------- 1 | # Bellatrix -- Honest Validator 2 | 3 | **Notice**: This document is a work-in-progress for researchers and implementers. 4 | 5 | ## Table of contents 6 | 7 | 8 | 9 | 10 | - [Introduction](#introduction) 11 | - [Prerequisites](#prerequisites) 12 | - [Constants](#constants) 13 | - [Validator registration](#validator-registration) 14 | - [Preparing a registration](#preparing-a-registration) 15 | - [Signing and submitting a registration](#signing-and-submitting-a-registration) 16 | - [Registration dissemination](#registration-dissemination) 17 | - [Beacon chain responsibilities](#beacon-chain-responsibilities) 18 | - [Block proposal](#block-proposal) 19 | - [Constructing the `BeaconBlockBody`](#constructing-the-beaconblockbody) 20 | - [ExecutionPayload](#executionpayload) 21 | - [Bid processing](#bid-processing) 22 | - [Relation to local block building](#relation-to-local-block-building) 23 | - [Liveness failsafe](#liveness-failsafe) 24 | - [How to avoid slashing](#how-to-avoid-slashing) 25 | - [Proposer slashing](#proposer-slashing) 26 | - [Responsibilities during the Merge transition](#responsibilities-during-the-merge-transition) 27 | 28 | 29 | 30 | ## Introduction 31 | 32 | This document explains the way in which a beacon chain validator is expected to use the [Builder spec][builder-spec] to 33 | participate in an external builder network. 34 | 35 | At a high-level, there is a registration step validators must perform ahead of any proposal duties so builders know how 36 | to craft blocks for their specific proposal. Having performed the registration, a validator waits until it is their turn 37 | to propose the next block in the chain. The validator then requests an `ExecutionPayload` from the external builder 38 | network to put into their `SignedBeaconBlock` in lieu of one they could build locally. 39 | 40 | ## Prerequisites 41 | 42 | This document assumes knowledge of the terminology, definitions, and other material in the [Builder spec][builder-spec] 43 | and by extension the [Bellatrix consensus specs][bellatrix-specs]. 44 | 45 | ## Constants 46 | 47 | | Name | Value | Units | 48 | | - | - | - | 49 | | `EPOCHS_PER_VALIDATOR_REGISTRATION_SUBMISSION` | 1 | epoch(s)| 50 | | `BUILDER_PROPOSAL_DELAY_TOLERANCE` | 1 | second(s) | 51 | 52 | ## Validator registration 53 | 54 | A validator begins interacting with the external builder network by submitting a signed registration to each of the 55 | builders it wants to utilize during block production. 56 | 57 | ### Preparing a registration 58 | 59 | To do this, the validator client assembles a [`ValidatorRegistrationV1`][validator-registration-v1] with the following 60 | information: 61 | 62 | * `fee_recipient`: an execution layer address where fees for the validator should go. 63 | * `gas_limit`: the value a validator prefers for the execution block gas limit. 64 | * `timestamp`: a recent timestamp later than any previously constructed `ValidatorRegistrationV1`. 65 | Builders use this timestamp as a form of anti-DoS and to sequence registrations. 66 | * `pubkey`: the validator's public key. Used to identify the beacon chain validator and verify the wrapping signature. 67 | 68 | ### Signing and submitting a registration 69 | 70 | The validator takes the constructed `ValidatorRegistrationV1` `message` and signs according to the method given in 71 | the [Builder spec][builder-spec] to make a `signature`. 72 | 73 | This `signature` is placed along with the `message` into a `SignedValidatorRegistrationV1` and submitted to a connected 74 | beacon node using the [`registerValidator`][register-validator-api] endpoint of the standard validator 75 | [beacon node APIs][beacon-node-apis]. 76 | 77 | Validators **should** submit valid registrations well ahead of any potential beacon chain proposal duties to ensure 78 | their building preferences are widely available in the external builder network. 79 | 80 | ### Registration dissemination 81 | 82 | Validators are expected to periodically send their own `SignedValidatorRegistrationV1` messages upstream to the external 83 | builder network using the [`registerValidator`][register-validator-with-builder] endpoint of the standard 84 | [APIs defined in the builder spec][builder-spec-apis]. 85 | 86 | Registrations should be re-submitted frequently enough that any changes to their building preferences can be widely 87 | spread across the builder network in a timely manner. 88 | 89 | This specification suggests validators re-submit to builder software every 90 | `EPOCHS_PER_VALIDATOR_REGISTRATION_SUBMISSION` epochs. 91 | 92 | ## Beacon chain responsibilities 93 | 94 | Refer to the [Bellatrix validator specs][bellatrix-validator-specs] for the expected set of duties a validator is 95 | expected to perform, including a pathway for local block building. The external builder network offers a separate block 96 | building pathway that can be used concurrently with this local process. 97 | 98 | ### Block proposal 99 | 100 | #### Constructing the `BeaconBlockBody` 101 | 102 | ##### ExecutionPayload 103 | 104 | To obtain an execution payload, a block proposer building a block on top of a beacon `state` in a given `slot` must take 105 | the following actions: 106 | 107 | 1. Call upstream builder software to get an `ExecutionPayloadHeader` with the 108 | required data `slot`, `parent_hash` and `pubkey`, where: 109 | * `slot` is the proposal's slot 110 | * `parent_hash` is the value `state.latest_execution_payload_header.block_hash` 111 | * `pubkey` is the proposer's public key 112 | 2. Assemble a `BlindedBeaconBlock` according to the process outlined in the [Bellatrix specs][bellatrix-specs] but with 113 | the `ExecutionPayloadHeader` from the prior step in lieu of the full `ExecutionPayload`. 114 | 3. The proposer signs the `BlindedBeaconBlock` and assembles a `SignedBlindedBeaconBlock` which is returned to the 115 | upstream builder software. 116 | 4. The upstream builder software responds with the full `ExecutionPayload`. The proposer can use this payload 117 | to assemble a `SignedBeaconBlock` following the rest of the proposal process outlined in the 118 | [Bellatrix specs][bellatrix-specs]. 119 | 120 | ##### Bid processing 121 | 122 | Bids received from step (1) above can be validated with `process_bid` below, where `state` corresponds to the state for the proposal without applying the block (currently under construction) and `fee_recipient` corresponds to the validator's most recently registered fee recipient address: 123 | 124 | ```python 125 | def verify_bid_signature(state: BeaconState, signed_bid: SignedBuilderBid) -> bool: 126 | pubkey = signed_bid.message.pubkey 127 | domain = compute_domain(DOMAIN_APPLICATION_BUILDER) 128 | signing_root = compute_signing_root(signed_registration.message, domain) 129 | return bls.Verify(pubkey, signing_root, signed_bid.signature) 130 | ``` 131 | 132 | A `bid` is considered valid if the following function completes without raising any assertions: 133 | 134 | ```python 135 | def process_bid(state: BeaconState, bid: SignedBuilderBid, fee_recipient: ExecutionAddress): 136 | # Verify execution payload header 137 | header = bid.message.header 138 | assert header.parent_hash == state.latest_execution_payload_header.block_hash 139 | assert header.fee_recipient == fee_recipient 140 | 141 | # Verify bid signature 142 | verify_bid_signature(state, bid) 143 | ``` 144 | 145 | #### Relation to local block building 146 | 147 | The external builder network offers a service for proposers that may from time to time fail to produce a timely block. 148 | Honest proposers who elect to use the external builder network **MUST** also build a block locally in the event that the 149 | external builder network fails to provide a `SignedBuilderBid` in time in order to propagate the full 150 | `SignedBeaconBlock` during the proposer's slot. The local build task should begin in parallel to any use of the external 151 | builder network. 152 | 153 | Honest proposers using the external builder network will give the builders a duration of 154 | `BUILDER_PROPOSAL_DELAY_TOLERANCE` to provide a `SignedBuilderBid` before the external builder is considered to have hit 155 | the deadline and the external builder flow must be aborted in favor of a local build process. 156 | 157 | **WARNING**: Validators must be careful to not get slashed when orchestrating the duplicate building pathways. 158 | See the [section on slashing](#proposer-slashing) for more information. 159 | 160 | ## Liveness failsafe 161 | 162 | Honest proposers implement a "circuit breaker" condition operationalized by the beacon node that is triggered when the 163 | node determines the chain is unhealthy. When the circuit breaker is fired, proposers **MUST** not utilize the external 164 | builder network and exclusively build locally. 165 | 166 | The exact conditions to determine chain health are implementation-dependent. Various categories of signals to consider 167 | include: 168 | 169 | - number of missed slots over an epoch 170 | - number of reorgs in an epoch 171 | - number of missed slots in a row 172 | - reorg depth over a given period of time 173 | - attestation target vote falls below certain % (or head if want to be strict) 174 | - lack of finality over a given period of time 175 | - hard fork boundaries 176 | 177 | ## How to avoid slashing 178 | 179 | ### Proposer slashing 180 | 181 | Validators must take care to not publish signatures for two distinct blocks even if there is a failure with the external 182 | builder network. A `ProposerSlashing` can be formed in this event from the competing beacon block headers which results 183 | in getting slashed. 184 | 185 | To avoid slashing when using the external builder network, a validator should begin the external build process for an 186 | `ExecutionPayloadHeader` along with the local build process for an `ExecutionPayload` as soon as they know the required 187 | parameters to do so. Regardless of which process completes in time, the validator should cancel the other 188 | process as soon as they have produced a signature for a beacon block, either a `BeaconBlock` **or** a 189 | `BlindedBeaconBlock`. Producing distinct signatures for the validator's proposal slot, for example because the 190 | transactions list of the `BeaconBlockBody` are different, is the slashable offense. This means if a validator publishes 191 | a signature for a `BlindedBeaconBlock` (via a dissemination of a `SignedBlindedBeaconBlock`) then the validator 192 | **MUST** not use the local build process as a fallback, even in the event of some failure with the external builder 193 | network. 194 | 195 | ## Responsibilities during the Merge transition 196 | 197 | Honest validators will not utilize the external builder network during the transition from proof-of-work to 198 | proof-of-stake. This requirement is in place to reduce the overall technical complexity of the Merge. 199 | 200 | Concretely, honest validators **MUST** wait until the transition has been finalized before 201 | they can start querying the external builder network. See [EIP-3675][eip-3675] for further details about the transition 202 | process itself. 203 | 204 | [builder-spec]: ./builder.md 205 | [builder-spec-apis]: ./builder.md#endpoints 206 | [register-validator-with-builder]: https://ethereum.github.io/builder-specs/#/Builder/registerValidator 207 | [validator-registration-v1]: ./builder.md#validatorregistrationv1 208 | [register-validator-api]: https://ethereum.github.io/beacon-APIs/#/Validator/registerValidator 209 | [beacon-node-apis]: https://ethereum.github.io/beacon-APIs 210 | [bellatrix-specs]: https://github.com/ethereum/consensus-specs/blob/dev/specs/bellatrix 211 | [bellatrix-validator-specs]: https://github.com/ethereum/consensus-specs/blob/dev/specs/bellatrix/validator.md 212 | [eip-3675]: https://eips.ethereum.org/EIPS/eip-3675 213 | -------------------------------------------------------------------------------- /specs/capella/builder.md: -------------------------------------------------------------------------------- 1 | # Capella -- Builder Specification 2 | 3 | ## Table of Contents 4 | 5 | 6 | 7 | 8 | - [Introduction](#introduction) 9 | - [Containers](#containers) 10 | - [Extended containers](#extended-containers) 11 | - [`ExecutionPayloadHeader`](#executionpayloadheader) 12 | - [`BlindedBeaconBlockBody`](#blindedbeaconblockbody) 13 | 14 | 15 | 16 | ## Introduction 17 | 18 | This is the modification of the builder specification accompanying the Capella upgrade. 19 | 20 | ## Containers 21 | 22 | ### Extended containers 23 | 24 | #### `ExecutionPayloadHeader` 25 | 26 | Note: `BuilderBid` and `SignedBuilderBid` types are updated indirectly. 27 | 28 | See [ExecutionPayloadHeader](https://github.com/ethereum/consensus-specs/blob/dev/specs/capella/beacon-chain.md#executionpayloadheader). 29 | 30 | ##### `BlindedBeaconBlockBody` 31 | 32 | Note: `BlindedBeaconBlock` and `SignedBlindedBeaconBlock` types are updated indirectly. 33 | 34 | ```python 35 | class BlindedBeaconBlockBody(Container): 36 | randao_reveal: BLSSignature 37 | eth1_data: Eth1Data 38 | graffiti: Bytes32 39 | proposer_slashings: List[ProposerSlashing, MAX_PROPOSER_SLASHINGS] 40 | attester_slashings: List[AttesterSlashing, MAX_ATTESTER_SLASHINGS] 41 | attestations: List[Attestation, MAX_ATTESTATIONS] 42 | deposits: List[Deposit, MAX_DEPOSITS] 43 | voluntary_exits: List[SignedVoluntaryExit, MAX_VOLUNTARY_EXITS] 44 | sync_aggregate: SyncAggregate 45 | execution_payload_header: ExecutionPayloadHeader # [Modified in Capella] 46 | bls_to_execution_changes: List[SignedBLSToExecutionChange, MAX_BLS_TO_EXECUTION_CHANGES] # [New in Capella] 47 | ``` 48 | -------------------------------------------------------------------------------- /specs/deneb/builder.md: -------------------------------------------------------------------------------- 1 | # Deneb -- Builder Specification 2 | 3 | ## Table of Contents 4 | 5 | 6 | 7 | 8 | - [Introduction](#introduction) 9 | - [Containers](#containers) 10 | - [New containers](#new-containers) 11 | - [`BlobsBundle`](#blobsbundle) 12 | - [`ExecutionPayloadAndBlobsBundle`](#executionpayloadandblobsbundle) 13 | - [Extended containers](#extended-containers) 14 | - [`BuilderBid`](#builderbid) 15 | - [`ExecutionPayloadHeader`](#executionpayloadheader) 16 | - [`BlindedBeaconBlockBody`](#blindedbeaconblockbody) 17 | - [Building](#building) 18 | - [Block scoring](#block-scoring) 19 | - [Relaying](#relaying) 20 | - [Block scoring](#block-scoring-1) 21 | - [Bidding](#bidding) 22 | - [Revealing the `ExecutionPayload`](#revealing-the-executionpayload) 23 | - [Blinded block processing](#blinded-block-processing) 24 | 25 | 26 | 27 | ## Introduction 28 | 29 | This is the modification of the builder specification accompanying the Deneb upgrade. 30 | 31 | ## Containers 32 | 33 | ### New containers 34 | 35 | #### `BlobsBundle` 36 | 37 | ```python 38 | class BlobsBundle(Container): 39 | commitments: List[KZGCommitment, MAX_BLOB_COMMITMENTS_PER_BLOCK] 40 | proofs: List[KZGProof, MAX_BLOB_COMMITMENTS_PER_BLOCK] 41 | blobs: List[Blob, MAX_BLOB_COMMITMENTS_PER_BLOCK] 42 | ``` 43 | 44 | #### `ExecutionPayloadAndBlobsBundle` 45 | 46 | ```python 47 | class ExecutionPayloadAndBlobsBundle(Container): 48 | execution_payload: ExecutionPayload 49 | blobs_bundle: BlobsBundle 50 | ``` 51 | 52 | ### Extended containers 53 | 54 | #### `BuilderBid` 55 | 56 | Note: `SignedBuilderBid` is updated indirectly. 57 | 58 | ```python 59 | class BuilderBid(Container): 60 | header: ExecutionPayloadHeader # [Modified in Deneb] 61 | blob_kzg_commitments: List[KZGCommitment, MAX_BLOB_COMMITMENTS_PER_BLOCK] # [New in Deneb] 62 | value: uint256 63 | pubkey: BLSPubkey 64 | ``` 65 | 66 | #### `ExecutionPayloadHeader` 67 | 68 | See [`ExecutionPayloadHeader`](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/beacon-chain.md#executionpayloadheader) in Deneb consensus specs. 69 | 70 | ##### `BlindedBeaconBlockBody` 71 | 72 | Note: `BlindedBeaconBlock` and `SignedBlindedBeaconBlock` types are updated indirectly. 73 | 74 | ```python 75 | class BlindedBeaconBlockBody(Container): 76 | randao_reveal: BLSSignature 77 | eth1_data: Eth1Data 78 | graffiti: Bytes32 79 | proposer_slashings: List[ProposerSlashing, MAX_PROPOSER_SLASHINGS] 80 | attester_slashings: List[AttesterSlashing, MAX_ATTESTER_SLASHINGS] 81 | attestations: List[Attestation, MAX_ATTESTATIONS] 82 | deposits: List[Deposit, MAX_DEPOSITS] 83 | voluntary_exits: List[SignedVoluntaryExit, MAX_VOLUNTARY_EXITS] 84 | sync_aggregate: SyncAggregate 85 | execution_payload_header: ExecutionPayloadHeader # [Modified in Deneb] 86 | bls_to_execution_changes: List[SignedBLSToExecutionChange, MAX_BLS_TO_EXECUTION_CHANGES] 87 | blob_kzg_commitments: List[KZGCommitment, MAX_BLOB_COMMITMENTS_PER_BLOCK] # [New in Deneb] 88 | ``` 89 | 90 | ## Building 91 | 92 | Builders provide bids as they have in prior forks, with a notable restriction to block scoring. 93 | 94 | ### Block scoring 95 | 96 | Builders **MUST** not include the `amount`s from the consensus block's withdrawals when computing the `value` for their `BuilderBid`. 97 | 98 | See [the section below on relay verification](#block-scoring-1) for the logic a builder's bid must satisfy. 99 | 100 | ## Relaying 101 | 102 | Relays have a few additional duties to support the features in this upgrade. 103 | 104 | ### Block scoring 105 | 106 | Relays **MUST** ensure the `value` in the `BuilderBid` corresponds to the payment delivered by the builder to the proposer, excluding any withdrawals. 107 | 108 | Consider the following validation logic following definitions in the `consensus-specs`: 109 | 110 | ```python 111 | def verify_bid_value(execution_payload: ExecutionPayload, fee_recipient: ExecutionAddress, bid_value: uint256, balance_difference: uint256): 112 | excluded_amount = sum([w.amount for w in execution_payload.withdrawals if w.address == fee_recipient]) 113 | proposer_payment = balance_difference - excluded_amount 114 | assert proposer_payment == bid_value 115 | ``` 116 | 117 | `verify_bid_value` should execute completely, noting that assertion failures are errors. 118 | The `execution_payload`, `fee_recipient`, and `bid_value` are all provided by the builder in their payload submission. 119 | The `balance_difference` is computed by the relay during simulation of the `execution_payload` where 120 | `balance_difference = post_state_balance - pre_state_balance`. 121 | `pre_state_balance` is the ether amount at the `fee_recipient`’s address in the execution state before applying 122 | the `execution_payload` and the `post_state_balance` is the same data after applying the `execution_payload`. 123 | 124 | Any block submissions where `verify_bid_value` fails should be considered invalid and **MUST** not be served to proposers requesting bids. 125 | 126 | ### Bidding 127 | 128 | After a relay has verified the execution payload (including any blobs) is correctly constructed, the relay **MUST** additionally return any `KZGCommitments` for those blobs 129 | in the `SignedBuilderBid`. 130 | 131 | ### Revealing the `ExecutionPayload` 132 | 133 | #### Blinded block processing 134 | 135 | Relays verify signed blinded beacon blocks as before, with the additional requirement 136 | that they must construct `BlobSidecar` objects with the KZG commitment inclusion 137 | proof before gossiping the blobs alongside the unblinded block. 138 | 139 | * NOTE: the [standard `beacon-apis` implemented by consensus clients](https://github.com/ethereum/beacon-APIs) will handle the construction of the `BlobSidecar` 140 | object following the block broadcast endpoints defined there. 141 | -------------------------------------------------------------------------------- /specs/electra/builder.md: -------------------------------------------------------------------------------- 1 | # Electra -- Builder Specification 2 | 3 | ## Introduction 4 | 5 | This is the modification of the builder specification accompanying the Electra upgrade. 6 | 7 | The behavior defined by the specification is consistent with previous forks except for the changes to the types given below. 8 | 9 | ## Containers 10 | 11 | ### Extended containers 12 | 13 | #### `BuilderBid` 14 | 15 | Note: `SignedBuilderBid` is updated indirectly. 16 | 17 | ```python 18 | class BuilderBid(Container): 19 | header: ExecutionPayloadHeader 20 | blob_kzg_commitments: List[KZGCommitment, MAX_BLOB_COMMITMENTS_PER_BLOCK] 21 | execution_requests: ExecutionRequests # [New in Electra] 22 | value: uint256 23 | pubkey: BLSPubkey 24 | ``` 25 | 26 | #### `BlindedBeaconBlockBody` 27 | 28 | Note: `BlindedBeaconBlock` and `SignedBlindedBeaconBlock` types are updated indirectly. 29 | 30 | ```python 31 | class BlindedBeaconBlockBody(Container): 32 | randao_reveal: BLSSignature 33 | eth1_data: Eth1Data 34 | graffiti: Bytes32 35 | proposer_slashings: List[ProposerSlashing, MAX_PROPOSER_SLASHINGS] 36 | attester_slashings: List[AttesterSlashing, MAX_ATTESTER_SLASHINGS_ELECTRA] # [Modified in Electra:EIP7549] 37 | attestations: List[Attestation, MAX_ATTESTATIONS_ELECTRA] # [Modified in Electra:EIP7549] 38 | deposits: List[Deposit, MAX_DEPOSITS] 39 | voluntary_exits: List[SignedVoluntaryExit, MAX_VOLUNTARY_EXITS] 40 | sync_aggregate: SyncAggregate 41 | execution_payload_header: ExecutionPayloadHeader 42 | bls_to_execution_changes: List[SignedBLSToExecutionChange, MAX_BLS_TO_EXECUTION_CHANGES] 43 | blob_kzg_commitments: List[KZGCommitment, MAX_BLOB_COMMITMENTS_PER_BLOCK] 44 | execution_requests: ExecutionRequests # [New in Electra] 45 | ``` 46 | 47 | [execution-payload-and-blobs-bundle-deneb]: ../deneb/builder.md#executionpayloadandblobsbundle 48 | -------------------------------------------------------------------------------- /specs/fulu/builder.md: -------------------------------------------------------------------------------- 1 | # Fulu -- Builder Specification 2 | 3 | ## Table of Contents 4 | 5 | 6 | 7 | 8 | - [Introduction](#introduction) 9 | - [Containers](#containers) 10 | - [Extended containers](#extended-containers) 11 | - [`BlobsBundle`](#blobsbundle) 12 | - [`ExecutionPayloadHeader`](#executionpayloadheader) 13 | - [`ExecutionPayloadAndBlobsBundle`](#executionpayloadandblobsbundle) 14 | 15 | 16 | 17 | ## Introduction 18 | 19 | This is the modification of the builder specification accompanying the Fulu upgrade. 20 | 21 | ## Containers 22 | 23 | ### Extended containers 24 | 25 | #### `BlobsBundle` 26 | 27 | ```python 28 | class BlobsBundle(Container): 29 | commitments: List[KZGCommitment, MAX_BLOB_COMMITMENTS_PER_BLOCK] 30 | # [Modified in Fulu:EIP7594] 31 | proofs: List[KZGProof, FIELD_ELEMENTS_PER_EXT_BLOB * MAX_BLOB_COMMITMENTS_PER_BLOCK] 32 | blobs: List[Blob, MAX_BLOB_COMMITMENTS_PER_BLOCK] 33 | ``` 34 | 35 | ### `ExecutionPayloadHeader` 36 | 37 | See [`ExecutionPayloadHeader`](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/beacon-chain.md#executionpayloadheader) in Deneb consensus specs. 38 | 39 | #### `ExecutionPayloadAndBlobsBundle` 40 | 41 | ```python 42 | class ExecutionPayloadAndBlobsBundle(Container): 43 | execution_payload: ExecutionPayload 44 | blobs_bundle: BlobsBundle # [Modified in Fulu:EIP7594] 45 | ``` -------------------------------------------------------------------------------- /spellcheck.yaml: -------------------------------------------------------------------------------- 1 | matrix: 2 | - name: markdown 3 | sources: 4 | - '**/*.md|!beacon-apis/**' 5 | aspell: 6 | lang: en 7 | d: en_US 8 | ignore-case: true 9 | run-together: true 10 | run-together-min: 2 11 | run-together-limit: 256 12 | dictionary: 13 | wordlists: 14 | - wordlist.txt 15 | encoding: utf-8 16 | pipeline: 17 | - pyspelling.filters.markdown: 18 | - pyspelling.filters.html: 19 | comments: false 20 | ignores: 21 | - code 22 | - pre 23 | - name: yaml schemas 24 | sources: 25 | - '**/*.yaml|!beacon-apis/**|!spellcheck.yaml' 26 | aspell: 27 | lang: en 28 | d: en_US 29 | ignore-case: true 30 | run-together: true 31 | run-together-min: 2 32 | run-together-limit: 256 33 | dictionary: 34 | wordlists: 35 | - wordlist.txt 36 | encoding: utf-8 37 | pipeline: null 38 | -------------------------------------------------------------------------------- /types/bellatrix/bid.yaml: -------------------------------------------------------------------------------- 1 | Bellatrix: 2 | BuilderBidCommon: 3 | type: object 4 | required: [value, pubkey] 5 | properties: 6 | value: 7 | $ref: "../../beacon-apis/types/primitive.yaml#/Uint256" 8 | description: "Payment in wei that will be paid to the `fee_recipient` account." 9 | pubkey: 10 | $ref: "../../beacon-apis/types/primitive.yaml#/Pubkey" 11 | description: "BLS public key of builder." 12 | 13 | BuilderBid: 14 | description: "The `BuilderBid` object from the Builder API Bellatrix spec." 15 | allOf: 16 | - type: object 17 | required: [header] 18 | properties: 19 | header: 20 | $ref: "../../beacon-apis/types/bellatrix/execution_payload.yaml#/Bellatrix/ExecutionPayloadHeader" 21 | description: "`ExecutionPayloadHeader` to use in block proposal." 22 | - $ref: '#/Bellatrix/BuilderBidCommon' 23 | 24 | SignedBuilderBid: 25 | type: object 26 | description: "The `SignedBuilderBid` object from the Builder API spec." 27 | required: [message, signature] 28 | properties: 29 | message: 30 | $ref: "#/Bellatrix/BuilderBid" 31 | signature: 32 | $ref: "../../beacon-apis/types/primitive.yaml#/Signature" 33 | -------------------------------------------------------------------------------- /types/capella/bid.yaml: -------------------------------------------------------------------------------- 1 | Capella: 2 | BuilderBid: 3 | description: "The `BuilderBid` object from the Builder API Capella spec." 4 | allOf: 5 | - type: object 6 | required: [header] 7 | properties: 8 | header: 9 | $ref: "../../beacon-apis/types/capella/execution_payload.yaml#/Capella/ExecutionPayloadHeader" 10 | description: "`ExecutionPayloadHeader` to use in block proposal." 11 | - $ref: '../bellatrix/bid.yaml#/Bellatrix/BuilderBidCommon' 12 | 13 | SignedBuilderBid: 14 | type: object 15 | description: "The `SignedBuilderBid` object from the Builder API spec." 16 | required: [message, signature] 17 | properties: 18 | message: 19 | $ref: "#/Capella/BuilderBid" 20 | signature: 21 | $ref: "../../beacon-apis/types/primitive.yaml#/Signature" 22 | -------------------------------------------------------------------------------- /types/deneb/bid.yaml: -------------------------------------------------------------------------------- 1 | Deneb: 2 | BuilderBid: 3 | description: "The `BuilderBid` object from the Builder API Deneb spec." 4 | allOf: 5 | - type: object 6 | required: [header, blob_kzg_commitments] 7 | properties: 8 | header: 9 | $ref: "../../beacon-apis/types/deneb/execution_payload.yaml#/Deneb/ExecutionPayloadHeader" 10 | description: "`ExecutionPayloadHeader` to use in block proposal." 11 | blob_kzg_commitments: 12 | type: array 13 | items: 14 | $ref: '../../beacon-apis/types/primitive.yaml#/KZGCommitment' 15 | minItems: 0 16 | maxItems: 4096 17 | description: "the `KZGCommitment`s for the associated blobs for this `header`" 18 | - $ref: '../bellatrix/bid.yaml#/Bellatrix/BuilderBidCommon' 19 | 20 | SignedBuilderBid: 21 | type: object 22 | description: "The `SignedBuilderBid` object from the Builder API spec." 23 | required: [message, signature] 24 | properties: 25 | message: 26 | $ref: "#/Deneb/BuilderBid" 27 | signature: 28 | $ref: "../../beacon-apis/types/primitive.yaml#/Signature" 29 | -------------------------------------------------------------------------------- /types/deneb/blobs_bundle.yaml: -------------------------------------------------------------------------------- 1 | Deneb: 2 | BlobsBundle: 3 | type: object 4 | description: "The `BlobsBundle` object from the CL Deneb spec" 5 | required: [blobs, commitments, proofs] 6 | properties: 7 | blobs: 8 | type: array 9 | items: 10 | $ref: "../../beacon-apis/types/primitive.yaml#/Blob" 11 | minItems: 0 12 | maxItems: 4096 13 | commitments: 14 | type: array 15 | items: 16 | $ref: '../../beacon-apis/types/primitive.yaml#/KZGCommitment' 17 | minItems: 0 18 | maxItems: 4096 19 | proofs: 20 | type: array 21 | items: 22 | $ref: '../../beacon-apis/types/primitive.yaml#/KZGProof' 23 | minItems: 0 24 | maxItems: 4096 25 | -------------------------------------------------------------------------------- /types/deneb/execution_payload_and_blobs_bundle.yaml: -------------------------------------------------------------------------------- 1 | Deneb: 2 | ExecutionPayloadAndBlobsBundle: 3 | type: object 4 | description: "A wrapper object containing the ExecutionPayload and the BlobsBundle" 5 | required: [execution_payload, blobs_bundle] 6 | properties: 7 | execution_payload: 8 | $ref: '../../beacon-apis/types/deneb/execution_payload.yaml#/Deneb/ExecutionPayload' 9 | blobs_bundle: 10 | $ref: "./blobs_bundle.yaml#/Deneb/BlobsBundle" 11 | -------------------------------------------------------------------------------- /types/electra/bid.yaml: -------------------------------------------------------------------------------- 1 | Electra: 2 | BuilderBid: 3 | description: "The `BuilderBid` object from the Builder API Deneb spec." 4 | allOf: 5 | - type: object 6 | required: [header, blob_kzg_commitments, execution_requests] 7 | properties: 8 | header: 9 | $ref: "../../beacon-apis/types/deneb/execution_payload.yaml#/Deneb/ExecutionPayloadHeader" 10 | description: "`ExecutionPayloadHeader` to use in block proposal." 11 | blob_kzg_commitments: 12 | type: array 13 | items: 14 | $ref: '../../beacon-apis/types/primitive.yaml#/KZGCommitment' 15 | minItems: 0 16 | maxItems: 4096 17 | description: "the `KZGCommitment`s for the associated blobs for this `header`" 18 | execution_requests: 19 | $ref: "../../beacon-apis/types/electra/execution_requests.yaml#/Electra/ExecutionRequests" 20 | description: "`ExecutionRequests` to include in block proposal." 21 | - $ref: '../bellatrix/bid.yaml#/Bellatrix/BuilderBidCommon' 22 | 23 | SignedBuilderBid: 24 | type: object 25 | description: "The `SignedBuilderBid` object from the Builder API spec." 26 | required: [message, signature] 27 | properties: 28 | message: 29 | $ref: "#/Electra/BuilderBid" 30 | signature: 31 | $ref: "../../beacon-apis/types/primitive.yaml#/Signature" 32 | -------------------------------------------------------------------------------- /types/fulu/blobs_bundle.yaml: -------------------------------------------------------------------------------- 1 | Fulu: 2 | BlobsBundle: 3 | type: object 4 | description: "The `BlobsBundle` object from the CL Fulu spec" 5 | required: [blobs, commitments, proofs] 6 | properties: 7 | blobs: 8 | type: array 9 | items: 10 | $ref: "../../beacon-apis/types/primitive.yaml#/Blob" 11 | minItems: 0 12 | maxItems: 4096 13 | commitments: 14 | type: array 15 | items: 16 | $ref: "../../beacon-apis/types/primitive.yaml#/KZGCommitment" 17 | minItems: 0 18 | maxItems: 4096 19 | proofs: 20 | type: array 21 | items: 22 | $ref: "../../beacon-apis/types/primitive.yaml#/KZGProof" 23 | minItems: 0 24 | maxItems: 33554432 # 8192 (FIELD_ELEMENTS_PER_EXT_BLOB) * 4096 (MAX_BLOB_COMMITMENTS_PER_BLOCK) 25 | -------------------------------------------------------------------------------- /types/fulu/execution_payload_and_blobs_bundle.yaml: -------------------------------------------------------------------------------- 1 | Fulu: 2 | ExecutionPayloadAndBlobsBundle: 3 | type: object 4 | description: "A wrapper object containing the ExecutionPayload and the BlobsBundle" 5 | required: [execution_payload, blobs_bundle] 6 | properties: 7 | execution_payload: 8 | $ref: "../../beacon-apis/types/deneb/execution_payload.yaml#/Deneb/ExecutionPayload" 9 | blobs_bundle: 10 | $ref: "./blobs_bundle.yaml#/Fulu/BlobsBundle" 11 | -------------------------------------------------------------------------------- /types/http.yaml: -------------------------------------------------------------------------------- 1 | InternalError: 2 | description: "Builder node internal error." 3 | content: 4 | application/json: 5 | schema: 6 | type: object 7 | required: [code, message] 8 | properties: 9 | code: 10 | description: "Either specific error code in case of invalid request or http status code" 11 | type: number 12 | example: 404 13 | message: 14 | description: "Message describing error" 15 | type: string 16 | stacktraces: 17 | description: "Optional stacktraces, sent when node is in debug mode" 18 | type: array 19 | items: 20 | type: string 21 | example: 22 | code: 500 23 | message: "Internal server error" 24 | NotAcceptable: 25 | description: "Accepted media type is not supported." 26 | content: 27 | application/json: 28 | schema: 29 | type: object 30 | required: [code, message] 31 | properties: 32 | code: 33 | description: "The media type in \"Accept\" header is unsupported, and the request has been rejected. This occurs when the server cannot produce a response in the format accepted by the client." 34 | type: number 35 | example: 406 36 | message: 37 | description: "Message describing error" 38 | type: string 39 | stacktraces: 40 | description: "Optional stacktraces, sent when node is in debug mode" 41 | type: array 42 | items: 43 | type: string 44 | example: 45 | code: 406 46 | message: "Accepted media type not supported" 47 | UnsupportedMediaType: 48 | description: "Supplied content-type is not supported." 49 | content: 50 | application/json: 51 | schema: 52 | type: object 53 | required: [code, message] 54 | properties: 55 | code: 56 | description: "The media type in \"Content-Type\" header is unsupported, and the request has been rejected. This occurs when a HTTP request supplies a payload in a content-type that the server is not able to handle." 57 | type: number 58 | example: 415 59 | message: 60 | description: "Message describing error" 61 | type: string 62 | stacktraces: 63 | description: "Optional stacktraces, sent when node is in debug mode" 64 | type: array 65 | items: 66 | type: string 67 | example: 68 | code: 415 69 | message: "Cannot read the supplied content type." 70 | -------------------------------------------------------------------------------- /wordlist.txt: -------------------------------------------------------------------------------- 1 | apis 2 | bellatrix 3 | bls 4 | bn 5 | bool 6 | capella 7 | cli 8 | dev 9 | eth 10 | http 11 | https 12 | json 13 | kzg 14 | mev 15 | nodejs 16 | npm 17 | oapi 18 | openapi 19 | ssz 20 | tbh 21 | ui 22 | uint 23 | unblind 24 | unblinded 25 | url 26 | validators 27 | validator's 28 | vc 29 | wei 30 | EIP 31 | Fulu 32 | fulu 33 | submitBlindedBlockV --------------------------------------------------------------------------------