Skip to content

test_selfdestruct_pre_existing()

Documentation for tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing@83970623.

Generate fixtures for these test cases for Prague with:

fill -v tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing --fork Prague

Test calling a previously created account that contains a selfdestruct, and verify its balance is sent to the destination address.

After EIP-6780, the balance should be sent to the send-all recipient address, similar to the behavior before the EIP, but the account is not deleted.

Test using
  • Different send-all recipient addresses: single, multiple, including self
  • Different initial balances for the self-destructing contract
Source code in tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
@pytest.mark.parametrize(
    "call_times,sendall_recipient_addresses",
    [
        pytest.param(
            1,
            [PRE_DEPLOY_CONTRACT_1],
            id="single_call",
        ),
        pytest.param(
            1,
            [SELF_ADDRESS],
            id="single_call_self",
        ),
        pytest.param(
            2,
            [PRE_DEPLOY_CONTRACT_1],
            id="multiple_calls_single_sendall_recipient",
        ),
        pytest.param(
            2,
            [SELF_ADDRESS],
            id="multiple_calls_single_self_recipient",
        ),
        pytest.param(
            3,
            [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3],
            id="multiple_calls_multiple_sendall_recipients",
        ),
        pytest.param(
            3,
            [SELF_ADDRESS, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3],
            id="multiple_calls_multiple_sendall_recipients_including_self",
        ),
        pytest.param(
            3,
            [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, SELF_ADDRESS],
            id="multiple_calls_multiple_sendall_recipients_including_self_last",
        ),
        pytest.param(
            6,
            [SELF_ADDRESS, PRE_DEPLOY_CONTRACT_2, PRE_DEPLOY_CONTRACT_3],
            id="multiple_calls_multiple_repeating_sendall_recipients_including_self",
        ),
        pytest.param(
            6,
            [PRE_DEPLOY_CONTRACT_1, PRE_DEPLOY_CONTRACT_2, SELF_ADDRESS],
            id="multiple_calls_multiple_repeating_sendall_recipients_including_self_last",
        ),
    ],
    indirect=["sendall_recipient_addresses"],
)
@pytest.mark.parametrize("selfdestruct_contract_initial_balance", [0, 100_000])
@pytest.mark.valid_from("Shanghai")
def test_selfdestruct_pre_existing(
    state_test: StateTestFiller,
    eip_enabled: bool,
    env: Environment,
    pre: Alloc,
    sender: EOA,
    selfdestruct_code: Bytecode,
    selfdestruct_contract_initial_balance: int,
    sendall_recipient_addresses: List[Address],
    call_times: int,
):
    """
    Test calling a previously created account that contains a selfdestruct, and verify its balance
    is sent to the destination address.

    After EIP-6780, the balance should be sent to the send-all recipient address, similar to
    the behavior before the EIP, but the account is not deleted.

    Test using:
        - Different send-all recipient addresses: single, multiple, including self
        - Different initial balances for the self-destructing contract
    """
    selfdestruct_contract_address = pre.deploy_contract(
        selfdestruct_code, balance=selfdestruct_contract_initial_balance
    )
    entry_code_storage = Storage()

    for i in range(len(sendall_recipient_addresses)):
        if sendall_recipient_addresses[i] == SELF_ADDRESS:
            sendall_recipient_addresses[i] = selfdestruct_contract_address

    # Create a dict to record the expected final balances
    sendall_final_balances = dict(
        zip(sendall_recipient_addresses, [0] * len(sendall_recipient_addresses), strict=False)
    )
    selfdestruct_contract_current_balance = selfdestruct_contract_initial_balance

    # Entry code in this case will simply call the pre-existing self-destructing contract,
    # as many times as required
    entry_code = Bytecode()

    # Call the self-destructing contract multiple times as required, increasing the wei sent each
    # time
    entry_code_balance = 0
    for i, sendall_recipient in zip(range(call_times), cycle(sendall_recipient_addresses)):
        entry_code += Op.MSTORE(0, sendall_recipient)
        entry_code += Op.SSTORE(
            entry_code_storage.store_next(1),
            Op.CALL(
                Op.GASLIMIT,  # Gas
                selfdestruct_contract_address,  # Address
                i,  # Value
                0,
                32,
                0,
                0,
            ),
        )
        entry_code_balance += i
        selfdestruct_contract_current_balance += i

        # Balance is always sent to other contracts
        if sendall_recipient != selfdestruct_contract_address:
            sendall_final_balances[sendall_recipient] += selfdestruct_contract_current_balance

        # Balance is only kept by the self-destructing contract if we are sending to self and the
        # EIP is activated, otherwise the balance is destroyed
        if sendall_recipient != selfdestruct_contract_address or not eip_enabled:
            selfdestruct_contract_current_balance = 0

        entry_code += Op.SSTORE(
            entry_code_storage.store_next(selfdestruct_contract_current_balance),
            Op.BALANCE(selfdestruct_contract_address),
        )

    # Check the EXTCODE* properties of the self-destructing contract
    entry_code += Op.SSTORE(
        entry_code_storage.store_next(len(selfdestruct_code)),
        Op.EXTCODESIZE(selfdestruct_contract_address),
    )

    entry_code += Op.SSTORE(
        entry_code_storage.store_next(selfdestruct_code.keccak256()),
        Op.EXTCODEHASH(selfdestruct_contract_address),
    )

    # Lastly return zero so the entry point contract is created and we can retain the stored
    # values for verification.
    entry_code += Op.RETURN(32, 1)

    tx = Transaction(
        value=entry_code_balance,
        data=entry_code,
        sender=sender,
        to=None,
        gas_limit=500_000,
    )

    entry_code_address = tx.created_contract

    post: Dict[Address, Account] = {
        entry_code_address: Account(
            storage=entry_code_storage,
        ),
    }

    # Check the balances of the sendall recipients
    for address, balance in sendall_final_balances.items():
        if address != selfdestruct_contract_address:
            post[address] = Account(balance=balance, storage={0: 1})

    if eip_enabled:
        balance = selfdestruct_contract_current_balance
        post[selfdestruct_contract_address] = Account(
            balance=balance,
            storage={0: call_times},
        )
    else:
        post[selfdestruct_contract_address] = Account.NONEXISTENT  # type: ignore

    state_test(env=env, pre=pre, post=post, tx=tx)

