diff --git a/.gitignore b/.gitignore index 04b23911..f0c8d015 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea deploy +node_modules diff --git a/CHANGES.md b/CHANGES.md index c21f3cc8..d4d7a228 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,29 +7,32 @@ These endpoints have been added or updated since the last release. There are likely to be descriptions etc outside of the list below, but new query parameters, changes to headers, new endpoints should be listed. -| Endpoint | [Lighthouse](https://github.com/sigp/lighthouse) | [Lodestar](https://github.com/ChainSafe/lodestar) | [Nimbus](https://github.com/status-im/nimbus-eth2) | [Prysm](https://github.com/prysmaticlabs/prysm) | [Teku](https://github.com/ConsenSys/teku) | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------|---------------------------------------------------|----------------------------------------------------|-------------------------------------------------|-------------------------------------------| -| [#131](https://github.com/ethereum/beacon-APIs/pull/131) [#254](https://github.com/ethereum/beacon-APIs/pull/254) NEW `/eth/v1/validator/liveness/{epoch}` | | | | | | -| [#221](https://github.com/ethereum/beacon-APIs/pull/221) `/eth/v1/validator/blinded_blocks/{slot}` added header `ethConsensusVersion` | | | | | | -| [#232](https://github.com/ethereum/beacon-APIs/pull/232) NEW `/eth/v1/debug/fork_choice` | | | | | | -| [#241](https://github.com/ethereum/beacon-APIs/pull/241) NEW `/eth/v1/beacon/blinded_blocks/{block_id}` | | | | | | -| [#242](https://github.com/ethereum/beacon-APIs/pull/242) NEW `/eth/v1/beacon/states/{state_id}/randao` | | | | | | -| [#245](https://github.com/ethereum/beacon-APIs/pull/245) NEW `/eth/v1/beacon/deposit_snapshot` | | | | | | -| [#247](https://github.com/ethereum/beacon-APIs/pull/247) NEW `/eth/v2/beacon/light_client/bootstrap/{block_root}` | | | | | | -| [#247](https://github.com/ethereum/beacon-APIs/pull/247) NEW `/eth/v2/beacon/light_client/updates` | | | | | | -| [#247](https://github.com/ethereum/beacon-APIs/pull/247) NEW `/eth/v2/beacon/light_client/updates` | | | | | | -| [#247](https://github.com/ethereum/beacon-APIs/pull/247) NEW `/eth/v1/beacon/light_client/finality_update` | | | | | | -| [#247](https://github.com/ethereum/beacon-APIs/pull/247) NEW `/eth/v1/beacon/light_client/optimistic_update` | | | | | | -| [#247](https://github.com/ethereum/beacon-APIs/pull/247) NEW `/eth/v1/events:light_client_finality_update` | | | | | | -| [#247](https://github.com/ethereum/beacon-APIs/pull/247) NEW `/eth/v1/events:light_client_optimistic_update` | | | | | | -| [#248](https://github.com/ethereum/beacon-APIs/pull/248) [#248](https://github.com/ethereum/beacon-APIs/pull/248) NEW `/eth/v1/beacon/pool/bls_to_execution_changes` | | | | | | -| [#248](https://github.com/ethereum/beacon-APIs/pull/248) add _Capella Types_ | | | | | | -| [#249](https://github.com/ethereum/beacon-APIs/pull/249) `/eth/v1/beacon/blinded_blocks/{block_id}` query parameter `skip_randao_verification` | | | | | | -| [#251](https://github.com/ethereum/beacon-APIs/pull/251) `/eth/v1/node/health` query parameter `syncing_status` | | | | | | -| [#254](https://github.com/ethereum/beacon-APIs/pull/254) add `finalized` to metadata for chain objects | | | | | | -| [#260](https://github.com/ethereum/beacon-APIs/pull/260) NEW `/eth/v1/beacon/rewards/blocks/{block_id}` | | | | | | -| [#260](https://github.com/ethereum/beacon-APIs/pull/260) NEW `/eth/v1/beacon/rewards/attestations/{epoch}` | | | | | | -| [#262](https://github.com/ethereum/beacon-APIs/pull/262) NEW `/eth/v1/beacon/rewards/sync_committee/{block_id}` | | | | | | +| Endpoint | [Lighthouse](https://github.com/sigp/lighthouse) | [Lodestar](https://github.com/ChainSafe/lodestar) | [Nimbus](https://github.com/status-im/nimbus-eth2) | [Prysm](https://github.com/prysmaticlabs/prysm) | [Teku](https://github.com/ConsenSys/teku) | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------|---------------------------------------------------|----------------------------------------------------|-------------------------------------------------|-------------------------------------------| +| [#290](https://github.com/ethereum/beacon-APIs/pull/290) `/eth/v1/node/syncing` added `el_offline` to response | | | | | | +| [#131](https://github.com/ethereum/beacon-APIs/pull/131) [#254](https://github.com/ethereum/beacon-APIs/pull/254) NEW `/eth/v1/validator/liveness/{epoch}` | | | | | | +| [#221](https://github.com/ethereum/beacon-APIs/pull/221) `/eth/v1/validator/blinded_blocks/{slot}` added header `ethConsensusVersion` | | | | | | +| [#224](https://github.com/ethereum/beacon-APIs/pull/224) NEW `/eth/v1/validator/beacon_committee_selections | | | | | | +| [#224](https://github.com/ethereum/beacon-APIs/pull/224) NEW `/eth/v1/validator/sync_committee_selections | | | | | | +| [#232](https://github.com/ethereum/beacon-APIs/pull/232) NEW `/eth/v1/debug/fork_choice` | | | | | | +| [#241](https://github.com/ethereum/beacon-APIs/pull/241) NEW `/eth/v1/beacon/blinded_blocks/{block_id}` | | | | | | +| [#242](https://github.com/ethereum/beacon-APIs/pull/242) NEW `/eth/v1/beacon/states/{state_id}/randao` | | | | | | +| [#245](https://github.com/ethereum/beacon-APIs/pull/245) NEW `/eth/v1/beacon/deposit_snapshot` | | | | | | +| [#247](https://github.com/ethereum/beacon-APIs/pull/247) NEW `/eth/v2/beacon/light_client/bootstrap/{block_root}` | | | | | | +| [#247](https://github.com/ethereum/beacon-APIs/pull/247) NEW `/eth/v2/beacon/light_client/updates` | | | | | | +| [#247](https://github.com/ethereum/beacon-APIs/pull/247) NEW `/eth/v2/beacon/light_client/updates` | | | | | | +| [#247](https://github.com/ethereum/beacon-APIs/pull/247) NEW `/eth/v1/beacon/light_client/finality_update` | | | | | | +| [#247](https://github.com/ethereum/beacon-APIs/pull/247) NEW `/eth/v1/beacon/light_client/optimistic_update` | | | | | | +| [#247](https://github.com/ethereum/beacon-APIs/pull/247) NEW `/eth/v1/events:light_client_finality_update` | | | | | | +| [#247](https://github.com/ethereum/beacon-APIs/pull/247) NEW `/eth/v1/events:light_client_optimistic_update` | | | | | | +| [#248](https://github.com/ethereum/beacon-APIs/pull/248) [#248](https://github.com/ethereum/beacon-APIs/pull/248) NEW `/eth/v1/beacon/pool/bls_to_execution_changes` | | | | | | +| [#248](https://github.com/ethereum/beacon-APIs/pull/248) add _Capella Types_ | | | | | | +| [#249](https://github.com/ethereum/beacon-APIs/pull/249) `/eth/v1/beacon/blinded_blocks/{block_id}` query parameter `skip_randao_verification` | | | | | | +| [#251](https://github.com/ethereum/beacon-APIs/pull/251) `/eth/v1/node/health` query parameter `syncing_status` | | | | | | +| [#254](https://github.com/ethereum/beacon-APIs/pull/254) add `finalized` to metadata for chain objects | | | | | | +| [#260](https://github.com/ethereum/beacon-APIs/pull/260) NEW `/eth/v1/beacon/rewards/blocks/{block_id}` | | | | | | +| [#260](https://github.com/ethereum/beacon-APIs/pull/260) NEW `/eth/v1/beacon/rewards/attestations/{epoch}` | | | | | | +| [#262](https://github.com/ethereum/beacon-APIs/pull/262) NEW `/eth/v1/beacon/rewards/sync_committee/{block_id}` | | | | | | The Following are no longer in the Standard API, removed since the latest version. diff --git a/README.md b/README.md index 191f6d71..429b75c3 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ API browser: [https://ethereum.github.io/beacon-APIs/](https://ethereum.github.i ## Outline This document outlines an application programming interface (API) which is exposed by a beacon node implementation - which aims to facilitate [Phase 0](https://github.com/ethereum/consensus-specs#phase-0) of the Etheruem consensus layer. + which aims to facilitate [Phase 0](https://github.com/ethereum/consensus-specs#phase-0) of the Ethereum consensus layer. The API is a REST interface, accessed via HTTP. The API should not, unless protected by additional security layers, be exposed to the public Internet as the API includes multiple endpoints which could open your node to denial-of-service (DoS) attacks through endpoints triggering heavy processing. Currently, the only supported return data type is JSON. diff --git a/apis/beacon/light_client/bootstrap.yaml b/apis/beacon/light_client/bootstrap.yaml index e0dfcab0..0e206ae5 100644 --- a/apis/beacon/light_client/bootstrap.yaml +++ b/apis/beacon/light_client/bootstrap.yaml @@ -2,10 +2,10 @@ get: operationId: getLightClientBootstrap summary: Get `LightClientBootstrap` structure for a requested block root description: | - Requests the [`LightClientBootstrap`](https://github.com/ethereum/consensus-specs/blob/v1.2.0-rc.3/specs/altair/light-client/sync-protocol.md#lightclientbootstrap) structure corresponding to a given post-Altair beacon block root. + Requests the [`LightClientBootstrap`](https://github.com/ethereum/consensus-specs/blob/v1.3.0-rc.2/specs/altair/light-client/sync-protocol.md#lightclientbootstrap) structure corresponding to a given post-Altair beacon block root. Depending on the `Accept` header it can be returned either as JSON or SSZ-serialized bytes. - Servers SHOULD provide results as defined in [`create_light_client_bootstrap`](https://github.com/ethereum/consensus-specs/blob/v1.2.0-rc.3/specs/altair/light-client/full-node.md#create_light_client_bootstrap). To fulfill a request, the requested block's post state needs to be known. + Servers SHOULD provide results as defined in [`create_light_client_bootstrap`](https://github.com/ethereum/consensus-specs/blob/v1.3.0-rc.2/specs/altair/light-client/full-node.md#create_light_client_bootstrap). To fulfill a request, the requested block's post state needs to be known. tags: - Beacon parameters: @@ -28,7 +28,9 @@ get: version: $ref: '../../../beacon-node-oapi.yaml#/components/schemas/ConsensusVersion' data: - $ref: '../../../beacon-node-oapi.yaml#/components/schemas/Altair.LightClientBootstrap' + oneOf: + - $ref: '../../../beacon-node-oapi.yaml#/components/schemas/Altair.LightClientBootstrap' + - $ref: '../../../beacon-node-oapi.yaml#/components/schemas/Capella.LightClientBootstrap' application/octet-stream: schema: description: "SSZ serialized `LightClientBootstrap` bytes. Use Accept header to choose this response type" diff --git a/apis/beacon/light_client/finality_update.yaml b/apis/beacon/light_client/finality_update.yaml index 9b0a1f40..83b42ee2 100644 --- a/apis/beacon/light_client/finality_update.yaml +++ b/apis/beacon/light_client/finality_update.yaml @@ -2,10 +2,10 @@ get: operationId: getLightClientFinalityUpdate summary: Get the latest known `LightClientFinalityUpdate` description: | - Requests the latest [`LightClientFinalityUpdate`](https://github.com/ethereum/consensus-specs/blob/v1.2.0-rc.3/specs/altair/light-client/sync-protocol.md#lightclientfinalityupdate) known by the server. + Requests the latest [`LightClientFinalityUpdate`](https://github.com/ethereum/consensus-specs/blob/v1.3.0-rc.2/specs/altair/light-client/sync-protocol.md#lightclientfinalityupdate) known by the server. Depending on the `Accept` header it can be returned either as JSON or SSZ-serialized bytes. - Servers SHOULD provide results as defined in [`create_light_client_finality_update`](https://github.com/ethereum/consensus-specs/blob/v1.2.0-rc.3/specs/altair/light-client/full-node.md#create_light_client_finality_update). + Servers SHOULD provide results as defined in [`create_light_client_finality_update`](https://github.com/ethereum/consensus-specs/blob/v1.3.0-rc.2/specs/altair/light-client/full-node.md#create_light_client_finality_update). tags: - Beacon responses: @@ -23,7 +23,9 @@ get: version: $ref: '../../../beacon-node-oapi.yaml#/components/schemas/ConsensusVersion' data: - $ref: '../../../beacon-node-oapi.yaml#/components/schemas/Altair.LightClientFinalityUpdate' + oneOf: + - $ref: '../../../beacon-node-oapi.yaml#/components/schemas/Altair.LightClientFinalityUpdate' + - $ref: '../../../beacon-node-oapi.yaml#/components/schemas/Capella.LightClientFinalityUpdate' application/octet-stream: schema: description: "SSZ serialized `LightClientFinalityUpdate` bytes. Use Accept header to choose this response type" diff --git a/apis/beacon/light_client/optimistic_update.yaml b/apis/beacon/light_client/optimistic_update.yaml index b3bfc866..45e47755 100644 --- a/apis/beacon/light_client/optimistic_update.yaml +++ b/apis/beacon/light_client/optimistic_update.yaml @@ -2,10 +2,10 @@ get: operationId: getLightClientOptimisticUpdate summary: Get the latest known `LightClientOptimisticUpdate` description: | - Requests the latest [`LightClientOptimisticUpdate`](https://github.com/ethereum/consensus-specs/blob/v1.2.0-rc.3/specs/altair/light-client/sync-protocol.md#lightclientoptimisticupdate) known by the server. + Requests the latest [`LightClientOptimisticUpdate`](https://github.com/ethereum/consensus-specs/blob/v1.3.0-rc.2/specs/altair/light-client/sync-protocol.md#lightclientoptimisticupdate) known by the server. Depending on the `Accept` header it can be returned either as JSON or SSZ-serialized bytes. - Servers SHOULD provide results as defined in [`create_light_client_optimistic_update`](https://github.com/ethereum/consensus-specs/blob/v1.2.0-rc.3/specs/altair/light-client/full-node.md#create_light_client_optimistic_update). + Servers SHOULD provide results as defined in [`create_light_client_optimistic_update`](https://github.com/ethereum/consensus-specs/blob/v1.3.0-rc.2/specs/altair/light-client/full-node.md#create_light_client_optimistic_update). tags: - Beacon responses: @@ -23,7 +23,9 @@ get: version: $ref: '../../../beacon-node-oapi.yaml#/components/schemas/ConsensusVersion' data: - $ref: '../../../beacon-node-oapi.yaml#/components/schemas/Altair.LightClientOptimisticUpdate' + oneOf: + - $ref: '../../../beacon-node-oapi.yaml#/components/schemas/Altair.LightClientOptimisticUpdate' + - $ref: '../../../beacon-node-oapi.yaml#/components/schemas/Capella.LightClientOptimisticUpdate' application/octet-stream: schema: description: "SSZ serialized `LightClientOptimisticUpdate` bytes. Use Accept header to choose this response type" diff --git a/apis/beacon/light_client/updates.yaml b/apis/beacon/light_client/updates.yaml index ab6296bf..19521eab 100644 --- a/apis/beacon/light_client/updates.yaml +++ b/apis/beacon/light_client/updates.yaml @@ -2,10 +2,10 @@ get: operationId: getLightClientUpdatesByRange summary: Get `LightClientUpdate` instances in a requested sync committee period range description: | - Requests the [`LightClientUpdate`](https://github.com/ethereum/consensus-specs/blob/v1.2.0-rc.3/specs/altair/light-client/sync-protocol.md#lightclientupdate) instances in the sync committee period range `[start_period, start_period + count)`, leading up to the current head sync committee period as selected by fork choice. + Requests the [`LightClientUpdate`](https://github.com/ethereum/consensus-specs/blob/v1.3.0-rc.2/specs/altair/light-client/sync-protocol.md#lightclientupdate) instances in the sync committee period range `[start_period, start_period + count)`, leading up to the current head sync committee period as selected by fork choice. Depending on the `Accept` header they can be returned either as JSON or SSZ-serialized bytes. - Servers SHOULD provide results as defined in [`create_light_client_update`](https://github.com/ethereum/consensus-specs/blob/v1.2.0-rc.3/specs/altair/light-client/full-node.md#create_light_client_update). They MUST respond with at least the earliest known result within the requested range, and MUST send results in consecutive order (by period). The response MUST NOT contain more than [`min(MAX_REQUEST_LIGHT_CLIENT_UPDATES, count)`](https://github.com/ethereum/consensus-specs/blob/v1.2.0-rc.3/specs/altair/light-client/p2p-interface.md#configuration) results. + Servers SHOULD provide results as defined in [`create_light_client_update`](https://github.com/ethereum/consensus-specs/blob/v1.3.0-rc.2/specs/altair/light-client/full-node.md#create_light_client_update). They MUST respond with at least the earliest known result within the requested range, and MUST send results in consecutive order (by period). The response MUST NOT contain more than [`min(MAX_REQUEST_LIGHT_CLIENT_UPDATES, count)`](https://github.com/ethereum/consensus-specs/blob/v1.3.0-rc.2/specs/altair/light-client/p2p-interface.md#configuration) results. tags: - Beacon parameters: @@ -33,7 +33,9 @@ get: version: $ref: '../../../beacon-node-oapi.yaml#/components/schemas/ConsensusVersion' data: - $ref: '../../../beacon-node-oapi.yaml#/components/schemas/Altair.LightClientUpdate' + oneOf: + - $ref: '../../../beacon-node-oapi.yaml#/components/schemas/Altair.LightClientUpdate' + - $ref: '../../../beacon-node-oapi.yaml#/components/schemas/Capella.LightClientUpdate' application/octet-stream: schema: description: | @@ -53,10 +55,11 @@ get: Per `context = compute_fork_digest(fork_version, genesis_validators_root)`: - | `fork_version` | Response chunk SSZ type | - | -------------------------------------------- | ------------------------------------ | - | `GENESIS_FORK_VERSION` | n/a | - | `ALTAIR_FORK_VERSION` and later | `altair.LightClientUpdate` | + | `fork_version` | Response chunk SSZ type | + | ------------------------------------------------------------------- | ------------------------------------- | + | `GENESIS_FORK_VERSION` | n/a | + | `ALTAIR_FORK_VERSION` through `BELLATRIX_FORK_VERSION` | `altair.LightClientUpdate` | + | `CAPELLA_FORK_VERSION` and later | `capella.LightClientUpdate` | "400": description: Malformed or missing request parameter content: diff --git a/apis/beacon/rewards/attestations.yaml b/apis/beacon/rewards/attestations.yaml index 8bfdd1b7..5644c8d7 100644 --- a/apis/beacon/rewards/attestations.yaml +++ b/apis/beacon/rewards/attestations.yaml @@ -38,9 +38,7 @@ post: finalized: $ref: "../../../beacon-node-oapi.yaml#/components/schemas/Finalized" data: - type: array $ref: "../../../beacon-node-oapi.yaml#/components/schemas/AttestationsRewards" - "400": description: "Invalid get attestations rewards request" content: diff --git a/apis/node/syncing.yaml b/apis/node/syncing.yaml index 4ca7f6c5..a2f07d71 100644 --- a/apis/node/syncing.yaml +++ b/apis/node/syncing.yaml @@ -33,6 +33,9 @@ allOf: - type: boolean - description: "Set to true if the node is optimistically tracking head." - + el_offline: + allOf: + - type: boolean + - description: "Set to true if the execution client is offline." "500": $ref: '../../beacon-node-oapi.yaml#/components/responses/InternalError' diff --git a/apis/validator/beacon_committee_selections.yaml b/apis/validator/beacon_committee_selections.yaml new file mode 100644 index 00000000..c906012e --- /dev/null +++ b/apis/validator/beacon_committee_selections.yaml @@ -0,0 +1,43 @@ +post: + operationId: "submitBeaconCommitteeSelections" + summary: Determine if a distributed validator has been selected to aggregate attestations + description: | + This endpoint should be used by a validator client running as part of a distributed validator cluster, and is + implemented by a distributed validator middleware client. This endpoint is used to exchange partial + selection proofs for combined/aggregated selection proofs to allow a validator client + to correctly determine if one of its validators has been selected to perform an aggregation duty in this slot. + Consensus clients need not support this endpoint and may return a 501. + tags: + - Validator + requestBody: + content: + application/json: + schema: + title: BeaconCommitteeSelectionRequest + type: array + items: + $ref: '../../beacon-node-oapi.yaml#/components/schemas/BeaconCommitteeSelection' + + responses: + "200": + description: | + Returns the threshold aggregated beacon committee selection proofs. + content: + application/json: + schema: + title: BeaconCommitteeSelectionResponse + type: object + properties: + data: + type: array + items: + $ref: '../../beacon-node-oapi.yaml#/components/schemas/BeaconCommitteeSelection' + + "400": + $ref: '../../beacon-node-oapi.yaml#/components/responses/InvalidRequest' + "500": + $ref: '../../beacon-node-oapi.yaml#/components/responses/InternalError' + "501": + $ref: '../../beacon-node-oapi.yaml#/components/responses/NotImplementedError' + "503": + $ref: '../../beacon-node-oapi.yaml#/components/responses/CurrentlySyncing' diff --git a/apis/validator/sync_committee_selections.yaml b/apis/validator/sync_committee_selections.yaml new file mode 100644 index 00000000..0b26fb0b --- /dev/null +++ b/apis/validator/sync_committee_selections.yaml @@ -0,0 +1,41 @@ +post: + operationId: "submitSyncCommitteeSelections" + summary: Determine if a distributed validator has been selected to make a sync committee contribution + description: | + Submit sync committee selections to a DVT middleware client. It returns the threshold aggregated sync + committee selection. This endpoint should be used by a validator client running as part of a distributed + validator cluster, and is implemented by a distributed validator middleware client. This endpoint is + used to exchange partial selection proof slot signatures for combined/aggregated selection proofs to + allow a validator client to correctly determine if one of its validators has been selected to perform + a sync committee contribution (sync aggregation) duty in this slot. Consensus clients need not support + this endpoint and may return a 501. + tags: + - Validator + requestBody: + content: + application/json: + schema: + title: SyncCommitteeSelectionRequest + type: array + items: + $ref: '../../beacon-node-oapi.yaml#/components/schemas/SyncCommitteeSelection' + responses: + "200": + description: | + Returns the threshold aggregated sync committee selection proofs. + content: + application/json: + schema: + title: SyncCommitteeSelectionResponse + type: object + properties: + data: + type: array + items: + $ref: '../../beacon-node-oapi.yaml#/components/schemas/SyncCommitteeSelection' + "400": + $ref: '../../beacon-node-oapi.yaml#/components/responses/InvalidRequest' + "500": + $ref: '../../beacon-node-oapi.yaml#/components/responses/InternalError' + "503": + $ref: '../../beacon-node-oapi.yaml#/components/responses/CurrentlySyncing' diff --git a/beacon-node-oapi.yaml b/beacon-node-oapi.yaml index 20851c02..8ee671dd 100644 --- a/beacon-node-oapi.yaml +++ b/beacon-node-oapi.yaml @@ -58,7 +58,7 @@ tags: description: Endpoints to query rewards and penalties for validators. - name: Experimental description: Endpoints that are not stable or fully implemented by each client. - + paths: /eth/v1/beacon/genesis: @@ -177,8 +177,12 @@ paths: $ref: "./apis/validator/beacon_committee_subscriptions.yaml" /eth/v1/validator/sync_committee_subscriptions: $ref: "./apis/validator/sync_committee_subscriptions.yaml" + /eth/v1/validator/beacon_committee_selections: + $ref: "./apis/validator/beacon_committee_selections.yaml" /eth/v1/validator/sync_committee_contribution: $ref: "./apis/validator/sync_committee_contribution.yaml" + /eth/v1/validator/sync_committee_selections: + $ref: "./apis/validator/sync_committee_selections.yaml" /eth/v1/validator/contribution_and_proofs: $ref: "./apis/validator/sync_committee_contribution_and_proof.yaml" /eth/v1/validator/prepare_beacon_proposer: @@ -232,6 +236,10 @@ components: $ref: './types/attestation.yaml#/Attestation' AttestationData: $ref: './types/attestation.yaml#/AttestationData' + BeaconCommitteeSelection: + $ref: './types/selection.yaml#/BeaconCommitteeSelection' + SyncCommitteeSelection: + $ref: './types/selection.yaml#/SyncCommitteeSelection' Fork: $ref: './types/misc.yaml#/Fork' Checkpoint: @@ -272,6 +280,10 @@ components: $ref: './types/http.yaml#/ErrorMessage' IndexedErrorMessage: $ref: './types/http.yaml#/IndexedErrorMessage' + Altair.BeaconBlock: + $ref: './types/altair/block.yaml#/Altair/BeaconBlock' + Altair.SignedBeaconBlock: + $ref: './types/altair/block.yaml#/Altair/SignedBeaconBlock' Altair.LightClientBootstrap: $ref: './types/altair/light_client.yaml#/Altair/LightClientBootstrap' Altair.LightClientUpdate: @@ -280,10 +292,6 @@ components: $ref: './types/altair/light_client.yaml#/Altair/LightClientFinalityUpdate' Altair.LightClientOptimisticUpdate: $ref: './types/altair/light_client.yaml#/Altair/LightClientOptimisticUpdate' - Altair.SignedBeaconBlock: - $ref: './types/altair/block.yaml#/Altair/SignedBeaconBlock' - Altair.BeaconBlock: - $ref: './types/altair/block.yaml#/Altair/BeaconBlock' Altair.BeaconState: $ref: './types/altair/state.yaml#/Altair/BeaconState' Altair.SyncCommitteeSignature: @@ -325,6 +333,14 @@ components: $ref: './types/capella/block.yaml#/Capella/BlindedBeaconBlock' Capella.SignedBlindedBeaconBlock: $ref: './types/capella/block.yaml#/Capella/SignedBlindedBeaconBlock' + Capella.LightClientBootstrap: + $ref: './types/capella/light_client.yaml#/Capella/LightClientBootstrap' + Capella.LightClientUpdate: + $ref: './types/capella/light_client.yaml#/Capella/LightClientUpdate' + Capella.LightClientFinalityUpdate: + $ref: './types/capella/light_client.yaml#/Capella/LightClientFinalityUpdate' + Capella.LightClientOptimisticUpdate: + $ref: './types/capella/light_client.yaml#/Capella/LightClientOptimisticUpdate' Deneb.BeaconState: $ref: './types/deneb/state.yaml#/Deneb/BeaconState' Deneb.BeaconBlock: @@ -363,6 +379,8 @@ components: $ref: './types/http.yaml#/UnsupportedMediaType' InternalError: $ref: './types/http.yaml#/InternalError' + NotImplementedError: + $ref: './types/http.yaml#/NotImplementedError' CurrentlySyncing: $ref: './types/http.yaml#/CurrentlySyncing' diff --git a/types/altair/light_client.yaml b/types/altair/light_client.yaml index 4489433d..5f843000 100644 --- a/types/altair/light_client.yaml +++ b/types/altair/light_client.yaml @@ -3,21 +3,21 @@ Altair: type: array items: $ref: '../primitive.yaml#/Root' - description: "Merkle proof consisting of [`log2trunc(FINALIZED_ROOT_INDEX])`](https://github.com/ethereum/consensus-specs/blob/v1.2.0-rc.3/specs/altair/light-client/sync-protocol.md#constants) roots" + description: "Merkle proof consisting of [`log2trunc(FINALIZED_ROOT_INDEX])`](https://github.com/ethereum/consensus-specs/blob/v1.3.0-rc.2/specs/altair/light-client/sync-protocol.md#constants) roots" minItems: 6 maxItems: 6 CurrentSyncCommitteeBranch: type: array items: $ref: '../primitive.yaml#/Root' - description: "Merkle proof consisting of [`log2trunc(CURRENT_SYNC_COMMITTEE_INDEX])`](https://github.com/ethereum/consensus-specs/blob/v1.2.0-rc.3/specs/altair/light-client/sync-protocol.md#constants) roots" + description: "Merkle proof consisting of [`log2trunc(CURRENT_SYNC_COMMITTEE_INDEX])`](https://github.com/ethereum/consensus-specs/blob/v1.3.0-rc.2/specs/altair/light-client/sync-protocol.md#constants) roots" minItems: 5 maxItems: 5 NextSyncCommitteeBranch: type: array items: $ref: '../primitive.yaml#/Root' - description: "Merkle proof consisting of [`log2trunc(NEXT_SYNC_COMMITTEE_INDEX])`](https://github.com/ethereum/consensus-specs/blob/v1.2.0-rc.3/specs/altair/light-client/sync-protocol.md#constants) roots" + description: "Merkle proof consisting of [`log2trunc(NEXT_SYNC_COMMITTEE_INDEX])`](https://github.com/ethereum/consensus-specs/blob/v1.3.0-rc.2/specs/altair/light-client/sync-protocol.md#constants) roots" minItems: 5 maxItems: 5 diff --git a/types/bellatrix/transactions.yaml b/types/bellatrix/transactions.yaml index c18bbbc9..3e481317 100644 --- a/types/bellatrix/transactions.yaml +++ b/types/bellatrix/transactions.yaml @@ -2,6 +2,5 @@ Bellatrix: Transactions: type: array items: - allOf: - - $ref: '../primitive.yaml#/Transaction' + $ref: '../primitive.yaml#/Transaction' maxItems: 1048576 diff --git a/types/capella/execution_payload.yaml b/types/capella/execution_payload.yaml index 0fc85465..cbe8c415 100644 --- a/types/capella/execution_payload.yaml +++ b/types/capella/execution_payload.yaml @@ -38,7 +38,7 @@ Capella: - type: object properties: transactions: - $ref: './transactions.yaml#/Capella/Transactions' + $ref: '../bellatrix/transactions.yaml#/Bellatrix/Transactions' withdrawals: $ref: './withdrawals.yaml#/Capella/Withdrawals' diff --git a/types/capella/light_client.yaml b/types/capella/light_client.yaml new file mode 100644 index 00000000..9eb06d3d --- /dev/null +++ b/types/capella/light_client.yaml @@ -0,0 +1,67 @@ +Capella: + ExecutionBranch: + type: array + items: + $ref: '../primitive.yaml#/Root' + description: "Merkle proof consisting of [`log2trunc(EXECUTION_PAYLOAD_INDEX])`](https://github.com/ethereum/consensus-specs/blob/v1.3.0-rc.2/specs/capella/light-client/sync-protocol.md#constants) roots" + minItems: 4 + maxItems: 4 + + LightClientHeader: + type: object + properties: + beacon: + $ref: '../block.yaml#/BeaconBlockHeader' + execution: + $ref: './execution_payload.yaml#/Capella/ExecutionPayloadHeader' + execution_branch: + $ref: '#/Capella/ExecutionBranch' + + LightClientBootstrap: + type: object + properties: + header: + $ref: '#/Capella/LightClientHeader' + current_sync_committee: + $ref: '../altair/sync_committee.yaml#/Altair/SyncCommittee' + current_sync_committee_branch: + $ref: '../altair/light_client.yaml#/Altair/CurrentSyncCommitteeBranch' + LightClientUpdate: + type: object + properties: + attested_header: + $ref: '#/Capella/LightClientHeader' + next_sync_committee: + $ref: '../altair/sync_committee.yaml#/Altair/SyncCommittee' + next_sync_committee_branch: + $ref: '../altair/light_client.yaml#/Altair/NextSyncCommitteeBranch' + finalized_header: + $ref: '#/Capella/LightClientHeader' + finality_branch: + $ref: '../altair/light_client.yaml#/Altair/FinalityBranch' + sync_aggregate: + $ref: '../altair/sync_aggregate.yaml#/Altair/SyncAggregate' + signature_slot: + $ref: '../primitive.yaml#/Uint64' + LightClientFinalityUpdate: + type: object + properties: + attested_header: + $ref: '#/Capella/LightClientHeader' + finalized_header: + $ref: '#/Capella/LightClientHeader' + finality_branch: + $ref: '../altair/light_client.yaml#/Altair/FinalityBranch' + sync_aggregate: + $ref: '../altair/sync_aggregate.yaml#/Altair/SyncAggregate' + signature_slot: + $ref: '../primitive.yaml#/Uint64' + LightClientOptimisticUpdate: + type: object + properties: + attested_header: + $ref: '#/Capella/LightClientHeader' + sync_aggregate: + $ref: '../altair/sync_aggregate.yaml#/Altair/SyncAggregate' + signature_slot: + $ref: '../primitive.yaml#/Uint64' diff --git a/types/capella/transactions.yaml b/types/capella/transactions.yaml deleted file mode 100644 index eafc7d0d..00000000 --- a/types/capella/transactions.yaml +++ /dev/null @@ -1,6 +0,0 @@ -Capella: - Transactions: - type: array - items: - $ref: '../primitive.yaml#/Transaction' - maxItems: 1048576 diff --git a/types/http.yaml b/types/http.yaml index 116c114a..16221692 100644 --- a/types/http.yaml +++ b/types/http.yaml @@ -39,6 +39,28 @@ InternalError: example: code: 500 message: "Internal server error" +NotImplementedError: + description: "Endpoint not implemented." + content: + application/json: + schema: + type: object + properties: + code: + description: "Either specific error code in case of invalid request or http status code" + type: number + example: 501 + message: + description: "Message describing error" + type: string + stacktraces: + description: "Optional stacktraces, sent when node is in debug mode" + type: array + items: + type: string + example: + code: 501 + message: "Endpoint not implemented" CurrentlySyncing: description: "Beacon node is currently syncing, try again later." content: diff --git a/types/rewards.yaml b/types/rewards.yaml index c091d75a..c07ee90c 100644 --- a/types/rewards.yaml +++ b/types/rewards.yaml @@ -18,18 +18,18 @@ SyncCommitteeRewards: - description: "sync committee reward in gwei for the validator" AttestationsRewards: + type: object description: "Rewards info for attestations" - type: array - items: - properties: - ideal_rewards: - type: array - items: - $ref: ./rewards.yaml#/IdealAttestationRewards - total_rewards: - type: array - items: - $ref: ./rewards.yaml#/AttestationRewards + required: ["ideal_rewards", "total_rewards"] + properties: + ideal_rewards: + type: array + items: + $ref: ./rewards.yaml#/IdealAttestationRewards + total_rewards: + type: array + items: + $ref: ./rewards.yaml#/AttestationRewards AttestationRewards: type: object diff --git a/types/selection.yaml b/types/selection.yaml new file mode 100644 index 00000000..28d67c88 --- /dev/null +++ b/types/selection.yaml @@ -0,0 +1,35 @@ +BeaconCommitteeSelection: + type: object + properties: + validator_index: + allOf: + - $ref: './primitive.yaml#/Uint64' + - description: "Index of the validator" + slot: + allOf: + - $ref: './primitive.yaml#/Uint64' + - description: "The slot at which a validator is assigned to attest" + selection_proof: + allOf: + - $ref: './primitive.yaml#/Signature' + - description: "The `slot_signature` calculated by the validator for the upcoming attestation slot" + +SyncCommitteeSelection: + type: object + properties: + validator_index: + allOf: + - $ref: './primitive.yaml#/Uint64' + - description: "Index of the validator" + slot: + allOf: + - $ref: './primitive.yaml#/Uint64' + - description: "The slot at which validator is assigned to produce a sync committee contribution" + subcommittee_index: + allOf: + - $ref: './primitive.yaml#/Uint64' + - description: "SubcommitteeIndex to which the validator is assigned" + selection_proof: + allOf: + - $ref: './primitive.yaml#/Signature' + - description: "The `slot_signature` calculated by the validator for the upcoming sync committee slot"