# Pectra Mainnet Testing ## Summary - Test transactions will be sent to mainnet for each EIP using [EEST's `execute` command](https://eest.ethereum.org/main/executing_tests/), with the exception of the EIP's in the next bullet point. - Approximately ~0.010533462656721374 Eth gas required for these tests. - EIP-6110 + EIP-7002 + EIP-7251 tests are run using a currently-active mainnet validator: - A currently-active mainnet validator, with 0x01 withdrawal credentials, will perform the following tests: - Send consolidation request to change withdrawal credentials to 0x02 type to validate EIP-7251. - Make a 1 Eth deposit to validate deposit requests in EIP-6110. - Send a withdrawal request with a non-zero amount to validate EIP-7002. ## Schedule - Fork Epoch: 364032 (May 7, 2025 10:05:11 UTC) - Fork Finalization Epoch: 364034 (May 7, 2025 10:17:59 UTC) - Testing will commence at the fork finalization epoch if the chain finalizes successfully without intervention. ## Test Spec ##### EEST branch https://github.com/ethereum/execution-spec-tests/tree/mainnet-marked-tests-defered-eoa-funding #### - EIP-2537 ##### Description Test using each pre-compile introduced in EIP-2537. ##### Command ``` uv run execute remote --fork=Prague -m mainnet tests/prague/eip2537_bls_12_381_precompiles/test_eip_mainnet.py --rpc-seed-key $RPC_SEED_KEY --rpc-endpoint $RPC_URL --rpc-chain-id $RPC_CHAIN_ID ``` ##### Transaction Hashes `tests/prague/eip2537_bls_12_381_precompiles/test_eip_mainnet.py::test_eip_2537[fork_Prague-state_test-G1ADD]`: [0x5f3ba22a2a7ad9d79492d667de6ad7e60bedca286de3a873cda8db571b8db199](https://etherscan.io/tx/0x5f3ba22a2a7ad9d79492d667de6ad7e60bedca286de3a873cda8db571b8db199) `tests/prague/eip2537_bls_12_381_precompiles/test_eip_mainnet.py::test_eip_2537[fork_Prague-state_test-G1MSM]`: [0x947ddcc44e3e311efdeb450a531a1d083a369e20445c58baeea67200217974f2](https://etherscan.io/tx/0x947ddcc44e3e311efdeb450a531a1d083a369e20445c58baeea67200217974f2) `tests/prague/eip2537_bls_12_381_precompiles/test_eip_mainnet.py::test_eip_2537[fork_Prague-state_test-G2ADD]`: [0xa0109267a59c216dae8c09eee3fe898376a331909562579a059e270879aa69f7](https://etherscan.io/tx/0xa0109267a59c216dae8c09eee3fe898376a331909562579a059e270879aa69f7) `tests/prague/eip2537_bls_12_381_precompiles/test_eip_mainnet.py::test_eip_2537[fork_Prague-state_test-G2MSM]`: [0x971d08f32a25e88e67c369fe3edf394c06c73bb9b6590dbf2e59853815bfb920](https://etherscan.io/tx/0x971d08f32a25e88e67c369fe3edf394c06c73bb9b6590dbf2e59853815bfb920) `tests/prague/eip2537_bls_12_381_precompiles/test_eip_mainnet.py::test_eip_2537[fork_Prague-state_test-PAIRING]`: [0x242d2e701ff23b8d134215ea4331566fa148e570ddec200fba3190d40fb9eff5](https://etherscan.io/tx/0x242d2e701ff23b8d134215ea4331566fa148e570ddec200fba3190d40fb9eff5) `tests/prague/eip2537_bls_12_381_precompiles/test_eip_mainnet.py::test_eip_2537[fork_Prague-state_test-fp_map_to_inf0]`: [0x5d4ef6ed292c906b4507acd0a937c81a9c0315e337ad788f74e27361950df638](https://etherscan.io/tx/0x5d4ef6ed292c906b4507acd0a937c81a9c0315e337ad788f74e27361950df638) `tests/prague/eip2537_bls_12_381_precompiles/test_eip_mainnet.py::test_eip_2537[fork_Prague-state_test-fp_map_to_inf1]`: [0x78bb640a029630b3bcdbec0c829453a9ace6f6987be4852efbcf6d59c4ce5580](https://etherscan.io/tx/0x78bb640a029630b3bcdbec0c829453a9ace6f6987be4852efbcf6d59c4ce5580) (Note: Test ID name mistake, this is actually MAP_FP2_TO_G2) ##### Outcome ✅ PASS ``` ================================================================= test session starts ================================================================== platform linux -- Python 3.10.12, pytest-7.4.4, pluggy-1.5.0 Generating fixtures for: Prague solc: 0.8.24 Start seed for EOA: * Log file: logs/execute-remote-20250507-104236-main.log rootdir: /home/marioevz/execution-spec-tests configfile: pytest-execute.ini plugins: html-4.1.1, json-report-1.5.0, xdist-3.6.1, regex-0.2.0, custom-report-1.0.1, metadata-3.1.1 collecting ... pytest-regex selected 7 tests to run for regex: .* collected 7 items tests/prague/eip2537_bls_12_381_precompiles/test_eip_mainnet.py ....... [7/7] ------------------------------ Log file: /home/marioevz/execution-spec-tests/logs/execute-remote-20250507-104236-main.log ------------------------------ ============================================================ 7 passed in 313.20s (0:05:13) ============================================================= ``` #### - EIP-2935 ##### Description Test calling the system contract to obtain a hash and compare against the result of `BLOCKHASH` opcode. ##### Command ``` uv run execute remote --fork=Prague -m mainnet tests/prague/eip2935_historical_block_hashes_from_state/test_eip_mainnet.py --rpc-seed-key $RPC_SEED_KEY --rpc-endpoint $RPC_URL --rpc-chain-id $RPC_CHAIN_ID ``` ##### Transaction Hashes [0x9e01e3ddedd893cc1a78234c1eebe0d670a4be69ff5c15d64185c5038a77f719](https://etherscan.io/tx/0x9e01e3ddedd893cc1a78234c1eebe0d670a4be69ff5c15d64185c5038a77f719) ##### Outcome ✅ PASS ``` ================================================================= test session starts ================================================================== platform linux -- Python 3.10.12, pytest-7.4.4, pluggy-1.5.0 Generating fixtures for: Prague solc: 0.8.24 Start seed for EOA: * Log file: logs/execute-remote-20250507-103800-main.log rootdir: /home/marioevz/execution-spec-tests configfile: pytest-execute.ini plugins: html-4.1.1, json-report-1.5.0, xdist-3.6.1, regex-0.2.0, custom-report-1.0.1, metadata-3.1.1 collecting ... pytest-regex selected 1 tests to run for regex: .* collected 1 item tests/prague/eip2935_historical_block_hashes_from_state/test_eip_mainnet.py . [1/1] ------------------------------ Log file: /home/marioevz/execution-spec-tests/logs/execute-remote-20250507-103800-main.log ------------------------------ ================================================================== 1 passed in 49.51s ================================================================== ``` #### - EIP-7623 ##### Description Test sending all transaction types with enough data to trigger the data floor cost introduced by EIP-7623. ##### Command ``` uv run execute remote --fork=Prague -m mainnet tests/prague/eip7623_increase_calldata_cost/test_eip_mainnet.py --rpc-seed-key $RPC_SEED_KEY --rpc-endpoint $RPC_URL --rpc-chain-id $RPC_CHAIN_ID ``` ##### Transaction Hashes `tests/prague/eip7623_increase_calldata_cost/test_eip_mainnet.py::test_eip_7623[fork_Prague-state_test----type_0_protected]`: [0x500f0576ddcea4200b07607b792269d920a9cd66df1b8fa3a89ed30809b37e56](https://etherscan.io/tx/0x500f0576ddcea4200b07607b792269d920a9cd66df1b8fa3a89ed30809b37e56) `tests/prague/eip7623_increase_calldata_cost/test_eip_mainnet.py::test_eip_7623[fork_Prague-state_test----type_1]`: [0x5c6b85d15e9d2b831cbcec3cf4871044eb4cc52e917ebe4e5b734eab998ef8da](https://etherscan.io/tx/0x5c6b85d15e9d2b831cbcec3cf4871044eb4cc52e917ebe4e5b734eab998ef8da) `tests/prague/eip7623_increase_calldata_cost/test_eip_mainnet.py::test_eip_7623[fork_Prague-state_test----type_2]`: [0xf776872f95f15d6c621c21920d10cdcd15771646e71b9f1e540f44036943013f](https://etherscan.io/tx/0xf776872f95f15d6c621c21920d10cdcd15771646e71b9f1e540f44036943013f) `tests/prague/eip7623_increase_calldata_cost/test_eip_mainnet.py::test_eip_7623[fork_Prague-state_test----type_4]`: [0x3ff034f0c94c28c7922a2ac1cd9ac70097e0dab04e1369b434ffd5ad6e0c046c](https://etherscan.io/tx/0x3ff034f0c94c28c7922a2ac1cd9ac70097e0dab04e1369b434ffd5ad6e0c046c) ##### Outcome ✅ PASS: ``` ================================================================= test session starts ================================================================== platform linux -- Python 3.10.12, pytest-7.4.4, pluggy-1.5.0 Generating fixtures for: Prague solc: 0.8.24 Start seed for EOA: * Log file: logs/execute-remote-20250507-105140-main.log rootdir: /home/marioevz/execution-spec-tests configfile: pytest-execute.ini plugins: html-4.1.1, json-report-1.5.0, xdist-3.6.1, regex-0.2.0, custom-report-1.0.1, metadata-3.1.1 collecting ... pytest-regex selected 6 tests to run for regex: .* collected 6 items tests/prague/eip7623_increase_calldata_cost/test_eip_mainnet.py .s..s. [6/6] ------------------------------ Log file: /home/marioevz/execution-spec-tests/logs/execute-remote-20250507-105140-main.log ------------------------------ ======================================================= 4 passed, 2 skipped in 115.98s (0:01:55) ======================================================= ``` #### - EIP-7702 ##### Description Test type-4 transaction to set a code delegation for an account, and call the account which sets the storage in the EOA. ##### Command ``` uv run execute remote --fork=Prague -m mainnet tests/prague/eip7702_set_code_tx/test_eip_mainnet.py --rpc-seed-key $RPC_SEED_KEY --rpc-endpoint $RPC_URL --rpc-chain-id $RPC_CHAIN_ID ``` ##### Transaction Hashes `tests/prague/eip7702_set_code_tx/test_eip_mainnet.py::test_eip_7702[fork_Prague-state_test]`: [0x1e89e5fc1622cb58703e3a82d77ceadfb1a45a66e59eb3c595e859185583a0f4](https://etherscan.io/tx/0x1e89e5fc1622cb58703e3a82d77ceadfb1a45a66e59eb3c595e859185583a0f4) ##### Outcome ✅ PASS: ``` ================================================================= test session starts ================================================================== platform linux -- Python 3.10.12, pytest-7.4.4, pluggy-1.5.0 Generating fixtures for: Prague solc: 0.8.24 Start seed for EOA: * Log file: logs/execute-remote-20250507-105724-main.log rootdir: /home/marioevz/execution-spec-tests configfile: pytest-execute.ini plugins: html-4.1.1, json-report-1.5.0, xdist-3.6.1, regex-0.2.0, custom-report-1.0.1, metadata-3.1.1 collecting ... pytest-regex selected 1 tests to run for regex: .* collected 1 item tests/prague/eip7702_set_code_tx/test_eip_mainnet.py . [1/1] ------------------------------ Log file: /home/marioevz/execution-spec-tests/logs/execute-remote-20250507-105724-main.log ------------------------------ ================================================================== 1 passed in 49.48s ================================================================== ``` #### - EIP-7251 ##### Description Send a transaction to the EIP-7251 system contract that triggers a consolidation request for an active mainnet validator and converts it to a compounding validator. Verify the validator is correctly converted to a compounding validator. Validator: 0x94630ee7300cd57c97c4bc4ccfc434ddc61ed9832b34ae74dfb40b8bcb7c4fddd80d791c5df6b1e31a975198dab631cd ##### Command N/A ##### Transaction Hashes [0x3fcd4c90da4df016c666bd571ec35f980ed06aafc96b0399282c584be9cc32a1](https://etherscan.io/tx/0x3fcd4c90da4df016c666bd571ec35f980ed06aafc96b0399282c584be9cc32a1) ##### Outcome ✅ PASS - Validator upgraded to 0x02 withdrawal credentials: ``` { "execution_optimistic": false, "finalized": false, "data": { "index": "1011535", "balance": "32000017023", "status": "active_ongoing", "validator": { "pubkey": "0x94630ee7300cd57c97c4bc4ccfc434ddc61ed9832b34ae74dfb40b8bcb7c4fddd80d791c5df6b1e31a975198dab631cd", "withdrawal_credentials": "0x020000000000000000000000d2f75c89daa9fbf469ec11e8aee102a43a183545", "effective_balance": "32000000000", "slashed": false, "activation_eligibility_epoch": "241057", "activation_epoch": "241092", "exit_epoch": "18446744073709551615", "withdrawable_epoch": "18446744073709551615" } } } ``` #### - EIP-6110 ##### Description Send a deposit transaction for 1 Eth to an active validator. Verify the deposit amount is correctly added to the active validator's balance. Validator: 0x94630ee7300cd57c97c4bc4ccfc434ddc61ed9832b34ae74dfb40b8bcb7c4fddd80d791c5df6b1e31a975198dab631cd ##### Command N/A ##### Transaction Hashes [0x0a25e918602a6dcfc423551921a8c83c19bb0fb004477f8dfe6dd2bd4fd78da6](https://etherscan.io/tx/0x0a25e918602a6dcfc423551921a8c83c19bb0fb004477f8dfe6dd2bd4fd78da6) ##### Outcome ✅ PASS: Pending deposit shows up in the pending deposits queue: ``` { "pubkey": "0x94630ee7300cd57c97c4bc4ccfc434ddc61ed9832b34ae74dfb40b8bcb7c4fddd80d791c5df6b1e31a975198dab631cd", "withdrawal_credentials": "0x0000000000000000000000000000000000000000000000000000000000000000", "amount": "1000000000", "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "slot": "11649134" }, ``` (Empty signature/withdrawal credentials is expected) #### - EIP-7002 ##### Description Send a transaction to the EIP-7002 system contract that triggers a partial withdrawal request for an active mainnet validator. Validator: 0x94630ee7300cd57c97c4bc4ccfc434ddc61ed9832b34ae74dfb40b8bcb7c4fddd80d791c5df6b1e31a975198dab631cd ##### Command N/A ##### Transaction Hashes [0x94f23a6bfe0bc26cfc164e19e46a4dd30ef2bc6ae76124255184ffa61d38af61](https://etherscan.io/tx/0x94f23a6bfe0bc26cfc164e19e46a4dd30ef2bc6ae76124255184ffa61d38af61) ##### Outcome ✅ PASS: Partial withdrawal shows up in the pending partial withdrawals queue: ``` { "execution_optimistic": false, "finalized": false, "data": [ { "validator_index": "1011535", "amount": "1", "withdrawable_epoch": "364301" } ] } ```