Parametrized Test Cases

The interactive table below is also available as a standalone page.

Test ID (Abbreviated) sendall_recipient_addresses selfdestruct_contract_initial_balance call_times
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call ['pre_deploy_contract_1'] 0 1
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 1
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 0 2
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 2
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 3
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 6
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 6
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call ['pre_deploy_contract_1'] 100000 1
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 1
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 100000 2
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 2
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 3
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 6
...fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 6
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-single_call ['pre_deploy_contract_1'] 0 1
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 1
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 0 2
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 2
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 3
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 6
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 6
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-single_call ['pre_deploy_contract_1'] 100000 1
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 1
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 100000 2
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 2
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 3
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 6
...fork_Shanghai-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 6
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call ['pre_deploy_contract_1'] 0 1
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 1
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 0 2
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 2
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 3
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 6
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 6
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call ['pre_deploy_contract_1'] 100000 1
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 1
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 100000 2
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 2
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 3
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 6
...fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 6
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-single_call ['pre_deploy_contract_1'] 0 1
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 1
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 0 2
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 2
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 3
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 6
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 6
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-single_call ['pre_deploy_contract_1'] 100000 1
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 1
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 100000 2
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 2
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 3
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 6
...fork_Cancun-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 6
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-single_call ['pre_deploy_contract_1'] 0 1
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 1
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 0 2
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 2
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 3
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 6
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 6
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call ['pre_deploy_contract_1'] 100000 1
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 1
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 100000 2
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 2
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 3
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 6
...fork_Prague-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 6
...fork_Prague-state_test-selfdestruct_contract_initial_balance_0-single_call ['pre_deploy_contract_1'] 0 1
...fork_Prague-state_test-selfdestruct_contract_initial_balance_0-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 1
...fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 0 2
...fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 2
...fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 3
...fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 6
...fork_Prague-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 6
...fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-single_call ['pre_deploy_contract_1'] 100000 1
...fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 1
...fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 100000 2
...fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 2
...fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 3
...fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 6
...fork_Prague-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 6
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_0-single_call ['pre_deploy_contract_1'] 0 1
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 1
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 0 2
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 2
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 3
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 6
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 6
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call ['pre_deploy_contract_1'] 100000 1
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 1
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 100000 2
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 2
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 3
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 6
...fork_Osaka-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 6
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_0-single_call ['pre_deploy_contract_1'] 0 1
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_0-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 1
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 0 2
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 2
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 3
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 3
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 0 6
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 0 6
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_100000-single_call ['pre_deploy_contract_1'] 100000 1
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_100000-single_call_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 1
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient ['pre_deploy_contract_1'] 100000 2
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_self_recipient [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 2
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients ['pre_deploy_contract_1', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 3
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 3
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', 'pre_deploy_contract_2', 'pre_deploy_contract_3'] 100000 6
...fork_Osaka-state_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_repeating_sendall_recipients_including_self_last ['pre_deploy_contract_1', 'pre_deploy_contract_2', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'] 100000 6