├── .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
--------------------------------------------------------------------------------