ethereum.istanbul.utils.messageethereum.muir_glacier.utils.message

Hardfork Utility Functions For The Message Data-structure ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. contents:: Table of Contents :backlinks: none :local:

Introduction

Message specific functions used in this istanbul version ofMessage specific functions used in this muir_glacier version of specification.

prepare_message

Execute a transaction against the provided environment.

Parameters

caller : Address which initiated the transaction target : Address whose code will be executed value : Value to be transferred. data : Array of bytes provided to the code in target. gas : Gas provided for the code in target. env : Environment for the Ethereum Virtual Machine. code_address : This is usually same as the target address except when an alternative accounts code needs to be executed. eg. CALLCODE calling a precompile. should_transfer_value : if True ETH should be transferred while executing a message call. is_static: if True then it prevents all state-changing operations from being executed.

Returns

message: ethereum.istanbul.vm.Messageethereum.muir_glacier.vm.Message Items containing contract creation or message call specific data.

def prepare_message(caller: Address, ​​target: Union[Bytes0, Address], ​​value: U256, ​​data: Bytes, ​​gas: Uint, ​​env: Environment, ​​code_address: Optional[Address], ​​should_transfer_value: bool, ​​is_static: bool) -> Message:
36
    """
37
    Execute a transaction against the provided environment.
38
39
    Parameters
40
    ----------
41
    caller :
42
        Address which initiated the transaction
43
    target :
44
        Address whose code will be executed
45
    value :
46
        Value to be transferred.
47
    data :
48
        Array of bytes provided to the code in `target`.
49
    gas :
50
        Gas provided for the code in `target`.
51
    env :
52
        Environment for the Ethereum Virtual Machine.
53
    code_address :
54
        This is usually same as the `target` address except when an alternative
55
        accounts code needs to be executed.
56
        eg. `CALLCODE` calling a precompile.
57
    should_transfer_value :
58
        if True ETH should be transferred while executing a message call.
59
    is_static:
60
        if True then it prevents all state-changing operations from being
61
        executed.
62
63
    Returns
64
    -------
65
    message: `ethereum.istanbul.vm.Message`
65
    message: `ethereum.muir_glacier.vm.Message`
66
        Items containing contract creation or message call specific data.
67
    """
68
    if isinstance(target, Bytes0):
69
        current_target = compute_contract_address(
70
            caller,
71
            get_account(env.state, caller).nonce - U256(1),
72
        )
73
        msg_data = Bytes(b"")
74
        code = data
75
    elif isinstance(target, Address):
76
        current_target = target
77
        msg_data = data
78
        code = get_account(env.state, target).code
79
        if code_address is None:
80
            code_address = target
81
    else:
82
        raise AssertionError("Target must be address or empty bytes")
83
84
    return Message(
85
        caller=caller,
86
        target=target,
87
        gas=gas,
88
        value=value,
89
        data=msg_data,
90
        code=code,
91
        depth=Uint(0),
92
        current_target=current_target,
93
        code_address=code_address,
94
        should_transfer_value=should_transfer_value,
95
        is_static=is_static,
96
        parent_evm=None,
97
    )