rm Capella builder API REST calls (#5997)

This commit is contained in:
tersec 2024-02-29 12:37:08 +00:00 committed by GitHub
parent 728f65080f
commit 5da2bcd243
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 21 additions and 105 deletions

View File

@ -84,7 +84,6 @@ RestJson.useDefaultSerializationFor(
GetForkChoiceResponse,
GetForkScheduleResponse,
GetGenesisResponse,
GetHeaderResponseCapella,
GetHeaderResponseDeneb,
GetKeystoresResponse,
GetNextWithdrawalsResponse,
@ -168,7 +167,6 @@ RestJson.useDefaultSerializationFor(
SignedContributionAndProof,
SignedValidatorRegistrationV1,
SignedVoluntaryExit,
SubmitBlindedBlockResponseCapella,
SubmitBlindedBlockResponseDeneb,
SyncAggregate,
SyncAggregatorSelectionData,

View File

@ -553,7 +553,6 @@ type
GetEpochCommitteesResponse* = DataEnclosedObject[seq[RestBeaconStatesCommittees]]
GetForkScheduleResponse* = DataEnclosedObject[seq[Fork]]
GetGenesisResponse* = DataEnclosedObject[RestGenesis]
GetHeaderResponseCapella* = DataVersionEnclosedObject[capella_mev.SignedBuilderBid]
GetHeaderResponseDeneb* = DataVersionEnclosedObject[deneb_mev.SignedBuilderBid]
GetNetworkIdentityResponse* = DataEnclosedObject[RestNetworkIdentity]
GetPeerCountResponse* = DataMetaEnclosedObject[RestPeerCount]
@ -580,7 +579,6 @@ type
ProduceAttestationDataResponse* = DataEnclosedObject[AttestationData]
ProduceBlindedBlockResponse* = ForkedBlindedBeaconBlock
ProduceSyncCommitteeContributionResponse* = DataEnclosedObject[SyncCommitteeContribution]
SubmitBlindedBlockResponseCapella* = DataEnclosedObject[capella.ExecutionPayload]
SubmitBlindedBlockResponseDeneb* = DataEnclosedObject[deneb_mev.ExecutionPayloadAndBlobsBundle]
GetValidatorsActivityResponse* = DataEnclosedObject[seq[RestActivityItem]]
GetValidatorsLivenessResponse* = DataEnclosedObject[seq[RestLivenessItem]]

View File

@ -1,35 +0,0 @@
# beacon_chain
# Copyright (c) 2023-2024 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
{.push raises: [].}
import
chronos, presto/client,
".."/eth2_apis/[rest_types, eth2_rest_serialization]
export chronos, client, rest_types, eth2_rest_serialization
proc registerValidator*(body: seq[SignedValidatorRegistrationV1]
): RestPlainResponse {.
rest, endpoint: "/eth/v1/builder/validators",
meth: MethodPost, connection: {Dedicated, Close}.}
## https://github.com/ethereum/builder-specs/blob/v0.4.0/apis/builder/validators.yaml
## https://github.com/ethereum/beacon-APIs/blob/v2.3.0/apis/validator/register_validator.yaml
proc getHeaderCapella*(slot: Slot,
parent_hash: Eth2Digest,
pubkey: ValidatorPubKey
): RestPlainResponse {.
rest, endpoint: "/eth/v1/builder/header/{slot}/{parent_hash}/{pubkey}",
meth: MethodGet, connection: {Dedicated, Close}.}
## https://github.com/ethereum/builder-specs/blob/v0.4.0/apis/builder/header.yaml
proc submitBlindedBlock*(body: capella_mev.SignedBlindedBeaconBlock
): RestPlainResponse {.
rest, endpoint: "/eth/v1/builder/blinded_blocks",
meth: MethodPost, connection: {Dedicated, Close}.}
## https://github.com/ethereum/builder-specs/blob/v0.4.0/apis/builder/blinded_blocks.yaml

View File

@ -13,6 +13,13 @@ import
export chronos, client, rest_types, eth2_rest_serialization
proc registerValidator*(body: seq[SignedValidatorRegistrationV1]
): RestPlainResponse {.
rest, endpoint: "/eth/v1/builder/validators",
meth: MethodPost, connection: {Dedicated, Close}.}
## https://github.com/ethereum/builder-specs/blob/v0.4.0/apis/builder/validators.yaml
## https://github.com/ethereum/beacon-APIs/blob/v2.3.0/apis/validator/register_validator.yaml
proc getHeaderDeneb*(slot: Slot,
parent_hash: Eth2Digest,
pubkey: ValidatorPubKey

View File

@ -429,29 +429,9 @@ proc makeBeaconBlock*(
# Override for Builder API
if transactions_root.isSome and execution_payload_root.isSome:
withState(state):
when consensusFork < ConsensusFork.Capella:
# Nimbus doesn't support pre-Capella builder API
when consensusFork < ConsensusFork.Deneb:
# Nimbus doesn't support pre-Deneb builder API
discard
elif consensusFork == ConsensusFork.Capella:
forkyState.data.latest_execution_payload_header.transactions_root =
transactions_root.get
# https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.5/specs/capella/beacon-chain.md#beaconblockbody
# Effectively hash_tree_root(ExecutionPayload) with the beacon block
# body, with the execution payload replaced by the execution payload
# header. htr(payload) == htr(payload header), so substitute.
forkyState.data.latest_block_header.body_root = hash_tree_root(
[hash_tree_root(randao_reveal),
hash_tree_root(eth1_data),
hash_tree_root(graffiti),
hash_tree_root(validator_changes.proposer_slashings),
hash_tree_root(validator_changes.attester_slashings),
hash_tree_root(List[Attestation, Limit MAX_ATTESTATIONS](attestations)),
hash_tree_root(List[Deposit, Limit MAX_DEPOSITS](deposits)),
hash_tree_root(validator_changes.voluntary_exits),
hash_tree_root(sync_aggregate),
execution_payload_root.get,
hash_tree_root(validator_changes.bls_to_execution_changes)])
elif consensusFork == ConsensusFork.Deneb:
forkyState.data.latest_execution_payload_header.transactions_root =
transactions_root.get

View File

@ -41,7 +41,7 @@ import
".."/[conf, beacon_clock, beacon_node],
"."/[
keystore_management, slashing_protection, validator_duties, validator_pool],
".."/spec/mev/[rest_capella_mev_calls, rest_deneb_mev_calls]
".."/spec/mev/rest_deneb_mev_calls
from std/sequtils import mapIt
from eth/async_utils import awaitWithTimeout
@ -542,30 +542,13 @@ proc makeBeaconBlockForHeadAndSlot*(
kzg_commitments = Opt.none(KzgCommitments))
proc getBlindedExecutionPayload[
EPH: capella.ExecutionPayloadHeader |
deneb_mev.BlindedExecutionPayloadAndBlobsBundle](
EPH: deneb_mev.BlindedExecutionPayloadAndBlobsBundle](
node: BeaconNode, payloadBuilderClient: RestClientRef, slot: Slot,
executionBlockHash: Eth2Digest, pubkey: ValidatorPubKey):
Future[BlindedBlockResult[EPH]] {.async: (raises: [CancelledError, RestError]).} =
# Not ideal to use `when` where instead of splitting into separate functions,
# but Nim doesn't overload on generic EPH type parameter.
when EPH is capella.ExecutionPayloadHeader:
let
response = awaitWithTimeout(
payloadBuilderClient.getHeaderCapella(
slot, executionBlockHash, pubkey),
BUILDER_PROPOSAL_DELAY_TOLERANCE):
return err "Timeout obtaining Capella blinded header from builder"
res = decodeBytes(
GetHeaderResponseCapella, response.data, response.contentType)
blindedHeader = res.valueOr:
return err(
"Unable to decode Capella blinded header: " & $res.error &
" with HTTP status " & $response.status & ", Content-Type " &
$response.contentType & " and content " & $response.data)
elif EPH is deneb_mev.BlindedExecutionPayloadAndBlobsBundle:
when EPH is deneb_mev.BlindedExecutionPayloadAndBlobsBundle:
let
response = awaitWithTimeout(
payloadBuilderClient.getHeaderDeneb(

View File

@ -14,7 +14,6 @@ import ../beacon_node
from eth/async_utils import awaitWithTimeout
from ../spec/datatypes/bellatrix import SignedBeaconBlock
from ../spec/mev/rest_capella_mev_calls import submitBlindedBlock
from ../spec/mev/rest_deneb_mev_calls import submitBlindedBlock
const
@ -44,9 +43,7 @@ macro copyFields*(
proc unblindAndRouteBlockMEV*(
node: BeaconNode, payloadBuilderRestClient: RestClientRef,
blindedBlock:
capella_mev.SignedBlindedBeaconBlock |
deneb_mev.SignedBlindedBeaconBlock):
blindedBlock: deneb_mev.SignedBlindedBeaconBlock):
Future[Result[Opt[BlockRef], string]] {.async: (raises: [CancelledError]).} =
const consensusFork = typeof(blindedBlock).kind
@ -79,28 +76,16 @@ proc unblindAndRouteBlockMEV*(
return err("submitBlindedBlock failed with HTTP error code " &
$response.status & ": " & $shortLog(blindedBlock))
when consensusFork >= ConsensusFork.Deneb:
let
res = decodeBytes(
SubmitBlindedBlockResponseDeneb, response.data, response.contentType)
let
res = decodeBytes(
SubmitBlindedBlockResponseDeneb, response.data, response.contentType)
bundle = res.valueOr:
return err("Could not decode Deneb blinded block: " & $res.error &
" with HTTP status " & $response.status & ", Content-Type " &
$response.contentType & " and content " & $response.data)
bundle = res.valueOr:
return err("Could not decode " & $consensusFork & " blinded block: " & $res.error &
" with HTTP status " & $response.status & ", Content-Type " &
$response.contentType & " and content " & $response.data)
template execution_payload: untyped = bundle.data.execution_payload
else:
let
res = decodeBytes(
SubmitBlindedBlockResponseCapella, response.data, response.contentType)
bundle = res.valueOr:
return err("Could not decode Capella blinded block: " & $res.error &
" with HTTP status " & $response.status & ", Content-Type " &
$response.contentType & " and content " & $response.data)
template execution_payload: untyped = bundle.data
template execution_payload: untyped = bundle.data.execution_payload
if hash_tree_root(blindedBlock.message.body.execution_payload_header) !=
hash_tree_root(execution_payload):