Skip to content

test_callee_context()

Documentation for tests/osaka/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_callee_context@bc691d13.

Generate fixtures for these test cases for Osaka with:

fill -v tests/osaka/eip7692_eof_v1/eip7069_extcall/test_calls.py::test_callee_context --fork Osaka

Test EOF calls' callee context instructions.

Source code in tests/osaka/eip7692_eof_v1/eip7069_extcall/test_calls.py
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
@pytest.mark.parametrize(
    ["opcode", "destination_code", "expected_result"],
    [
        pytest.param(Op.EXTCALL, Op.ADDRESS, "destination", id="extcall_address"),
        pytest.param(Op.EXTDELEGATECALL, Op.ADDRESS, "caller", id="extdelegatecall_address"),
        pytest.param(Op.EXTSTATICCALL, Op.ADDRESS, "destination", id="extstaticcall_address"),
        pytest.param(Op.EXTCALL, Op.CALLER, "caller", id="extcall_caller"),
        pytest.param(Op.EXTDELEGATECALL, Op.CALLER, "sender", id="extdelegatecall_caller"),
        pytest.param(Op.EXTSTATICCALL, Op.CALLER, "caller", id="extstaticcall_caller"),
        pytest.param(Op.EXTCALL, Op.CALLVALUE, 0, id="extcall_call_value"),
        pytest.param(
            Op.EXTDELEGATECALL, Op.CALLVALUE, "tx_value", id="extdelegatecall_call_value"
        ),
        pytest.param(Op.EXTSTATICCALL, Op.CALLVALUE, 0, id="extstaticcall_call_value"),
        pytest.param(Op.EXTCALL, Op.ORIGIN, "sender", id="extcall_origin"),
        pytest.param(Op.EXTDELEGATECALL, Op.ORIGIN, "sender", id="extdelegatecall_origin"),
        pytest.param(Op.EXTSTATICCALL, Op.ORIGIN, "sender", id="extstaticcall_origin"),
    ],
)
@pytest.mark.with_all_evm_code_types
def test_callee_context(
    state_test: StateTestFiller,
    pre: Alloc,
    sender: EOA,
    opcode: Op,
    destination_code: Bytecode,
    expected_result: str | int,
    evm_code_type: EVMCodeType,
):
    """Test EOF calls' callee context instructions."""
    env = Environment()
    tx_value = 0x1123

    destination_contract_address = pre.deploy_contract(
        Op.MSTORE(0, destination_code) + Op.RETURN(0, 32)
    )

    caller_contract = Container.Code(
        Op.SSTORE(slot_code_worked, value_code_worked)
        + opcode(address=destination_contract_address)
        + Op.SSTORE(slot_returndata, Op.RETURNDATALOAD(0))
        + Op.STOP,
    )
    calling_contract_address = pre.deploy_contract(caller_contract)

    tx = Transaction(
        sender=sender,
        to=calling_contract_address,
        gas_limit=100000,
        value=tx_value,
    )

    expected_bytes: Address | int
    if expected_result == "destination":
        expected_bytes = destination_contract_address
    elif expected_result == "caller":
        expected_bytes = calling_contract_address
    elif expected_result == "sender":
        expected_bytes = sender
    elif expected_result == "tx_value":
        expected_bytes = tx_value
    elif isinstance(expected_result, int):
        expected_bytes = expected_result
    else:
        raise TypeError("Unexpected expected_result", expected_result)

    calling_storage = {
        slot_code_worked: value_code_worked,
        slot_returndata: 0
        if (opcode == Op.EXTDELEGATECALL and evm_code_type == EVMCodeType.LEGACY)
        else expected_bytes,
    }

    post = {
        calling_contract_address: Account(storage=calling_storage),
        destination_contract_address: Account(storage={}),
    }

    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) evm_code_type opcode destination_code expected_result
