From 10b1faa5ef284d0c9e3e3f867d16d9f1e4cb7ecd Mon Sep 17 00:00:00 2001 From: Mario Vega Date: Wed, 4 Dec 2024 00:14:12 +0000 Subject: [PATCH 1/4] fix(forks): Update EIP-7002, EIP-7251 contracts --- .../forks/contracts/consolidation_request.bin | Bin 414 -> 414 bytes .../forks/contracts/withdrawal_request.bin | Bin 500 -> 504 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/ethereum_test_forks/forks/contracts/consolidation_request.bin b/src/ethereum_test_forks/forks/contracts/consolidation_request.bin index d777e1c4a63f900f668ccdad22f3cbc625565179..2256bbf9c644785132f1373713ef2eff44c2436b 100644 GIT binary patch delta 144 zcmbQoJdb&T1moq2hE`@7;f;(FnweUfnI^DIOkiZ3I3d9|EPBG^2`rNW0s_nu5=0U@ z!p#yHXN8-9i1?rch4|0W6I&zQo`(k{Fh<8mH#UkSGHQl5H8Li!FeR`sHYSuXHHIW4 lNH+#0hyZzvj3Gdl0+7W7Wlcz6W(=7S1e8g5Ia!0T3;>XvEwcas delta 154 zcmYkyF$%&k7=~f~v=^NIcU>o2+Sq`Lh&`bcC@C1u{=en{ECEzF)085 diff --git a/src/ethereum_test_forks/forks/contracts/withdrawal_request.bin b/src/ethereum_test_forks/forks/contracts/withdrawal_request.bin index 200950fa01eb549fe39dbe7f5a662eb7cf4a5095..b673917ae59445d7e947d2172e637d2bebd5fb8d 100644 GIT binary patch delta 216 zcmWm6u}T9$7zAKu@2XT6JTag}3M)Gy3EElM8DTjt*G?eZAeJqxk=H;cXRBR+zN zR`yDmnQ!7yX>TgeQs>GI-kG(=Q{IP2o{m^%|7gL)X0)QLb6-fyjBsSjG~6|Y)8 znw7_B7XRTo&fSk)GzIBtz5FnmjdeDJ)?+X+fR$p6z_kiJc^W#lML=KL972UYPjEiz wgiYbindEES9(`_Y!v0WRo=q8TJYKS3IeRnOS)!+k5mS#ZqqXz+&hI$+1I~&@(*OVf delta 218 zcmXAhu}Z{16h*m{bQW$f!3DRlP_Px^Vk1~=xkU)seZ>@Wr|>&WCf4%Cv9$4P#BUG< z!4D9$urz3MImJ2mC;QHHzIc*lRq;ez=UN`RFT3P-?{-s{#z^mo%s6s6gCJfwS^&7Y-lmgs0gK;iKwP2)U1(mVEl0adz1 A`Tzg` From d640671fbe746c4d910866a51e9eff884e4e3430 Mon Sep 17 00:00:00 2001 From: Mario Vega Date: Wed, 4 Dec 2024 00:15:11 +0000 Subject: [PATCH 2/4] fix(types): Remove empty requests from list --- .../tests/test_blockchain.py | 6 ------ src/ethereum_test_specs/blockchain.py | 4 +--- src/ethereum_test_types/types.py | 16 ++++++++-------- src/pytest_plugins/execute/rpc/hive.py | 7 +------ 4 files changed, 10 insertions(+), 23 deletions(-) diff --git a/src/ethereum_test_fixtures/tests/test_blockchain.py b/src/ethereum_test_fixtures/tests/test_blockchain.py index b861ed554a0..b121a1bfed5 100644 --- a/src/ethereum_test_fixtures/tests/test_blockchain.py +++ b/src/ethereum_test_fixtures/tests/test_blockchain.py @@ -704,7 +704,6 @@ source_pubkey=BLSPublicKey(1), target_pubkey=BLSPublicKey(2), ), - max_request_type=2, ).requests_list, validation_error=[ BlockException.INCORRECT_BLOCK_FORMAT, @@ -786,7 +785,6 @@ source_pubkey=BLSPublicKey(1), target_pubkey=BLSPublicKey(2), ), - max_request_type=2, ).requests_list ], ], @@ -861,7 +859,6 @@ source_pubkey=BLSPublicKey(1), target_pubkey=BLSPublicKey(2), ), - max_request_type=2, ).requests_list, validation_error=[ BlockException.INCORRECT_BLOCK_FORMAT, @@ -942,7 +939,6 @@ source_pubkey=BLSPublicKey(1), target_pubkey=BLSPublicKey(2), ), - max_request_type=2, ).requests_list ], ], @@ -1230,7 +1226,6 @@ def test_json_deserialization( source_pubkey=BLSPublicKey(1), target_pubkey=BLSPublicKey(2), ), - max_request_type=2, ).requests_list, ), [ @@ -1295,7 +1290,6 @@ def test_json_deserialization( source_pubkey=BLSPublicKey(1), target_pubkey=BLSPublicKey(2), ), - max_request_type=2, ).requests_list ], ], diff --git a/src/ethereum_test_specs/blockchain.py b/src/ethereum_test_specs/blockchain.py index 64a0ccde740..ca81a2ad785 100644 --- a/src/ethereum_test_specs/blockchain.py +++ b/src/ethereum_test_specs/blockchain.py @@ -356,9 +356,7 @@ def make_genesis( Withdrawal.list_root(env.withdrawals) if env.withdrawals is not None else None ), parent_beacon_block_root=env.parent_beacon_block_root, - requests_hash=Requests(max_request_type=fork.max_request_type(0, 0)) - if fork.header_requests_required(0, 0) - else None, + requests_hash=Requests() if fork.header_requests_required(0, 0) else None, fork=fork, ) diff --git a/src/ethereum_test_types/types.py b/src/ethereum_test_types/types.py index f9c32c4a292..95c9387fa27 100644 --- a/src/ethereum_test_types/types.py +++ b/src/ethereum_test_types/types.py @@ -3,6 +3,7 @@ """ from abc import abstractmethod +from collections import defaultdict from dataclasses import dataclass from functools import cached_property from typing import Any, ClassVar, Dict, Generic, List, Literal, Sequence, SupportsBytes, Tuple @@ -1204,7 +1205,6 @@ class Requests: def __init__( self, *requests: RequestBase, - max_request_type: int | None = None, requests_lists: List[List[RequestBase] | Bytes] | None = None, ): """ @@ -1217,21 +1217,21 @@ def __init__( self.requests_list.append(requests_list_to_bytes(requests_list)) return else: - - assert max_request_type is not None, "max_request_type must be provided" - - lists: List[List[RequestBase]] = [[] for _ in range(max_request_type + 1)] + lists: Dict[int, List[RequestBase]] = defaultdict(list) for r in requests: lists[r.type].append(r) - self.requests_list = [requests_list_to_bytes(requests_list) for requests_list in lists] + self.requests_list = [ + Bytes(bytes([request_type]) + requests_list_to_bytes(lists[request_type])) + for request_type in sorted(lists.keys()) + ] def __bytes__(self) -> bytes: """ Returns the requests hash. """ s: bytes = b"" - for i, r in enumerate(self.requests_list): + for r in self.requests_list: # Append the index of the request type to the request data before hashing - s = s + Bytes(bytes([i]) + r).sha256() + s = s + r.sha256() return Bytes(s).sha256() diff --git a/src/pytest_plugins/execute/rpc/hive.py b/src/pytest_plugins/execute/rpc/hive.py index 45251d6d037..2911ab1938e 100644 --- a/src/pytest_plugins/execute/rpc/hive.py +++ b/src/pytest_plugins/execute/rpc/hive.py @@ -254,12 +254,7 @@ def base_pre_genesis( if env.withdrawals is not None else None, parent_beacon_block_root=env.parent_beacon_block_root, - requests_hash=Requests( - max_request_type=base_fork.max_request_type( - block_number=block_number, - timestamp=timestamp, - ), - ) + requests_hash=Requests() if base_fork.header_requests_required(block_number=block_number, timestamp=timestamp) else None, ) From 483c5e75659a07240d1fbff0537f0680457d52b3 Mon Sep 17 00:00:00 2001 From: Mario Vega Date: Wed, 4 Dec 2024 00:15:37 +0000 Subject: [PATCH 3/4] fix(tests): Remove empty requests from lists in all tests --- tests/prague/eip6110_deposits/conftest.py | 2 -- .../conftest.py | 15 ++++-------- .../test_withdrawal_requests.py | 2 -- .../prague/eip7251_consolidations/conftest.py | 23 ++++--------------- .../test_consolidations.py | 10 ++------ .../conftest.py | 9 ++------ ...est_deposits_withdrawals_consolidations.py | 1 - .../eip7702_set_code_tx/test_set_code_txs.py | 4 +--- 8 files changed, 14 insertions(+), 52 deletions(-) diff --git a/tests/prague/eip6110_deposits/conftest.py b/tests/prague/eip6110_deposits/conftest.py index b099b079ffa..90625d1b6bd 100644 --- a/tests/prague/eip6110_deposits/conftest.py +++ b/tests/prague/eip6110_deposits/conftest.py @@ -75,12 +75,10 @@ def blocks( header_verify=Header( requests_hash=Requests( *included_requests, - max_request_type=fork.max_request_type(block_number=1, timestamp=1), ), ), requests=Requests( *block_body_override_requests, - max_request_type=fork.max_request_type(block_number=1, timestamp=1), ).requests_list if block_body_override_requests is not None else None, diff --git a/tests/prague/eip7002_el_triggerable_withdrawals/conftest.py b/tests/prague/eip7002_el_triggerable_withdrawals/conftest.py index 41f0b594365..75a19f184eb 100644 --- a/tests/prague/eip7002_el_triggerable_withdrawals/conftest.py +++ b/tests/prague/eip7002_el_triggerable_withdrawals/conftest.py @@ -95,16 +95,14 @@ def blocks( included_requests, fillvalue=[], ): - max_request_type = fork.max_request_type( + header_verify: Header | None = None + if fork.header_requests_required( block_number=len(blocks) + 1, timestamp=timestamp, - ) - header_verify: Header | None = None - if max_request_type > -1: + ): header_verify = Header( requests_hash=Requests( *block_included_requests, - max_request_type=max_request_type, ) ) else: @@ -121,12 +119,7 @@ def blocks( return blocks + [ Block( header_verify=Header( - requests_hash=Requests( - max_request_type=fork.max_request_type( - block_number=len(blocks) + 1, - timestamp=timestamp, - ) - ) + requests_hash=Requests() ), timestamp=timestamp, ) diff --git a/tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py b/tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py index ce3c535a589..a8e6b1f7782 100644 --- a/tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py +++ b/tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py @@ -711,13 +711,11 @@ def test_withdrawal_requests_negative( header_verify=Header( requests_hash=Requests( *included_requests, - max_request_type=fork.max_request_type(block_number=1, timestamp=1), ), ), requests=( Requests( *block_body_override_requests, - max_request_type=fork.max_request_type(block_number=1, timestamp=1), ).requests_list if block_body_override_requests is not None else None diff --git a/tests/prague/eip7251_consolidations/conftest.py b/tests/prague/eip7251_consolidations/conftest.py index 8f57088f7b4..bee44f1e258 100644 --- a/tests/prague/eip7251_consolidations/conftest.py +++ b/tests/prague/eip7251_consolidations/conftest.py @@ -96,18 +96,12 @@ def blocks( included_requests, fillvalue=[], ): - max_request_type = fork.max_request_type( + header_verify: Header | None = None + if fork.header_requests_required( block_number=len(blocks) + 1, timestamp=timestamp, - ) - header_verify: Header | None = None - if max_request_type > -1: - header_verify = Header( - requests_hash=Requests( - *block_included_requests, - max_request_type=max_request_type, - ) - ) + ): + header_verify = Header(requests_hash=Requests(*block_included_requests)) else: assert not block_included_requests blocks.append( @@ -121,14 +115,7 @@ def blocks( return blocks + [ Block( - header_verify=Header( - requests_hash=Requests( - max_request_type=fork.max_request_type( - block_number=len(blocks) + 1, - timestamp=timestamp, - ) - ) - ), + header_verify=Header(requests_hash=Requests()), timestamp=timestamp, ) ] # Add an empty block at the end to verify that no more consolidation requests are included diff --git a/tests/prague/eip7251_consolidations/test_consolidations.py b/tests/prague/eip7251_consolidations/test_consolidations.py index ca2d18f87a4..398f6f04f8b 100644 --- a/tests/prague/eip7251_consolidations/test_consolidations.py +++ b/tests/prague/eip7251_consolidations/test_consolidations.py @@ -760,16 +760,10 @@ def test_consolidation_requests_negative( Block( txs=sum((r.transactions() for r in requests), []), header_verify=Header( - requests_hash=Requests( - *included_requests, - max_request_type=fork.max_request_type(block_number=1, timestamp=1), - ), + requests_hash=Requests(*included_requests), ), requests=( - Requests( - *block_body_override_requests, - max_request_type=fork.max_request_type(block_number=1, timestamp=1), - ).requests_list + Requests(*block_body_override_requests).requests_list if block_body_override_requests is not None else None ), diff --git a/tests/prague/eip7685_general_purpose_el_requests/conftest.py b/tests/prague/eip7685_general_purpose_el_requests/conftest.py index 34a1cd70d7a..0c8be0dc9f5 100644 --- a/tests/prague/eip7685_general_purpose_el_requests/conftest.py +++ b/tests/prague/eip7685_general_purpose_el_requests/conftest.py @@ -80,10 +80,7 @@ def blocks( elif isinstance(r, ConsolidationRequestInteractionBase): valid_requests_list += r.valid_requests(consolidation_request_fee) - valid_requests = Requests( - *valid_requests_list, - max_request_type=fork.max_request_type(block_number=1, timestamp=1), - ) + valid_requests = Requests(*valid_requests_list) if block_body_override_requests is None and block_body_extra_requests is not None: block_body_override_requests = valid_requests.requests_list + block_body_extra_requests @@ -96,9 +93,7 @@ def blocks( return [ Block( txs=sum((r.transactions() for r in requests), []), - header_verify=Header( - requests_hash=valid_requests, - ), + header_verify=Header(requests_hash=valid_requests), requests=block_body_override_requests, exception=exception, rlp_modifier=rlp_modifier, diff --git a/tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py b/tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py index 92329cd05c4..c84ab7d39a2 100644 --- a/tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py +++ b/tests/prague/eip7685_general_purpose_el_requests/test_deposits_withdrawals_consolidations.py @@ -314,7 +314,6 @@ def test_valid_deposit_withdrawal_consolidation_request_from_same_tx( request.with_source_address(contract_address) for request in sorted(requests, key=lambda r: r.type) ], - max_request_type=fork.max_request_type(block_number=1, timestamp=1), ) ), ) diff --git a/tests/prague/eip7702_set_code_tx/test_set_code_txs.py b/tests/prague/eip7702_set_code_tx/test_set_code_txs.py index a423627279d..485bb7cf042 100644 --- a/tests/prague/eip7702_set_code_tx/test_set_code_txs.py +++ b/tests/prague/eip7702_set_code_tx/test_set_code_txs.py @@ -2884,9 +2884,7 @@ def test_set_code_to_system_contract( blocks=[ Block( txs=txs, - requests_hash=Requests( - max_request_type=fork.max_request_type(block_number=1) - ), # Verify nothing slipped into the requests trie + requests_hash=Requests(), # Verify nothing slipped into the requests trie ) ], post={ From 7cbc5a3ebf5fbe32cabb75e97a9b9ede3de829fb Mon Sep 17 00:00:00 2001 From: spencer-tb Date: Wed, 4 Dec 2024 16:59:00 +0700 Subject: [PATCH 4/4] chore: tox black fix. --- tests/prague/eip7002_el_triggerable_withdrawals/conftest.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/prague/eip7002_el_triggerable_withdrawals/conftest.py b/tests/prague/eip7002_el_triggerable_withdrawals/conftest.py index 75a19f184eb..7862b8dbe7e 100644 --- a/tests/prague/eip7002_el_triggerable_withdrawals/conftest.py +++ b/tests/prague/eip7002_el_triggerable_withdrawals/conftest.py @@ -118,9 +118,7 @@ def blocks( return blocks + [ Block( - header_verify=Header( - requests_hash=Requests() - ), + header_verify=Header(requests_hash=Requests()), timestamp=timestamp, ) ] # Add an empty block at the end to verify that no more withdrawal requests are included