ethereum.tangerine_whistle.utils.message
Hardfork Utility Functions For The Message Data-structure ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. contents:: Table of Contents :backlinks: none :local:
Introduction
Message specific functions used in this tangerine whistle version of specification.
1""" 2Hardfork Utility Functions For The Message Data-structure 3^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4 5.. contents:: Table of Contents 6 :backlinks: none 7 :local: 8 9Introduction 10------------ 11 12Message specific functions used in this tangerine whistle version of 13specification. 14""" 15from typing import Optional, Union 16 17from ethereum.base_types import U256, Bytes, Bytes0, Uint 18 19from ..fork_types import Address 20from ..state import get_account 21from ..vm import Environment, Message 22from .address import compute_contract_address 23 24 25def prepare_message( 26 caller: Address, 27 target: Union[Bytes0, Address], 28 value: U256, 29 data: Bytes, 30 gas: Uint, 31 env: Environment, 32 code_address: Optional[Address] = None, 33 should_transfer_value: bool = True, 34) -> Message: 35 """ 36 Execute a transaction against the provided environment. 37 38 Parameters 39 ---------- 40 caller : 41 Address which initiated the transaction 42 target : 43 Address whose code will be executed 44 value : 45 Value to be transferred. 46 data : 47 Array of bytes provided to the code in `target`. 48 gas : 49 Gas provided for the code in `target`. 50 env : 51 Environment for the Ethereum Virtual Machine. 52 code_address : 53 This is usually same as the `target` address except when an alternative 54 accounts code needs to be executed. 55 eg. `CALLCODE` calling a precompile. 56 should_transfer_value : 57 if True ETH should be transferred while executing a message call. 58 59 Returns 60 ------- 61 message: `ethereum.tangerine_whistle.vm.Message` 62 Items containing contract creation or message call specific data. 63 """ 64 if isinstance(target, Bytes0): 65 current_target = compute_contract_address( 66 caller, 67 get_account(env.state, caller).nonce - U256(1), 68 ) 69 msg_data = Bytes(b"") 70 code = data 71 elif isinstance(target, Address): 72 current_target = target 73 msg_data = data 74 code = get_account(env.state, target).code 75 if code_address is None: 76 code_address = target 77 else: 78 raise AssertionError("Target must be address or empty bytes") 79 80 return Message( 81 caller=caller, 82 target=target, 83 gas=gas, 84 value=value, 85 data=msg_data, 86 code=code, 87 depth=Uint(0), 88 current_target=current_target, 89 code_address=code_address, 90 should_transfer_value=should_transfer_value, 91 parent_evm=None, 92 )
26def prepare_message( 27 caller: Address, 28 target: Union[Bytes0, Address], 29 value: U256, 30 data: Bytes, 31 gas: Uint, 32 env: Environment, 33 code_address: Optional[Address] = None, 34 should_transfer_value: bool = True, 35) -> 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 60 Returns 61 ------- 62 message: `ethereum.tangerine_whistle.vm.Message` 63 Items containing contract creation or message call specific data. 64 """ 65 if isinstance(target, Bytes0): 66 current_target = compute_contract_address( 67 caller, 68 get_account(env.state, caller).nonce - U256(1), 69 ) 70 msg_data = Bytes(b"") 71 code = data 72 elif isinstance(target, Address): 73 current_target = target 74 msg_data = data 75 code = get_account(env.state, target).code 76 if code_address is None: 77 code_address = target 78 else: 79 raise AssertionError("Target must be address or empty bytes") 80 81 return Message( 82 caller=caller, 83 target=target, 84 gas=gas, 85 value=value, 86 data=msg_data, 87 code=code, 88 depth=Uint(0), 89 current_target=current_target, 90 code_address=code_address, 91 should_transfer_value=should_transfer_value, 92 parent_evm=None, 93 )
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.
Returns
message: ethereum.tangerine_whistle.vm.Message
Items containing contract creation or message call specific data.