...fork_Osaka-evm_code_type_LEGACY-state_test-extcall_address LEGACY EXTCALL ADDRESS destination
...fork_Osaka-evm_code_type_LEGACY-state_test-extdelegatecall_address LEGACY EXTDELEGATECALL ADDRESS caller
...fork_Osaka-evm_code_type_LEGACY-state_test-extstaticcall_address LEGACY EXTSTATICCALL ADDRESS destination
...fork_Osaka-evm_code_type_LEGACY-state_test-extcall_caller LEGACY EXTCALL CALLER caller
...fork_Osaka-evm_code_type_LEGACY-state_test-extdelegatecall_caller LEGACY EXTDELEGATECALL CALLER sender
...fork_Osaka-evm_code_type_LEGACY-state_test-extstaticcall_caller LEGACY EXTSTATICCALL CALLER caller
...fork_Osaka-evm_code_type_LEGACY-state_test-extcall_call_value LEGACY EXTCALL CALLVALUE 0
...fork_Osaka-evm_code_type_LEGACY-state_test-extdelegatecall_call_value LEGACY EXTDELEGATECALL CALLVALUE tx_value
...fork_Osaka-evm_code_type_LEGACY-state_test-extstaticcall_call_value LEGACY EXTSTATICCALL CALLVALUE 0
...fork_Osaka-evm_code_type_LEGACY-state_test-extcall_origin LEGACY EXTCALL ORIGIN sender
...fork_Osaka-evm_code_type_LEGACY-state_test-extdelegatecall_origin LEGACY EXTDELEGATECALL ORIGIN sender
...fork_Osaka-evm_code_type_LEGACY-state_test-extstaticcall_origin LEGACY EXTSTATICCALL ORIGIN sender
...fork_Osaka-evm_code_type_LEGACY-blockchain_test_from_state_test-extcall_address LEGACY EXTCALL ADDRESS destination
...fork_Osaka-evm_code_type_LEGACY-blockchain_test_from_state_test-extdelegatecall_address LEGACY EXTDELEGATECALL ADDRESS caller
...fork_Osaka-evm_code_type_LEGACY-blockchain_test_from_state_test-extstaticcall_address LEGACY EXTSTATICCALL ADDRESS destination
...fork_Osaka-evm_code_type_LEGACY-blockchain_test_from_state_test-extcall_caller LEGACY EXTCALL CALLER caller
...fork_Osaka-evm_code_type_LEGACY-blockchain_test_from_state_test-extdelegatecall_caller LEGACY EXTDELEGATECALL CALLER sender
...fork_Osaka-evm_code_type_LEGACY-blockchain_test_from_state_test-extstaticcall_caller LEGACY EXTSTATICCALL CALLER caller
...fork_Osaka-evm_code_type_LEGACY-blockchain_test_from_state_test-extcall_call_value LEGACY EXTCALL CALLVALUE 0
...fork_Osaka-evm_code_type_LEGACY-blockchain_test_from_state_test-extdelegatecall_call_value LEGACY EXTDELEGATECALL CALLVALUE tx_value
...fork_Osaka-evm_code_type_LEGACY-blockchain_test_from_state_test-extstaticcall_call_value LEGACY EXTSTATICCALL CALLVALUE 0
...fork_Osaka-evm_code_type_LEGACY-blockchain_test_from_state_test-extcall_origin LEGACY EXTCALL ORIGIN sender
...fork_Osaka-evm_code_type_LEGACY-blockchain_test_from_state_test-extdelegatecall_origin LEGACY EXTDELEGATECALL ORIGIN sender
...fork_Osaka-evm_code_type_LEGACY-blockchain_test_from_state_test-extstaticcall_origin LEGACY EXTSTATICCALL ORIGIN sender
...fork_Osaka-evm_code_type_EOF_V1-state_test-extcall_address EOF_V1 EXTCALL ADDRESS destination
...fork_Osaka-evm_code_type_EOF_V1-state_test-extdelegatecall_address EOF_V1 EXTDELEGATECALL ADDRESS caller
...fork_Osaka-evm_code_type_EOF_V1-state_test-extstaticcall_address EOF_V1 EXTSTATICCALL ADDRESS destination
...fork_Osaka-evm_code_type_EOF_V1-state_test-extcall_caller EOF_V1 EXTCALL CALLER caller
...fork_Osaka-evm_code_type_EOF_V1-state_test-extdelegatecall_caller EOF_V1 EXTDELEGATECALL CALLER sender
...fork_Osaka-evm_code_type_EOF_V1-state_test-extstaticcall_caller EOF_V1 EXTSTATICCALL CALLER caller
...fork_Osaka-evm_code_type_EOF_V1-state_test-extcall_call_value EOF_V1 EXTCALL CALLVALUE 0
...fork_Osaka-evm_code_type_EOF_V1-state_test-extdelegatecall_call_value EOF_V1 EXTDELEGATECALL CALLVALUE tx_value
...fork_Osaka-evm_code_type_EOF_V1-state_test-extstaticcall_call_value EOF_V1 EXTSTATICCALL CALLVALUE 0
...fork_Osaka-evm_code_type_EOF_V1-state_test-extcall_origin EOF_V1 EXTCALL ORIGIN sender
...fork_Osaka-evm_code_type_EOF_V1-state_test-extdelegatecall_origin EOF_V1 EXTDELEGATECALL ORIGIN sender
...fork_Osaka-evm_code_type_EOF_V1-state_test-extstaticcall_origin EOF_V1 EXTSTATICCALL ORIGIN sender
...fork_Osaka-evm_code_type_EOF_V1-blockchain_test_from_state_test-extcall_address EOF_V1 EXTCALL ADDRESS destination
...fork_Osaka-evm_code_type_EOF_V1-blockchain_test_from_state_test-extdelegatecall_address EOF_V1 EXTDELEGATECALL ADDRESS caller
...fork_Osaka-evm_code_type_EOF_V1-blockchain_test_from_state_test-extstaticcall_address EOF_V1 EXTSTATICCALL ADDRESS destination
...fork_Osaka-evm_code_type_EOF_V1-blockchain_test_from_state_test-extcall_caller EOF_V1 EXTCALL CALLER caller
...fork_Osaka-evm_code_type_EOF_V1-blockchain_test_from_state_test-extdelegatecall_caller EOF_V1 EXTDELEGATECALL CALLER sender
...fork_Osaka-evm_code_type_EOF_V1-blockchain_test_from_state_test-extstaticcall_caller EOF_V1 EXTSTATICCALL CALLER caller
...fork_Osaka-evm_code_type_EOF_V1-blockchain_test_from_state_test-extcall_call_value EOF_V1 EXTCALL CALLVALUE 0
...fork_Osaka-evm_code_type_EOF_V1-blockchain_test_from_state_test-extdelegatecall_call_value EOF_V1 EXTDELEGATECALL CALLVALUE tx_value
...fork_Osaka-evm_code_type_EOF_V1-blockchain_test_from_state_test-extstaticcall_call_value EOF_V1 EXTSTATICCALL CALLVALUE 0
...fork_Osaka-evm_code_type_EOF_V1-blockchain_test_from_state_test-extcall_origin EOF_V1 EXTCALL ORIGIN sender
...fork_Osaka-evm_code_type_EOF_V1-blockchain_test_from_state_test-extdelegatecall_origin EOF_V1 EXTDELEGATECALL ORIGIN sender
...fork_Osaka-evm_code_type_EOF_V1-blockchain_test_from_state_test-extstaticcall_origin EOF_V1 EXTSTATICCALL ORIGIN sender