diff --git a/ConsensusSpecPreset-mainnet.md b/ConsensusSpecPreset-mainnet.md index 97b241cb5..76ffe9cf0 100644 --- a/ConsensusSpecPreset-mainnet.md +++ b/ConsensusSpecPreset-mainnet.md @@ -2638,7 +2638,7 @@ OK: 11/11 Fail: 0/11 Skip: 0/11 + [Valid] EF - Electra - Operations - Deposit - top_up__zero_balance OK ``` OK: 21/21 Fail: 0/21 Skip: 0/21 -## EF - Electra - Operations - Deposit Receipt [Preset: mainnet] +## EF - Electra - Operations - Deposit Receipt [Preset: mainnet] ```diff + [Valid] EF - Electra - Operations - Deposit Receipt - correct_sig_but_forked_state OK + [Valid] EF - Electra - Operations - Deposit Receipt - effective_deposit_with_genesis_for OK @@ -2677,6 +2677,48 @@ OK: 17/17 Fail: 0/17 Skip: 0/17 + [Valid] EF - Electra - Operations - Execution Layer Withdrawal Request - pending_withdra OK ``` OK: 14/14 Fail: 0/14 Skip: 0/14 +## EF - Electra - Operations - Execution Payload [Preset: mainnet] +```diff ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_everything_first_pay OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_everything_regular_p OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_execution_first_payl OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_execution_regular_pa OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_parent_hash_first_pa OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_parent_hash_regular_ OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_pre_randao_regular_p OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_prev_randao_first_pa OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_correct_input__execution OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_exceed_max_blobs_per_blo OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_future_timestamp_first_p OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_future_timestamp_regular OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_past_timestamp_first_pay OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_past_timestamp_regular_p OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_randomized_non_validated OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_randomized_non_validated OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_blob_tx_type OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_block_hash OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_commitment OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_commitments_order OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_transaction_length_1_b OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_transaction_length_1_e OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_transaction_length_32_ OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_transaction_length_emp OK ++ [Valid] EF - Electra - Operations - Execution Payload - no_transactions_with_commitments OK ++ [Valid] EF - Electra - Operations - Execution Payload - non_empty_extra_data_first_paylo OK ++ [Valid] EF - Electra - Operations - Execution Payload - non_empty_extra_data_regular_pay OK ++ [Valid] EF - Electra - Operations - Execution Payload - non_empty_transactions_first_pay OK ++ [Valid] EF - Electra - Operations - Execution Payload - non_empty_transactions_regular_p OK ++ [Valid] EF - Electra - Operations - Execution Payload - randomized_non_validated_executi OK ++ [Valid] EF - Electra - Operations - Execution Payload - randomized_non_validated_executi OK ++ [Valid] EF - Electra - Operations - Execution Payload - success_first_payload OK ++ [Valid] EF - Electra - Operations - Execution Payload - success_first_payload_with_gap_s OK ++ [Valid] EF - Electra - Operations - Execution Payload - success_regular_payload OK ++ [Valid] EF - Electra - Operations - Execution Payload - success_regular_payload_with_gap OK ++ [Valid] EF - Electra - Operations - Execution Payload - zero_length_transaction_first_pa OK ++ [Valid] EF - Electra - Operations - Execution Payload - zero_length_transaction_regular_ OK ++ [Valid] EF - Electra - Operations - Execution Payload - zeroed_commitment OK +``` +OK: 38/38 Fail: 0/38 Skip: 0/38 ## EF - Electra - Operations - Proposer Slashing [Preset: mainnet] ```diff + [Invalid] EF - Electra - Operations - Proposer Slashing - invalid_different_proposer_indic OK @@ -3443,4 +3485,4 @@ OK: 69/88 Fail: 0/88 Skip: 19/88 OK: 3/3 Fail: 0/3 Skip: 0/3 ---TOTAL--- -OK: 2754/2773 Fail: 0/2773 Skip: 19/2773 +OK: 2792/2811 Fail: 0/2811 Skip: 19/2811 diff --git a/ConsensusSpecPreset-minimal.md b/ConsensusSpecPreset-minimal.md index c5cd291ee..8cccfb456 100644 --- a/ConsensusSpecPreset-minimal.md +++ b/ConsensusSpecPreset-minimal.md @@ -2774,7 +2774,7 @@ OK: 20/20 Fail: 0/20 Skip: 0/20 + [Valid] EF - Electra - Operations - Deposit - top_up__zero_balance OK ``` OK: 21/21 Fail: 0/21 Skip: 0/21 -## EF - Electra - Operations - Deposit Receipt [Preset: minimal] +## EF - Electra - Operations - Deposit Receipt [Preset: minimal] ```diff + [Valid] EF - Electra - Operations - Deposit Receipt - correct_sig_but_forked_state OK + [Valid] EF - Electra - Operations - Deposit Receipt - effective_deposit_with_genesis_for OK @@ -2823,6 +2823,48 @@ OK: 17/17 Fail: 0/17 Skip: 0/17 + [Valid] EF - Electra - Operations - Execution Layer Withdrawal Request - pending_withdra OK ``` OK: 24/24 Fail: 0/24 Skip: 0/24 +## EF - Electra - Operations - Execution Payload [Preset: minimal] +```diff ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_everything_first_pay OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_everything_regular_p OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_execution_first_payl OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_execution_regular_pa OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_parent_hash_first_pa OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_parent_hash_regular_ OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_pre_randao_regular_p OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_bad_prev_randao_first_pa OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_correct_input__execution OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_exceed_max_blobs_per_blo OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_future_timestamp_first_p OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_future_timestamp_regular OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_past_timestamp_first_pay OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_past_timestamp_regular_p OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_randomized_non_validated OK ++ [Invalid] EF - Electra - Operations - Execution Payload - invalid_randomized_non_validated OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_blob_tx_type OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_block_hash OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_commitment OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_commitments_order OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_transaction_length_1_b OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_transaction_length_1_e OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_transaction_length_32_ OK ++ [Valid] EF - Electra - Operations - Execution Payload - incorrect_transaction_length_emp OK ++ [Valid] EF - Electra - Operations - Execution Payload - no_transactions_with_commitments OK ++ [Valid] EF - Electra - Operations - Execution Payload - non_empty_extra_data_first_paylo OK ++ [Valid] EF - Electra - Operations - Execution Payload - non_empty_extra_data_regular_pay OK ++ [Valid] EF - Electra - Operations - Execution Payload - non_empty_transactions_first_pay OK ++ [Valid] EF - Electra - Operations - Execution Payload - non_empty_transactions_regular_p OK ++ [Valid] EF - Electra - Operations - Execution Payload - randomized_non_validated_executi OK ++ [Valid] EF - Electra - Operations - Execution Payload - randomized_non_validated_executi OK ++ [Valid] EF - Electra - Operations - Execution Payload - success_first_payload OK ++ [Valid] EF - Electra - Operations - Execution Payload - success_first_payload_with_gap_s OK ++ [Valid] EF - Electra - Operations - Execution Payload - success_regular_payload OK ++ [Valid] EF - Electra - Operations - Execution Payload - success_regular_payload_with_gap OK ++ [Valid] EF - Electra - Operations - Execution Payload - zero_length_transaction_first_pa OK ++ [Valid] EF - Electra - Operations - Execution Payload - zero_length_transaction_regular_ OK ++ [Valid] EF - Electra - Operations - Execution Payload - zeroed_commitment OK +``` +OK: 38/38 Fail: 0/38 Skip: 0/38 ## EF - Electra - Operations - Proposer Slashing [Preset: minimal] ```diff + [Invalid] EF - Electra - Operations - Proposer Slashing - invalid_different_proposer_indic OK @@ -3745,4 +3787,4 @@ OK: 185/207 Fail: 0/207 Skip: 22/207 OK: 3/3 Fail: 0/3 Skip: 0/3 ---TOTAL--- -OK: 3025/3047 Fail: 0/3047 Skip: 22/3047 +OK: 3063/3085 Fail: 0/3085 Skip: 22/3085 diff --git a/beacon_chain/spec/state_transition_block.nim b/beacon_chain/spec/state_transition_block.nim index e5204afff..a94be0766 100644 --- a/beacon_chain/spec/state_transition_block.nim +++ b/beacon_chain/spec/state_transition_block.nim @@ -822,7 +822,7 @@ type SomeElectraBeaconBlockBody = electra.BeaconBlockBody | electra.SigVerifiedBeaconBlockBody | electra.TrustedBeaconBlockBody -# TODO spec ref URL when available +# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.0/specs/electra/beacon-chain.md#modified-process_execution_payload proc process_execution_payload*( state: var electra.BeaconState, body: SomeElectraBeaconBlockBody, notify_new_payload: electra.ExecutePayload): Result[void, cstring] = @@ -868,7 +868,11 @@ proc process_execution_payload*( transactions_root: hash_tree_root(payload.transactions), withdrawals_root: hash_tree_root(payload.withdrawals), blob_gas_used: payload.blob_gas_used, - excess_blob_gas: payload.excess_blob_gas) + excess_blob_gas: payload.excess_blob_gas, + deposit_receipts_root: + hash_tree_root(payload.deposit_receipts), # [New in Electra:EIP6110] + withdrawal_requests_root: + hash_tree_root(payload.withdrawal_requests)) # [New in Electra:EIP7002:EIP7251] ok() diff --git a/tests/consensus_spec/capella/test_fixture_operations.nim b/tests/consensus_spec/capella/test_fixture_operations.nim index 986a5923a..b0c989cbc 100644 --- a/tests/consensus_spec/capella/test_fixture_operations.nim +++ b/tests/consensus_spec/capella/test_fixture_operations.nim @@ -142,7 +142,7 @@ suite baseDescription & "BLS to execution change " & preset(): from ".."/".."/".."/beacon_chain/bloomfilter import constructBloomFilter suite baseDescription & "Deposit " & preset(): - proc applyDeposit( + func applyDeposit( preState: var capella.BeaconState, deposit: Deposit): Result[void, cstring] = process_deposit( @@ -154,7 +154,7 @@ suite baseDescription & "Deposit " & preset(): OpDepositsDir, suiteName, "Deposit", "deposit", applyDeposit, path) suite baseDescription & "Execution Payload " & preset(): - proc makeApplyExecutionPayloadCb(path: string): auto = + func makeApplyExecutionPayloadCb(path: string): auto = return proc( preState: var capella.BeaconState, body: capella.BeaconBlockBody): Result[void, cstring] {.raises: [IOError].} = @@ -219,7 +219,7 @@ suite baseDescription & "Voluntary Exit " & preset(): applyVoluntaryExit, path) suite baseDescription & "Withdrawals " & preset(): - proc applyWithdrawals( + func applyWithdrawals( preState: var capella.BeaconState, executionPayload: capella.ExecutionPayload): Result[void, cstring] = process_withdrawals(preState, executionPayload) diff --git a/tests/consensus_spec/electra/test_fixture_operations.nim b/tests/consensus_spec/electra/test_fixture_operations.nim index c2e9333e8..a0674bddf 100644 --- a/tests/consensus_spec/electra/test_fixture_operations.nim +++ b/tests/consensus_spec/electra/test_fixture_operations.nim @@ -22,7 +22,7 @@ import ../../helpers/debug_state from std/sequtils import mapIt, toSeq -#from std/strutils import contains +from std/strutils import contains from ../../../beacon_chain/spec/beaconstate import get_base_reward_per_increment, get_state_exit_queue_info, get_total_active_balance, process_attestation @@ -183,7 +183,7 @@ suite baseDescription & "Deposit " & preset(): runTest[Deposit, typeof applyDeposit]( OpDepositsDir, suiteName, "Deposit", "deposit", applyDeposit, path) -suite baseDescription & "Deposit Receipt" & preset(): +suite baseDescription & "Deposit Receipt " & preset(): func applyDepositReceipt( preState: var electra.BeaconState, depositReceipt: DepositReceipt): Result[void, cstring] = @@ -196,23 +196,22 @@ suite baseDescription & "Deposit Receipt" & preset(): OpDepositReceiptDir, suiteName, "Deposit Receipt", "deposit_receipt", applyDepositReceipt, path) -when false: - suite baseDescription & "Execution Payload " & preset(): - func makeApplyExecutionPayloadCb(path: string): auto = - return proc( - preState: var electra.BeaconState, body: electra.BeaconBlockBody): - Result[void, cstring] {.raises: [IOError].} = - let payloadValid = os_ops.readFile( - OpExecutionPayloadDir/"pyspec_tests"/path/"execution.yaml" - ).contains("execution_valid: true") - func executePayload(_: electra.ExecutionPayload): bool = payloadValid - process_execution_payload(preState, body, executePayload) +suite baseDescription & "Execution Payload " & preset(): + func makeApplyExecutionPayloadCb(path: string): auto = + return proc( + preState: var electra.BeaconState, body: electra.BeaconBlockBody): + Result[void, cstring] {.raises: [IOError].} = + let payloadValid = os_ops.readFile( + OpExecutionPayloadDir/"pyspec_tests"/path/"execution.yaml" + ).contains("execution_valid: true") + func executePayload(_: electra.ExecutionPayload): bool = payloadValid + process_execution_payload(preState, body, executePayload) - for path in walkTests(OpExecutionPayloadDir): - let applyExecutionPayload = makeApplyExecutionPayloadCb(path) - runTest[electra.BeaconBlockBody, typeof applyExecutionPayload]( - OpExecutionPayloadDir, suiteName, "Execution Payload", "body", - applyExecutionPayload, path) + for path in walkTests(OpExecutionPayloadDir): + let applyExecutionPayload = makeApplyExecutionPayloadCb(path) + runTest[electra.BeaconBlockBody, typeof applyExecutionPayload]( + OpExecutionPayloadDir, suiteName, "Execution Payload", "body", + applyExecutionPayload, path) suite baseDescription & "Execution Layer Withdrawal Request " & preset(): func applyExecutionLayerWithdrawalRequest(