@pytest.mark.parametrize(
"opcode",
[Op.ORIGIN, Op.CALLER],
indirect=["opcode"],
)
@pytest.mark.parametrize("tx_gas", [500_000])
@pytest.mark.valid_from("Cancun")
def test_blob_tx_attribute_opcodes(
state_test: StateTestFiller,
pre: Alloc,
sender: EOA,
tx_value: int,
tx_gas: int,
tx_calldata: bytes,
tx_max_fee_per_gas: int,
tx_max_fee_per_blob_gas: int,
tx_max_priority_fee_per_gas: int,
tx_access_list: List[AccessList],
blob_hashes_per_tx: List[List[bytes]],
opcode: Tuple[Bytecode, Storage.StorageDictType],
state_env: Environment,
) -> None:
"""
Test opcodes that read transaction attributes work properly for blob type
transactions.
- ORIGIN
- CALLER
"""
code, storage = opcode
destination_account = pre.deploy_contract(code=code)
tx = Transaction(
ty=Spec.BLOB_TX_TYPE,
sender=sender,
to=destination_account,
value=tx_value,
gas_limit=tx_gas,
data=tx_calldata,
max_fee_per_gas=tx_max_fee_per_gas,
max_priority_fee_per_gas=tx_max_priority_fee_per_gas,
max_fee_per_blob_gas=tx_max_fee_per_blob_gas,
access_list=tx_access_list,
blob_versioned_hashes=blob_hashes_per_tx[0],
)
post = {
destination_account: Account(
storage=storage,
)
}
state_test(
pre=pre,
post=post,
tx=tx,
env=state_env,
)