From 2f57424cfc5e071df440ea543c26a102fc38a32b Mon Sep 17 00:00:00 2001 From: Leo Lara Date: Fri, 1 May 2026 16:14:24 +0700 Subject: [PATCH 1/4] fix(ported_static): fork-specific Amsterdam balance for OoG refund tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EIP-8037's two-dimensional gas model changes the refund arithmetic on OoG paths in test_create_oog_from_call_refunds and test_create2_oog_from_call_refunds. The sender ends up with a non-zero residue where Cancun/Prague/Osaka leave 0 — 0x19CBC0 wei for SStore/SelfDestruct/LogOp OoG paths and 0x284E5C wei for the SStore + CREATE/CREATE2 paths. Add per-fork overrides for the five OoG `expect_entries_` blocks (data indexes [1,2,4,5,7,8,10,11], [13,14], [16,17], [19,20], [22,23]) so Amsterdam matches the new balance via resolve_expect_post's first-match rule. Other forks keep the original `balance=0` post-state. Drop the 36 corresponding entries from amsterdam_skip_list.txt and mark both test files `@manually-enhanced` to keep these overrides immune to future regeneration. Note: the residue values are observed empirically from the failing fill output on snøbal/4, not derived from the EIP-8037 specification text. A reviewer who knows EIP-8037 should confirm these are the right targets. Verified: --fork Amsterdam on the two test files -> 144 passed (24 parametrizations x 3 fixture variants x 2 files), 0 failed. --- tests/ported_static/amsterdam_skip_list.txt | 44 +------ .../test_create2_oog_from_call_refunds.py | 115 ++++++++++++++++++ .../test_create_oog_from_call_refunds.py | 76 ++++++++++++ 3 files changed, 195 insertions(+), 40 deletions(-) diff --git a/tests/ported_static/amsterdam_skip_list.txt b/tests/ported_static/amsterdam_skip_list.txt index 104e6ddfe25..9213b1511f1 100644 --- a/tests/ported_static/amsterdam_skip_list.txt +++ b/tests/ported_static/amsterdam_skip_list.txt @@ -8,7 +8,7 @@ # Entries are substring-matched against each pytest nodeid (after # stripping the fixture-format suffix in conftest.py). # -# Total entries: 5469 +# Total entries: 5433 # stAttackTest (2) stAttackTest/test_contract_creation_spam.py::test_contract_creation_spam[fork_Amsterdam] @@ -90,30 +90,12 @@ stCodeSizeLimit/test_codesize_valid.py::test_codesize_valid[fork_Amsterdam-d1] stCodeSizeLimit/test_create2_code_size_limit.py::test_create2_code_size_limit[fork_Amsterdam-valid] stCodeSizeLimit/test_create_code_size_limit.py::test_create_code_size_limit[fork_Amsterdam-valid] -# stCreate2 (41) +# stCreate2 (23) stCreate2/test_create2_contract_suicide_during_init_then_store_then_return.py::test_create2_contract_suicide_during_init_then_store_then_return[fork_Amsterdam] stCreate2/test_create2_first_byte_loop.py::test_create2_first_byte_loop[fork_Amsterdam-firstHalf] stCreate2/test_create2_oo_gafter_init_code.py::test_create2_oo_gafter_init_code[fork_Amsterdam--g1] stCreate2/test_create2_oo_gafter_init_code_returndata2.py::test_create2_oo_gafter_init_code_returndata2[fork_Amsterdam--g1] stCreate2/test_create2_oo_gafter_init_code_revert2.py::test_create2_oo_gafter_init_code_revert2[fork_Amsterdam] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-LogOp_OoG0] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-LogOp_OoG1] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SStore_CallCode_Refund_NoOoG] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SStore_Create2_Refund_OoG0] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SStore_Create2_Refund_OoG1] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SStore_Create_Refund_OoG0] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SStore_Create_Refund_OoG1] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SStore_DelegateCall_Refund_NoOoG] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG0] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG1] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG2] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG3] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG4] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG5] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG6] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG7] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SelfDestruct_Refund_OoG0] -stCreate2/test_create2_oog_from_call_refunds.py::test_create2_oog_from_call_refunds[fork_Amsterdam-SelfDestruct_Refund_OoG1] stCreate2/test_create2_smart_init_code.py::test_create2_smart_init_code[fork_Amsterdam-d0] stCreate2/test_create2_smart_init_code.py::test_create2_smart_init_code[fork_Amsterdam-d1] stCreate2/test_create2collision_selfdestructed.py::test_create2collision_selfdestructed[fork_Amsterdam-d0] @@ -133,7 +115,7 @@ stCreate2/test_revert_depth_create_address_collision.py::test_revert_depth_creat stCreate2/test_revert_depth_create_address_collision_berlin.py::test_revert_depth_create_address_collision_berlin[fork_Amsterdam-d1-g1-v0] stCreate2/test_revert_depth_create_address_collision_berlin.py::test_revert_depth_create_address_collision_berlin[fork_Amsterdam-d1-g1-v1] -# stCreateTest (61) +# stCreateTest (43) stCreateTest/test_create_address_warm_after_fail.py::test_create_address_warm_after_fail[fork_Amsterdam-create-0xef-v1] stCreateTest/test_create_address_warm_after_fail.py::test_create_address_warm_after_fail[fork_Amsterdam-create-code-too-big-v1] stCreateTest/test_create_address_warm_after_fail.py::test_create_address_warm_after_fail[fork_Amsterdam-create-contructor-revert-v1] @@ -166,24 +148,6 @@ stCreateTest/test_create_oo_gafter_init_code.py::test_create_oo_gafter_init_code stCreateTest/test_create_oo_gafter_init_code_returndata2.py::test_create_oo_gafter_init_code_returndata2[fork_Amsterdam--g1] stCreateTest/test_create_oo_gafter_init_code_returndata_size.py::test_create_oo_gafter_init_code_returndata_size[fork_Amsterdam] stCreateTest/test_create_oo_gafter_init_code_revert2.py::test_create_oo_gafter_init_code_revert2[fork_Amsterdam-d0] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-LogOp_OoG0] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-LogOp_OoG1] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SStore_Create2_Refund_OoG0] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SStore_Create2_Refund_OoG1] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SStore_Create_Refund_OoG0] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SStore_Create_Refund_OoG1] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_NoOoG2] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_NoOoG3] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG0] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG1] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG2] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG3] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG4] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG5] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG6] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SStore_Refund_OoG7] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SelfDestruct_Refund_OoG0] -stCreateTest/test_create_oog_from_call_refunds.py::test_create_oog_from_call_refunds[fork_Amsterdam-SelfDestruct_Refund_OoG1] stCreateTest/test_create_transaction_call_data.py::test_create_transaction_call_data[fork_Amsterdam-calldatacopy] stCreateTest/test_create_transaction_call_data.py::test_create_transaction_call_data[fork_Amsterdam-calldataload] stCreateTest/test_create_transaction_call_data.py::test_create_transaction_call_data[fork_Amsterdam-codecopy] @@ -5529,7 +5493,7 @@ stWalletTest/test_wallet_construction.py::test_wallet_construction[fork_Amsterda stWalletTest/test_wallet_construction_oog.py::test_wallet_construction_oog[fork_Amsterdam--g1] stWalletTest/test_wallet_construction_partial.py::test_wallet_construction_partial[fork_Amsterdam] -# stZeroKnowledge (19) +# stZeroKnowledge (20) stZeroKnowledge/test_point_mul_add.py::test_point_mul_add[fork_Amsterdam-d2-g3] stZeroKnowledge/test_point_mul_add.py::test_point_mul_add[fork_Amsterdam-d7-g3] stZeroKnowledge/test_point_mul_add.py::test_point_mul_add[fork_Amsterdam-d8-g3] diff --git a/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py b/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py index a74165a71e0..9da13940c72 100644 --- a/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py +++ b/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py @@ -3,6 +3,10 @@ Ported from: state_tests/stCreate2/Create2OOGFromCallRefundsFiller.yml + +@manually-enhanced: Do not overwrite. Post-state expectations include +fork-specific overrides for Amsterdam (EIP-8037 changes the OoG refund +arithmetic; sender keeps a non-zero residue). """ import pytest @@ -979,6 +983,45 @@ def test_create2_oog_from_call_refunds( ), }, }, + { + # EIP-8037 (Amsterdam) two-dimensional gas model changes the + # OoG refund — sender keeps a non-zero residue. Listed before + # the >=Cancun entry so resolve_expect_post matches Amsterdam + # specifically (first-match wins). + "indexes": { + "data": [1, 2, 4, 5, 7, 8, 10, 11], + "gas": -1, + "value": -1, + }, + "network": [">=Amsterdam"], + "result": { + sender: Account(balance=0x19CBC0, nonce=2), + Address( + 0x95E88628C53B5C0E40FF6DE65A3CF8CDC3B477F7 + ): Account.NONEXISTENT, + Address( + 0x66E1CC2616A273450621C8CC5E91D8CFD92494FA + ): Account.NONEXISTENT, + Address( + 0x6175BA9976476425B1CDA8E1DA479768FB429542 + ): Account.NONEXISTENT, + Address( + 0x8DFF0E448F1E078E9B8A7FCF0BF6C291F167AAEF + ): Account.NONEXISTENT, + Address( + 0xA2C4270800A5DBEEA48464E5F2420EFB1747725A + ): Account.NONEXISTENT, + Address( + 0x4D80F1150EE236ADFAAB47C70DF90E757CEF1141 + ): Account.NONEXISTENT, + Address( + 0x0566DC8DABC80FAD3ED9AB2B4309EBFD98894F44 + ): Account.NONEXISTENT, + Address( + 0x55305CC46BDAF1E755A05A771D55CFEC3FEDEF90 + ): Account.NONEXISTENT, + }, + }, { "indexes": { "data": [1, 2, 4, 5, 7, 8, 10, 11], @@ -1025,6 +1068,23 @@ def test_create2_oog_from_call_refunds( contract_26: Account(balance=0, nonce=1), }, }, + { + # Amsterdam refund residue (see SStore_Refund_OoG comment). + "indexes": {"data": [13, 14], "gas": -1, "value": -1}, + "network": [">=Amsterdam"], + "result": { + sender: Account(balance=0x19CBC0, nonce=2), + Address( + 0x8F6E6C741AC95C1A9109850EA1A3FFC722DC3BF8 + ): Account.NONEXISTENT, + Address( + 0x1F5D187BB3A48DBB2C011D0A6E731AC8131799AD + ): Account.NONEXISTENT, + contract_26: Account( + storage={1: 1}, code=bytes.fromhex("32ff"), nonce=1 + ), + }, + }, { "indexes": {"data": [13, 14], "gas": -1, "value": -1}, "network": [">=Cancun"], @@ -1051,6 +1111,20 @@ def test_create2_oog_from_call_refunds( ), }, }, + { + # Amsterdam refund residue (see SStore_Refund_OoG comment). + "indexes": {"data": [16, 17], "gas": -1, "value": -1}, + "network": [">=Amsterdam"], + "result": { + sender: Account(balance=0x19CBC0, nonce=2), + Address( + 0x74B39291DFC237C0D42FD15457754778F51C6DE8 + ): Account.NONEXISTENT, + Address( + 0x3399C78929EAB89C673A8986FF7CA9CCC49DB454 + ): Account.NONEXISTENT, + }, + }, { "indexes": {"data": [16, 17], "gas": -1, "value": -1}, "network": [">=Cancun"], @@ -1077,6 +1151,27 @@ def test_create2_oog_from_call_refunds( ), }, }, + { + # Amsterdam refund residue is larger for the SStore+Create + # paths (see SStore_Refund_OoG comment). + "indexes": {"data": [19, 20], "gas": -1, "value": -1}, + "network": [">=Amsterdam"], + "result": { + sender: Account(balance=0x284E5C, nonce=2), + Address( + 0xF922B2F70110C83F8EC7DF512B41BAC5627E8E59 + ): Account.NONEXISTENT, + Address( + 0x2CA788D22E21134AB1909266ED3B6C352E2A07CB + ): Account.NONEXISTENT, + Address( + 0x398426E736801FE712DF1EF078A3B6CA3C6F063B + ): Account.NONEXISTENT, + Address( + 0xB520686759CED3BC9D8898E02EE41623032FF47F + ): Account.NONEXISTENT, + }, + }, { "indexes": {"data": [19, 20], "gas": -1, "value": -1}, "network": [">=Cancun"], @@ -1109,6 +1204,26 @@ def test_create2_oog_from_call_refunds( ), }, }, + { + # Amsterdam refund residue (see SStore_Create_Refund_OoG). + "indexes": {"data": [22, 23], "gas": -1, "value": -1}, + "network": [">=Amsterdam"], + "result": { + sender: Account(balance=0x284E5C, nonce=2), + Address( + 0xDD2C53BFCAF5C1D698A2B21C0908F15F7FBFD635 + ): Account.NONEXISTENT, + Address( + 0x2D556BDBCC37C7A021879A21ABE25D1850D4FD36 + ): Account.NONEXISTENT, + Address( + 0xA99DA4EA490335C986D52B0CC9E3F78B286AC5FC + ): Account.NONEXISTENT, + Address( + 0xB4AB8AB0D363765586925E35C715E342E4AE3C63 + ): Account.NONEXISTENT, + }, + }, { "indexes": {"data": [22, 23], "gas": -1, "value": -1}, "network": [">=Cancun"], diff --git a/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py b/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py index 70c0bf3b070..ad39e86d63c 100644 --- a/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py +++ b/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py @@ -3,6 +3,10 @@ Ported from: state_tests/stCreateTest/CreateOOGFromCallRefundsFiller.yml + +@manually-enhanced: Do not overwrite. Post-state expectations include +fork-specific overrides for Amsterdam (EIP-8037 changes the OoG refund +arithmetic; sender keeps a non-zero residue). """ import pytest @@ -946,6 +950,24 @@ def test_create_oog_from_call_refunds( ), }, }, + { + # EIP-8037 (Amsterdam) two-dimensional gas model changes the + # OoG refund — sender keeps a non-zero residue. Listed before + # the >=Cancun entry so resolve_expect_post matches Amsterdam + # specifically (first-match wins). + "indexes": { + "data": [1, 2, 4, 5, 7, 8, 10, 11], + "gas": -1, + "value": -1, + }, + "network": [">=Amsterdam"], + "result": { + sender: Account(balance=0x19CBC0, nonce=2), + compute_create_address( + address=contract_0, nonce=1 + ): Account.NONEXISTENT, + }, + }, { "indexes": { "data": [1, 2, 4, 5, 7, 8, 10, 11], @@ -971,6 +993,20 @@ def test_create_oog_from_call_refunds( contract_26: Account(balance=0, nonce=1), }, }, + { + # Amsterdam refund residue (see SStore_Refund_OoG comment). + "indexes": {"data": [13, 14], "gas": -1, "value": -1}, + "network": [">=Amsterdam"], + "result": { + sender: Account(balance=0x19CBC0, nonce=2), + compute_create_address( + address=contract_0, nonce=1 + ): Account.NONEXISTENT, + contract_26: Account( + storage={1: 1}, code=bytes.fromhex("32ff"), nonce=1 + ), + }, + }, { "indexes": {"data": [13, 14], "gas": -1, "value": -1}, "network": [">=Cancun"], @@ -994,6 +1030,17 @@ def test_create_oog_from_call_refunds( ), }, }, + { + # Amsterdam refund residue (see SStore_Refund_OoG comment). + "indexes": {"data": [16, 17], "gas": -1, "value": -1}, + "network": [">=Amsterdam"], + "result": { + sender: Account(balance=0x19CBC0, nonce=2), + compute_create_address( + address=contract_0, nonce=1 + ): Account.NONEXISTENT, + }, + }, { "indexes": {"data": [16, 17], "gas": -1, "value": -1}, "network": [">=Cancun"], @@ -1017,6 +1064,21 @@ def test_create_oog_from_call_refunds( ), }, }, + { + # Amsterdam refund residue is larger for the SStore+Create + # paths (see SStore_Refund_OoG comment). + "indexes": {"data": [19, 20], "gas": -1, "value": -1}, + "network": [">=Amsterdam"], + "result": { + sender: Account(balance=0x284E5C, nonce=2), + compute_create_address( + address=contract_0, nonce=1 + ): Account.NONEXISTENT, + Address( + 0x522C2E1C5DA65010908EF9929E327FE8B6CC86DA + ): Account.NONEXISTENT, + }, + }, { "indexes": {"data": [19, 20], "gas": -1, "value": -1}, "network": [">=Cancun"], @@ -1043,6 +1105,20 @@ def test_create_oog_from_call_refunds( ), }, }, + { + # Amsterdam refund residue (see SStore_Create_Refund_OoG). + "indexes": {"data": [22, 23], "gas": -1, "value": -1}, + "network": [">=Amsterdam"], + "result": { + sender: Account(balance=0x284E5C, nonce=2), + compute_create_address( + address=contract_0, nonce=1 + ): Account.NONEXISTENT, + Address( + 0x06019547B6E360ABDAFEADE158A9667CC6106C17 + ): Account.NONEXISTENT, + }, + }, { "indexes": {"data": [22, 23], "gas": -1, "value": -1}, "network": [">=Cancun"], From db9b25d1a159f9589e0eace2454ac8939cd7b45e Mon Sep 17 00:00:00 2001 From: Leo Lara Date: Mon, 4 May 2026 20:41:01 +0700 Subject: [PATCH 2/4] refactor(ported_static): derive Amsterdam OoG residue from fork helpers Replace the hardcoded balance constants (0x19CBC0 / 0x284E5C) and the duplicated >=Amsterdam expect_entries_ blocks with formulas built from fork.create_state_gas() and fork.sstore_state_gas() (per kclowes review on PR #2790). Pre-Amsterdam these helpers return 0, so the same formula yields balance=0 on Cancun/Prague/Osaka and the original balance on Amsterdam. The five OoG block-pairs collapse to five single blocks under a single >=Cancun network constraint. The @manually-enhanced docstring now points at the helpers instead of describing fork-specific overrides. Verified: --fork Amsterdam and --fork Cancun on the two test files, 144 passed each, 0 failed. --- .../test_create2_oog_from_call_refunds.py | 142 +++--------------- .../test_create_oog_from_call_refunds.py | 103 +++---------- 2 files changed, 46 insertions(+), 199 deletions(-) diff --git a/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py b/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py index 9da13940c72..9e870f5bee0 100644 --- a/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py +++ b/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py @@ -4,9 +4,10 @@ Ported from: state_tests/stCreate2/Create2OOGFromCallRefundsFiller.yml -@manually-enhanced: Do not overwrite. Post-state expectations include -fork-specific overrides for Amsterdam (EIP-8037 changes the OoG refund -arithmetic; sender keeps a non-zero residue). +@manually-enhanced: Do not overwrite. Post-state expectations for OoG +parametrizations are computed from EIP-8037 state-gas helpers +(`fork.create_state_gas`, `fork.sstore_state_gas`) so the residue is +fork-correct on Amsterdam and collapses to zero on earlier forks. """ import pytest @@ -236,6 +237,20 @@ def test_create2_oog_from_call_refunds( base_fee_per_gas=10, ) + # Under EIP-8037 (Amsterdam), an OoG that aborts after a state- + # changing CREATE / SSTORE still refunds the state-gas component + # of those operations (state gas is not subject to the EIP-3529 + # /5 cap). Pre-Amsterdam these helpers return 0, so the same + # formulas collapse to balance=0 for older forks. + gas_price = env.base_fee_per_gas + residue_sstore = ( + fork.create_state_gas(code_size=0) + fork.sstore_state_gas() + ) * gas_price + residue_sstore_create = ( + fork.create_state_gas(code_size=0) + + fork.create_state_gas(code_size=1) + ) * gas_price + pre[sender] = Account(balance=0x3D0900, nonce=1) # Source: yul # berlin @@ -983,45 +998,6 @@ def test_create2_oog_from_call_refunds( ), }, }, - { - # EIP-8037 (Amsterdam) two-dimensional gas model changes the - # OoG refund — sender keeps a non-zero residue. Listed before - # the >=Cancun entry so resolve_expect_post matches Amsterdam - # specifically (first-match wins). - "indexes": { - "data": [1, 2, 4, 5, 7, 8, 10, 11], - "gas": -1, - "value": -1, - }, - "network": [">=Amsterdam"], - "result": { - sender: Account(balance=0x19CBC0, nonce=2), - Address( - 0x95E88628C53B5C0E40FF6DE65A3CF8CDC3B477F7 - ): Account.NONEXISTENT, - Address( - 0x66E1CC2616A273450621C8CC5E91D8CFD92494FA - ): Account.NONEXISTENT, - Address( - 0x6175BA9976476425B1CDA8E1DA479768FB429542 - ): Account.NONEXISTENT, - Address( - 0x8DFF0E448F1E078E9B8A7FCF0BF6C291F167AAEF - ): Account.NONEXISTENT, - Address( - 0xA2C4270800A5DBEEA48464E5F2420EFB1747725A - ): Account.NONEXISTENT, - Address( - 0x4D80F1150EE236ADFAAB47C70DF90E757CEF1141 - ): Account.NONEXISTENT, - Address( - 0x0566DC8DABC80FAD3ED9AB2B4309EBFD98894F44 - ): Account.NONEXISTENT, - Address( - 0x55305CC46BDAF1E755A05A771D55CFEC3FEDEF90 - ): Account.NONEXISTENT, - }, - }, { "indexes": { "data": [1, 2, 4, 5, 7, 8, 10, 11], @@ -1030,7 +1006,7 @@ def test_create2_oog_from_call_refunds( }, "network": [">=Cancun"], "result": { - sender: Account(balance=0, nonce=2), + sender: Account(balance=residue_sstore, nonce=2), Address( 0x95E88628C53B5C0E40FF6DE65A3CF8CDC3B477F7 ): Account.NONEXISTENT, @@ -1068,28 +1044,11 @@ def test_create2_oog_from_call_refunds( contract_26: Account(balance=0, nonce=1), }, }, - { - # Amsterdam refund residue (see SStore_Refund_OoG comment). - "indexes": {"data": [13, 14], "gas": -1, "value": -1}, - "network": [">=Amsterdam"], - "result": { - sender: Account(balance=0x19CBC0, nonce=2), - Address( - 0x8F6E6C741AC95C1A9109850EA1A3FFC722DC3BF8 - ): Account.NONEXISTENT, - Address( - 0x1F5D187BB3A48DBB2C011D0A6E731AC8131799AD - ): Account.NONEXISTENT, - contract_26: Account( - storage={1: 1}, code=bytes.fromhex("32ff"), nonce=1 - ), - }, - }, { "indexes": {"data": [13, 14], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=0, nonce=2), + sender: Account(balance=residue_sstore, nonce=2), Address( 0x8F6E6C741AC95C1A9109850EA1A3FFC722DC3BF8 ): Account.NONEXISTENT, @@ -1111,25 +1070,11 @@ def test_create2_oog_from_call_refunds( ), }, }, - { - # Amsterdam refund residue (see SStore_Refund_OoG comment). - "indexes": {"data": [16, 17], "gas": -1, "value": -1}, - "network": [">=Amsterdam"], - "result": { - sender: Account(balance=0x19CBC0, nonce=2), - Address( - 0x74B39291DFC237C0D42FD15457754778F51C6DE8 - ): Account.NONEXISTENT, - Address( - 0x3399C78929EAB89C673A8986FF7CA9CCC49DB454 - ): Account.NONEXISTENT, - }, - }, { "indexes": {"data": [16, 17], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=0, nonce=2), + sender: Account(balance=residue_sstore, nonce=2), Address( 0x74B39291DFC237C0D42FD15457754778F51C6DE8 ): Account.NONEXISTENT, @@ -1151,32 +1096,11 @@ def test_create2_oog_from_call_refunds( ), }, }, - { - # Amsterdam refund residue is larger for the SStore+Create - # paths (see SStore_Refund_OoG comment). - "indexes": {"data": [19, 20], "gas": -1, "value": -1}, - "network": [">=Amsterdam"], - "result": { - sender: Account(balance=0x284E5C, nonce=2), - Address( - 0xF922B2F70110C83F8EC7DF512B41BAC5627E8E59 - ): Account.NONEXISTENT, - Address( - 0x2CA788D22E21134AB1909266ED3B6C352E2A07CB - ): Account.NONEXISTENT, - Address( - 0x398426E736801FE712DF1EF078A3B6CA3C6F063B - ): Account.NONEXISTENT, - Address( - 0xB520686759CED3BC9D8898E02EE41623032FF47F - ): Account.NONEXISTENT, - }, - }, { "indexes": {"data": [19, 20], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=0, nonce=2), + sender: Account(balance=residue_sstore_create, nonce=2), Address( 0xF922B2F70110C83F8EC7DF512B41BAC5627E8E59 ): Account.NONEXISTENT, @@ -1204,31 +1128,11 @@ def test_create2_oog_from_call_refunds( ), }, }, - { - # Amsterdam refund residue (see SStore_Create_Refund_OoG). - "indexes": {"data": [22, 23], "gas": -1, "value": -1}, - "network": [">=Amsterdam"], - "result": { - sender: Account(balance=0x284E5C, nonce=2), - Address( - 0xDD2C53BFCAF5C1D698A2B21C0908F15F7FBFD635 - ): Account.NONEXISTENT, - Address( - 0x2D556BDBCC37C7A021879A21ABE25D1850D4FD36 - ): Account.NONEXISTENT, - Address( - 0xA99DA4EA490335C986D52B0CC9E3F78B286AC5FC - ): Account.NONEXISTENT, - Address( - 0xB4AB8AB0D363765586925E35C715E342E4AE3C63 - ): Account.NONEXISTENT, - }, - }, { "indexes": {"data": [22, 23], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=0, nonce=2), + sender: Account(balance=residue_sstore_create, nonce=2), Address( 0xDD2C53BFCAF5C1D698A2B21C0908F15F7FBFD635 ): Account.NONEXISTENT, diff --git a/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py b/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py index ad39e86d63c..ac6d190e5c9 100644 --- a/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py +++ b/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py @@ -4,9 +4,10 @@ Ported from: state_tests/stCreateTest/CreateOOGFromCallRefundsFiller.yml -@manually-enhanced: Do not overwrite. Post-state expectations include -fork-specific overrides for Amsterdam (EIP-8037 changes the OoG refund -arithmetic; sender keeps a non-zero residue). +@manually-enhanced: Do not overwrite. Post-state expectations for OoG +parametrizations are computed from EIP-8037 state-gas helpers +(`fork.create_state_gas`, `fork.sstore_state_gas`) so the residue is +fork-correct on Amsterdam and collapses to zero on earlier forks. """ import pytest @@ -237,6 +238,20 @@ def test_create_oog_from_call_refunds( base_fee_per_gas=10, ) + # Under EIP-8037 (Amsterdam), an OoG that aborts after a state- + # changing CREATE / SSTORE still refunds the state-gas component + # of those operations (state gas is not subject to the EIP-3529 + # /5 cap). Pre-Amsterdam these helpers return 0, so the same + # formulas collapse to balance=0 for older forks. + gas_price = env.base_fee_per_gas + residue_sstore = ( + fork.create_state_gas(code_size=0) + fork.sstore_state_gas() + ) * gas_price + residue_sstore_create = ( + fork.create_state_gas(code_size=0) + + fork.create_state_gas(code_size=1) + ) * gas_price + pre[sender] = Account(balance=0x3D0900, nonce=1) # Source: yul # berlin @@ -950,24 +965,6 @@ def test_create_oog_from_call_refunds( ), }, }, - { - # EIP-8037 (Amsterdam) two-dimensional gas model changes the - # OoG refund — sender keeps a non-zero residue. Listed before - # the >=Cancun entry so resolve_expect_post matches Amsterdam - # specifically (first-match wins). - "indexes": { - "data": [1, 2, 4, 5, 7, 8, 10, 11], - "gas": -1, - "value": -1, - }, - "network": [">=Amsterdam"], - "result": { - sender: Account(balance=0x19CBC0, nonce=2), - compute_create_address( - address=contract_0, nonce=1 - ): Account.NONEXISTENT, - }, - }, { "indexes": { "data": [1, 2, 4, 5, 7, 8, 10, 11], @@ -976,7 +973,7 @@ def test_create_oog_from_call_refunds( }, "network": [">=Cancun"], "result": { - sender: Account(balance=0, nonce=2), + sender: Account(balance=residue_sstore, nonce=2), compute_create_address( address=contract_0, nonce=1 ): Account.NONEXISTENT, @@ -993,25 +990,11 @@ def test_create_oog_from_call_refunds( contract_26: Account(balance=0, nonce=1), }, }, - { - # Amsterdam refund residue (see SStore_Refund_OoG comment). - "indexes": {"data": [13, 14], "gas": -1, "value": -1}, - "network": [">=Amsterdam"], - "result": { - sender: Account(balance=0x19CBC0, nonce=2), - compute_create_address( - address=contract_0, nonce=1 - ): Account.NONEXISTENT, - contract_26: Account( - storage={1: 1}, code=bytes.fromhex("32ff"), nonce=1 - ), - }, - }, { "indexes": {"data": [13, 14], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=0, nonce=2), + sender: Account(balance=residue_sstore, nonce=2), compute_create_address( address=contract_0, nonce=1 ): Account.NONEXISTENT, @@ -1030,22 +1013,11 @@ def test_create_oog_from_call_refunds( ), }, }, - { - # Amsterdam refund residue (see SStore_Refund_OoG comment). - "indexes": {"data": [16, 17], "gas": -1, "value": -1}, - "network": [">=Amsterdam"], - "result": { - sender: Account(balance=0x19CBC0, nonce=2), - compute_create_address( - address=contract_0, nonce=1 - ): Account.NONEXISTENT, - }, - }, { "indexes": {"data": [16, 17], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=0, nonce=2), + sender: Account(balance=residue_sstore, nonce=2), compute_create_address( address=contract_0, nonce=1 ): Account.NONEXISTENT, @@ -1064,26 +1036,11 @@ def test_create_oog_from_call_refunds( ), }, }, - { - # Amsterdam refund residue is larger for the SStore+Create - # paths (see SStore_Refund_OoG comment). - "indexes": {"data": [19, 20], "gas": -1, "value": -1}, - "network": [">=Amsterdam"], - "result": { - sender: Account(balance=0x284E5C, nonce=2), - compute_create_address( - address=contract_0, nonce=1 - ): Account.NONEXISTENT, - Address( - 0x522C2E1C5DA65010908EF9929E327FE8B6CC86DA - ): Account.NONEXISTENT, - }, - }, { "indexes": {"data": [19, 20], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=0, nonce=2), + sender: Account(balance=residue_sstore_create, nonce=2), compute_create_address( address=contract_0, nonce=1 ): Account.NONEXISTENT, @@ -1105,25 +1062,11 @@ def test_create_oog_from_call_refunds( ), }, }, - { - # Amsterdam refund residue (see SStore_Create_Refund_OoG). - "indexes": {"data": [22, 23], "gas": -1, "value": -1}, - "network": [">=Amsterdam"], - "result": { - sender: Account(balance=0x284E5C, nonce=2), - compute_create_address( - address=contract_0, nonce=1 - ): Account.NONEXISTENT, - Address( - 0x06019547B6E360ABDAFEADE158A9667CC6106C17 - ): Account.NONEXISTENT, - }, - }, { "indexes": {"data": [22, 23], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=0, nonce=2), + sender: Account(balance=residue_sstore_create, nonce=2), compute_create_address( address=contract_0, nonce=1 ): Account.NONEXISTENT, From 4618621e132e81ced776e2eb340db70512d59d4f Mon Sep 17 00:00:00 2001 From: Leo Lara Date: Mon, 4 May 2026 23:15:10 +0700 Subject: [PATCH 3/4] =?UTF-8?q?chore(ported=5Fstatic):=20fix=20lint=20?= =?UTF-8?q?=E2=80=94=20use=20literal=2010=20for=20gas=5Fprice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit env.base_fee_per_gas is typed Optional, so multiplying it by the state-gas helper sums tripped mypy's `int * None` check. Replace with a literal 10 (matching the env.base_fee_per_gas=10 above), with a comment that points to the env. Behavior unchanged; just satisfies mypy and applies ruff's auto-formatting. --- .../stCreate2/test_create2_oog_from_call_refunds.py | 8 ++++---- .../stCreateTest/test_create_oog_from_call_refunds.py | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py b/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py index 9e870f5bee0..a54c6947570 100644 --- a/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py +++ b/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py @@ -241,14 +241,14 @@ def test_create2_oog_from_call_refunds( # changing CREATE / SSTORE still refunds the state-gas component # of those operations (state gas is not subject to the EIP-3529 # /5 cap). Pre-Amsterdam these helpers return 0, so the same - # formulas collapse to balance=0 for older forks. - gas_price = env.base_fee_per_gas + # formulas collapse to balance=0 for older forks. gas_price is + # the literal 10 used by env.base_fee_per_gas above. + gas_price = 10 residue_sstore = ( fork.create_state_gas(code_size=0) + fork.sstore_state_gas() ) * gas_price residue_sstore_create = ( - fork.create_state_gas(code_size=0) - + fork.create_state_gas(code_size=1) + fork.create_state_gas(code_size=0) + fork.create_state_gas(code_size=1) ) * gas_price pre[sender] = Account(balance=0x3D0900, nonce=1) diff --git a/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py b/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py index ac6d190e5c9..7b569418a34 100644 --- a/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py +++ b/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py @@ -242,14 +242,14 @@ def test_create_oog_from_call_refunds( # changing CREATE / SSTORE still refunds the state-gas component # of those operations (state gas is not subject to the EIP-3529 # /5 cap). Pre-Amsterdam these helpers return 0, so the same - # formulas collapse to balance=0 for older forks. - gas_price = env.base_fee_per_gas + # formulas collapse to balance=0 for older forks. gas_price is + # the literal 10 used by env.base_fee_per_gas above. + gas_price = 10 residue_sstore = ( fork.create_state_gas(code_size=0) + fork.sstore_state_gas() ) * gas_price residue_sstore_create = ( - fork.create_state_gas(code_size=0) - + fork.create_state_gas(code_size=1) + fork.create_state_gas(code_size=0) + fork.create_state_gas(code_size=1) ) * gas_price pre[sender] = Account(balance=0x3D0900, nonce=1) From c799ffbb92e448ad1285c983a16b699cb9f0d3c4 Mon Sep 17 00:00:00 2001 From: Leo Lara Date: Tue, 5 May 2026 20:41:34 +0700 Subject: [PATCH 4/4] fix(ported_static): drop obsolete per-fork OoG balance override MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The per-fork balance overrides this branch added to test_create2_oog_from_call_refunds.py and test_create_oog_from_call_refunds.py were derived from the failing fill output on snøbal/4, where Amsterdam OoG paths left a sender residue. The EIP-8037 frame- level accounting changes now in snobal/6 fix that at the spec level — the residue collapses to zero on all forks. Override was wrong against the new spec. Take snobal/6's version of both files. Tests pass on Amsterdam without the override (144/144). Skip-list removals of the 36 corresponding entries (already in this branch) remain correct: the tests pass naturally now. --- .../test_create2_oog_from_call_refunds.py | 29 ++++--------------- .../test_create_oog_from_call_refunds.py | 29 ++++--------------- 2 files changed, 10 insertions(+), 48 deletions(-) diff --git a/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py b/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py index 7f088f54ce1..193e2fb3d80 100644 --- a/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py +++ b/tests/ported_static/stCreate2/test_create2_oog_from_call_refunds.py @@ -3,11 +3,6 @@ Ported from: state_tests/stCreate2/Create2OOGFromCallRefundsFiller.yml - -@manually-enhanced: Do not overwrite. Post-state expectations for OoG -parametrizations are computed from EIP-8037 state-gas helpers -(`fork.create_state_gas`, `fork.sstore_state_gas`) so the residue is -fork-correct on Amsterdam and collapses to zero on earlier forks. """ import pytest @@ -237,20 +232,6 @@ def test_create2_oog_from_call_refunds( base_fee_per_gas=10, ) - # Under EIP-8037 (Amsterdam), an OoG that aborts after a state- - # changing CREATE / SSTORE still refunds the state-gas component - # of those operations (state gas is not subject to the EIP-3529 - # /5 cap). Pre-Amsterdam these helpers return 0, so the same - # formulas collapse to balance=0 for older forks. gas_price is - # the literal 10 used by env.base_fee_per_gas above. - gas_price = 10 - residue_sstore = ( - fork.create_state_gas(code_size=0) + fork.sstore_state_gas() - ) * gas_price - residue_sstore_create = ( - fork.create_state_gas(code_size=0) + fork.create_state_gas(code_size=1) - ) * gas_price - pre[sender] = Account(balance=0x3D0900, nonce=1) # Source: yul # berlin @@ -1006,7 +987,7 @@ def test_create2_oog_from_call_refunds( }, "network": [">=Cancun"], "result": { - sender: Account(balance=residue_sstore, nonce=2), + sender: Account(balance=0, nonce=2), Address( 0x95E88628C53B5C0E40FF6DE65A3CF8CDC3B477F7 ): Account.NONEXISTENT, @@ -1048,7 +1029,7 @@ def test_create2_oog_from_call_refunds( "indexes": {"data": [13, 14], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=residue_sstore, nonce=2), + sender: Account(balance=0, nonce=2), Address( 0x8F6E6C741AC95C1A9109850EA1A3FFC722DC3BF8 ): Account.NONEXISTENT, @@ -1074,7 +1055,7 @@ def test_create2_oog_from_call_refunds( "indexes": {"data": [16, 17], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=residue_sstore, nonce=2), + sender: Account(balance=0, nonce=2), Address( 0x74B39291DFC237C0D42FD15457754778F51C6DE8 ): Account.NONEXISTENT, @@ -1100,7 +1081,7 @@ def test_create2_oog_from_call_refunds( "indexes": {"data": [19, 20], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=residue_sstore_create, nonce=2), + sender: Account(balance=0, nonce=2), Address( 0xF922B2F70110C83F8EC7DF512B41BAC5627E8E59 ): Account.NONEXISTENT, @@ -1132,7 +1113,7 @@ def test_create2_oog_from_call_refunds( "indexes": {"data": [22, 23], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=residue_sstore_create, nonce=2), + sender: Account(balance=0, nonce=2), Address( 0xDD2C53BFCAF5C1D698A2B21C0908F15F7FBFD635 ): Account.NONEXISTENT, diff --git a/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py b/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py index 96b31c37b46..b1ed59c9375 100644 --- a/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py +++ b/tests/ported_static/stCreateTest/test_create_oog_from_call_refunds.py @@ -3,11 +3,6 @@ Ported from: state_tests/stCreateTest/CreateOOGFromCallRefundsFiller.yml - -@manually-enhanced: Do not overwrite. Post-state expectations for OoG -parametrizations are computed from EIP-8037 state-gas helpers -(`fork.create_state_gas`, `fork.sstore_state_gas`) so the residue is -fork-correct on Amsterdam and collapses to zero on earlier forks. """ import pytest @@ -238,20 +233,6 @@ def test_create_oog_from_call_refunds( base_fee_per_gas=10, ) - # Under EIP-8037 (Amsterdam), an OoG that aborts after a state- - # changing CREATE / SSTORE still refunds the state-gas component - # of those operations (state gas is not subject to the EIP-3529 - # /5 cap). Pre-Amsterdam these helpers return 0, so the same - # formulas collapse to balance=0 for older forks. gas_price is - # the literal 10 used by env.base_fee_per_gas above. - gas_price = 10 - residue_sstore = ( - fork.create_state_gas(code_size=0) + fork.sstore_state_gas() - ) * gas_price - residue_sstore_create = ( - fork.create_state_gas(code_size=0) + fork.create_state_gas(code_size=1) - ) * gas_price - pre[sender] = Account(balance=0x3D0900, nonce=1) # Source: yul # berlin @@ -973,7 +954,7 @@ def test_create_oog_from_call_refunds( }, "network": [">=Cancun"], "result": { - sender: Account(balance=residue_sstore, nonce=2), + sender: Account(balance=0, nonce=2), compute_create_address( address=contract_0, nonce=1 ): Account.NONEXISTENT, @@ -994,7 +975,7 @@ def test_create_oog_from_call_refunds( "indexes": {"data": [13, 14], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=residue_sstore, nonce=2), + sender: Account(balance=0, nonce=2), compute_create_address( address=contract_0, nonce=1 ): Account.NONEXISTENT, @@ -1017,7 +998,7 @@ def test_create_oog_from_call_refunds( "indexes": {"data": [16, 17], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=residue_sstore, nonce=2), + sender: Account(balance=0, nonce=2), compute_create_address( address=contract_0, nonce=1 ): Account.NONEXISTENT, @@ -1043,7 +1024,7 @@ def test_create_oog_from_call_refunds( "indexes": {"data": [19, 20], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=residue_sstore_create, nonce=2), + sender: Account(balance=0, nonce=2), compute_create_address( address=contract_0, nonce=1 ): Account.NONEXISTENT, @@ -1072,7 +1053,7 @@ def test_create_oog_from_call_refunds( "indexes": {"data": [22, 23], "gas": -1, "value": -1}, "network": [">=Cancun"], "result": { - sender: Account(balance=residue_sstore_create, nonce=2), + sender: Account(balance=0, nonce=2), compute_create_address( address=contract_0, nonce=1 ): Account.NONEXISTENT,