Skip to content

test_callee_context()

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

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
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
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
@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=Address(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