From 645e627b0340ff036b23be1381d6b9cd9f3ab06f Mon Sep 17 00:00:00 2001 From: tersec Date: Thu, 18 Apr 2024 09:30:01 +0200 Subject: [PATCH] add new Electra beacon chain containers and presets (#6216) * add new Electra beacon chain containers and presets * re-enable attestations in electra state transition --- beacon_chain/beacon_chain_db_immutable.nim | 21 ++- beacon_chain/el/el_manager.nim | 28 ++-- beacon_chain/spec/datatypes/electra.nim | 127 +++++++++++---- .../eth2_apis/eth2_rest_serialization.nim | 13 +- beacon_chain/spec/mev/electra_mev.nim | 11 +- .../spec/presets/gnosis/electra_preset.nim | 43 ++++- .../spec/presets/mainnet/electra_preset.nim | 43 ++++- .../spec/presets/minimal/electra_preset.nim | 41 ++++- beacon_chain/spec/state_transition.nim | 56 ++++++- beacon_chain/spec/state_transition_block.nim | 25 +-- .../validators/message_router_mev.nim | 2 +- tests/test_el_manager.nim | 152 +++++++++--------- 12 files changed, 411 insertions(+), 151 deletions(-) diff --git a/beacon_chain/beacon_chain_db_immutable.nim b/beacon_chain/beacon_chain_db_immutable.nim index 3d1b82f49..268cae4f3 100644 --- a/beacon_chain/beacon_chain_db_immutable.nim +++ b/beacon_chain/beacon_chain_db_immutable.nim @@ -14,7 +14,9 @@ import from ./spec/datatypes/capella import ExecutionPayloadHeader, HistoricalSummary, Withdrawal from ./spec/datatypes/deneb import ExecutionPayloadHeader -from ./spec/datatypes/electra import ExecutionPayloadHeader +from ./spec/datatypes/electra import + ExecutionPayloadHeader, PendingConsolidation, PendingBalanceDeposit, + PendingPartialWithdrawal type # https://github.com/ethereum/consensus-specs/blob/v1.4.0/specs/phase0/beacon-chain.md#beaconstate @@ -398,3 +400,20 @@ type # Deep history valid from Capella onwards historical_summaries*: HashList[HistoricalSummary, Limit HISTORICAL_ROOTS_LIMIT] + + deposit_receipts_start_index*: uint64 # [New in Electra:EIP6110] + deposit_balance_to_consume*: Gwei # [New in Electra:EIP7251] + exit_balance_to_consume*: Gwei # [New in Electra:EIP7251] + earliest_exit_epoch*: Epoch # [New in Electra:EIP7251] + consolidation_balance_to_consume*: Gwei # [New in Electra:EIP7251] + earliest_consolidation_epoch*: Epoch # [New in Electra:EIP7251] + pending_balance_deposits*: + HashList[PendingBalanceDeposit, Limit PENDING_BALANCE_DEPOSITS_LIMIT] + ## [New in Electra:EIP7251] + + # [New in Electra:EIP7251] + pending_partial_withdrawals*: + HashList[PendingPartialWithdrawal, Limit PENDING_PARTIAL_WITHDRAWALS_LIMIT] + pending_consolidations*: + HashList[PendingConsolidation, Limit PENDING_CONSOLIDATIONS_LIMIT] + ## [New in Electra:EIP7251] diff --git a/beacon_chain/el/el_manager.nim b/beacon_chain/el/el_manager.nim index 207610abb..b93406b93 100644 --- a/beacon_chain/el/el_manager.nim +++ b/beacon_chain/el/el_manager.nim @@ -498,11 +498,12 @@ func asConsensusType*(rpcExecutionPayload: ExecutionPayloadV4): signature: ValidatorSig(blob: dr.signature.distinctBase), index: dr.index.uint64) - template getExecutionLayerExit(ele: ExitV1): ExecutionLayerExit = - ExecutionLayerExit( - source_address: ExecutionAddress(data: ele.sourceAddress.distinctBase), + template getExecutionLayerWithdrawalRequest(elwr: ExitV1): + ExecutionLayerWithdrawalRequest = + ExecutionLayerWithdrawalRequest( + source_address: ExecutionAddress(data: elwr.sourceAddress.distinctBase), validator_pubkey: ValidatorPubKey( - blob: ele.validatorPublicKey.distinctBase)) + blob: elwr.validatorPublicKey.distinctBase)) electra.ExecutionPayload( parent_hash: rpcExecutionPayload.parentHash.asEth2Digest, @@ -529,9 +530,9 @@ func asConsensusType*(rpcExecutionPayload: ExecutionPayloadV4): deposit_receipts: List[electra.DepositReceipt, MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD].init( mapIt(rpcExecutionPayload.depositReceipts, it.getDepositReceipt)), - exits: - List[electra.ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init( - mapIt(rpcExecutionPayload.exits, it.getExecutionLayerExit))) + withdrawal_requests: + List[electra.ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init( + mapIt(rpcExecutionPayload.exits, it.getExecutionLayerWithdrawalRequest))) func asConsensusType*(payload: engine_api.GetPayloadV4Response): electra.ExecutionPayloadForSigning = @@ -639,10 +640,13 @@ func asEngineExecutionPayload*(executionPayload: electra.ExecutionPayload): signature: FixedBytes[RawSigSize](dr.signature.blob), index: dr.index.Quantity) - template getExecutionLayerExit(ele: ExecutionLayerExit): ExitV1 = + template getExecutionLayerWithdrawalRequest( + elwr: ExecutionLayerWithdrawalRequest): ExitV1 = ExitV1( - sourceAddress: Address(ele.source_address.data), - validatorPublicKey: FixedBytes[RawPubKeySize](ele.validator_pubkey.blob)) + sourceAddress: Address(elwr.source_address.data), + validatorPublicKey: FixedBytes[RawPubKeySize](elwr.validator_pubkey.blob)) + + debugRaiseAssert "nim-web3 needs to change exits to withdrawalRequests; maybe it already has been" engine_api.ExecutionPayloadV4( parentHash: executionPayload.parent_hash.asBlockHash, @@ -665,7 +669,9 @@ func asEngineExecutionPayload*(executionPayload: electra.ExecutionPayload): excessBlobGas: Quantity(executionPayload.excess_blob_gas), depositReceipts: mapIt( executionPayload.deposit_receipts, it.getDepositReceipt), - exits: mapIt(executionPayload.exits, it.getExecutionLayerExit)) + exits: + mapIt(executionPayload.withdrawal_requests, + it.getExecutionLayerWithdrawalRequest)) func isConnected(connection: ELConnection): bool = connection.web3.isSome diff --git a/beacon_chain/spec/datatypes/electra.nim b/beacon_chain/spec/datatypes/electra.nim index 7b72280db..7877b4d40 100644 --- a/beacon_chain/spec/datatypes/electra.nim +++ b/beacon_chain/spec/datatypes/electra.nim @@ -39,12 +39,7 @@ type signature*: ValidatorSig index*: uint64 - # https://github.com/ethereum/consensus-specs/blob/94a0b6c581f2809aa8aca4ef7ee6fbb63f9d74e9/specs/electra/beacon-chain.md#executionlayerexit - ExecutionLayerExit* = object - source_address*: ExecutionAddress - validator_pubkey*: ValidatorPubKey - - # https://github.com/ethereum/consensus-specs/pull/3615 + # https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/specs/electra/beacon-chain.md#executionpayload ExecutionPayload* = object # Execution block header fields parent_hash*: Eth2Digest @@ -70,14 +65,17 @@ type blob_gas_used*: uint64 excess_blob_gas*: uint64 deposit_receipts*: List[DepositReceipt, MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD] - exits*: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS] + ## [New in Electra:EIP6110] + withdrawal_requests*: + List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD] + ## [New in Electra:EIP6110] ExecutionPayloadForSigning* = object executionPayload*: ExecutionPayload blockValue*: Wei blobsBundle*: BlobsBundle - # https://github.com/ethereum/consensus-specs/blob/v1.4.0/specs/deneb/beacon-chain.md#executionpayloadheader + # https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/specs/electra/beacon-chain.md#executionpayloadheader ExecutionPayloadHeader* = object # Execution block header fields parent_hash*: Eth2Digest @@ -98,14 +96,51 @@ type ## Hash of execution block transactions_root*: Eth2Digest withdrawals_root*: Eth2Digest - blob_gas_used*: uint64 # [New in Deneb:EIP4844] - excess_blob_gas*: uint64 # [New in Deneb:EIP4844] - deposit_receipts_root*: Eth2Digest - exits_root*: Eth2Digest + blob_gas_used*: uint64 + excess_blob_gas*: uint64 + deposit_receipts_root*: Eth2Digest # [New in Electra:EIP6110] + withdrawal_requests_root*: Eth2Digest # [New in Electra:EIP7002:EIP7251] ExecutePayload* = proc( execution_payload: ExecutionPayload): bool {.gcsafe, raises: [].} + # https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/specs/electra/beacon-chain.md#depositreceipt + PendingBalanceDeposit* = object + index*: uint64 + amount*: Gwei + + # https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/specs/electra/beacon-chain.md#pendingpartialwithdrawal + PendingPartialWithdrawal* = object + index*: uint64 + amount*: Gwei + withdrawable_epoch*: Epoch + + # https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/specs/electra/beacon-chain.md#executionlayerwithdrawalrequest + ExecutionLayerWithdrawalRequest* = object + source_address*: ExecutionAddress + validator_pubkey*: ValidatorPubKey + amount*: Gwei + + # https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/specs/electra/beacon-chain.md#consolidation + Consolidation* = object + source_index*: uint64 + target_index*: uint64 + epoch*: Epoch + + # https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/specs/electra/beacon-chain.md#signedconsolidation + SignedConsolidation* = object + message*: Consolidation + signature*: ValidatorSig + + TrustedSignedConsolidation* = object + message*: Consolidation + signature*: TrustedSig + + # https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/specs/electra/beacon-chain.md#pendingconsolidation + PendingConsolidation* = object + source_index*: uint64 + target_index*: uint64 + # https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.5/specs/capella/light-client/sync-protocol.md#modified-lightclientheader LightClientHeader* = object beacon*: BeaconBlockHeader @@ -204,8 +239,7 @@ type ## (used to compute safety threshold) current_max_active_participants*: uint64 - # https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.5/specs/capella/beacon-chain.md#beaconstate - # changes indirectly via ExecutionPayloadHeader + # https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/specs/electra/beacon-chain.md#beaconstate BeaconState* = object # Versioning genesis_time*: uint64 @@ -262,6 +296,7 @@ type # Execution latest_execution_payload_header*: ExecutionPayloadHeader + ## [Modified in Electra:EIP6110:EIP7002] # Withdrawals next_withdrawal_index*: WithdrawalIndex @@ -271,6 +306,23 @@ type historical_summaries*: HashList[HistoricalSummary, Limit HISTORICAL_ROOTS_LIMIT] + deposit_receipts_start_index*: uint64 # [New in Electra:EIP6110] + deposit_balance_to_consume*: Gwei # [New in Electra:EIP7251] + exit_balance_to_consume*: Gwei # [New in Electra:EIP7251] + earliest_exit_epoch*: Epoch # [New in Electra:EIP7251] + consolidation_balance_to_consume*: Gwei # [New in Electra:EIP7251] + earliest_consolidation_epoch*: Epoch # [New in Electra:EIP7251] + pending_balance_deposits*: + HashList[PendingBalanceDeposit, Limit PENDING_BALANCE_DEPOSITS_LIMIT] + ## [New in Electra:EIP7251] + + # [New in Electra:EIP7251] + pending_partial_withdrawals*: + HashList[PendingPartialWithdrawal, Limit PENDING_PARTIAL_WITHDRAWALS_LIMIT] + pending_consolidations*: + HashList[PendingConsolidation, Limit PENDING_CONSOLIDATIONS_LIMIT] + ## [New in Electra:EIP7251] + # TODO Careful, not nil analysis is broken / incomplete and the semantics will # likely change in future versions of the language: # https://github.com/nim-lang/RFCs/issues/250 @@ -339,7 +391,7 @@ type state_root*: Eth2Digest body*: TrustedBeaconBlockBody - # https://github.com/ethereum/consensus-specs/blob/v1.4.0/specs/deneb/beacon-chain.md#beaconblockbody + # https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/specs/electra/beacon-chain.md#beaconblockbody BeaconBlockBody* = object randao_reveal*: ValidatorSig eth1_data*: Eth1Data @@ -350,17 +402,22 @@ type # Operations proposer_slashings*: List[ProposerSlashing, Limit MAX_PROPOSER_SLASHINGS] - attester_slashings*: List[AttesterSlashing, Limit MAX_ATTESTER_SLASHINGS] - attestations*: List[Attestation, Limit MAX_ATTESTATIONS] + attester_slashings*: + List[AttesterSlashing, Limit MAX_ATTESTER_SLASHINGS_ELECTRA] + ## [Modified in Electra:EIP7549] + attestations*: List[Attestation, Limit MAX_ATTESTATIONS_ELECTRA] + ## [Modified in Electra:EIP7549] deposits*: List[Deposit, Limit MAX_DEPOSITS] voluntary_exits*: List[SignedVoluntaryExit, Limit MAX_VOLUNTARY_EXITS] sync_aggregate*: SyncAggregate # Execution - execution_payload*: ExecutionPayload # [Modified in Deneb] + execution_payload*: ExecutionPayload # [Modified in Electra:EIP6110:EIP7002] bls_to_execution_changes*: SignedBLSToExecutionChangeList - blob_kzg_commitments*: KzgCommitments # [New in Deneb] + blob_kzg_commitments*: KzgCommitments + consolidations*: List[SignedConsolidation, Limit MAX_CONSOLIDATIONS] + ## [New in Electra:EIP7251] SigVerifiedBeaconBlockBody* = object ## A BeaconBlock body with signatures verified @@ -384,18 +441,24 @@ type ## Arbitrary data # Operations - proposer_slashings*: List[TrustedProposerSlashing, Limit MAX_PROPOSER_SLASHINGS] - attester_slashings*: List[TrustedAttesterSlashing, Limit MAX_ATTESTER_SLASHINGS] - attestations*: List[TrustedAttestation, Limit MAX_ATTESTATIONS] + proposer_slashings*: + List[TrustedProposerSlashing, Limit MAX_PROPOSER_SLASHINGS] + attester_slashings*: + List[TrustedAttesterSlashing, Limit MAX_ATTESTER_SLASHINGS_ELECTRA] + ## [Modified in Electra:EIP7549] + attestations*: List[TrustedAttestation, Limit MAX_ATTESTATIONS_ELECTRA] + ## [Modified in Electra:EIP7549] deposits*: List[Deposit, Limit MAX_DEPOSITS] voluntary_exits*: List[TrustedSignedVoluntaryExit, Limit MAX_VOLUNTARY_EXITS] sync_aggregate*: TrustedSyncAggregate # Execution - execution_payload*: ExecutionPayload # [Modified in Deneb] + execution_payload*: ExecutionPayload # [Modified in Electra:EIP6110:EIP7002] bls_to_execution_changes*: SignedBLSToExecutionChangeList - blob_kzg_commitments*: KzgCommitments # [New in Deneb] + blob_kzg_commitments*: KzgCommitments + consolidations*: List[TrustedSignedConsolidation, Limit MAX_CONSOLIDATIONS] + ## [New in Electra:EIP7251] TrustedBeaconBlockBody* = object ## A full verified block @@ -407,18 +470,24 @@ type ## Arbitrary data # Operations - proposer_slashings*: List[TrustedProposerSlashing, Limit MAX_PROPOSER_SLASHINGS] - attester_slashings*: List[TrustedAttesterSlashing, Limit MAX_ATTESTER_SLASHINGS] - attestations*: List[TrustedAttestation, Limit MAX_ATTESTATIONS] + proposer_slashings*: + List[TrustedProposerSlashing, Limit MAX_PROPOSER_SLASHINGS] + attester_slashings*: + List[TrustedAttesterSlashing, Limit MAX_ATTESTER_SLASHINGS_ELECTRA] + ## [Modified in Electra:EIP7549] + attestations*: List[TrustedAttestation, Limit MAX_ATTESTATIONS_ELECTRA] + ## [Modified in Electra:EIP7549] deposits*: List[Deposit, Limit MAX_DEPOSITS] voluntary_exits*: List[TrustedSignedVoluntaryExit, Limit MAX_VOLUNTARY_EXITS] sync_aggregate*: TrustedSyncAggregate # Execution - execution_payload*: ExecutionPayload # [Modified in Deneb] + execution_payload*: ExecutionPayload # [Modified in Electra:EIP6110:EIP7002] bls_to_execution_changes*: SignedBLSToExecutionChangeList - blob_kzg_commitments*: KzgCommitments # [New in Deneb] + blob_kzg_commitments*: KzgCommitments + consolidations*: List[TrustedSignedConsolidation, Limit MAX_CONSOLIDATIONS] + ## [New in Electra:EIP7251] # https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.6/specs/phase0/beacon-chain.md#signedbeaconblock SignedBeaconBlock* = object diff --git a/beacon_chain/spec/eth2_apis/eth2_rest_serialization.nim b/beacon_chain/spec/eth2_apis/eth2_rest_serialization.nim index 434fe9e07..4c3b5074a 100644 --- a/beacon_chain/spec/eth2_apis/eth2_rest_serialization.nim +++ b/beacon_chain/spec/eth2_apis/eth2_rest_serialization.nim @@ -53,6 +53,7 @@ RestJson.useDefaultSerializationFor( BlobSidecarInfoObject, BlobsBundle, Checkpoint, + Consolidation, ContributionAndProof, DataEnclosedObject, DataMetaEnclosedObject, @@ -73,7 +74,7 @@ RestJson.useDefaultSerializationFor( EmptyBody, Eth1Data, EventBeaconBlockObject, - ExecutionLayerExit, + ExecutionLayerWithdrawalRequest, Fork, GetBlockAttestationsResponse, GetBlockHeaderResponse, @@ -114,6 +115,9 @@ RestJson.useDefaultSerializationFor( GetGraffitiResponse, GraffitiResponse, PendingAttestation, + PendingBalanceDeposit, + PendingConsolidation, + PendingPartialWithdrawal, PostKeystoresResponse, PrepareBeaconProposer, ProposerSlashing, @@ -169,6 +173,7 @@ RestJson.useDefaultSerializationFor( SignedAggregateAndProof, SignedBLSToExecutionChange, SignedBeaconBlockHeader, + SignedConsolidation, SignedContributionAndProof, SignedValidatorRegistrationV1, SignedVoluntaryExit, @@ -1937,8 +1942,8 @@ proc readValue*(reader: var JsonReader[RestJson], eth1_data: eth1_data.get(), graffiti: graffiti.get(), proposer_slashings: proposer_slashings.get(), - attester_slashings: attester_slashings.get(), - attestations: attestations.get(), + #attester_slashings: attester_slashings.get(), + #attestations: attestations.get(), deposits: deposits.get(), voluntary_exits: voluntary_exits.get(), sync_aggregate: sync_aggregate.get(), @@ -1957,7 +1962,7 @@ proc readValue*(reader: var JsonReader[RestJson], value.electraBody.execution_payload.excess_blob_gas, ep_src.excess_blob_gas.get()) - debugRaiseAssert "electra support missing" + debugRaiseAssert "electra support missing, including attslashing/atts" ## RestPublishedBeaconBlock proc readValue*(reader: var JsonReader[RestJson], diff --git a/beacon_chain/spec/mev/electra_mev.nim b/beacon_chain/spec/mev/electra_mev.nim index 83d5116ab..39f1e48ba 100644 --- a/beacon_chain/spec/mev/electra_mev.nim +++ b/beacon_chain/spec/mev/electra_mev.nim @@ -33,8 +33,9 @@ type eth1_data*: Eth1Data graffiti*: GraffitiBytes proposer_slashings*: List[ProposerSlashing, Limit MAX_PROPOSER_SLASHINGS] - attester_slashings*: List[AttesterSlashing, Limit MAX_ATTESTER_SLASHINGS] - attestations*: List[phase0.Attestation, Limit MAX_ATTESTATIONS] + attester_slashings*: + List[AttesterSlashing, Limit MAX_ATTESTER_SLASHINGS_ELECTRA] + attestations*: List[phase0.Attestation, Limit MAX_ATTESTATIONS_ELECTRA] deposits*: List[Deposit, Limit MAX_DEPOSITS] voluntary_exits*: List[SignedVoluntaryExit, Limit MAX_VOLUNTARY_EXITS] sync_aggregate*: SyncAggregate @@ -43,6 +44,7 @@ type List[SignedBLSToExecutionChange, Limit MAX_BLS_TO_EXECUTION_CHANGES] blob_kzg_commitments*: KzgCommitments # [New in Deneb] + consolidations*: List[SignedConsolidation, Limit MAX_CONSOLIDATIONS] # https://github.com/ethereum/builder-specs/blob/v0.4.0/specs/bellatrix/builder.md#blindedbeaconblock BlindedBeaconBlock* = object @@ -142,8 +144,9 @@ func toSignedBlindedBeaconBlock*(blck: electra.SignedBeaconBlock): hash_tree_root(blck.message.body.execution_payload.withdrawals), deposit_receipts_root: hash_tree_root( blck.message.body.execution_payload.deposit_receipts), - exits_root: - hash_tree_root(blck.message.body.execution_payload.exits)), + withdrawal_requests_root: + hash_tree_root( + blck.message.body.execution_payload.withdrawal_requests)), bls_to_execution_changes: blck.message.body.bls_to_execution_changes, blob_kzg_commitments: blck.message.body.blob_kzg_commitments)), signature: blck.signature) diff --git a/beacon_chain/spec/presets/gnosis/electra_preset.nim b/beacon_chain/spec/presets/gnosis/electra_preset.nim index 4c8b66b10..7b81ad125 100644 --- a/beacon_chain/spec/presets/gnosis/electra_preset.nim +++ b/beacon_chain/spec/presets/gnosis/electra_preset.nim @@ -7,14 +7,49 @@ {.push raises: [].} -# Gnosis preset - Electra (not present in Gnosis yet; using EF mainnet until then) -# https://github.com/ethereum/consensus-specs/blob/497d7999a606ddab0844e1702682500d3a339f83/presets/mainnet/electra.yaml +# Gnosis preset - Electra (Gnosis version not avilable yet; EF mainnet for now) +# https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/presets/mainnet/electra.yaml const + # Gwei values + # --------------------------------------------------------------- + # 2**5 * 10**9 (= 32,000,000,000) Gwei + MIN_ACTIVATION_BALANCE* = 32000000000 + # 2**11 * 10**9 (= 2,048,000,000,000) Gwei + MAX_EFFECTIVE_BALANCE_ELECTRA* = 2048000000000 + + # State list lengths + # --------------------------------------------------------------- + # `uint64(2**27)` (= 134,217,728) + PENDING_BALANCE_DEPOSITS_LIMIT*: uint64 = 134217728 + # `uint64(2**27)` (= 134,217,728) + PENDING_PARTIAL_WITHDRAWALS_LIMIT*: uint64 = 134217728 + # `uint64(2**18)` (= 262,144) + PENDING_CONSOLIDATIONS_LIMIT*: uint64 = 262144 + + # Reward and penalty quotients + # --------------------------------------------------------------- + # `uint64(2**12)` (= 4,096) + MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA*: uint64 = 4096 + # `uint64(2**12)` (= 4,096) + WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA*: uint64 = 4096 + + # # Max operations per block + # --------------------------------------------------------------- # `uint64(2**0)` (= 1) MAX_ATTESTER_SLASHINGS_ELECTRA*: uint64 = 1 # `uint64(2**3)` (= 8) MAX_ATTESTATIONS_ELECTRA*: uint64 = 8 + # `uint64(2**0)` (= 1) + MAX_CONSOLIDATIONS*: uint64 = 1 + + # Execution + # --------------------------------------------------------------- # 2**13 (= 8192) receipts MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD* = 8192 - # 2**4 (= 16) exits - MAX_EXECUTION_LAYER_EXITS* = 16 + # 2**4 (= 16) withdrawal requests + MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD* = 16 + + # Withdrawals processing + # --------------------------------------------------------------- + # 2**3 ( = 8) pending withdrawals + MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP* = 8 diff --git a/beacon_chain/spec/presets/mainnet/electra_preset.nim b/beacon_chain/spec/presets/mainnet/electra_preset.nim index 552b01eeb..769aa088f 100644 --- a/beacon_chain/spec/presets/mainnet/electra_preset.nim +++ b/beacon_chain/spec/presets/mainnet/electra_preset.nim @@ -7,14 +7,49 @@ {.push raises: [].} -# Mainnet preset - Electra -# https://github.com/ethereum/consensus-specs/blob/497d7999a606ddab0844e1702682500d3a339f83/presets/mainnet/electra.yaml +# Electra preset - Electra +# https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/presets/mainnet/electra.yaml const + # Gwei values + # --------------------------------------------------------------- + # 2**5 * 10**9 (= 32,000,000,000) Gwei + MIN_ACTIVATION_BALANCE* = 32000000000 + # 2**11 * 10**9 (= 2,048,000,000,000) Gwei + MAX_EFFECTIVE_BALANCE_ELECTRA* = 2048000000000 + + # State list lengths + # --------------------------------------------------------------- + # `uint64(2**27)` (= 134,217,728) + PENDING_BALANCE_DEPOSITS_LIMIT*: uint64 = 134217728 + # `uint64(2**27)` (= 134,217,728) + PENDING_PARTIAL_WITHDRAWALS_LIMIT*: uint64 = 134217728 + # `uint64(2**18)` (= 262,144) + PENDING_CONSOLIDATIONS_LIMIT*: uint64 = 262144 + + # Reward and penalty quotients + # --------------------------------------------------------------- + # `uint64(2**12)` (= 4,096) + MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA*: uint64 = 4096 + # `uint64(2**12)` (= 4,096) + WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA*: uint64 = 4096 + + # # Max operations per block + # --------------------------------------------------------------- # `uint64(2**0)` (= 1) MAX_ATTESTER_SLASHINGS_ELECTRA*: uint64 = 1 # `uint64(2**3)` (= 8) MAX_ATTESTATIONS_ELECTRA*: uint64 = 8 + # `uint64(2**0)` (= 1) + MAX_CONSOLIDATIONS*: uint64 = 1 + + # Execution + # --------------------------------------------------------------- # 2**13 (= 8192) receipts MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD* = 8192 - # 2**4 (= 16) exits - MAX_EXECUTION_LAYER_EXITS* = 16 + # 2**4 (= 16) withdrawal requests + MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD* = 16 + + # Withdrawals processing + # --------------------------------------------------------------- + # 2**3 ( = 8) pending withdrawals + MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP* = 8 diff --git a/beacon_chain/spec/presets/minimal/electra_preset.nim b/beacon_chain/spec/presets/minimal/electra_preset.nim index 426e05223..16d050195 100644 --- a/beacon_chain/spec/presets/minimal/electra_preset.nim +++ b/beacon_chain/spec/presets/minimal/electra_preset.nim @@ -8,13 +8,48 @@ {.push raises: [].} # Minimal preset - Electra -# https://github.com/ethereum/consensus-specs/blob/497d7999a606ddab0844e1702682500d3a339f83/presets/minimal/electra.yaml +# https://github.com/ethereum/consensus-specs/blob/82133085a1295e93394ebdf71df8f2f6e0962588/presets/minimal/electra.yaml const + # Gwei values + # --------------------------------------------------------------- + # 2**5 * 10**9 (= 32,000,000,000) Gwei + MIN_ACTIVATION_BALANCE* = 32000000000 + # 2**11 * 10**9 (= 2,048,000,000,000) Gwei + MAX_EFFECTIVE_BALANCE_ELECTRA* = 2048000000000 + + # State list lengths + # --------------------------------------------------------------- + # `uint64(2**27)` (= 134,217,728) + PENDING_BALANCE_DEPOSITS_LIMIT*: uint64 = 134217728 + # customized] `uint64(2**6)` (= 64) + PENDING_PARTIAL_WITHDRAWALS_LIMIT*: uint64 = 64 + # [customized] `uint64(2**6)` (= 64) + PENDING_CONSOLIDATIONS_LIMIT*: uint64 = 64 + + # Reward and penalty quotients + # --------------------------------------------------------------- + # `uint64(2**12)` (= 4,096) + MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA*: uint64 = 4096 + # `uint64(2**12)` (= 4,096) + WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA*: uint64 = 4096 + + # # Max operations per block + # --------------------------------------------------------------- # `uint64(2**0)` (= 1) MAX_ATTESTER_SLASHINGS_ELECTRA*: uint64 = 1 # `uint64(2**3)` (= 8) MAX_ATTESTATIONS_ELECTRA*: uint64 = 8 + # `uint64(2**0)` (= 1) + MAX_CONSOLIDATIONS*: uint64 = 1 + + # Execution + # --------------------------------------------------------------- # [customized] MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD* = 4 - # 2**4 (= 16) exits - MAX_EXECUTION_LAYER_EXITS* = 16 + # [customized] 2**1 (= 2) withdrawal requests + MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD* = 2 + + # Withdrawals processing + # --------------------------------------------------------------- + # 2**0 ( = 1) pending withdrawals + MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP* = 1 diff --git a/beacon_chain/spec/state_transition.nim b/beacon_chain/spec/state_transition.nim index f0fc71b41..cf6256c88 100644 --- a/beacon_chain/spec/state_transition.nim +++ b/beacon_chain/spec/state_transition.nim @@ -348,7 +348,9 @@ proc state_transition*( func partialBeaconBlock*( cfg: RuntimeConfig, - state: var ForkyHashedBeaconState, + state: var (phase0.HashedBeaconState | altair.HashedBeaconState | + bellatrix.HashedBeaconState | capella.HashedBeaconState | + deneb.HashedBeaconState), proposer_index: ValidatorIndex, randao_reveal: ValidatorSig, eth1_data: Eth1Data, @@ -394,7 +396,57 @@ func partialBeaconBlock*( when consensusFork >= ConsensusFork.Deneb: res.body.blob_kzg_commitments = execution_payload.blobsBundle.commitments - debugRaiseAssert "check for new fields or conditions to ensure in electra" + res + +func partialBeaconBlock*( + cfg: RuntimeConfig, + state: var electra.HashedBeaconState, + proposer_index: ValidatorIndex, + randao_reveal: ValidatorSig, + eth1_data: Eth1Data, + graffiti: GraffitiBytes, + attestations: seq[phase0.Attestation], + deposits: seq[Deposit], + validator_changes: BeaconBlockValidatorChanges, + sync_aggregate: SyncAggregate, + execution_payload: ForkyExecutionPayloadForSigning +): auto = + const consensusFork = typeof(state).kind + + # https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/phase0/validator.md#preparing-for-a-beaconblock + var res = consensusFork.BeaconBlock( + slot: state.data.slot, + proposer_index: proposer_index.uint64, + parent_root: state.latest_block_root, + body: consensusFork.BeaconBlockBody( + randao_reveal: randao_reveal, + eth1_data: eth1_data, + graffiti: graffiti, + proposer_slashings: validator_changes.proposer_slashings, + #attester_slashings: validator_changes.attester_slashings, + attestations: + List[phase0.Attestation, Limit MAX_ATTESTATIONS_ELECTRA](attestations), + deposits: List[Deposit, Limit MAX_DEPOSITS](deposits), + voluntary_exits: validator_changes.voluntary_exits)) + + # https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.1/specs/altair/validator.md#preparing-a-beaconblock + when consensusFork >= ConsensusFork.Altair: + res.body.sync_aggregate = sync_aggregate + + # https://github.com/ethereum/consensus-specs/blob/v1.4.0/specs/bellatrix/validator.md#block-proposal + when consensusFork >= ConsensusFork.Bellatrix: + res.body.execution_payload = execution_payload.executionPayload + + # https://github.com/ethereum/consensus-specs/blob/v1.4.0/specs/capella/validator.md#block-proposal + when consensusFork >= ConsensusFork.Capella: + res.body.bls_to_execution_changes = + validator_changes.bls_to_execution_changes + + # https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/deneb/validator.md#constructing-the-beaconblockbody + when consensusFork >= ConsensusFork.Deneb: + res.body.blob_kzg_commitments = execution_payload.blobsBundle.commitments + + debugRaiseAssert "either consolidate this within separate function or recombine, re when consensusFork >= foo and atts/attslashings; here to allow noninterference with pre-pectra" res diff --git a/beacon_chain/spec/state_transition_block.nim b/beacon_chain/spec/state_transition_block.nim index 15a4699df..8b1ca3e02 100644 --- a/beacon_chain/spec/state_transition_block.nim +++ b/beacon_chain/spec/state_transition_block.nim @@ -445,15 +445,16 @@ proc process_bls_to_execution_change*( ok() # https://github.com/ethereum/consensus-specs/blob/94a0b6c581f2809aa8aca4ef7ee6fbb63f9d74e9/specs/electra/beacon-chain.md#new-process_execution_layer_exit -func process_execution_layer_exit( +func process_execution_layer_withdrawal_request( cfg: RuntimeConfig, state: var electra.BeaconState, - execution_layer_exit: ExecutionLayerExit, exit_queue_info: ExitQueueInfo, - cache: var StateCache): Result[ExitQueueInfo, cstring] = + execution_layer_withdrawal_request: ExecutionLayerWithdrawalRequest, + exit_queue_info: ExitQueueInfo, cache: var StateCache): + Result[ExitQueueInfo, cstring] = # Verify pubkey exists let - pubkey_to_exit = execution_layer_exit.validator_pubkey + pubkey_to_exit = execution_layer_withdrawal_request.validator_pubkey validator_index = findValidatorIndex(state, pubkey_to_exit).valueOr: - return err("process_execution_layer_exit: unknown index for validator pubkey") + return err("process_execution_layer_withdrawal_request: unknown index for validator pubkey") validator = state.validators.item(validator_index) # Verify withdrawal credentials @@ -461,21 +462,21 @@ func process_execution_layer_exit( is_execution_address = validator.has_eth1_withdrawal_credential is_correct_source_address = validator.withdrawal_credentials.data.toOpenArray(12, 31) == - execution_layer_exit.source_address.data + execution_layer_withdrawal_request.source_address.data if not (is_execution_address and is_correct_source_address): - return err("process_execution_layer_exit: not both execution address and correct source address") + return err("process_execution_layer_withdrawal_request: not both execution address and correct source address") # Verify the validator is active if not is_active_validator(validator, get_current_epoch(state)): - return err("process_execution_layer_exit: not active validator") + return err("process_execution_layer_withdrawal_request: not active validator") # Verify exit has not been initiated if validator.exit_epoch != FAR_FUTURE_EPOCH: - return err("process_execution_layer_exit: validator exit already initiated") + return err("process_execution_layer_withdrawal_request: validator exit already initiated") # Verify the validator has been active long enough if get_current_epoch(state) < validator.activation_epoch + cfg.SHARD_COMMITTEE_PERIOD: - return err("process_execution_layer_exit: validator not active long enough") + return err("process_execution_layer_withdrawal_request: validator not active long enough") # Initiate exit ok(? initiate_validator_exit( @@ -540,8 +541,8 @@ proc process_operations(cfg: RuntimeConfig, exit_queue_info = ? process_voluntary_exit( cfg, state, op, flags, exit_queue_info, cache) when typeof(body).kind >= ConsensusFork.Electra: - for op in body.execution_payload.exits: - exit_queue_info = ? process_execution_layer_exit( + for op in body.execution_payload.withdrawal_requests: + exit_queue_info = ? process_execution_layer_withdrawal_request( cfg, state, op, exit_queue_info, cache) when typeof(body).kind >= ConsensusFork.Capella: for op in body.bls_to_execution_changes: diff --git a/beacon_chain/validators/message_router_mev.nim b/beacon_chain/validators/message_router_mev.nim index 2927476c8..d98b08b55 100644 --- a/beacon_chain/validators/message_router_mev.nim +++ b/beacon_chain/validators/message_router_mev.nim @@ -39,7 +39,7 @@ macro copyFields*( # unblinded objects, and can't simply be copied. "transactions_root", "execution_payload", "execution_payload_header", "body", "withdrawals_root", - "deposit_receipts_root", "exits_root"]: + "deposit_receipts_root", "withdrawal_requests_root"]: # TODO use stew/assign2 result.add newAssignment( newDotExpr(dst, ident(name)), newDotExpr(src, ident(name))) diff --git a/tests/test_el_manager.nim b/tests/test_el_manager.nim index 7cda4d5d6..ebdd002fc 100644 --- a/tests/test_el_manager.nim +++ b/tests/test_el_manager.nim @@ -1641,7 +1641,7 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0x943c3c3818d5aa98fbf8344ef4cdc9c13cdabfdeb7762efc8bb32d2ea32d3bbb4ef069a254f5f35325f48609fad7bbafb6389e204767a9b3bbe46a04f8baa850bfd4d3747aaf2816c7e18fc2ebe4fa41088d195d09c761819c7a2e57a3451148")), index: 900883336538271514'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ ]), ), (electra.ExecutionPayload)( @@ -1699,14 +1699,14 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0x0d543b0e9b934586fb877615c8d2551e11998f020bce6b96901fb8045ef42eb41f6039e813136043fe5c63d91a11e1e15e5c4063d1775f95ae1715cb87b21b7690b44ec38efd1a825e1e3ac68d21940f772b3309edb3ddebb24204e06d4924c2")), index: 12423850076890731216'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x39554fbddf13facd81344d536c08ed5769304749"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xc4f5b2c07cc2f6758dd8eaef217247f767bcd88a8f5c93b030023d420568f47735d113df344627759f4ea1b56c53136f"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x243c496e83f955ef23dc3d121b3cbe5f56305d73"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xe9a3d62cdf9acae4966e5682958d0cc9223065b4d68ed3b12a024a56744ab9656736326061f9fb41a8f15564cb4d241f"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x462f156d8d950c7ffd40d7ba149bcc34093bbdb7"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xd6d7f2281c2b9c98a8a5dc0b7f41783eb91b838973207239852e817ed412e164e330003ac9ab0e96bc65886e15b5cbe9"))), ]), @@ -1739,14 +1739,14 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0x143a1a4dcac6db342901feb541dc0c95830a4ca1aca9c3fcb55e2dcb9a5b31e2bd9214b1a3a12e17e140d37ba7ebfd11d6d8a38eea5d0755402dd400386aaefcc70d12fb1409f92797923bf964bea3f916b562f3ff2b522c48b748c8e8c632d4")), index: 15872726372973140071'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x3a8a707225d47dbddb01c1ca39181af823d57d97"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x9cf008ca8159512ffffa1fe56de68bb9e44f9c4bb3c2c4924f5d7bf1bb810cc807b155f11ddd55a4972346f8e75f06ab"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x7c55f3e4f648bcfb47db2122233b25881785709b"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xb9e559b137b8ab79ddfbc6ea2fb44d96d1925c2b7b6e4c0e1b69f66d82b656065af06bd62e8fe9210276a116ad78c382"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xcf25ed583b463f3a57acd97c398e27877b9bf6a6"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xa14ac0d85ae38dd91a9f7da12b6c7cb4e879f78effc5ac0da8f9ee56059460f31152009fc1b88d0e0a0bf576950f45e0"))), ]), @@ -1801,8 +1801,8 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0x94cb986143fdae936c832d08977520c41a6a9b1569b012a8486678571ea5ce2e913f55c9d5631a8f02d1b75aca414969c56f22cf0b6e5193f7ac3568b09c9ae955581c69095908ccab9c5ff5c47b2edef262f2843ccc7cbc69eb35b14c66886c")), index: 11423537419700559218'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x44754b90f7b23eee1dddafa745ac723dcc147404"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x8d13edc45159cdcf6ed780fc7b93e74434fa392b0842dfa92458cc59515aaac127317df24def9701eb6d5ea060eaffea"))), ]), @@ -1841,7 +1841,7 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0x9e2864164d275e436ed45120245d2063dbedc87d555cceabe8c18622fe462411ecbe7fa4a262989a45795efea09d21f8e4254cedd5c787bf80211be0a3c6ffc1bcc5f364387f32f746647e0194a599653f3af5f6e1151244df02bb7b3f7270cc")), index: 1665528005288012054'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ ]), ), (electra.ExecutionPayload)( @@ -1890,7 +1890,7 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0xca03e6b82cd3df289ed574c2deca216a089928bc944abd3efd26ee3124c45b22e7f541c02cc95f71ea8b52f0fed044ca14863b651c07b6e52abbce8afb500556a32e33a5f57a33ca6103237aa1c5bc409f4a2745b9828d6eff5360a2ba63d162")), index: 18335046601207607970'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ ]), ), (electra.ExecutionPayload)( @@ -1947,8 +1947,8 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0x42a5b14b6d5018eedf1dc9bb07cd64ae2d25f583ad805d58d89b4c8381db8740fe188a70f1a1d2eb0e486807cefff900f93ebed94fbe2539edddf06f91bf347281f9dcc891db49d6107c2f88d678d32e5e9849a2be7b082919edb769b7c70abf")), index: 16997402741851403011'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x4bd763bcdfcf9fd2ce667c75408bc1157fa9730a"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xdf62e8946d1457a50ce017fae0c36e5dc5177e642c18b74dd6df192620f8a32bef5f02453f0835583f6082f213df7245"))), ]), @@ -2002,11 +2002,11 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0xbd837ceae239191f7e958fabc91efc7b3830da9814f4d888ec278ed0fbf870e811db948bf81377fd53339db9095f3c71b36de09b6f5b38a18caba6d3e8f337bbcb107380ee3d50058e3d266653860b1c6a9309eb60f142948f53041a07109f4d")), index: 2237248193846176262'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x614d16bedf5dfe9d06171e3ef50671e66fadfce4"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x9f92a4aa0e58f82ff2ec0bbe4aca6d338fd08ffff3213f64bef81148f7dbb163eb25add8ccc540ec0dd1bf9d237e26f9"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x4cff44c8f0353fa6dee31f6c87e4b8c3bcaf1c38"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x3166f8e41daae4a0af1549a00b95ad9280d73e91a882d49c827bc078c88300264e7171cbbf50e3598da77bcdb175a203"))), ]), @@ -2048,20 +2048,20 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0x7a4df2b27bded4e1cc2e20120e70f576e9991369d77dfad54186d3067416bfe1f7cb7a1021a9c0722370680367fe4c12e571902c2f4ce4c2754a4738c10ead67b1d9a1a82b2ecd4ce3b6567c87e0066c979664bf79025851cd9583c5ed2f7c2f")), index: 4361690020859323832'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x9c2b1570328c29ef47c715cd021aead97695741e"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x6d3da7dd6f61e0818830bf11df8c91af8be664041d8832ca48b0c90566963acaa54695da7fb9ae2904d1aa0d7de5dcbd"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xf3fff390ae583278167deb91dba09b4ba089acaf"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xaeaef2b0928efd727bab75c3859118681492d7aaa0ceb7cb0897e21d4689ce7a6a9306850b2dbd801cb3ec165bb97d68"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x9a89ea1df940046760d3a84e134ea525a05a91fd"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x7afe11eec6aa2da5eb2bb7f9c6f2329ef9b9c17cd2f2ea35fee5e4169bc4e26c73c30cbbde16cbe4ae2351266454c31f"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xf77580ffa7329925db0934de5f3667b1a32effd1"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x3f5026c08a653bb8cc9f46a5cb1c35200c43efb6c44f729b48d12400828f5029fdc88f4672f1f9393d7d764ba3599bf1"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xc61710d4969b77326cfe3ee23b65023c23e8789e"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xb2952e0f7d6581c3032f95f4908bf76f6df8d7e866b7b67996254597ef73ce9a15dac375b78a3456d4f7f156af2b5ed5"))), ]), @@ -2086,11 +2086,11 @@ suite "Eth1 monitor": excess_blob_gas: 1, deposit_receipts: List[DepositReceipt, MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD].init(@[ ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xe4bed2d5de111ca1d0a77bf6006c09ced6c6cc89"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x814d7cd0b6d428414fa787584e1eb52a5f215b8f0e7792499365f465ac43f5696e8d18ab579568c348f6dde75c189301"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x95137ca91b36a9a753441d911bdf91677931615c"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x0e223fadbfa2985e293f13e083bbe22a9a208d0e9f37fd99d24be92b3e329d77f1d40d61b891e2bdfed12ca746eeec50"))), ]), @@ -2138,8 +2138,8 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0xc614759dcdc309a46d9f24ae6b2840625bc5ddecd802c2907f9141d9091966e3367d78b3963717877a6110d741f40b45486acd32ac0e7bf1b4c36e681411570a7d1156dda127c1c5e5c6011ff857222ea51086016c01346e6cd2c8764bc7e7f4")), index: 9892892756897161299'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x9892501906b7abf06fdb6893b8e1767884bc17f5"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x30099e0ee2adf0d51a0a96d10fd2fd5cf6f17cdb4b4ea88b5a0e205bd10d40319595e0403891aaa1bac82b980ef76f23"))), ]), @@ -2179,7 +2179,7 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0x967057d2edd3b53ae9fb665fe668ab2319403b4f8e4620064b11f0933f9def18d952cae5f50395ffd1a8e8554604d95371b7643386df808a18c913e186a7a915e5a5c65908dd6668f2c0d02e404eb88d3499c096967e93b791d814429caae9a2")), index: 7603599240231509693'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ ]), ), (electra.ExecutionPayload)( @@ -2210,8 +2210,8 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0xd6a92f4de599923ba4955c360b2cd54bd544e2b75947127fefa9ec08f5e53cf02bf398b63a0420226dd356fc5d50683eaead8a5aa8a6d4fdbe62296506c813e5e02a2513b6457c1ca408e1189fba32e80d74c48e389f62c7b0b0ff3c1881ec55")), index: 14462442824619447645'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xf55f4b626328f2b7a725d8a3f8485072eebf7f6e"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x3eb1812d045ff1d2f7d96f919c41230db2993ed8194de6ba564fad54047e3b45fb925e5216cc47f69e184a4e2c45ce39"))), ]), @@ -2258,20 +2258,20 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0x2f470357ded569d4fe968b5da6619cbeb414271e71ec7abc8e0e6c7c962b1932934bef085f682bc6af358670bdaf80572dd4ee3fdf80711e60205868aad5859971a858f30eaeee2883bad62b5c4e6ada3ea38ae1ab516f294a16b18c099fa760")), index: 3956355178667798015'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x98410af351e5be94f9d37f7cc9f97a85e9bd0dad"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xd96132438444f4582e21aaa4950d907a84d56f5edaf5d4262439210d6b6aae00ef67d15caa1e95040484b977ba677f31"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xe640e25259ffe5aa8b481e98684b41a14f3d2192"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xfb8bad5edefcf4a76157dd4df48c345b10966ebe21c5265519a3d166ee6f43b92bc67707a7bcc478c05cb5d5aaa5e217"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x6544a67710ed5b8466aea7bb74de9e275c7a7338"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xae821baad66de4d33dc8a8ea9088ab97cce0be2f1be1243c3c640377fd57f3f7389087ace339f953d52372d198300f8c"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x48f380f0b267ceec6fbe39f80b7108991acf97b5"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x2c9a9040e72e095e347f8ba9ad33947a1ec5ffddaa2e86a112fd73c30af209625f1bf19eb7b4fcee28409707679781d1"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x04fb4574aa211ef818aa9c13135f20f4694b8ce3"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x8d381b3ee22253692bd5861ede4c0d62cb2f6c90df6afd180831ec183ac3f8bcccbbfb5fa1f3ee38d5c3871ca8e28ba3"))), ]), @@ -2300,17 +2300,17 @@ suite "Eth1 monitor": excess_blob_gas: 1233408100755176706'u64, deposit_receipts: List[DepositReceipt, MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD].init(@[ ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x16c6ba72f97bd60af3008e747aa0045eace969dd"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x79b68340894f69a82de6d6ac26b6cffd1f84be9008f7cec5a8f740c5dcd73103e50366cb45ec0c2a0984b37597011784"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xf950853d752ff1e8dfd3ffb9bdb504e851361060"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x9924a9bf1759d436f9dcc185cdb646d06af53ddf9e86351b69bda506eaaf4b47739a0737ebfcb7d734d33237eb77983c"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x7ef709dcc026c545a1707a4161948637f4c1afce"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xfe1b2e2cd818d436f9cfd7ad7e9efb8e8940bff9ac2c5094793d26f9a50f76436e25b40d375d7b9d461ac7fac81887d3"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x1e6d99ec506e2b79322f77283f3e18dfc0561346"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x25931e58a52265a5a90f7004706cd736fdb762d50aff67039d5e0242039dfc49fd6670e6f4cf62639d7debe3efe5298b"))), ]), @@ -2349,20 +2349,20 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0x0b7a4a77b5554a3be5f9338c31158e9f0b0b5fc95e9ef176ca38183ceb3aaf214711af03ecf194091cbc99a11aa7a376d721b3c1e27e71447828326ee811a07f4680c5a73fb52106bfe9b66eadd40cf80f027f0db90e41c77c78552edaccf295")), index: 659556622372086172'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xa80127ae927ef2fc72e527bee414d2a899e1050f"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x463d04b11a5f2b3a5ff5d93f7c20acb46b06d8a434d9dcbbcde024be06f50b6542ebca1a759d8cf8381e7142bce4bd1c"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x91e2ec291b66f267104a11157c46ef32fd40c22f"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xc05bcf497d5e305552b041c7a239536c938fff8bc755fadd28fd907f070f7f4a5553660a3351739a0b1bec2e6ec3d2aa"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x1281069954affabc619e8092861136ada40cb869"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x781f234560ec5d2197a33908a66fcb156330141f51212a51a0f0117417b5370f3fd0266c9dd1bf2c66d47eaf98375327"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x56855acbe00c442f0d20d489deb80fc02b31a173"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x805d72db2998bbfaf07d13f5328db300ea7a2fa156d049bf072590d61dca40ae142de4a204e36768f6e546af62d7e1fb"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x722d597ea5a6f82a0f9b06bd8af0449d18f78795"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x1de64f16597d52214d1a5987abc026398d310712ad0db48d48e747e7783204579a886bbd9a58a47704d9874a83726a50"))), ]), @@ -2390,11 +2390,11 @@ suite "Eth1 monitor": excess_blob_gas: 10785611890433610477'u64, deposit_receipts: List[DepositReceipt, MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD].init(@[ ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x027404a69d1a1a8b931d0deb6ef4c90cc23fe74e"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x144cd543ddf6cc88499595246d2373629467e69048b4c638824b8c4d82296fb635028f495c7516174670ed1c5b320462"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x748168ee6835196ae76808fe3232a422b40e42a7"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x5e024d736b5c4d340929745f59b7d681eeb151107f895a87d534491b5af13fbf7bed890a2f41dc8debacf2f65fce2c20"))), ]), @@ -2440,11 +2440,11 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0x655e809ad38376a8d7fdd895a30d8a1ac52861864f67e1ce885cc40cbdf3ff27a8a6f8cb1b33f74254c5bfef90de22f6b1c724e888d284438995fab628ecdc5278319435192ed259b56ab6d2f18ad3ba53aa534e85fa802e15c1a1ec9fe3b7e1")), index: 15032238460111462081'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xc8bcdf0144cd4eb45e62b4fa76b7d5963fa912ec"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x4569a134a3f6e0ac638b19e8d88c9010f7281449f78adcbad225d11d2358790b2454504ac56209ac54cf66d5df779bce"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x308d3b908ce2fb2ebd207120422994608d8c3354"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x3deec67ff0f69aeeeddf322043b694ed4ec79aa2cd2414797bb95da5691b2b9731d3fe3d3627684d022241f80504f3ad"))), ]), @@ -2498,20 +2498,20 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0x97ea0a8e3f3e73fb11ded1814f4232e8bfb1e7b71bce608f3f181e5609bdaab3ffde52b1ff98d94c3d02ffefa6b3716cd83deda00888224f24716619f685c940da205910227b976bedf7f0cfc16262e2ec48dd837509326c97e329fe666846ab")), index: 8630770799181013738'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x4e4c648248758aaba856a20f8496700f036a9177"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x96902ac59a4940715d171f1d6ec3e03b0c1557fc0100abb930b6626917b9792aabd48ec1bc1e37737c582fe11c966658"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xa99cc4727a81a0abfb662fe28748133420938dae"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x10f3cea6d52558a866988352bef57525f708aecb5fb392af8453e306cf7c5da68aea8a544d71db63dc1057317b00feb7"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xe13404d88c1418f69c92ed12d256382a462ecf4e"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xf8f8cffff4aa7bec351b9e084274b6e47c536671bd559c7fbf110985e684a58c0384ffc314c23c4441c0f17ce33bd767"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x6f9427252a6fa414a6501e0761cf92f0839f3bbe"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x4ca4f660800c2cfa68827299ddcbfddcf2cb01c51dcaf5af1abc5e8f05164846ca26f1c8c884a3e674a22dbfc0d9fa7b"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x14bce680ec1a632aac5f77cb4d5eca52f74bd1e6"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xb4f363283d5276f12a6c2c98c58484c6a6e8e3c7f5b3adfc044d2de76365bef427f8b9ac1e321baa7a611447010f9e8d"))), ]), @@ -2544,11 +2544,11 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0xac560bee8d8dd4dad94f2bd5b480e7799f7a8445adf3e0070747f8b5724d442453fbba2f332cc69af3a450dce80249b6b7afe19340f4fc5dc54a5c0e56cd4c484c94c61480bc56c75eef44e55c1288bd58739b8354caa93da5d2502bb38546df")), index: 7086745948630243467'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x91810ed86a3244c89274f94fd510532cf12d7074"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xbb480d96367f62ab5790cbfdeeac6344e21774681edd0afe64c50b48f4d07795e584468821788948c7d8c151733ad01f"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xe16b15a5256815cf6d338498a5cb0e8ec0d5bfec"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x79b49178606e2a5cda067c04b982d445df7b41d09d4361e5498b7a454d0e8a37a6975da56c3bd20694a3fcb467f7ff59"))), ]), @@ -2573,17 +2573,17 @@ suite "Eth1 monitor": excess_blob_gas: 1, deposit_receipts: List[DepositReceipt, MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD].init(@[ ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x08396e3d726ff055f903e2b4e7b743fd8c128f4b"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x01c1c045960d8121bc8ab57c4728dfb3c07289818df71893c002352eca51c54f03db8840f608607bea01bd7b0f02284d"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xc7fefcefc468685bc9b8cdd3c4e1ae643952b254"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x816cae90cab4ca290dfaf9f32b7ad508bd82095ec815cd55b9399eee91208d30f79e548951bfdddc60b7e7560f2b9e1b"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x7eef42203641e2f5c21779289b6c48d24d578887"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x738dfea8a133b5fd384bd6242fa58f1119bcfed0cfca93899c95f1670d1460b905134cc91eabb429d2147b5f147d5d1f"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x032d5223828ee1c8943fdacfbcd25ce4bb2eacfd"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0xf42315c025ae7ef0e8a04175441e9617b0e315a9e7c8fc5f0a0bba4efc9775fea3a8af9b40c4aa37633718ccb5b3260d"))), ]), @@ -2622,14 +2622,14 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0x121632563dca7d7a560e5b243d7f27dc7dc72319f1486f67cb41751c5f5a42bd9f8efdd14e3f811e03c84e3ba36295a0cb2313bb9792cfc7d80a1669f0adc30934440adbd665ef96b3c30a2762cbaf932e6eb1b4a1c93063ec7f0b6f6aa2a9db")), index: 10368232928814555152'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x7bee235a632b5f79831f376843209740d409b9f8"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x8f40af9186eb70dea2f3105785a930511368e60d2235055c34a0be1a591c5b580eed67542c89a0f8a024c4a6bd1f9bb7"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0x72fdf4c5a62970c6d6c9ee395eec4dfd6fcca4de"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x540a810f4e9ad62bca1d677e9135d519100012f6f12a8f5105623762ba5de3782cb3baaf63c4a32cf03a036127d6d009"))), - ExecutionLayerExit( + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xd3a0f8518063d55c61423dce1bfcd2abd9a27a62"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x82bec5cd588df021e98087c703b995075ee1cfde2257eebed5e27f53a3a16903479fa2e6864ab3c3c397cd25b6ba3d4f"))), ]), @@ -2669,8 +2669,8 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0x8e274ccbdef898449a07a296386e5983ec423f7ddee02bb9d480ec99dca4f5074b8f6cf469758a45586f031e2ae0a5448aa133531cddf88e9bd2b9fae191fdc817c1989124f1866753fbc833f79fb78f89677df12bc6d288693e5362f2a972bd")), index: 15922103202526011942'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ - ExecutionLayerExit( + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ + ExecutionLayerWithdrawalRequest( source_address: ExecutionAddress.fromHex("0xe368e59ddc49ffac6818f01b4be692a517b6838e"), validator_pubkey: ValidatorPubKey(blob: hexToByteArray[48]("0x9c7a489a7498cada308db339f80aafeeff5e38ef7dc5803344a725b3b7f23d6d6162a33798a69660417b8fffb51c3d50"))) ]) @@ -2730,7 +2730,7 @@ suite "Eth1 monitor": signature: ValidatorSig(blob: hexToByteArray[96]("0x232d34989ba30727e4ae0aa874a4bfc3934d61d0295d8f1c5f8416523f5cd05a3181a03543ff7318c4f4b9207d006267dde451177612bd888f69b43ebea83a4289cd6615526160d7ecf2a09842d4c2e90ae9f207a440a348ed8ef31e0cf1fe8b")), index: 4403524705240661292'u64), ]), - exits: List[ExecutionLayerExit, MAX_EXECUTION_LAYER_EXITS].init(@[ + withdrawal_requests: List[ExecutionLayerWithdrawalRequest, MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD].init(@[ ]) )]