From cf4bee265d35ca32e53306f02ca752bd170e9ed0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toni=20Wahrst=C3=A4tter?= Date: Thu, 11 Dec 2025 13:36:25 -0500 Subject: [PATCH 1/3] feat(specs): EIP-7928 move bal from payload --- src/ethereum/forks/amsterdam/blocks.py | 8 -------- src/ethereum/forks/amsterdam/fork.py | 14 ++++++++++++-- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/ethereum/forks/amsterdam/blocks.py b/src/ethereum/forks/amsterdam/blocks.py index 0d14066f47..143b3d18fe 100644 --- a/src/ethereum/forks/amsterdam/blocks.py +++ b/src/ethereum/forks/amsterdam/blocks.py @@ -19,7 +19,6 @@ from ethereum.crypto.hash import Hash32 -from .block_access_lists.rlp_types import BlockAccessList from .fork_types import Address, Bloom, Root from .transactions import ( AccessListTransaction, @@ -306,13 +305,6 @@ class Block: A tuple of withdrawals processed in this block. """ - block_access_list: BlockAccessList - """ - Block Access List containing all accounts and storage locations accessed - during block execution. Introduced in [EIP-7928]. - [EIP-7928]: https://eips.ethereum.org/EIPS/eip-7928 - """ - @slotted_freezable @dataclass diff --git a/src/ethereum/forks/amsterdam/fork.py b/src/ethereum/forks/amsterdam/fork.py index 7da3ed03ce..8aaefa54aa 100644 --- a/src/ethereum/forks/amsterdam/fork.py +++ b/src/ethereum/forks/amsterdam/fork.py @@ -30,6 +30,7 @@ from . import vm from .block_access_lists.builder import build_block_access_list +from .block_access_lists.rlp_types import BlockAccessList from .block_access_lists.rlp_utils import compute_block_access_list_hash from .blocks import Block, Header, Log, Receipt, Withdrawal, encode_receipt from .bloom import logs_bloom @@ -206,7 +207,9 @@ def get_last_256_block_hashes(chain: BlockChain) -> List[Hash32]: return recent_block_hashes -def state_transition(chain: BlockChain, block: Block) -> None: +def state_transition( + chain: BlockChain, block: Block, block_access_list: BlockAccessList +) -> None: """ Attempts to apply a block to an existing block chain. @@ -227,6 +230,8 @@ def state_transition(chain: BlockChain, block: Block) -> None: History and current state. block : Block to apply to `chain`. + block_access_list : + The block access list containing all state accesses during block execution. """ if len(rlp.encode(block)) > MAX_RLP_BLOCK_SIZE: @@ -256,6 +261,11 @@ def state_transition(chain: BlockChain, block: Block) -> None: transactions=block.transactions, withdrawals=block.withdrawals, ) + + # Verify the provided block access list matches what was computed + if block_output.block_access_list != block_access_list: + raise InvalidBlock("Block access list mismatch") + block_state_root = state_root(block_env.state) transactions_root = root(block_output.transactions_trie) receipt_root = root(block_output.receipts_trie) @@ -263,7 +273,7 @@ def state_transition(chain: BlockChain, block: Block) -> None: withdrawals_root = root(block_output.withdrawals_trie) requests_hash = compute_requests_hash(block_output.requests) computed_block_access_list_hash = compute_block_access_list_hash( - block_output.block_access_list + block_access_list ) if block_output.block_gas_used != block.header.gas_used: From 18b7e2a3f50fe8ea99b322479529305f2e918f79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toni=20Wahrst=C3=A4tter?= Date: Sat, 13 Dec 2025 13:40:03 -0500 Subject: [PATCH 2/3] remove BAL from stf --- src/ethereum/forks/amsterdam/fork.py | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/ethereum/forks/amsterdam/fork.py b/src/ethereum/forks/amsterdam/fork.py index 8aaefa54aa..3c6c9a7bd8 100644 --- a/src/ethereum/forks/amsterdam/fork.py +++ b/src/ethereum/forks/amsterdam/fork.py @@ -30,7 +30,6 @@ from . import vm from .block_access_lists.builder import build_block_access_list -from .block_access_lists.rlp_types import BlockAccessList from .block_access_lists.rlp_utils import compute_block_access_list_hash from .blocks import Block, Header, Log, Receipt, Withdrawal, encode_receipt from .bloom import logs_bloom @@ -207,9 +206,7 @@ def get_last_256_block_hashes(chain: BlockChain) -> List[Hash32]: return recent_block_hashes -def state_transition( - chain: BlockChain, block: Block, block_access_list: BlockAccessList -) -> None: +def state_transition(chain: BlockChain, block: Block) -> None: """ Attempts to apply a block to an existing block chain. @@ -230,8 +227,6 @@ def state_transition( History and current state. block : Block to apply to `chain`. - block_access_list : - The block access list containing all state accesses during block execution. """ if len(rlp.encode(block)) > MAX_RLP_BLOCK_SIZE: @@ -262,10 +257,6 @@ def state_transition( withdrawals=block.withdrawals, ) - # Verify the provided block access list matches what was computed - if block_output.block_access_list != block_access_list: - raise InvalidBlock("Block access list mismatch") - block_state_root = state_root(block_env.state) transactions_root = root(block_output.transactions_trie) receipt_root = root(block_output.receipts_trie) @@ -273,7 +264,7 @@ def state_transition( withdrawals_root = root(block_output.withdrawals_trie) requests_hash = compute_requests_hash(block_output.requests) computed_block_access_list_hash = compute_block_access_list_hash( - block_access_list + block_output.block_access_list ) if block_output.block_gas_used != block.header.gas_used: From 858d7c31899a5c1ce08c93883f3ad8afe1198497 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toni=20Wahrst=C3=A4tter?= Date: Sat, 13 Dec 2025 13:52:29 -0500 Subject: [PATCH 3/3] fix linter --- src/ethereum/forks/amsterdam/fork.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ethereum/forks/amsterdam/fork.py b/src/ethereum/forks/amsterdam/fork.py index 3c6c9a7bd8..7da3ed03ce 100644 --- a/src/ethereum/forks/amsterdam/fork.py +++ b/src/ethereum/forks/amsterdam/fork.py @@ -256,7 +256,6 @@ def state_transition(chain: BlockChain, block: Block) -> None: transactions=block.transactions, withdrawals=block.withdrawals, ) - block_state_root = state_root(block_env.state) transactions_root = root(block_output.transactions_trie) receipt_root = root(block_output.receipts_trie)