4141from ..eip6110_deposits .helpers import DepositRequest
4242from ..eip7002_el_triggerable_withdrawals .helpers import WithdrawalRequest
4343from ..eip7251_consolidations .helpers import ConsolidationRequest
44+ from .helpers import AddressType
4445from .spec import Spec , ref_spec_7702
4546
4647REFERENCE_SPEC_GIT_PATH = ref_spec_7702 .git_path
@@ -804,10 +805,16 @@ def test_call_into_chain_delegating_set_code(
804805 "balance" ,
805806 [0 , 1 ],
806807)
808+ @pytest .mark .parametrize (
809+ "set_code_type" ,
810+ list (AddressType ),
811+ ids = lambda address_type : address_type .name ,
812+ )
807813def test_ext_code_on_set_code (
808814 state_test : StateTestFiller ,
809815 pre : Alloc ,
810816 balance : int ,
817+ set_code_type : AddressType ,
811818):
812819 """
813820 Test different ext*code operations on a set-code address.
@@ -835,9 +842,21 @@ def test_ext_code_on_set_code(
835842 callee_storage = Storage ()
836843
837844 auth_signer_storage = Storage ()
838- set_code = Op .SSTORE (slot_call_success , Op .CALL (address = callee_address )) + Op .STOP
839- auth_signer_storage [slot_call_success ] = True
840- set_code_to_address = pre .deploy_contract (set_code )
845+ set_code_to_address : Address
846+
847+ match set_code_type :
848+ case AddressType .EMPTY_ACCOUNT :
849+ set_code = Bytecode ()
850+ set_code_to_address = pre .fund_eoa (0 )
851+ case AddressType .EOA :
852+ set_code = Bytecode ()
853+ set_code_to_address = pre .fund_eoa (1 )
854+ case AddressType .CONTRACT :
855+ set_code = Op .SSTORE (slot_call_success , Op .CALL (address = callee_address )) + Op .STOP
856+ auth_signer_storage [slot_call_success ] = True
857+ set_code_to_address = pre .deploy_contract (set_code )
858+ case _:
859+ raise ValueError (f"Unsupported set code type: { set_code_type } " )
841860
842861 callee_storage [slot_caller ] = auth_signer
843862 callee_storage [slot_ext_code_size_result ] = len (set_code )
@@ -863,7 +882,9 @@ def test_ext_code_on_set_code(
863882 pre = pre ,
864883 tx = tx ,
865884 post = {
866- set_code_to_address : Account (storage = {}),
885+ set_code_to_address : Account .NONEXISTENT
886+ if set_code_type == AddressType .EMPTY_ACCOUNT
887+ else Account (storage = {}),
867888 auth_signer : Account (nonce = 1 , code = b"" , storage = auth_signer_storage , balance = balance ),
868889 callee_address : Account (storage = callee_storage ),
869890 },
0 commit comments