Forks

Frontier

FrontierVM

class eth.vm.forks.frontier.FrontierVM(header: eth.abc.BlockHeaderAPI, chaindb: eth.abc.ChainDatabaseAPI, chain_context: eth.abc.ChainContextAPI, consensus_context: eth.abc.ConsensusContextAPI)
block_class

alias of eth.vm.forks.frontier.blocks.FrontierBlock

add_receipt_to_header(old_header: eth.abc.BlockHeaderAPI, receipt: eth.abc.ReceiptAPI) → eth.abc.BlockHeaderAPI

Apply the receipt to the old header, and return the resulting header. This may have storage-related side-effects. For example, pre-Byzantium, the state root hash is included in the receipt, and so must be stored into the database.

classmethod calculate_net_gas_refund(consumed_gas: int, gross_refund: int) → int
static compute_difficulty(parent_header: eth.abc.BlockHeaderAPI, timestamp: int) → int

Computes the difficulty for a frontier block based on the parent block.

configure_header(**header_params) → eth.rlp.headers.BlockHeader
static create_header_from_parent(parent_header: eth.abc.BlockHeaderAPI, **header_params) → eth.rlp.headers.BlockHeader
classmethod finalize_gas_used(transaction: eth.abc.SignedTransactionAPI, computation: eth.abc.ComputationAPI) → int
static get_block_reward() → int

Return the amount in wei that should be given to a miner as a reward for this block.

Note

This is an abstract method that must be implemented in subclasses

classmethod get_nephew_reward() → int

Return the reward which should be given to the miner of the given nephew.

Note

This is an abstract method that must be implemented in subclasses

static get_uncle_reward(block_number: int, uncle: eth.abc.BlockHeaderAPI) → int

Return the reward which should be given to the miner of the given uncle.

Note

This is an abstract method that must be implemented in subclasses

classmethod make_receipt(base_header: eth.abc.BlockHeaderAPI, transaction: eth.abc.SignedTransactionAPI, computation: eth.abc.ComputationAPI, state: eth.abc.StateAPI) → eth.abc.ReceiptAPI

Generate the receipt resulting from applying the transaction.

Parameters:
  • base_header – the header of the block before the transaction was applied.
  • transaction – the transaction used to generate the receipt
  • computation – the result of running the transaction computation
  • state – the resulting state, after executing the computation
Returns:

receipt

validate_transaction_against_header(base_header: eth.abc.BlockHeaderAPI, transaction: eth.abc.SignedTransactionAPI) → None
fork = 'frontier'

FrontierState

class eth.vm.forks.frontier.state.FrontierState(db: eth.abc.AtomicDatabaseAPI, execution_context: eth.abc.ExecutionContextAPI, state_root: NewType.<locals>.new_type)
account_db_class

alias of eth.db.account.AccountDB

computation_class

alias of eth.vm.forks.frontier.computation.FrontierComputation

transaction_context_class

alias of eth.vm.forks.frontier.transaction_context.FrontierTransactionContext

transaction_executor_class

alias of FrontierTransactionExecutor

apply_transaction(transaction: eth.abc.SignedTransactionAPI) → eth.abc.ComputationAPI

Apply transaction to the vm state

Parameters:transaction – the transaction to apply
Returns:the computation
validate_transaction(transaction: eth.abc.SignedTransactionAPI) → None

Validate the given transaction.

FrontierComputation

class eth.vm.forks.frontier.computation.FrontierComputation(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI)

A class for all execution message computations in the Frontier fork. Inherits from BaseComputation

classmethod apply_create_message(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI) → eth.abc.ComputationAPI

Execute a VM message to create a new contract. This is where the VM-specific create logic exists.

classmethod apply_message(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI) → eth.abc.ComputationAPI

Execute a VM message. This is where the VM-specific call logic exists.

opcodes = {0: <abc.opcode:STOP object>, 1: <abc.opcode:ADD object>, 2: <abc.opcode:MUL object>, 3: <abc.opcode:SUB object>, 4: <abc.opcode:DIV object>, 5: <abc.opcode:SDIV object>, 6: <abc.opcode:MOD object>, 7: <abc.opcode:SMOD object>, 8: <abc.opcode:ADDMOD object>, 9: <abc.opcode:MULMOD object>, 10: <abc.opcode:EXP object>, 11: <abc.opcode:SIGNEXTEND object>, 16: <abc.opcode:LT object>, 17: <abc.opcode:GT object>, 18: <abc.opcode:SLT object>, 19: <abc.opcode:SGT object>, 20: <abc.opcode:EQ object>, 21: <abc.opcode:ISZERO object>, 22: <abc.opcode:AND object>, 23: <abc.opcode:OR object>, 24: <abc.opcode:XOR object>, 25: <abc.opcode:NOT object>, 26: <abc.opcode:BYTE object>, 32: <abc.opcode:SHA3 object>, 48: <abc.opcode:ADDRESS object>, 49: <abc.opcode:BALANCE object>, 50: <abc.opcode:ORIGIN object>, 51: <abc.opcode:CALLER object>, 52: <abc.opcode:CALLVALUE object>, 53: <abc.opcode:CALLDATALOAD object>, 54: <abc.opcode:CALLDATASIZE object>, 55: <abc.opcode:CALLDATACOPY object>, 56: <abc.opcode:CODESIZE object>, 57: <abc.opcode:CODECOPY object>, 58: <abc.opcode:GASPRICE object>, 59: <abc.opcode:EXTCODESIZE object>, 60: <abc.opcode:EXTCODECOPY object>, 64: <abc.opcode:BLOCKHASH object>, 65: <abc.opcode:COINBASE object>, 66: <abc.opcode:TIMESTAMP object>, 67: <abc.opcode:NUMBER object>, 68: <abc.opcode:DIFFICULTY object>, 69: <abc.opcode:GASLIMIT object>, 80: <abc.opcode:POP object>, 81: <abc.opcode:MLOAD object>, 82: <abc.opcode:MSTORE object>, 83: <abc.opcode:MSTORE8 object>, 84: <abc.opcode:SLOAD object>, 85: <abc.opcode:SSTORE object>, 86: <abc.opcode:JUMP object>, 87: <abc.opcode:JUMPI object>, 88: <abc.opcode:PC object>, 89: <abc.opcode:MSIZE object>, 90: <abc.opcode:GAS object>, 91: <abc.opcode:JUMPDEST object>, 96: <abc.opcode:PUSH1 object>, 97: <abc.opcode:PUSH2 object>, 98: <abc.opcode:PUSH3 object>, 99: <abc.opcode:PUSH4 object>, 100: <abc.opcode:PUSH5 object>, 101: <abc.opcode:PUSH6 object>, 102: <abc.opcode:PUSH7 object>, 103: <abc.opcode:PUSH8 object>, 104: <abc.opcode:PUSH9 object>, 105: <abc.opcode:PUSH10 object>, 106: <abc.opcode:PUSH11 object>, 107: <abc.opcode:PUSH12 object>, 108: <abc.opcode:PUSH13 object>, 109: <abc.opcode:PUSH14 object>, 110: <abc.opcode:PUSH15 object>, 111: <abc.opcode:PUSH16 object>, 112: <abc.opcode:PUSH17 object>, 113: <abc.opcode:PUSH18 object>, 114: <abc.opcode:PUSH19 object>, 115: <abc.opcode:PUSH20 object>, 116: <abc.opcode:PUSH21 object>, 117: <abc.opcode:PUSH22 object>, 118: <abc.opcode:PUSH23 object>, 119: <abc.opcode:PUSH24 object>, 120: <abc.opcode:PUSH25 object>, 121: <abc.opcode:PUSH26 object>, 122: <abc.opcode:PUSH27 object>, 123: <abc.opcode:PUSH28 object>, 124: <abc.opcode:PUSH29 object>, 125: <abc.opcode:PUSH30 object>, 126: <abc.opcode:PUSH31 object>, 127: <abc.opcode:PUSH32 object>, 128: <abc.opcode:DUP1 object>, 129: <abc.opcode:DUP2 object>, 130: <abc.opcode:DUP3 object>, 131: <abc.opcode:DUP4 object>, 132: <abc.opcode:DUP5 object>, 133: <abc.opcode:DUP6 object>, 134: <abc.opcode:DUP7 object>, 135: <abc.opcode:DUP8 object>, 136: <abc.opcode:DUP9 object>, 137: <abc.opcode:DUP10 object>, 138: <abc.opcode:DUP11 object>, 139: <abc.opcode:DUP12 object>, 140: <abc.opcode:DUP13 object>, 141: <abc.opcode:DUP14 object>, 142: <abc.opcode:DUP15 object>, 143: <abc.opcode:DUP16 object>, 144: <abc.opcode:SWAP1 object>, 145: <abc.opcode:SWAP2 object>, 146: <abc.opcode:SWAP3 object>, 147: <abc.opcode:SWAP4 object>, 148: <abc.opcode:SWAP5 object>, 149: <abc.opcode:SWAP6 object>, 150: <abc.opcode:SWAP7 object>, 151: <abc.opcode:SWAP8 object>, 152: <abc.opcode:SWAP9 object>, 153: <abc.opcode:SWAP10 object>, 154: <abc.opcode:SWAP11 object>, 155: <abc.opcode:SWAP12 object>, 156: <abc.opcode:SWAP13 object>, 157: <abc.opcode:SWAP14 object>, 158: <abc.opcode:SWAP15 object>, 159: <abc.opcode:SWAP16 object>, 160: <abc.opcode:LOG0 object>, 161: <abc.opcode:LOG1 object>, 162: <abc.opcode:LOG2 object>, 163: <abc.opcode:LOG3 object>, 164: <abc.opcode:LOG4 object>, 240: <abc.opcode:CREATE object>, 241: <abc.opcode:CALL object>, 242: <abc.opcode:CALLCODE object>, 243: <abc.opcode:RETURN object>, 255: <abc.opcode:SELFDESTRUCT object>}

Homestead

HomesteadVM

class eth.vm.forks.homestead.HomesteadVM(header: eth.abc.BlockHeaderAPI, chaindb: eth.abc.ChainDatabaseAPI, chain_context: eth.abc.ChainContextAPI, consensus_context: eth.abc.ConsensusContextAPI)
block_class

alias of eth.vm.forks.homestead.blocks.HomesteadBlock

static compute_difficulty(parent_header: eth.abc.BlockHeaderAPI, timestamp: int) → int

Computes the difficulty for a homestead block based on the parent block.

configure_header(**header_params) → eth.rlp.headers.BlockHeader
static create_header_from_parent(parent_header: eth.abc.BlockHeaderAPI, **header_params) → eth.rlp.headers.BlockHeader
fork = 'homestead'

HomesteadState

class eth.vm.forks.homestead.state.HomesteadState(db: eth.abc.AtomicDatabaseAPI, execution_context: eth.abc.ExecutionContextAPI, state_root: NewType.<locals>.new_type)
computation_class

alias of eth.vm.forks.homestead.computation.HomesteadComputation

validate_transaction(transaction: eth.abc.SignedTransactionAPI) → None

Validate the given transaction.

HomesteadComputation

class eth.vm.forks.homestead.computation.HomesteadComputation(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI)

A class for all execution message computations in the Frontier fork. Inherits from FrontierComputation

classmethod apply_create_message(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI) → eth.abc.ComputationAPI

Execute a VM message to create a new contract. This is where the VM-specific create logic exists.

opcodes = {0: <abc.opcode:STOP object>, 1: <abc.opcode:ADD object>, 2: <abc.opcode:MUL object>, 3: <abc.opcode:SUB object>, 4: <abc.opcode:DIV object>, 5: <abc.opcode:SDIV object>, 6: <abc.opcode:MOD object>, 7: <abc.opcode:SMOD object>, 8: <abc.opcode:ADDMOD object>, 9: <abc.opcode:MULMOD object>, 10: <abc.opcode:EXP object>, 11: <abc.opcode:SIGNEXTEND object>, 16: <abc.opcode:LT object>, 17: <abc.opcode:GT object>, 18: <abc.opcode:SLT object>, 19: <abc.opcode:SGT object>, 20: <abc.opcode:EQ object>, 21: <abc.opcode:ISZERO object>, 22: <abc.opcode:AND object>, 23: <abc.opcode:OR object>, 24: <abc.opcode:XOR object>, 25: <abc.opcode:NOT object>, 26: <abc.opcode:BYTE object>, 32: <abc.opcode:SHA3 object>, 48: <abc.opcode:ADDRESS object>, 49: <abc.opcode:BALANCE object>, 50: <abc.opcode:ORIGIN object>, 51: <abc.opcode:CALLER object>, 52: <abc.opcode:CALLVALUE object>, 53: <abc.opcode:CALLDATALOAD object>, 54: <abc.opcode:CALLDATASIZE object>, 55: <abc.opcode:CALLDATACOPY object>, 56: <abc.opcode:CODESIZE object>, 57: <abc.opcode:CODECOPY object>, 58: <abc.opcode:GASPRICE object>, 59: <abc.opcode:EXTCODESIZE object>, 60: <abc.opcode:EXTCODECOPY object>, 64: <abc.opcode:BLOCKHASH object>, 65: <abc.opcode:COINBASE object>, 66: <abc.opcode:TIMESTAMP object>, 67: <abc.opcode:NUMBER object>, 68: <abc.opcode:DIFFICULTY object>, 69: <abc.opcode:GASLIMIT object>, 80: <abc.opcode:POP object>, 81: <abc.opcode:MLOAD object>, 82: <abc.opcode:MSTORE object>, 83: <abc.opcode:MSTORE8 object>, 84: <abc.opcode:SLOAD object>, 85: <abc.opcode:SSTORE object>, 86: <abc.opcode:JUMP object>, 87: <abc.opcode:JUMPI object>, 88: <abc.opcode:PC object>, 89: <abc.opcode:MSIZE object>, 90: <abc.opcode:GAS object>, 91: <abc.opcode:JUMPDEST object>, 96: <abc.opcode:PUSH1 object>, 97: <abc.opcode:PUSH2 object>, 98: <abc.opcode:PUSH3 object>, 99: <abc.opcode:PUSH4 object>, 100: <abc.opcode:PUSH5 object>, 101: <abc.opcode:PUSH6 object>, 102: <abc.opcode:PUSH7 object>, 103: <abc.opcode:PUSH8 object>, 104: <abc.opcode:PUSH9 object>, 105: <abc.opcode:PUSH10 object>, 106: <abc.opcode:PUSH11 object>, 107: <abc.opcode:PUSH12 object>, 108: <abc.opcode:PUSH13 object>, 109: <abc.opcode:PUSH14 object>, 110: <abc.opcode:PUSH15 object>, 111: <abc.opcode:PUSH16 object>, 112: <abc.opcode:PUSH17 object>, 113: <abc.opcode:PUSH18 object>, 114: <abc.opcode:PUSH19 object>, 115: <abc.opcode:PUSH20 object>, 116: <abc.opcode:PUSH21 object>, 117: <abc.opcode:PUSH22 object>, 118: <abc.opcode:PUSH23 object>, 119: <abc.opcode:PUSH24 object>, 120: <abc.opcode:PUSH25 object>, 121: <abc.opcode:PUSH26 object>, 122: <abc.opcode:PUSH27 object>, 123: <abc.opcode:PUSH28 object>, 124: <abc.opcode:PUSH29 object>, 125: <abc.opcode:PUSH30 object>, 126: <abc.opcode:PUSH31 object>, 127: <abc.opcode:PUSH32 object>, 128: <abc.opcode:DUP1 object>, 129: <abc.opcode:DUP2 object>, 130: <abc.opcode:DUP3 object>, 131: <abc.opcode:DUP4 object>, 132: <abc.opcode:DUP5 object>, 133: <abc.opcode:DUP6 object>, 134: <abc.opcode:DUP7 object>, 135: <abc.opcode:DUP8 object>, 136: <abc.opcode:DUP9 object>, 137: <abc.opcode:DUP10 object>, 138: <abc.opcode:DUP11 object>, 139: <abc.opcode:DUP12 object>, 140: <abc.opcode:DUP13 object>, 141: <abc.opcode:DUP14 object>, 142: <abc.opcode:DUP15 object>, 143: <abc.opcode:DUP16 object>, 144: <abc.opcode:SWAP1 object>, 145: <abc.opcode:SWAP2 object>, 146: <abc.opcode:SWAP3 object>, 147: <abc.opcode:SWAP4 object>, 148: <abc.opcode:SWAP5 object>, 149: <abc.opcode:SWAP6 object>, 150: <abc.opcode:SWAP7 object>, 151: <abc.opcode:SWAP8 object>, 152: <abc.opcode:SWAP9 object>, 153: <abc.opcode:SWAP10 object>, 154: <abc.opcode:SWAP11 object>, 155: <abc.opcode:SWAP12 object>, 156: <abc.opcode:SWAP13 object>, 157: <abc.opcode:SWAP14 object>, 158: <abc.opcode:SWAP15 object>, 159: <abc.opcode:SWAP16 object>, 160: <abc.opcode:LOG0 object>, 161: <abc.opcode:LOG1 object>, 162: <abc.opcode:LOG2 object>, 163: <abc.opcode:LOG3 object>, 164: <abc.opcode:LOG4 object>, 240: <abc.opcode:CREATE object>, 241: <abc.opcode:CALL object>, 242: <abc.opcode:CALLCODE object>, 243: <abc.opcode:RETURN object>, 244: <abc.opcode:DELEGATECALL object>, 255: <abc.opcode:SELFDESTRUCT object>}

TangerineWhistle

TangerineWhistleVM

class eth.vm.forks.tangerine_whistle.TangerineWhistleVM(header: eth.abc.BlockHeaderAPI, chaindb: eth.abc.ChainDatabaseAPI, chain_context: eth.abc.ChainContextAPI, consensus_context: eth.abc.ConsensusContextAPI)
fork = 'tangerine-whistle'
support_dao_fork = False

TangerineWhistleState

class eth.vm.forks.tangerine_whistle.state.TangerineWhistleState(db: eth.abc.AtomicDatabaseAPI, execution_context: eth.abc.ExecutionContextAPI, state_root: NewType.<locals>.new_type)
computation_class

alias of eth.vm.forks.tangerine_whistle.computation.TangerineWhistleComputation

TangerineWhistleComputation

class eth.vm.forks.tangerine_whistle.computation.TangerineWhistleComputation(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI)

A class for all execution message computations in the TangerineWhistle fork. Inherits from HomesteadComputation

opcodes = {0: <abc.opcode:STOP object>, 1: <abc.opcode:ADD object>, 2: <abc.opcode:MUL object>, 3: <abc.opcode:SUB object>, 4: <abc.opcode:DIV object>, 5: <abc.opcode:SDIV object>, 6: <abc.opcode:MOD object>, 7: <abc.opcode:SMOD object>, 8: <abc.opcode:ADDMOD object>, 9: <abc.opcode:MULMOD object>, 10: <abc.opcode:EXP object>, 11: <abc.opcode:SIGNEXTEND object>, 16: <abc.opcode:LT object>, 17: <abc.opcode:GT object>, 18: <abc.opcode:SLT object>, 19: <abc.opcode:SGT object>, 20: <abc.opcode:EQ object>, 21: <abc.opcode:ISZERO object>, 22: <abc.opcode:AND object>, 23: <abc.opcode:OR object>, 24: <abc.opcode:XOR object>, 25: <abc.opcode:NOT object>, 26: <abc.opcode:BYTE object>, 32: <abc.opcode:SHA3 object>, 48: <abc.opcode:ADDRESS object>, 49: <abc.opcode:BALANCE object>, 50: <abc.opcode:ORIGIN object>, 51: <abc.opcode:CALLER object>, 52: <abc.opcode:CALLVALUE object>, 53: <abc.opcode:CALLDATALOAD object>, 54: <abc.opcode:CALLDATASIZE object>, 55: <abc.opcode:CALLDATACOPY object>, 56: <abc.opcode:CODESIZE object>, 57: <abc.opcode:CODECOPY object>, 58: <abc.opcode:GASPRICE object>, 59: <abc.opcode:EXTCODESIZE object>, 60: <abc.opcode:EXTCODECOPY object>, 64: <abc.opcode:BLOCKHASH object>, 65: <abc.opcode:COINBASE object>, 66: <abc.opcode:TIMESTAMP object>, 67: <abc.opcode:NUMBER object>, 68: <abc.opcode:DIFFICULTY object>, 69: <abc.opcode:GASLIMIT object>, 80: <abc.opcode:POP object>, 81: <abc.opcode:MLOAD object>, 82: <abc.opcode:MSTORE object>, 83: <abc.opcode:MSTORE8 object>, 84: <abc.opcode:SLOAD object>, 85: <abc.opcode:SSTORE object>, 86: <abc.opcode:JUMP object>, 87: <abc.opcode:JUMPI object>, 88: <abc.opcode:PC object>, 89: <abc.opcode:MSIZE object>, 90: <abc.opcode:GAS object>, 91: <abc.opcode:JUMPDEST object>, 96: <abc.opcode:PUSH1 object>, 97: <abc.opcode:PUSH2 object>, 98: <abc.opcode:PUSH3 object>, 99: <abc.opcode:PUSH4 object>, 100: <abc.opcode:PUSH5 object>, 101: <abc.opcode:PUSH6 object>, 102: <abc.opcode:PUSH7 object>, 103: <abc.opcode:PUSH8 object>, 104: <abc.opcode:PUSH9 object>, 105: <abc.opcode:PUSH10 object>, 106: <abc.opcode:PUSH11 object>, 107: <abc.opcode:PUSH12 object>, 108: <abc.opcode:PUSH13 object>, 109: <abc.opcode:PUSH14 object>, 110: <abc.opcode:PUSH15 object>, 111: <abc.opcode:PUSH16 object>, 112: <abc.opcode:PUSH17 object>, 113: <abc.opcode:PUSH18 object>, 114: <abc.opcode:PUSH19 object>, 115: <abc.opcode:PUSH20 object>, 116: <abc.opcode:PUSH21 object>, 117: <abc.opcode:PUSH22 object>, 118: <abc.opcode:PUSH23 object>, 119: <abc.opcode:PUSH24 object>, 120: <abc.opcode:PUSH25 object>, 121: <abc.opcode:PUSH26 object>, 122: <abc.opcode:PUSH27 object>, 123: <abc.opcode:PUSH28 object>, 124: <abc.opcode:PUSH29 object>, 125: <abc.opcode:PUSH30 object>, 126: <abc.opcode:PUSH31 object>, 127: <abc.opcode:PUSH32 object>, 128: <abc.opcode:DUP1 object>, 129: <abc.opcode:DUP2 object>, 130: <abc.opcode:DUP3 object>, 131: <abc.opcode:DUP4 object>, 132: <abc.opcode:DUP5 object>, 133: <abc.opcode:DUP6 object>, 134: <abc.opcode:DUP7 object>, 135: <abc.opcode:DUP8 object>, 136: <abc.opcode:DUP9 object>, 137: <abc.opcode:DUP10 object>, 138: <abc.opcode:DUP11 object>, 139: <abc.opcode:DUP12 object>, 140: <abc.opcode:DUP13 object>, 141: <abc.opcode:DUP14 object>, 142: <abc.opcode:DUP15 object>, 143: <abc.opcode:DUP16 object>, 144: <abc.opcode:SWAP1 object>, 145: <abc.opcode:SWAP2 object>, 146: <abc.opcode:SWAP3 object>, 147: <abc.opcode:SWAP4 object>, 148: <abc.opcode:SWAP5 object>, 149: <abc.opcode:SWAP6 object>, 150: <abc.opcode:SWAP7 object>, 151: <abc.opcode:SWAP8 object>, 152: <abc.opcode:SWAP9 object>, 153: <abc.opcode:SWAP10 object>, 154: <abc.opcode:SWAP11 object>, 155: <abc.opcode:SWAP12 object>, 156: <abc.opcode:SWAP13 object>, 157: <abc.opcode:SWAP14 object>, 158: <abc.opcode:SWAP15 object>, 159: <abc.opcode:SWAP16 object>, 160: <abc.opcode:LOG0 object>, 161: <abc.opcode:LOG1 object>, 162: <abc.opcode:LOG2 object>, 163: <abc.opcode:LOG3 object>, 164: <abc.opcode:LOG4 object>, 240: <abc.opcode:CREATE object>, 241: <abc.opcode:CALL object>, 242: <abc.opcode:CALLCODE object>, 243: <abc.opcode:RETURN object>, 244: <abc.opcode:DELEGATECALL object>, 255: <abc.opcode:SELFDESTRUCT object>}

SpuriousDragon

SpuriousDragonVM

class eth.vm.forks.spurious_dragon.SpuriousDragonVM(header: eth.abc.BlockHeaderAPI, chaindb: eth.abc.ChainDatabaseAPI, chain_context: eth.abc.ChainContextAPI, consensus_context: eth.abc.ConsensusContextAPI)
block_class

alias of eth.vm.forks.spurious_dragon.blocks.SpuriousDragonBlock

fork = 'spurious-dragon'

SpuriousDragonState

class eth.vm.forks.spurious_dragon.state.SpuriousDragonState(db: eth.abc.AtomicDatabaseAPI, execution_context: eth.abc.ExecutionContextAPI, state_root: NewType.<locals>.new_type)
computation_class

alias of eth.vm.forks.spurious_dragon.computation.SpuriousDragonComputation

transaction_executor_class

alias of SpuriousDragonTransactionExecutor

SpuriousDragonComputation

class eth.vm.forks.spurious_dragon.computation.SpuriousDragonComputation(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI)

A class for all execution message computations in the SpuriousDragon fork. Inherits from HomesteadComputation

classmethod apply_create_message(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI) → eth.abc.ComputationAPI

Execute a VM message to create a new contract. This is where the VM-specific create logic exists.

classmethod validate_contract_code(contract_code: bytes) → None
classmethod validate_create_message(message: eth.abc.MessageAPI) → None

Class method for validating a create message.

opcodes = {0: <abc.opcode:STOP object>, 1: <abc.opcode:ADD object>, 2: <abc.opcode:MUL object>, 3: <abc.opcode:SUB object>, 4: <abc.opcode:DIV object>, 5: <abc.opcode:SDIV object>, 6: <abc.opcode:MOD object>, 7: <abc.opcode:SMOD object>, 8: <abc.opcode:ADDMOD object>, 9: <abc.opcode:MULMOD object>, 10: <abc.opcode:EXP object>, 11: <abc.opcode:SIGNEXTEND object>, 16: <abc.opcode:LT object>, 17: <abc.opcode:GT object>, 18: <abc.opcode:SLT object>, 19: <abc.opcode:SGT object>, 20: <abc.opcode:EQ object>, 21: <abc.opcode:ISZERO object>, 22: <abc.opcode:AND object>, 23: <abc.opcode:OR object>, 24: <abc.opcode:XOR object>, 25: <abc.opcode:NOT object>, 26: <abc.opcode:BYTE object>, 32: <abc.opcode:SHA3 object>, 48: <abc.opcode:ADDRESS object>, 49: <abc.opcode:BALANCE object>, 50: <abc.opcode:ORIGIN object>, 51: <abc.opcode:CALLER object>, 52: <abc.opcode:CALLVALUE object>, 53: <abc.opcode:CALLDATALOAD object>, 54: <abc.opcode:CALLDATASIZE object>, 55: <abc.opcode:CALLDATACOPY object>, 56: <abc.opcode:CODESIZE object>, 57: <abc.opcode:CODECOPY object>, 58: <abc.opcode:GASPRICE object>, 59: <abc.opcode:EXTCODESIZE object>, 60: <abc.opcode:EXTCODECOPY object>, 64: <abc.opcode:BLOCKHASH object>, 65: <abc.opcode:COINBASE object>, 66: <abc.opcode:TIMESTAMP object>, 67: <abc.opcode:NUMBER object>, 68: <abc.opcode:DIFFICULTY object>, 69: <abc.opcode:GASLIMIT object>, 80: <abc.opcode:POP object>, 81: <abc.opcode:MLOAD object>, 82: <abc.opcode:MSTORE object>, 83: <abc.opcode:MSTORE8 object>, 84: <abc.opcode:SLOAD object>, 85: <abc.opcode:SSTORE object>, 86: <abc.opcode:JUMP object>, 87: <abc.opcode:JUMPI object>, 88: <abc.opcode:PC object>, 89: <abc.opcode:MSIZE object>, 90: <abc.opcode:GAS object>, 91: <abc.opcode:JUMPDEST object>, 96: <abc.opcode:PUSH1 object>, 97: <abc.opcode:PUSH2 object>, 98: <abc.opcode:PUSH3 object>, 99: <abc.opcode:PUSH4 object>, 100: <abc.opcode:PUSH5 object>, 101: <abc.opcode:PUSH6 object>, 102: <abc.opcode:PUSH7 object>, 103: <abc.opcode:PUSH8 object>, 104: <abc.opcode:PUSH9 object>, 105: <abc.opcode:PUSH10 object>, 106: <abc.opcode:PUSH11 object>, 107: <abc.opcode:PUSH12 object>, 108: <abc.opcode:PUSH13 object>, 109: <abc.opcode:PUSH14 object>, 110: <abc.opcode:PUSH15 object>, 111: <abc.opcode:PUSH16 object>, 112: <abc.opcode:PUSH17 object>, 113: <abc.opcode:PUSH18 object>, 114: <abc.opcode:PUSH19 object>, 115: <abc.opcode:PUSH20 object>, 116: <abc.opcode:PUSH21 object>, 117: <abc.opcode:PUSH22 object>, 118: <abc.opcode:PUSH23 object>, 119: <abc.opcode:PUSH24 object>, 120: <abc.opcode:PUSH25 object>, 121: <abc.opcode:PUSH26 object>, 122: <abc.opcode:PUSH27 object>, 123: <abc.opcode:PUSH28 object>, 124: <abc.opcode:PUSH29 object>, 125: <abc.opcode:PUSH30 object>, 126: <abc.opcode:PUSH31 object>, 127: <abc.opcode:PUSH32 object>, 128: <abc.opcode:DUP1 object>, 129: <abc.opcode:DUP2 object>, 130: <abc.opcode:DUP3 object>, 131: <abc.opcode:DUP4 object>, 132: <abc.opcode:DUP5 object>, 133: <abc.opcode:DUP6 object>, 134: <abc.opcode:DUP7 object>, 135: <abc.opcode:DUP8 object>, 136: <abc.opcode:DUP9 object>, 137: <abc.opcode:DUP10 object>, 138: <abc.opcode:DUP11 object>, 139: <abc.opcode:DUP12 object>, 140: <abc.opcode:DUP13 object>, 141: <abc.opcode:DUP14 object>, 142: <abc.opcode:DUP15 object>, 143: <abc.opcode:DUP16 object>, 144: <abc.opcode:SWAP1 object>, 145: <abc.opcode:SWAP2 object>, 146: <abc.opcode:SWAP3 object>, 147: <abc.opcode:SWAP4 object>, 148: <abc.opcode:SWAP5 object>, 149: <abc.opcode:SWAP6 object>, 150: <abc.opcode:SWAP7 object>, 151: <abc.opcode:SWAP8 object>, 152: <abc.opcode:SWAP9 object>, 153: <abc.opcode:SWAP10 object>, 154: <abc.opcode:SWAP11 object>, 155: <abc.opcode:SWAP12 object>, 156: <abc.opcode:SWAP13 object>, 157: <abc.opcode:SWAP14 object>, 158: <abc.opcode:SWAP15 object>, 159: <abc.opcode:SWAP16 object>, 160: <abc.opcode:LOG0 object>, 161: <abc.opcode:LOG1 object>, 162: <abc.opcode:LOG2 object>, 163: <abc.opcode:LOG3 object>, 164: <abc.opcode:LOG4 object>, 240: <abc.opcode:CREATE object>, 241: <abc.opcode:CALL object>, 242: <abc.opcode:CALLCODE object>, 243: <abc.opcode:RETURN object>, 244: <abc.opcode:DELEGATECALL object>, 255: <abc.opcode:SELFDESTRUCT object>}

Byzantium

ByzantiumVM

class eth.vm.forks.byzantium.ByzantiumVM(header: eth.abc.BlockHeaderAPI, chaindb: eth.abc.ChainDatabaseAPI, chain_context: eth.abc.ChainContextAPI, consensus_context: eth.abc.ConsensusContextAPI)
block_class

alias of eth.vm.forks.byzantium.blocks.ByzantiumBlock

add_receipt_to_header(old_header: eth.abc.BlockHeaderAPI, receipt: eth.abc.ReceiptAPI) → eth.abc.BlockHeaderAPI

Apply the receipt to the old header, and return the resulting header. This may have storage-related side-effects. For example, pre-Byzantium, the state root hash is included in the receipt, and so must be stored into the database.

static get_block_reward() → int

Return the amount in wei that should be given to a miner as a reward for this block.

Note

This is an abstract method that must be implemented in subclasses

classmethod make_receipt(base_header: eth.abc.BlockHeaderAPI, transaction: eth.abc.SignedTransactionAPI, computation: eth.abc.ComputationAPI, state: eth.abc.StateAPI) → eth.abc.ReceiptAPI

Generate the receipt resulting from applying the transaction.

Parameters:
  • base_header – the header of the block before the transaction was applied.
  • transaction – the transaction used to generate the receipt
  • computation – the result of running the transaction computation
  • state – the resulting state, after executing the computation
Returns:

receipt

classmethod validate_receipt(receipt: eth.abc.ReceiptAPI) → None

Validate the given receipt.

compute_difficulty

https://github.com/ethereum/EIPs/issues/100

configure_header
create_header_from_parent
fork = 'byzantium'
get_uncle_reward

ByzantiumState

class eth.vm.forks.byzantium.state.ByzantiumState(db: eth.abc.AtomicDatabaseAPI, execution_context: eth.abc.ExecutionContextAPI, state_root: NewType.<locals>.new_type)
computation_class

alias of eth.vm.forks.byzantium.computation.ByzantiumComputation

ByzantiumComputation

class eth.vm.forks.byzantium.computation.ByzantiumComputation(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI)

A class for all execution message computations in the Byzantium fork. Inherits from SpuriousDragonComputation

opcodes = {0: <abc.opcode:STOP object>, 1: <abc.opcode:ADD object>, 2: <abc.opcode:MUL object>, 3: <abc.opcode:SUB object>, 4: <abc.opcode:DIV object>, 5: <abc.opcode:SDIV object>, 6: <abc.opcode:MOD object>, 7: <abc.opcode:SMOD object>, 8: <abc.opcode:ADDMOD object>, 9: <abc.opcode:MULMOD object>, 10: <abc.opcode:EXP object>, 11: <abc.opcode:SIGNEXTEND object>, 16: <abc.opcode:LT object>, 17: <abc.opcode:GT object>, 18: <abc.opcode:SLT object>, 19: <abc.opcode:SGT object>, 20: <abc.opcode:EQ object>, 21: <abc.opcode:ISZERO object>, 22: <abc.opcode:AND object>, 23: <abc.opcode:OR object>, 24: <abc.opcode:XOR object>, 25: <abc.opcode:NOT object>, 26: <abc.opcode:BYTE object>, 32: <abc.opcode:SHA3 object>, 48: <abc.opcode:ADDRESS object>, 49: <abc.opcode:BALANCE object>, 50: <abc.opcode:ORIGIN object>, 51: <abc.opcode:CALLER object>, 52: <abc.opcode:CALLVALUE object>, 53: <abc.opcode:CALLDATALOAD object>, 54: <abc.opcode:CALLDATASIZE object>, 55: <abc.opcode:CALLDATACOPY object>, 56: <abc.opcode:CODESIZE object>, 57: <abc.opcode:CODECOPY object>, 58: <abc.opcode:GASPRICE object>, 59: <abc.opcode:EXTCODESIZE object>, 60: <abc.opcode:EXTCODECOPY object>, 61: <abc.opcode:RETURNDATASIZE object>, 62: <abc.opcode:RETURNDATACOPY object>, 64: <abc.opcode:BLOCKHASH object>, 65: <abc.opcode:COINBASE object>, 66: <abc.opcode:TIMESTAMP object>, 67: <abc.opcode:NUMBER object>, 68: <abc.opcode:DIFFICULTY object>, 69: <abc.opcode:GASLIMIT object>, 80: <abc.opcode:POP object>, 81: <abc.opcode:MLOAD object>, 82: <abc.opcode:MSTORE object>, 83: <abc.opcode:MSTORE8 object>, 84: <abc.opcode:SLOAD object>, 85: <abc.opcode:SSTORE object>, 86: <abc.opcode:JUMP object>, 87: <abc.opcode:JUMPI object>, 88: <abc.opcode:PC object>, 89: <abc.opcode:MSIZE object>, 90: <abc.opcode:GAS object>, 91: <abc.opcode:JUMPDEST object>, 96: <abc.opcode:PUSH1 object>, 97: <abc.opcode:PUSH2 object>, 98: <abc.opcode:PUSH3 object>, 99: <abc.opcode:PUSH4 object>, 100: <abc.opcode:PUSH5 object>, 101: <abc.opcode:PUSH6 object>, 102: <abc.opcode:PUSH7 object>, 103: <abc.opcode:PUSH8 object>, 104: <abc.opcode:PUSH9 object>, 105: <abc.opcode:PUSH10 object>, 106: <abc.opcode:PUSH11 object>, 107: <abc.opcode:PUSH12 object>, 108: <abc.opcode:PUSH13 object>, 109: <abc.opcode:PUSH14 object>, 110: <abc.opcode:PUSH15 object>, 111: <abc.opcode:PUSH16 object>, 112: <abc.opcode:PUSH17 object>, 113: <abc.opcode:PUSH18 object>, 114: <abc.opcode:PUSH19 object>, 115: <abc.opcode:PUSH20 object>, 116: <abc.opcode:PUSH21 object>, 117: <abc.opcode:PUSH22 object>, 118: <abc.opcode:PUSH23 object>, 119: <abc.opcode:PUSH24 object>, 120: <abc.opcode:PUSH25 object>, 121: <abc.opcode:PUSH26 object>, 122: <abc.opcode:PUSH27 object>, 123: <abc.opcode:PUSH28 object>, 124: <abc.opcode:PUSH29 object>, 125: <abc.opcode:PUSH30 object>, 126: <abc.opcode:PUSH31 object>, 127: <abc.opcode:PUSH32 object>, 128: <abc.opcode:DUP1 object>, 129: <abc.opcode:DUP2 object>, 130: <abc.opcode:DUP3 object>, 131: <abc.opcode:DUP4 object>, 132: <abc.opcode:DUP5 object>, 133: <abc.opcode:DUP6 object>, 134: <abc.opcode:DUP7 object>, 135: <abc.opcode:DUP8 object>, 136: <abc.opcode:DUP9 object>, 137: <abc.opcode:DUP10 object>, 138: <abc.opcode:DUP11 object>, 139: <abc.opcode:DUP12 object>, 140: <abc.opcode:DUP13 object>, 141: <abc.opcode:DUP14 object>, 142: <abc.opcode:DUP15 object>, 143: <abc.opcode:DUP16 object>, 144: <abc.opcode:SWAP1 object>, 145: <abc.opcode:SWAP2 object>, 146: <abc.opcode:SWAP3 object>, 147: <abc.opcode:SWAP4 object>, 148: <abc.opcode:SWAP5 object>, 149: <abc.opcode:SWAP6 object>, 150: <abc.opcode:SWAP7 object>, 151: <abc.opcode:SWAP8 object>, 152: <abc.opcode:SWAP9 object>, 153: <abc.opcode:SWAP10 object>, 154: <abc.opcode:SWAP11 object>, 155: <abc.opcode:SWAP12 object>, 156: <abc.opcode:SWAP13 object>, 157: <abc.opcode:SWAP14 object>, 158: <abc.opcode:SWAP15 object>, 159: <abc.opcode:SWAP16 object>, 160: <abc.opcode:LOG0 object>, 161: <abc.opcode:LOG1 object>, 162: <abc.opcode:LOG2 object>, 163: <abc.opcode:LOG3 object>, 164: <abc.opcode:LOG4 object>, 240: <abc.opcode:CREATE object>, 241: <abc.opcode:CALL object>, 242: <abc.opcode:CALLCODE object>, 243: <abc.opcode:RETURN object>, 244: <abc.opcode:DELEGATECALL object>, 250: <abc.opcode:STATICCALL object>, 253: <abc.opcode:REVERT object>, 255: <abc.opcode:SELFDESTRUCT object>}

Constantinople

ConstantinopleVM

class eth.vm.forks.constantinople.ConstantinopleVM(header: eth.abc.BlockHeaderAPI, chaindb: eth.abc.ChainDatabaseAPI, chain_context: eth.abc.ChainContextAPI, consensus_context: eth.abc.ConsensusContextAPI)
block_class

alias of eth.vm.forks.constantinople.blocks.ConstantinopleBlock

static get_block_reward() → int

Return the amount in wei that should be given to a miner as a reward for this block.

Note

This is an abstract method that must be implemented in subclasses

compute_difficulty

https://github.com/ethereum/EIPs/issues/100

configure_header
create_header_from_parent
fork = 'constantinople'
get_uncle_reward

ConstantinopleState

class eth.vm.forks.constantinople.state.ConstantinopleState(db: eth.abc.AtomicDatabaseAPI, execution_context: eth.abc.ExecutionContextAPI, state_root: NewType.<locals>.new_type)
computation_class

alias of eth.vm.forks.constantinople.computation.ConstantinopleComputation

ConstantinopleComputation

class eth.vm.forks.constantinople.computation.ConstantinopleComputation(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI)

A class for all execution message computations in the Constantinople fork. Inherits from ByzantiumComputation

opcodes = {0: <abc.opcode:STOP object>, 1: <abc.opcode:ADD object>, 2: <abc.opcode:MUL object>, 3: <abc.opcode:SUB object>, 4: <abc.opcode:DIV object>, 5: <abc.opcode:SDIV object>, 6: <abc.opcode:MOD object>, 7: <abc.opcode:SMOD object>, 8: <abc.opcode:ADDMOD object>, 9: <abc.opcode:MULMOD object>, 10: <abc.opcode:EXP object>, 11: <abc.opcode:SIGNEXTEND object>, 16: <abc.opcode:LT object>, 17: <abc.opcode:GT object>, 18: <abc.opcode:SLT object>, 19: <abc.opcode:SGT object>, 20: <abc.opcode:EQ object>, 21: <abc.opcode:ISZERO object>, 22: <abc.opcode:AND object>, 23: <abc.opcode:OR object>, 24: <abc.opcode:XOR object>, 25: <abc.opcode:NOT object>, 26: <abc.opcode:BYTE object>, 27: <abc.opcode:SHL object>, 28: <abc.opcode:SHR object>, 29: <abc.opcode:SAR object>, 32: <abc.opcode:SHA3 object>, 48: <abc.opcode:ADDRESS object>, 49: <abc.opcode:BALANCE object>, 50: <abc.opcode:ORIGIN object>, 51: <abc.opcode:CALLER object>, 52: <abc.opcode:CALLVALUE object>, 53: <abc.opcode:CALLDATALOAD object>, 54: <abc.opcode:CALLDATASIZE object>, 55: <abc.opcode:CALLDATACOPY object>, 56: <abc.opcode:CODESIZE object>, 57: <abc.opcode:CODECOPY object>, 58: <abc.opcode:GASPRICE object>, 59: <abc.opcode:EXTCODESIZE object>, 60: <abc.opcode:EXTCODECOPY object>, 61: <abc.opcode:RETURNDATASIZE object>, 62: <abc.opcode:RETURNDATACOPY object>, 63: <abc.opcode:EXTCODEHASH object>, 64: <abc.opcode:BLOCKHASH object>, 65: <abc.opcode:COINBASE object>, 66: <abc.opcode:TIMESTAMP object>, 67: <abc.opcode:NUMBER object>, 68: <abc.opcode:DIFFICULTY object>, 69: <abc.opcode:GASLIMIT object>, 80: <abc.opcode:POP object>, 81: <abc.opcode:MLOAD object>, 82: <abc.opcode:MSTORE object>, 83: <abc.opcode:MSTORE8 object>, 84: <abc.opcode:SLOAD object>, 85: <abc.opcode:SSTORE object>, 86: <abc.opcode:JUMP object>, 87: <abc.opcode:JUMPI object>, 88: <abc.opcode:PC object>, 89: <abc.opcode:MSIZE object>, 90: <abc.opcode:GAS object>, 91: <abc.opcode:JUMPDEST object>, 96: <abc.opcode:PUSH1 object>, 97: <abc.opcode:PUSH2 object>, 98: <abc.opcode:PUSH3 object>, 99: <abc.opcode:PUSH4 object>, 100: <abc.opcode:PUSH5 object>, 101: <abc.opcode:PUSH6 object>, 102: <abc.opcode:PUSH7 object>, 103: <abc.opcode:PUSH8 object>, 104: <abc.opcode:PUSH9 object>, 105: <abc.opcode:PUSH10 object>, 106: <abc.opcode:PUSH11 object>, 107: <abc.opcode:PUSH12 object>, 108: <abc.opcode:PUSH13 object>, 109: <abc.opcode:PUSH14 object>, 110: <abc.opcode:PUSH15 object>, 111: <abc.opcode:PUSH16 object>, 112: <abc.opcode:PUSH17 object>, 113: <abc.opcode:PUSH18 object>, 114: <abc.opcode:PUSH19 object>, 115: <abc.opcode:PUSH20 object>, 116: <abc.opcode:PUSH21 object>, 117: <abc.opcode:PUSH22 object>, 118: <abc.opcode:PUSH23 object>, 119: <abc.opcode:PUSH24 object>, 120: <abc.opcode:PUSH25 object>, 121: <abc.opcode:PUSH26 object>, 122: <abc.opcode:PUSH27 object>, 123: <abc.opcode:PUSH28 object>, 124: <abc.opcode:PUSH29 object>, 125: <abc.opcode:PUSH30 object>, 126: <abc.opcode:PUSH31 object>, 127: <abc.opcode:PUSH32 object>, 128: <abc.opcode:DUP1 object>, 129: <abc.opcode:DUP2 object>, 130: <abc.opcode:DUP3 object>, 131: <abc.opcode:DUP4 object>, 132: <abc.opcode:DUP5 object>, 133: <abc.opcode:DUP6 object>, 134: <abc.opcode:DUP7 object>, 135: <abc.opcode:DUP8 object>, 136: <abc.opcode:DUP9 object>, 137: <abc.opcode:DUP10 object>, 138: <abc.opcode:DUP11 object>, 139: <abc.opcode:DUP12 object>, 140: <abc.opcode:DUP13 object>, 141: <abc.opcode:DUP14 object>, 142: <abc.opcode:DUP15 object>, 143: <abc.opcode:DUP16 object>, 144: <abc.opcode:SWAP1 object>, 145: <abc.opcode:SWAP2 object>, 146: <abc.opcode:SWAP3 object>, 147: <abc.opcode:SWAP4 object>, 148: <abc.opcode:SWAP5 object>, 149: <abc.opcode:SWAP6 object>, 150: <abc.opcode:SWAP7 object>, 151: <abc.opcode:SWAP8 object>, 152: <abc.opcode:SWAP9 object>, 153: <abc.opcode:SWAP10 object>, 154: <abc.opcode:SWAP11 object>, 155: <abc.opcode:SWAP12 object>, 156: <abc.opcode:SWAP13 object>, 157: <abc.opcode:SWAP14 object>, 158: <abc.opcode:SWAP15 object>, 159: <abc.opcode:SWAP16 object>, 160: <abc.opcode:LOG0 object>, 161: <abc.opcode:LOG1 object>, 162: <abc.opcode:LOG2 object>, 163: <abc.opcode:LOG3 object>, 164: <abc.opcode:LOG4 object>, 240: <abc.opcode:CREATE object>, 241: <abc.opcode:CALL object>, 242: <abc.opcode:CALLCODE object>, 243: <abc.opcode:RETURN object>, 244: <abc.opcode:DELEGATECALL object>, 245: <abc.opcode:CREATE2 object>, 250: <abc.opcode:STATICCALL object>, 253: <abc.opcode:REVERT object>, 255: <abc.opcode:SELFDESTRUCT object>}

Petersburg

PetersburgVM

class eth.vm.forks.petersburg.PetersburgVM(header: eth.abc.BlockHeaderAPI, chaindb: eth.abc.ChainDatabaseAPI, chain_context: eth.abc.ChainContextAPI, consensus_context: eth.abc.ConsensusContextAPI)
block_class

alias of eth.vm.forks.petersburg.blocks.PetersburgBlock

static get_block_reward() → int

Return the amount in wei that should be given to a miner as a reward for this block.

Note

This is an abstract method that must be implemented in subclasses

compute_difficulty

https://github.com/ethereum/EIPs/issues/100

configure_header
create_header_from_parent
fork = 'petersburg'
get_uncle_reward

PetersburgState

class eth.vm.forks.petersburg.state.PetersburgState(db: eth.abc.AtomicDatabaseAPI, execution_context: eth.abc.ExecutionContextAPI, state_root: NewType.<locals>.new_type)
computation_class

alias of eth.vm.forks.petersburg.computation.PetersburgComputation

PetersburgComputation

class eth.vm.forks.petersburg.computation.PetersburgComputation(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI)

A class for all execution message computations in the Petersburg fork. Inherits from ByzantiumComputation

opcodes = {0: <abc.opcode:STOP object>, 1: <abc.opcode:ADD object>, 2: <abc.opcode:MUL object>, 3: <abc.opcode:SUB object>, 4: <abc.opcode:DIV object>, 5: <abc.opcode:SDIV object>, 6: <abc.opcode:MOD object>, 7: <abc.opcode:SMOD object>, 8: <abc.opcode:ADDMOD object>, 9: <abc.opcode:MULMOD object>, 10: <abc.opcode:EXP object>, 11: <abc.opcode:SIGNEXTEND object>, 16: <abc.opcode:LT object>, 17: <abc.opcode:GT object>, 18: <abc.opcode:SLT object>, 19: <abc.opcode:SGT object>, 20: <abc.opcode:EQ object>, 21: <abc.opcode:ISZERO object>, 22: <abc.opcode:AND object>, 23: <abc.opcode:OR object>, 24: <abc.opcode:XOR object>, 25: <abc.opcode:NOT object>, 26: <abc.opcode:BYTE object>, 27: <abc.opcode:SHL object>, 28: <abc.opcode:SHR object>, 29: <abc.opcode:SAR object>, 32: <abc.opcode:SHA3 object>, 48: <abc.opcode:ADDRESS object>, 49: <abc.opcode:BALANCE object>, 50: <abc.opcode:ORIGIN object>, 51: <abc.opcode:CALLER object>, 52: <abc.opcode:CALLVALUE object>, 53: <abc.opcode:CALLDATALOAD object>, 54: <abc.opcode:CALLDATASIZE object>, 55: <abc.opcode:CALLDATACOPY object>, 56: <abc.opcode:CODESIZE object>, 57: <abc.opcode:CODECOPY object>, 58: <abc.opcode:GASPRICE object>, 59: <abc.opcode:EXTCODESIZE object>, 60: <abc.opcode:EXTCODECOPY object>, 61: <abc.opcode:RETURNDATASIZE object>, 62: <abc.opcode:RETURNDATACOPY object>, 63: <abc.opcode:EXTCODEHASH object>, 64: <abc.opcode:BLOCKHASH object>, 65: <abc.opcode:COINBASE object>, 66: <abc.opcode:TIMESTAMP object>, 67: <abc.opcode:NUMBER object>, 68: <abc.opcode:DIFFICULTY object>, 69: <abc.opcode:GASLIMIT object>, 80: <abc.opcode:POP object>, 81: <abc.opcode:MLOAD object>, 82: <abc.opcode:MSTORE object>, 83: <abc.opcode:MSTORE8 object>, 84: <abc.opcode:SLOAD object>, 85: <abc.opcode:SSTORE object>, 86: <abc.opcode:JUMP object>, 87: <abc.opcode:JUMPI object>, 88: <abc.opcode:PC object>, 89: <abc.opcode:MSIZE object>, 90: <abc.opcode:GAS object>, 91: <abc.opcode:JUMPDEST object>, 96: <abc.opcode:PUSH1 object>, 97: <abc.opcode:PUSH2 object>, 98: <abc.opcode:PUSH3 object>, 99: <abc.opcode:PUSH4 object>, 100: <abc.opcode:PUSH5 object>, 101: <abc.opcode:PUSH6 object>, 102: <abc.opcode:PUSH7 object>, 103: <abc.opcode:PUSH8 object>, 104: <abc.opcode:PUSH9 object>, 105: <abc.opcode:PUSH10 object>, 106: <abc.opcode:PUSH11 object>, 107: <abc.opcode:PUSH12 object>, 108: <abc.opcode:PUSH13 object>, 109: <abc.opcode:PUSH14 object>, 110: <abc.opcode:PUSH15 object>, 111: <abc.opcode:PUSH16 object>, 112: <abc.opcode:PUSH17 object>, 113: <abc.opcode:PUSH18 object>, 114: <abc.opcode:PUSH19 object>, 115: <abc.opcode:PUSH20 object>, 116: <abc.opcode:PUSH21 object>, 117: <abc.opcode:PUSH22 object>, 118: <abc.opcode:PUSH23 object>, 119: <abc.opcode:PUSH24 object>, 120: <abc.opcode:PUSH25 object>, 121: <abc.opcode:PUSH26 object>, 122: <abc.opcode:PUSH27 object>, 123: <abc.opcode:PUSH28 object>, 124: <abc.opcode:PUSH29 object>, 125: <abc.opcode:PUSH30 object>, 126: <abc.opcode:PUSH31 object>, 127: <abc.opcode:PUSH32 object>, 128: <abc.opcode:DUP1 object>, 129: <abc.opcode:DUP2 object>, 130: <abc.opcode:DUP3 object>, 131: <abc.opcode:DUP4 object>, 132: <abc.opcode:DUP5 object>, 133: <abc.opcode:DUP6 object>, 134: <abc.opcode:DUP7 object>, 135: <abc.opcode:DUP8 object>, 136: <abc.opcode:DUP9 object>, 137: <abc.opcode:DUP10 object>, 138: <abc.opcode:DUP11 object>, 139: <abc.opcode:DUP12 object>, 140: <abc.opcode:DUP13 object>, 141: <abc.opcode:DUP14 object>, 142: <abc.opcode:DUP15 object>, 143: <abc.opcode:DUP16 object>, 144: <abc.opcode:SWAP1 object>, 145: <abc.opcode:SWAP2 object>, 146: <abc.opcode:SWAP3 object>, 147: <abc.opcode:SWAP4 object>, 148: <abc.opcode:SWAP5 object>, 149: <abc.opcode:SWAP6 object>, 150: <abc.opcode:SWAP7 object>, 151: <abc.opcode:SWAP8 object>, 152: <abc.opcode:SWAP9 object>, 153: <abc.opcode:SWAP10 object>, 154: <abc.opcode:SWAP11 object>, 155: <abc.opcode:SWAP12 object>, 156: <abc.opcode:SWAP13 object>, 157: <abc.opcode:SWAP14 object>, 158: <abc.opcode:SWAP15 object>, 159: <abc.opcode:SWAP16 object>, 160: <abc.opcode:LOG0 object>, 161: <abc.opcode:LOG1 object>, 162: <abc.opcode:LOG2 object>, 163: <abc.opcode:LOG3 object>, 164: <abc.opcode:LOG4 object>, 240: <abc.opcode:CREATE object>, 241: <abc.opcode:CALL object>, 242: <abc.opcode:CALLCODE object>, 243: <abc.opcode:RETURN object>, 244: <abc.opcode:DELEGATECALL object>, 245: <abc.opcode:CREATE2 object>, 250: <abc.opcode:STATICCALL object>, 253: <abc.opcode:REVERT object>, 255: <abc.opcode:SELFDESTRUCT object>}

Istanbul

IstanbulVM

class eth.vm.forks.istanbul.IstanbulVM(header: eth.abc.BlockHeaderAPI, chaindb: eth.abc.ChainDatabaseAPI, chain_context: eth.abc.ChainContextAPI, consensus_context: eth.abc.ConsensusContextAPI)
block_class

alias of eth.vm.forks.istanbul.blocks.IstanbulBlock

compute_difficulty

https://github.com/ethereum/EIPs/issues/100

configure_header
create_header_from_parent
fork = 'istanbul'

IstanbulState

class eth.vm.forks.istanbul.state.IstanbulState(db: eth.abc.AtomicDatabaseAPI, execution_context: eth.abc.ExecutionContextAPI, state_root: NewType.<locals>.new_type)
computation_class

alias of eth.vm.forks.istanbul.computation.IstanbulComputation

IstanbulComputation

class eth.vm.forks.istanbul.computation.IstanbulComputation(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI)

A class for all execution message computations in the Istanbul fork. Inherits from PetersburgComputation

opcodes = {0: <abc.opcode:STOP object>, 1: <abc.opcode:ADD object>, 2: <abc.opcode:MUL object>, 3: <abc.opcode:SUB object>, 4: <abc.opcode:DIV object>, 5: <abc.opcode:SDIV object>, 6: <abc.opcode:MOD object>, 7: <abc.opcode:SMOD object>, 8: <abc.opcode:ADDMOD object>, 9: <abc.opcode:MULMOD object>, 10: <abc.opcode:EXP object>, 11: <abc.opcode:SIGNEXTEND object>, 16: <abc.opcode:LT object>, 17: <abc.opcode:GT object>, 18: <abc.opcode:SLT object>, 19: <abc.opcode:SGT object>, 20: <abc.opcode:EQ object>, 21: <abc.opcode:ISZERO object>, 22: <abc.opcode:AND object>, 23: <abc.opcode:OR object>, 24: <abc.opcode:XOR object>, 25: <abc.opcode:NOT object>, 26: <abc.opcode:BYTE object>, 27: <abc.opcode:SHL object>, 28: <abc.opcode:SHR object>, 29: <abc.opcode:SAR object>, 32: <abc.opcode:SHA3 object>, 48: <abc.opcode:ADDRESS object>, 49: <abc.opcode:BALANCE object>, 50: <abc.opcode:ORIGIN object>, 51: <abc.opcode:CALLER object>, 52: <abc.opcode:CALLVALUE object>, 53: <abc.opcode:CALLDATALOAD object>, 54: <abc.opcode:CALLDATASIZE object>, 55: <abc.opcode:CALLDATACOPY object>, 56: <abc.opcode:CODESIZE object>, 57: <abc.opcode:CODECOPY object>, 58: <abc.opcode:GASPRICE object>, 59: <abc.opcode:EXTCODESIZE object>, 60: <abc.opcode:EXTCODECOPY object>, 61: <abc.opcode:RETURNDATASIZE object>, 62: <abc.opcode:RETURNDATACOPY object>, 63: <abc.opcode:EXTCODEHASH object>, 64: <abc.opcode:BLOCKHASH object>, 65: <abc.opcode:COINBASE object>, 66: <abc.opcode:TIMESTAMP object>, 67: <abc.opcode:NUMBER object>, 68: <abc.opcode:DIFFICULTY object>, 69: <abc.opcode:GASLIMIT object>, 70: <abc.opcode:CHAINID object>, 71: <abc.opcode:SELFBALANCE object>, 80: <abc.opcode:POP object>, 81: <abc.opcode:MLOAD object>, 82: <abc.opcode:MSTORE object>, 83: <abc.opcode:MSTORE8 object>, 84: <abc.opcode:SLOAD object>, 85: <abc.opcode:SSTORE object>, 86: <abc.opcode:JUMP object>, 87: <abc.opcode:JUMPI object>, 88: <abc.opcode:PC object>, 89: <abc.opcode:MSIZE object>, 90: <abc.opcode:GAS object>, 91: <abc.opcode:JUMPDEST object>, 96: <abc.opcode:PUSH1 object>, 97: <abc.opcode:PUSH2 object>, 98: <abc.opcode:PUSH3 object>, 99: <abc.opcode:PUSH4 object>, 100: <abc.opcode:PUSH5 object>, 101: <abc.opcode:PUSH6 object>, 102: <abc.opcode:PUSH7 object>, 103: <abc.opcode:PUSH8 object>, 104: <abc.opcode:PUSH9 object>, 105: <abc.opcode:PUSH10 object>, 106: <abc.opcode:PUSH11 object>, 107: <abc.opcode:PUSH12 object>, 108: <abc.opcode:PUSH13 object>, 109: <abc.opcode:PUSH14 object>, 110: <abc.opcode:PUSH15 object>, 111: <abc.opcode:PUSH16 object>, 112: <abc.opcode:PUSH17 object>, 113: <abc.opcode:PUSH18 object>, 114: <abc.opcode:PUSH19 object>, 115: <abc.opcode:PUSH20 object>, 116: <abc.opcode:PUSH21 object>, 117: <abc.opcode:PUSH22 object>, 118: <abc.opcode:PUSH23 object>, 119: <abc.opcode:PUSH24 object>, 120: <abc.opcode:PUSH25 object>, 121: <abc.opcode:PUSH26 object>, 122: <abc.opcode:PUSH27 object>, 123: <abc.opcode:PUSH28 object>, 124: <abc.opcode:PUSH29 object>, 125: <abc.opcode:PUSH30 object>, 126: <abc.opcode:PUSH31 object>, 127: <abc.opcode:PUSH32 object>, 128: <abc.opcode:DUP1 object>, 129: <abc.opcode:DUP2 object>, 130: <abc.opcode:DUP3 object>, 131: <abc.opcode:DUP4 object>, 132: <abc.opcode:DUP5 object>, 133: <abc.opcode:DUP6 object>, 134: <abc.opcode:DUP7 object>, 135: <abc.opcode:DUP8 object>, 136: <abc.opcode:DUP9 object>, 137: <abc.opcode:DUP10 object>, 138: <abc.opcode:DUP11 object>, 139: <abc.opcode:DUP12 object>, 140: <abc.opcode:DUP13 object>, 141: <abc.opcode:DUP14 object>, 142: <abc.opcode:DUP15 object>, 143: <abc.opcode:DUP16 object>, 144: <abc.opcode:SWAP1 object>, 145: <abc.opcode:SWAP2 object>, 146: <abc.opcode:SWAP3 object>, 147: <abc.opcode:SWAP4 object>, 148: <abc.opcode:SWAP5 object>, 149: <abc.opcode:SWAP6 object>, 150: <abc.opcode:SWAP7 object>, 151: <abc.opcode:SWAP8 object>, 152: <abc.opcode:SWAP9 object>, 153: <abc.opcode:SWAP10 object>, 154: <abc.opcode:SWAP11 object>, 155: <abc.opcode:SWAP12 object>, 156: <abc.opcode:SWAP13 object>, 157: <abc.opcode:SWAP14 object>, 158: <abc.opcode:SWAP15 object>, 159: <abc.opcode:SWAP16 object>, 160: <abc.opcode:LOG0 object>, 161: <abc.opcode:LOG1 object>, 162: <abc.opcode:LOG2 object>, 163: <abc.opcode:LOG3 object>, 164: <abc.opcode:LOG4 object>, 240: <abc.opcode:CREATE object>, 241: <abc.opcode:CALL object>, 242: <abc.opcode:CALLCODE object>, 243: <abc.opcode:RETURN object>, 244: <abc.opcode:DELEGATECALL object>, 245: <abc.opcode:CREATE2 object>, 250: <abc.opcode:STATICCALL object>, 253: <abc.opcode:REVERT object>, 255: <abc.opcode:SELFDESTRUCT object>}

Muir Glacier

Submodules

eth.vm.forks.muir_glacier.blocks module

class eth.vm.forks.muir_glacier.blocks.MuirGlacierBlock(header: eth.abc.BlockHeaderAPI, transactions: Sequence[eth.abc.SignedTransactionAPI] = None, uncles: Sequence[eth.abc.BlockHeaderAPI] = None)

Bases: eth.vm.forks.istanbul.blocks.IstanbulBlock

transaction_builder

alias of eth.vm.forks.muir_glacier.transactions.MuirGlacierTransaction

header
transactions
uncles

eth.vm.forks.muir_glacier.computation module

class eth.vm.forks.muir_glacier.computation.MuirGlacierComputation(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI)

Bases: eth.vm.forks.istanbul.computation.IstanbulComputation

A class for all execution message computations in the MuirGlacier fork. Inherits from IstanbulComputation

opcodes = {0: <abc.opcode:STOP object>, 1: <abc.opcode:ADD object>, 2: <abc.opcode:MUL object>, 3: <abc.opcode:SUB object>, 4: <abc.opcode:DIV object>, 5: <abc.opcode:SDIV object>, 6: <abc.opcode:MOD object>, 7: <abc.opcode:SMOD object>, 8: <abc.opcode:ADDMOD object>, 9: <abc.opcode:MULMOD object>, 10: <abc.opcode:EXP object>, 11: <abc.opcode:SIGNEXTEND object>, 16: <abc.opcode:LT object>, 17: <abc.opcode:GT object>, 18: <abc.opcode:SLT object>, 19: <abc.opcode:SGT object>, 20: <abc.opcode:EQ object>, 21: <abc.opcode:ISZERO object>, 22: <abc.opcode:AND object>, 23: <abc.opcode:OR object>, 24: <abc.opcode:XOR object>, 25: <abc.opcode:NOT object>, 26: <abc.opcode:BYTE object>, 27: <abc.opcode:SHL object>, 28: <abc.opcode:SHR object>, 29: <abc.opcode:SAR object>, 32: <abc.opcode:SHA3 object>, 48: <abc.opcode:ADDRESS object>, 49: <abc.opcode:BALANCE object>, 50: <abc.opcode:ORIGIN object>, 51: <abc.opcode:CALLER object>, 52: <abc.opcode:CALLVALUE object>, 53: <abc.opcode:CALLDATALOAD object>, 54: <abc.opcode:CALLDATASIZE object>, 55: <abc.opcode:CALLDATACOPY object>, 56: <abc.opcode:CODESIZE object>, 57: <abc.opcode:CODECOPY object>, 58: <abc.opcode:GASPRICE object>, 59: <abc.opcode:EXTCODESIZE object>, 60: <abc.opcode:EXTCODECOPY object>, 61: <abc.opcode:RETURNDATASIZE object>, 62: <abc.opcode:RETURNDATACOPY object>, 63: <abc.opcode:EXTCODEHASH object>, 64: <abc.opcode:BLOCKHASH object>, 65: <abc.opcode:COINBASE object>, 66: <abc.opcode:TIMESTAMP object>, 67: <abc.opcode:NUMBER object>, 68: <abc.opcode:DIFFICULTY object>, 69: <abc.opcode:GASLIMIT object>, 70: <abc.opcode:CHAINID object>, 71: <abc.opcode:SELFBALANCE object>, 80: <abc.opcode:POP object>, 81: <abc.opcode:MLOAD object>, 82: <abc.opcode:MSTORE object>, 83: <abc.opcode:MSTORE8 object>, 84: <abc.opcode:SLOAD object>, 85: <abc.opcode:SSTORE object>, 86: <abc.opcode:JUMP object>, 87: <abc.opcode:JUMPI object>, 88: <abc.opcode:PC object>, 89: <abc.opcode:MSIZE object>, 90: <abc.opcode:GAS object>, 91: <abc.opcode:JUMPDEST object>, 96: <abc.opcode:PUSH1 object>, 97: <abc.opcode:PUSH2 object>, 98: <abc.opcode:PUSH3 object>, 99: <abc.opcode:PUSH4 object>, 100: <abc.opcode:PUSH5 object>, 101: <abc.opcode:PUSH6 object>, 102: <abc.opcode:PUSH7 object>, 103: <abc.opcode:PUSH8 object>, 104: <abc.opcode:PUSH9 object>, 105: <abc.opcode:PUSH10 object>, 106: <abc.opcode:PUSH11 object>, 107: <abc.opcode:PUSH12 object>, 108: <abc.opcode:PUSH13 object>, 109: <abc.opcode:PUSH14 object>, 110: <abc.opcode:PUSH15 object>, 111: <abc.opcode:PUSH16 object>, 112: <abc.opcode:PUSH17 object>, 113: <abc.opcode:PUSH18 object>, 114: <abc.opcode:PUSH19 object>, 115: <abc.opcode:PUSH20 object>, 116: <abc.opcode:PUSH21 object>, 117: <abc.opcode:PUSH22 object>, 118: <abc.opcode:PUSH23 object>, 119: <abc.opcode:PUSH24 object>, 120: <abc.opcode:PUSH25 object>, 121: <abc.opcode:PUSH26 object>, 122: <abc.opcode:PUSH27 object>, 123: <abc.opcode:PUSH28 object>, 124: <abc.opcode:PUSH29 object>, 125: <abc.opcode:PUSH30 object>, 126: <abc.opcode:PUSH31 object>, 127: <abc.opcode:PUSH32 object>, 128: <abc.opcode:DUP1 object>, 129: <abc.opcode:DUP2 object>, 130: <abc.opcode:DUP3 object>, 131: <abc.opcode:DUP4 object>, 132: <abc.opcode:DUP5 object>, 133: <abc.opcode:DUP6 object>, 134: <abc.opcode:DUP7 object>, 135: <abc.opcode:DUP8 object>, 136: <abc.opcode:DUP9 object>, 137: <abc.opcode:DUP10 object>, 138: <abc.opcode:DUP11 object>, 139: <abc.opcode:DUP12 object>, 140: <abc.opcode:DUP13 object>, 141: <abc.opcode:DUP14 object>, 142: <abc.opcode:DUP15 object>, 143: <abc.opcode:DUP16 object>, 144: <abc.opcode:SWAP1 object>, 145: <abc.opcode:SWAP2 object>, 146: <abc.opcode:SWAP3 object>, 147: <abc.opcode:SWAP4 object>, 148: <abc.opcode:SWAP5 object>, 149: <abc.opcode:SWAP6 object>, 150: <abc.opcode:SWAP7 object>, 151: <abc.opcode:SWAP8 object>, 152: <abc.opcode:SWAP9 object>, 153: <abc.opcode:SWAP10 object>, 154: <abc.opcode:SWAP11 object>, 155: <abc.opcode:SWAP12 object>, 156: <abc.opcode:SWAP13 object>, 157: <abc.opcode:SWAP14 object>, 158: <abc.opcode:SWAP15 object>, 159: <abc.opcode:SWAP16 object>, 160: <abc.opcode:LOG0 object>, 161: <abc.opcode:LOG1 object>, 162: <abc.opcode:LOG2 object>, 163: <abc.opcode:LOG3 object>, 164: <abc.opcode:LOG4 object>, 240: <abc.opcode:CREATE object>, 241: <abc.opcode:CALL object>, 242: <abc.opcode:CALLCODE object>, 243: <abc.opcode:RETURN object>, 244: <abc.opcode:DELEGATECALL object>, 245: <abc.opcode:CREATE2 object>, 250: <abc.opcode:STATICCALL object>, 253: <abc.opcode:REVERT object>, 255: <abc.opcode:SELFDESTRUCT object>}

eth.vm.forks.muir_glacier.headers module

eth.vm.forks.muir_glacier.opcodes module

eth.vm.forks.muir_glacier.state module

class eth.vm.forks.muir_glacier.state.MuirGlacierState(db: eth.abc.AtomicDatabaseAPI, execution_context: eth.abc.ExecutionContextAPI, state_root: NewType.<locals>.new_type)

Bases: eth.vm.forks.istanbul.state.IstanbulState

computation_class

alias of eth.vm.forks.muir_glacier.computation.MuirGlacierComputation

eth.vm.forks.muir_glacier.transactions module

class eth.vm.forks.muir_glacier.transactions.MuirGlacierTransaction(*args, **kwargs)

Bases: eth.vm.forks.istanbul.transactions.IstanbulTransaction

classmethod create_unsigned_transaction(*, nonce: int, gas_price: int, gas: int, to: NewType.<locals>.new_type, value: int, data: bytes) → eth.vm.forks.muir_glacier.transactions.MuirGlacierUnsignedTransaction

Create an unsigned transaction.

data
gas
gas_price
nonce
r
s
to
v
value
class eth.vm.forks.muir_glacier.transactions.MuirGlacierUnsignedTransaction(*args, **kwargs)

Bases: eth.vm.forks.istanbul.transactions.IstanbulUnsignedTransaction

as_signed_transaction(private_key: eth_keys.datatypes.PrivateKey, chain_id: int = None) → eth.vm.forks.muir_glacier.transactions.MuirGlacierTransaction

Return a version of this transaction which has been signed using the provided private_key

data
gas
gas_price
nonce
to
value

Module contents

class eth.vm.forks.muir_glacier.MuirGlacierVM(header: eth.abc.BlockHeaderAPI, chaindb: eth.abc.ChainDatabaseAPI, chain_context: eth.abc.ChainContextAPI, consensus_context: eth.abc.ConsensusContextAPI)

Bases: eth.vm.forks.istanbul.IstanbulVM

block_class

alias of eth.vm.forks.muir_glacier.blocks.MuirGlacierBlock

compute_difficulty

https://github.com/ethereum/EIPs/issues/100

configure_header
create_header_from_parent
fork = 'muir-glacier'

Berlin

Submodules

eth.vm.forks.berlin.blocks module

class eth.vm.forks.berlin.blocks.BerlinBlock(header: eth.abc.BlockHeaderAPI, transactions: Sequence[eth.abc.SignedTransactionAPI] = None, uncles: Sequence[eth.abc.BlockHeaderAPI] = None)

Bases: eth.vm.forks.muir_glacier.blocks.MuirGlacierBlock

receipt_builder

alias of eth.vm.forks.berlin.receipts.BerlinReceiptBuilder

transaction_builder

alias of eth.vm.forks.berlin.transactions.BerlinTransactionBuilder

header
transactions
uncles

eth.vm.forks.berlin.computation module

class eth.vm.forks.berlin.computation.BerlinComputation(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI)

Bases: eth.vm.forks.muir_glacier.computation.MuirGlacierComputation

A class for all execution message computations in the Berlin fork. Inherits from MuirGlacierComputation

opcodes = {0: <abc.opcode:STOP object>, 1: <abc.opcode:ADD object>, 2: <abc.opcode:MUL object>, 3: <abc.opcode:SUB object>, 4: <abc.opcode:DIV object>, 5: <abc.opcode:SDIV object>, 6: <abc.opcode:MOD object>, 7: <abc.opcode:SMOD object>, 8: <abc.opcode:ADDMOD object>, 9: <abc.opcode:MULMOD object>, 10: <abc.opcode:EXP object>, 11: <abc.opcode:SIGNEXTEND object>, 16: <abc.opcode:LT object>, 17: <abc.opcode:GT object>, 18: <abc.opcode:SLT object>, 19: <abc.opcode:SGT object>, 20: <abc.opcode:EQ object>, 21: <abc.opcode:ISZERO object>, 22: <abc.opcode:AND object>, 23: <abc.opcode:OR object>, 24: <abc.opcode:XOR object>, 25: <abc.opcode:NOT object>, 26: <abc.opcode:BYTE object>, 27: <abc.opcode:SHL object>, 28: <abc.opcode:SHR object>, 29: <abc.opcode:SAR object>, 32: <abc.opcode:SHA3 object>, 48: <abc.opcode:ADDRESS object>, 49: <abc.opcode:BALANCE object>, 50: <abc.opcode:ORIGIN object>, 51: <abc.opcode:CALLER object>, 52: <abc.opcode:CALLVALUE object>, 53: <abc.opcode:CALLDATALOAD object>, 54: <abc.opcode:CALLDATASIZE object>, 55: <abc.opcode:CALLDATACOPY object>, 56: <abc.opcode:CODESIZE object>, 57: <abc.opcode:CODECOPY object>, 58: <abc.opcode:GASPRICE object>, 59: <abc.opcode:EXTCODESIZE object>, 60: <abc.opcode:EXTCODECOPY object>, 61: <abc.opcode:RETURNDATASIZE object>, 62: <abc.opcode:RETURNDATACOPY object>, 63: <abc.opcode:EXTCODEHASH object>, 64: <abc.opcode:BLOCKHASH object>, 65: <abc.opcode:COINBASE object>, 66: <abc.opcode:TIMESTAMP object>, 67: <abc.opcode:NUMBER object>, 68: <abc.opcode:DIFFICULTY object>, 69: <abc.opcode:GASLIMIT object>, 70: <abc.opcode:CHAINID object>, 71: <abc.opcode:SELFBALANCE object>, 80: <abc.opcode:POP object>, 81: <abc.opcode:MLOAD object>, 82: <abc.opcode:MSTORE object>, 83: <abc.opcode:MSTORE8 object>, 84: <abc.opcode:SLOAD object>, 85: <abc.opcode:SSTORE object>, 86: <abc.opcode:JUMP object>, 87: <abc.opcode:JUMPI object>, 88: <abc.opcode:PC object>, 89: <abc.opcode:MSIZE object>, 90: <abc.opcode:GAS object>, 91: <abc.opcode:JUMPDEST object>, 96: <abc.opcode:PUSH1 object>, 97: <abc.opcode:PUSH2 object>, 98: <abc.opcode:PUSH3 object>, 99: <abc.opcode:PUSH4 object>, 100: <abc.opcode:PUSH5 object>, 101: <abc.opcode:PUSH6 object>, 102: <abc.opcode:PUSH7 object>, 103: <abc.opcode:PUSH8 object>, 104: <abc.opcode:PUSH9 object>, 105: <abc.opcode:PUSH10 object>, 106: <abc.opcode:PUSH11 object>, 107: <abc.opcode:PUSH12 object>, 108: <abc.opcode:PUSH13 object>, 109: <abc.opcode:PUSH14 object>, 110: <abc.opcode:PUSH15 object>, 111: <abc.opcode:PUSH16 object>, 112: <abc.opcode:PUSH17 object>, 113: <abc.opcode:PUSH18 object>, 114: <abc.opcode:PUSH19 object>, 115: <abc.opcode:PUSH20 object>, 116: <abc.opcode:PUSH21 object>, 117: <abc.opcode:PUSH22 object>, 118: <abc.opcode:PUSH23 object>, 119: <abc.opcode:PUSH24 object>, 120: <abc.opcode:PUSH25 object>, 121: <abc.opcode:PUSH26 object>, 122: <abc.opcode:PUSH27 object>, 123: <abc.opcode:PUSH28 object>, 124: <abc.opcode:PUSH29 object>, 125: <abc.opcode:PUSH30 object>, 126: <abc.opcode:PUSH31 object>, 127: <abc.opcode:PUSH32 object>, 128: <abc.opcode:DUP1 object>, 129: <abc.opcode:DUP2 object>, 130: <abc.opcode:DUP3 object>, 131: <abc.opcode:DUP4 object>, 132: <abc.opcode:DUP5 object>, 133: <abc.opcode:DUP6 object>, 134: <abc.opcode:DUP7 object>, 135: <abc.opcode:DUP8 object>, 136: <abc.opcode:DUP9 object>, 137: <abc.opcode:DUP10 object>, 138: <abc.opcode:DUP11 object>, 139: <abc.opcode:DUP12 object>, 140: <abc.opcode:DUP13 object>, 141: <abc.opcode:DUP14 object>, 142: <abc.opcode:DUP15 object>, 143: <abc.opcode:DUP16 object>, 144: <abc.opcode:SWAP1 object>, 145: <abc.opcode:SWAP2 object>, 146: <abc.opcode:SWAP3 object>, 147: <abc.opcode:SWAP4 object>, 148: <abc.opcode:SWAP5 object>, 149: <abc.opcode:SWAP6 object>, 150: <abc.opcode:SWAP7 object>, 151: <abc.opcode:SWAP8 object>, 152: <abc.opcode:SWAP9 object>, 153: <abc.opcode:SWAP10 object>, 154: <abc.opcode:SWAP11 object>, 155: <abc.opcode:SWAP12 object>, 156: <abc.opcode:SWAP13 object>, 157: <abc.opcode:SWAP14 object>, 158: <abc.opcode:SWAP15 object>, 159: <abc.opcode:SWAP16 object>, 160: <abc.opcode:LOG0 object>, 161: <abc.opcode:LOG1 object>, 162: <abc.opcode:LOG2 object>, 163: <abc.opcode:LOG3 object>, 164: <abc.opcode:LOG4 object>, 240: <abc.opcode:CREATE object>, 241: <abc.opcode:CALL object>, 242: <abc.opcode:CALLCODE object>, 243: <abc.opcode:RETURN object>, 244: <abc.opcode:DELEGATECALL object>, 245: <abc.opcode:CREATE2 object>, 250: <abc.opcode:STATICCALL object>, 253: <abc.opcode:REVERT object>, 255: <abc.opcode:SELFDESTRUCT object>}

eth.vm.forks.berlin.constants module

eth.vm.forks.berlin.headers module

eth.vm.forks.berlin.logic module

class eth.vm.forks.berlin.logic.CallCodeEIP2929

Bases: eth.vm.forks.berlin.logic.LoadFeeByCacheWarmth, eth.vm.logic.call.CallCodeEIP150

class eth.vm.forks.berlin.logic.CallEIP2929

Bases: eth.vm.forks.berlin.logic.LoadFeeByCacheWarmth, eth.vm.logic.call.CallByzantium

class eth.vm.forks.berlin.logic.Create2EIP2929

Bases: eth.vm.logic.system.Create2

generate_contract_address(stack_data: eth.vm.logic.system.CreateOpcodeStackData, call_data: bytes, computation: eth.abc.ComputationAPI) → NewType.<locals>.new_type
class eth.vm.forks.berlin.logic.CreateEIP2929

Bases: eth.vm.logic.system.CreateByzantium

generate_contract_address(stack_data: eth.vm.logic.system.CreateOpcodeStackData, call_data: bytes, computation: eth.abc.ComputationAPI) → NewType.<locals>.new_type
class eth.vm.forks.berlin.logic.DelegateCallEIP2929

Bases: eth.vm.forks.berlin.logic.LoadFeeByCacheWarmth, eth.vm.logic.call.DelegateCallEIP150

class eth.vm.forks.berlin.logic.LoadFeeByCacheWarmth

Bases: object

get_account_load_fee(computation: eth.abc.ComputationAPI, code_address: NewType.<locals>.new_type) → int
class eth.vm.forks.berlin.logic.StaticCallEIP2929

Bases: eth.vm.forks.berlin.logic.LoadFeeByCacheWarmth, eth.vm.logic.call.StaticCall

eth.vm.forks.berlin.logic.balance_eip2929(computation: eth.abc.ComputationAPI) → None
eth.vm.forks.berlin.logic.extcodecopy_eip2929(computation: eth.abc.ComputationAPI) → None
eth.vm.forks.berlin.logic.extcodehash_eip2929(computation: eth.abc.ComputationAPI) → None

Return the code hash for a given address. EIP: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1052.md

eth.vm.forks.berlin.logic.extcodesize_eip2929(computation: eth.abc.ComputationAPI) → None
eth.vm.forks.berlin.logic.selfdestruct_eip2929(computation: eth.abc.ComputationAPI) → None
eth.vm.forks.berlin.logic.sload_eip2929(computation: eth.abc.ComputationAPI) → None
eth.vm.forks.berlin.logic.sstore_eip2929
eth.vm.forks.berlin.logic.sstore_eip2929_generic

eth.vm.forks.berlin.opcodes module

eth.vm.forks.berlin.receipts module

class eth.vm.forks.berlin.receipts.BerlinReceiptBuilder

Bases: eth.abc.ReceiptBuilderAPI

legacy_sedes

alias of eth.rlp.receipts.Receipt

typed_receipt_class

alias of TypedReceipt

classmethod decode(encoded: bytes) → eth.abc.ReceiptAPI

This decodes a receipt that is encoded to either a typed receipt, a legacy receipt, or the body of a typed receipt. It assumes that typed receipts are not rlp-encoded first.

If dealing with an object that is always rlp encoded, then use this instead:

rlp.decode(encoded, sedes=ReceiptBuilderAPI)

For example, you may receive a list of receipts via a devp2p request. Each receipt is either a (legacy) rlp list, or a (new-style) bytestring. Even if the receipt is a bytestring, it’s wrapped in an rlp bytestring, in that context. New-style receipts will not be wrapped in an RLP bytestring in other contexts. They will just be an EIP-2718 type-byte plus payload of concatenated bytes, which cannot be decoded as RLP. This happens for example, when calculating the receipt root hash.

classmethod deserialize(encoded: Union[bytes, List[bytes]]) → eth.abc.ReceiptAPI

Extract a receipt from an encoded RLP object.

This method is used by rlp.decode(…, sedes=ReceiptBuilderAPI).

classmethod serialize(obj: eth.abc.ReceiptAPI) → Union[bytes, List[bytes]]

Encode a receipt to a series of bytes used by RLP.

In the case of legacy receipt, it will actually be a list of bytes. That doesn’t show up here, because pyrlp doesn’t export type annotations.

This method is used by rlp.encode(obj).

class eth.vm.forks.berlin.receipts.TypedReceipt(type_id: int, proxy_target: eth.abc.ReceiptAPI)

Bases: eth.abc.ReceiptAPI, eth.abc.ReceiptDecoderAPI

copy(*args, **kwargs) → eth.abc.ReceiptAPI

Return a copy of the receipt, optionally overwriting any of its properties.

classmethod decode(encoded: bytes) → eth.abc.ReceiptAPI

This decodes a receipt that is encoded to either a typed receipt, a legacy receipt, or the body of a typed receipt. It assumes that typed receipts are not rlp-encoded first.

If dealing with an object that is always rlp encoded, then use this instead:

rlp.decode(encoded, sedes=ReceiptBuilderAPI)

For example, you may receive a list of receipts via a devp2p request. Each receipt is either a (legacy) rlp list, or a (new-style) bytestring. Even if the receipt is a bytestring, it’s wrapped in an rlp bytestring, in that context. New-style receipts will not be wrapped in an RLP bytestring in other contexts. They will just be an EIP-2718 type-byte plus payload of concatenated bytes, which cannot be decoded as RLP. This happens for example, when calculating the receipt root hash.

classmethod deserialize(encoded_unchecked: Union[bytes, List[bytes]]) → eth.abc.ReceiptAPI
encode() → bytes

This encodes a receipt, no matter if it’s: a legacy receipt, a typed receipt, or the payload of a typed receipt. See more context in decode.

classmethod get_payload_codec(type_id: int) → Type[eth.abc.ReceiptDecoderAPI]
classmethod serialize(obj: eth.vm.forks.berlin.receipts.TypedReceipt) → Union[bytes, List[bytes]]
bloom
bloom_filter
codecs = {1: <class 'eth.rlp.receipts.Receipt'>}
gas_used
logs
rlp_type = <rlp.sedes.binary.Binary object>
state_root

eth.vm.forks.berlin.state module

class eth.vm.forks.berlin.state.BerlinState(db: eth.abc.AtomicDatabaseAPI, execution_context: eth.abc.ExecutionContextAPI, state_root: NewType.<locals>.new_type)

Bases: eth.vm.forks.muir_glacier.state.MuirGlacierState

computation_class

alias of eth.vm.forks.berlin.computation.BerlinComputation

transaction_executor_class

alias of BerlinTransactionExecutor

class eth.vm.forks.berlin.state.BerlinTransactionExecutor(vm_state: eth.abc.StateAPI)

Bases: eth.vm.forks.spurious_dragon.state.SpuriousDragonTransactionExecutor

build_computation(message: eth.abc.MessageAPI, transaction: eth.abc.SignedTransactionAPI) → eth.abc.ComputationAPI

Apply the message to the VM and use the given transaction to retrieve the context from.

eth.vm.forks.berlin.transactions module

class eth.vm.forks.berlin.transactions.AccessListPayloadDecoder

Bases: eth.abc.TransactionDecoderAPI

classmethod decode(payload: bytes) → eth.abc.SignedTransactionAPI

This decodes a transaction that is encoded to either a typed transaction or a legacy transaction, or even the payload of one of the transaction types. It assumes that typed transactions are not rlp-encoded first.

If dealing with an object that is rlp encoded first, then use this instead:

rlp.decode(encoded, sedes=TransactionBuilderAPI)

For example, you may receive a list of transactions via a devp2p request. Each transaction is either a (legacy) rlp list, or a (new-style) bytestring. Even if the transaction is a bytestring, it’s wrapped in an rlp bytestring, in that context. New-style transactions will not be wrapped in an RLP bytestring in other contexts. They will just be an EIP-2718 type-byte plus payload of concatenated bytes, which cannot be decoded as RLP. An example context for this is calculating the transaction root hash.

class eth.vm.forks.berlin.transactions.AccessListTransaction(*args, **kwargs)

Bases: rlp.sedes.serializable.Serializable, eth.rlp.transactions.SignedTransactionMethods, eth.abc.SignedTransactionAPI

check_signature_validity() → None

Check if the signature is valid. Raise a ValidationError if the signature is invalid.

encode() → bytes

This encodes a transaction, no matter if it’s: a legacy transaction, a typed transaction, or the payload of a typed transaction. See more context in decode.

get_intrinsic_gas() → int

Return the intrinsic gas for the transaction which is defined as the amount of gas that is needed before any code runs.

get_message_for_signing() → bytes

Return the bytestring that should be signed in order to create a signed transaction.

get_sender() → NewType.<locals>.new_type

Get the 20-byte address which sent this transaction.

This can be a slow operation. transaction.sender is always preferred.

make_receipt(status: bytes, gas_used: int, log_entries: Tuple[Tuple[bytes, Tuple[int, ...], bytes], ...]) → eth.abc.ReceiptAPI

Build a receipt for this transaction.

Transactions have this responsibility because there are different types of transactions, which have different types of receipts. (See access-list transactions, which change the receipt encoding)

Parameters:
  • status – success or failure (used to be the state root after execution)
  • gas_used – cumulative usage of this transaction and the previous ones in the header
  • log_entries – logs generated during execution
access_list
chain_id
data
gas
gas_price
hash
max_fee_per_gas

Will default to gas_price if this is a pre-1559 transaction.

max_priority_fee_per_gas

Will default to gas_price if this is a pre-1559 transaction.

nonce
r
s
to
value
y_parity
class eth.vm.forks.berlin.transactions.AccountAccesses(*args, **kwargs)

Bases: rlp.sedes.serializable.Serializable

account
storage_keys
class eth.vm.forks.berlin.transactions.BerlinLegacyTransaction(*args, **kwargs)

Bases: eth.vm.forks.muir_glacier.transactions.MuirGlacierTransaction

data
gas
gas_price
nonce
r
s
to
v
value
class eth.vm.forks.berlin.transactions.BerlinTransactionBuilder

Bases: eth.abc.TransactionBuilderAPI

Responsible for serializing transactions of ambiguous type.

It dispatches to either the legacy transaction type or the new typed transaction, depending on the nature of the encoded/decoded transaction.

legacy_signed

alias of BerlinLegacyTransaction

legacy_unsigned

alias of BerlinUnsignedLegacyTransaction

typed_transaction

alias of TypedTransaction

classmethod create_unsigned_transaction(*, nonce: int, gas_price: int, gas: int, to: NewType.<locals>.new_type, value: int, data: bytes) → eth.abc.UnsignedTransactionAPI

Create an unsigned transaction.

classmethod decode(encoded: bytes) → eth.abc.SignedTransactionAPI

This decodes a transaction that is encoded to either a typed transaction or a legacy transaction, or even the payload of one of the transaction types. It assumes that typed transactions are not rlp-encoded first.

If dealing with an object that is rlp encoded first, then use this instead:

rlp.decode(encoded, sedes=TransactionBuilderAPI)

For example, you may receive a list of transactions via a devp2p request. Each transaction is either a (legacy) rlp list, or a (new-style) bytestring. Even if the transaction is a bytestring, it’s wrapped in an rlp bytestring, in that context. New-style transactions will not be wrapped in an RLP bytestring in other contexts. They will just be an EIP-2718 type-byte plus payload of concatenated bytes, which cannot be decoded as RLP. An example context for this is calculating the transaction root hash.

classmethod deserialize(encoded: Union[bytes, List[bytes]]) → eth.abc.SignedTransactionAPI

Extract a transaction from an encoded RLP object.

This method is used by rlp.decode(…, sedes=TransactionBuilderAPI).

classmethod new_access_list_transaction(chain_id: int, nonce: int, gas_price: int, gas: int, to: NewType.<locals>.new_type, value: int, data: bytes, access_list: Sequence[Tuple[NewType.<locals>.new_type, Sequence[int]]], y_parity: int, r: int, s: int) → eth.vm.forks.berlin.transactions.TypedTransaction
classmethod new_transaction(nonce: int, gas_price: int, gas: int, to: NewType.<locals>.new_type, value: int, data: bytes, v: int, r: int, s: int) → eth.abc.SignedTransactionAPI

Create a signed transaction.

classmethod new_unsigned_access_list_transaction(chain_id: int, nonce: int, gas_price: int, gas: int, to: NewType.<locals>.new_type, value: int, data: bytes, access_list: Sequence[Tuple[NewType.<locals>.new_type, Sequence[int]]]) → eth.vm.forks.berlin.transactions.TypedTransaction
classmethod serialize(obj: eth.abc.SignedTransactionAPI) → Union[bytes, List[bytes]]

Encode a transaction to a series of bytes used by RLP.

In the case of legacy transactions, it will actually be a list of bytes. That doesn’t show up here, because pyrlp doesn’t export type annotations.

This method is used by rlp.encode(obj).

class eth.vm.forks.berlin.transactions.BerlinUnsignedLegacyTransaction(*args, **kwargs)

Bases: eth.vm.forks.muir_glacier.transactions.MuirGlacierUnsignedTransaction

as_signed_transaction(private_key: eth_keys.datatypes.PrivateKey, chain_id: int = None) → eth.vm.forks.berlin.transactions.BerlinLegacyTransaction

Return a version of this transaction which has been signed using the provided private_key

data
gas
gas_price
nonce
to
value
class eth.vm.forks.berlin.transactions.TypedTransaction(type_id: int, proxy_target: eth.abc.SignedTransactionAPI)

Bases: eth.rlp.transactions.SignedTransactionMethods, eth.abc.SignedTransactionAPI, eth.abc.TransactionDecoderAPI

receipt_builder

alias of eth.vm.forks.berlin.receipts.BerlinReceiptBuilder

check_signature_validity() → None

Check if the signature is valid. Raise a ValidationError if the signature is invalid.

copy(**overrides) → eth.vm.forks.berlin.transactions.TypedTransaction

Return a copy of the transaction.

classmethod decode(encoded: bytes) → eth.abc.SignedTransactionAPI

This decodes a transaction that is encoded to either a typed transaction or a legacy transaction, or even the payload of one of the transaction types. It assumes that typed transactions are not rlp-encoded first.

If dealing with an object that is rlp encoded first, then use this instead:

rlp.decode(encoded, sedes=TransactionBuilderAPI)

For example, you may receive a list of transactions via a devp2p request. Each transaction is either a (legacy) rlp list, or a (new-style) bytestring. Even if the transaction is a bytestring, it’s wrapped in an rlp bytestring, in that context. New-style transactions will not be wrapped in an RLP bytestring in other contexts. They will just be an EIP-2718 type-byte plus payload of concatenated bytes, which cannot be decoded as RLP. An example context for this is calculating the transaction root hash.

classmethod deserialize(encoded_unchecked: Union[bytes, List[bytes]]) → eth.abc.SignedTransactionAPI
encode() → bytes

This encodes a transaction, no matter if it’s: a legacy transaction, a typed transaction, or the payload of a typed transaction. See more context in decode.

get_intrinsic_gas() → int

Return the intrinsic gas for the transaction which is defined as the amount of gas that is needed before any code runs.

get_message_for_signing() → bytes

Return the bytestring that should be signed in order to create a signed transaction.

classmethod get_payload_codec(type_id: int) → Type[eth.abc.TransactionDecoderAPI]
get_sender() → NewType.<locals>.new_type

Get the 20-byte address which sent this transaction.

This can be a slow operation. transaction.sender is always preferred.

make_receipt(status: bytes, gas_used: int, log_entries: Tuple[Tuple[bytes, Tuple[int, ...], bytes], ...]) → eth.abc.ReceiptAPI

Build a receipt for this transaction.

Transactions have this responsibility because there are different types of transactions, which have different types of receipts. (See access-list transactions, which change the receipt encoding)

Parameters:
  • status – success or failure (used to be the state root after execution)
  • gas_used – cumulative usage of this transaction and the previous ones in the header
  • log_entries – logs generated during execution
classmethod serialize(obj: eth.vm.forks.berlin.transactions.TypedTransaction) → Union[bytes, List[bytes]]
access_list

Get addresses to be accessed by a transaction, and their storage slots.

chain_id
data
decoders = {1: <class 'eth.vm.forks.berlin.transactions.AccessListPayloadDecoder'>}
gas
gas_price

Will raise AttributeError if get or set on a 1559 transaction.

hash
max_fee_per_gas

Will default to gas_price if this is a pre-1559 transaction.

max_priority_fee_per_gas

Will default to gas_price if this is a pre-1559 transaction.

nonce
r
rlp_type = <rlp.sedes.binary.Binary object>
s
to
value
y_parity

The bit used to disambiguate elliptic curve signatures.

The only values this method will return are 0 or 1.

class eth.vm.forks.berlin.transactions.UnsignedAccessListTransaction(*args, **kwargs)

Bases: rlp.sedes.serializable.Serializable

as_signed_transaction(private_key: eth_keys.datatypes.PrivateKey) → eth.vm.forks.berlin.transactions.TypedTransaction
get_intrinsic_gas() → int
get_message_for_signing() → bytes
validate() → None
access_list
chain_id
data
gas
gas_price
intrinsic_gas
max_fee_per_gas
max_priority_fee_per_gas
nonce
to
value

Module contents

class eth.vm.forks.berlin.BerlinVM(header: eth.abc.BlockHeaderAPI, chaindb: eth.abc.ChainDatabaseAPI, chain_context: eth.abc.ChainContextAPI, consensus_context: eth.abc.ConsensusContextAPI)

Bases: eth.vm.forks.muir_glacier.MuirGlacierVM

block_class

alias of eth.vm.forks.berlin.blocks.BerlinBlock

compute_difficulty

https://github.com/ethereum/EIPs/issues/100

configure_header
create_header_from_parent
fork = 'berlin'

London

Submodules

eth.vm.forks.london.blocks module

class eth.vm.forks.london.blocks.LondonBackwardsHeader

Bases: eth.abc.BlockHeaderSedesAPI

An rlp sedes class for block headers.

It can serialize and deserialize both London and pre-London headers.

classmethod deserialize(encoded: List[bytes]) → eth.abc.BlockHeaderAPI

Extract a header from an encoded RLP object.

This method is used by rlp.decode(…, sedes=TransactionBuilderAPI).

classmethod serialize(obj: eth.abc.BlockHeaderAPI) → List[bytes]

Encode a header to a series of bytes used by RLP.

This method is used by rlp.encode(obj).

class eth.vm.forks.london.blocks.LondonBlock(header: eth.abc.BlockHeaderAPI, transactions: Sequence[eth.abc.SignedTransactionAPI] = None, uncles: Sequence[eth.abc.BlockHeaderAPI] = None)

Bases: eth.vm.forks.berlin.blocks.BerlinBlock

receipt_builder

alias of eth.vm.forks.london.receipts.LondonReceiptBuilder

transaction_builder

alias of eth.vm.forks.london.transactions.LondonTransactionBuilder

header
transactions
uncles
class eth.vm.forks.london.blocks.LondonBlockHeader(difficulty: int, block_number: NewType.<locals>.new_type, gas_limit: int, timestamp: int = None, coinbase: NewType.<locals>.new_type = b'x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00', parent_hash: NewType.<locals>.new_type = b'x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00', uncles_hash: NewType.<locals>.new_type = b'x1dxccMxe8xdexc7]zxabx85xb5gxb6xccxd4x1axd3x12Ex1bx94x8atx13xf0xa1Bxfd@xd4x93G', state_root: NewType.<locals>.new_type = b'Vxe8x1fx17x1bxccUxa6xffx83Exe6x92xc0xf8n[Hxe0x1bx99lxadxc0x01b/xb5xe3cxb4!', transaction_root: NewType.<locals>.new_type = b'Vxe8x1fx17x1bxccUxa6xffx83Exe6x92xc0xf8n[Hxe0x1bx99lxadxc0x01b/xb5xe3cxb4!', receipt_root: NewType.<locals>.new_type = b'Vxe8x1fx17x1bxccUxa6xffx83Exe6x92xc0xf8n[Hxe0x1bx99lxadxc0x01b/xb5xe3cxb4!', bloom: int = 0, gas_used: int = 0, extra_data: bytes = b'', mix_hash: NewType.<locals>.new_type = b'x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00', nonce: bytes = b'x00x00x00x00x00x00x00B', base_fee_per_gas: int = 0)

Bases: rlp.sedes.serializable.Serializable, eth.abc.BlockHeaderAPI

base_fee_per_gas
block_number
bloom
coinbase
difficulty
extra_data
gas_limit
gas_used
hash

Return the hash of the block header.

hex_hash

Return the hash as a hex string.

is_genesis

Return True if this header represents the genesis block of the chain, otherwise False.

mining_hash

Return the mining hash of the block header.

mix_hash
nonce
parent_hash
receipt_root
state_root
timestamp
transaction_root
uncles_hash
withdrawals_root

Return the withdrawals root of the block.

Set to None in pre-Shanghai header.

class eth.vm.forks.london.blocks.LondonMiningHeader(*args, **kwargs)

Bases: rlp.sedes.serializable.Serializable, eth.abc.MiningHeaderAPI

base_fee_per_gas
block_number
bloom
coinbase
difficulty
extra_data
gas_limit
gas_used
parent_hash
receipt_root
state_root
timestamp
transaction_root
uncles_hash

eth.vm.forks.london.computation module

class eth.vm.forks.london.computation.LondonComputation(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI)

Bases: eth.vm.forks.berlin.computation.BerlinComputation

A class for all execution message computations in the London fork. Inherits from BerlinComputation

classmethod validate_contract_code(contract_code: bytes) → None
opcodes = {0: <abc.opcode:STOP object>, 1: <abc.opcode:ADD object>, 2: <abc.opcode:MUL object>, 3: <abc.opcode:SUB object>, 4: <abc.opcode:DIV object>, 5: <abc.opcode:SDIV object>, 6: <abc.opcode:MOD object>, 7: <abc.opcode:SMOD object>, 8: <abc.opcode:ADDMOD object>, 9: <abc.opcode:MULMOD object>, 10: <abc.opcode:EXP object>, 11: <abc.opcode:SIGNEXTEND object>, 16: <abc.opcode:LT object>, 17: <abc.opcode:GT object>, 18: <abc.opcode:SLT object>, 19: <abc.opcode:SGT object>, 20: <abc.opcode:EQ object>, 21: <abc.opcode:ISZERO object>, 22: <abc.opcode:AND object>, 23: <abc.opcode:OR object>, 24: <abc.opcode:XOR object>, 25: <abc.opcode:NOT object>, 26: <abc.opcode:BYTE object>, 27: <abc.opcode:SHL object>, 28: <abc.opcode:SHR object>, 29: <abc.opcode:SAR object>, 32: <abc.opcode:SHA3 object>, 48: <abc.opcode:ADDRESS object>, 49: <abc.opcode:BALANCE object>, 50: <abc.opcode:ORIGIN object>, 51: <abc.opcode:CALLER object>, 52: <abc.opcode:CALLVALUE object>, 53: <abc.opcode:CALLDATALOAD object>, 54: <abc.opcode:CALLDATASIZE object>, 55: <abc.opcode:CALLDATACOPY object>, 56: <abc.opcode:CODESIZE object>, 57: <abc.opcode:CODECOPY object>, 58: <abc.opcode:GASPRICE object>, 59: <abc.opcode:EXTCODESIZE object>, 60: <abc.opcode:EXTCODECOPY object>, 61: <abc.opcode:RETURNDATASIZE object>, 62: <abc.opcode:RETURNDATACOPY object>, 63: <abc.opcode:EXTCODEHASH object>, 64: <abc.opcode:BLOCKHASH object>, 65: <abc.opcode:COINBASE object>, 66: <abc.opcode:TIMESTAMP object>, 67: <abc.opcode:NUMBER object>, 68: <abc.opcode:DIFFICULTY object>, 69: <abc.opcode:GASLIMIT object>, 70: <abc.opcode:CHAINID object>, 71: <abc.opcode:SELFBALANCE object>, 72: <abc.opcode:BASEFEE object>, 80: <abc.opcode:POP object>, 81: <abc.opcode:MLOAD object>, 82: <abc.opcode:MSTORE object>, 83: <abc.opcode:MSTORE8 object>, 84: <abc.opcode:SLOAD object>, 85: <abc.opcode:SSTORE object>, 86: <abc.opcode:JUMP object>, 87: <abc.opcode:JUMPI object>, 88: <abc.opcode:PC object>, 89: <abc.opcode:MSIZE object>, 90: <abc.opcode:GAS object>, 91: <abc.opcode:JUMPDEST object>, 96: <abc.opcode:PUSH1 object>, 97: <abc.opcode:PUSH2 object>, 98: <abc.opcode:PUSH3 object>, 99: <abc.opcode:PUSH4 object>, 100: <abc.opcode:PUSH5 object>, 101: <abc.opcode:PUSH6 object>, 102: <abc.opcode:PUSH7 object>, 103: <abc.opcode:PUSH8 object>, 104: <abc.opcode:PUSH9 object>, 105: <abc.opcode:PUSH10 object>, 106: <abc.opcode:PUSH11 object>, 107: <abc.opcode:PUSH12 object>, 108: <abc.opcode:PUSH13 object>, 109: <abc.opcode:PUSH14 object>, 110: <abc.opcode:PUSH15 object>, 111: <abc.opcode:PUSH16 object>, 112: <abc.opcode:PUSH17 object>, 113: <abc.opcode:PUSH18 object>, 114: <abc.opcode:PUSH19 object>, 115: <abc.opcode:PUSH20 object>, 116: <abc.opcode:PUSH21 object>, 117: <abc.opcode:PUSH22 object>, 118: <abc.opcode:PUSH23 object>, 119: <abc.opcode:PUSH24 object>, 120: <abc.opcode:PUSH25 object>, 121: <abc.opcode:PUSH26 object>, 122: <abc.opcode:PUSH27 object>, 123: <abc.opcode:PUSH28 object>, 124: <abc.opcode:PUSH29 object>, 125: <abc.opcode:PUSH30 object>, 126: <abc.opcode:PUSH31 object>, 127: <abc.opcode:PUSH32 object>, 128: <abc.opcode:DUP1 object>, 129: <abc.opcode:DUP2 object>, 130: <abc.opcode:DUP3 object>, 131: <abc.opcode:DUP4 object>, 132: <abc.opcode:DUP5 object>, 133: <abc.opcode:DUP6 object>, 134: <abc.opcode:DUP7 object>, 135: <abc.opcode:DUP8 object>, 136: <abc.opcode:DUP9 object>, 137: <abc.opcode:DUP10 object>, 138: <abc.opcode:DUP11 object>, 139: <abc.opcode:DUP12 object>, 140: <abc.opcode:DUP13 object>, 141: <abc.opcode:DUP14 object>, 142: <abc.opcode:DUP15 object>, 143: <abc.opcode:DUP16 object>, 144: <abc.opcode:SWAP1 object>, 145: <abc.opcode:SWAP2 object>, 146: <abc.opcode:SWAP3 object>, 147: <abc.opcode:SWAP4 object>, 148: <abc.opcode:SWAP5 object>, 149: <abc.opcode:SWAP6 object>, 150: <abc.opcode:SWAP7 object>, 151: <abc.opcode:SWAP8 object>, 152: <abc.opcode:SWAP9 object>, 153: <abc.opcode:SWAP10 object>, 154: <abc.opcode:SWAP11 object>, 155: <abc.opcode:SWAP12 object>, 156: <abc.opcode:SWAP13 object>, 157: <abc.opcode:SWAP14 object>, 158: <abc.opcode:SWAP15 object>, 159: <abc.opcode:SWAP16 object>, 160: <abc.opcode:LOG0 object>, 161: <abc.opcode:LOG1 object>, 162: <abc.opcode:LOG2 object>, 163: <abc.opcode:LOG3 object>, 164: <abc.opcode:LOG4 object>, 240: <abc.opcode:CREATE object>, 241: <abc.opcode:CALL object>, 242: <abc.opcode:CALLCODE object>, 243: <abc.opcode:RETURN object>, 244: <abc.opcode:DELEGATECALL object>, 245: <abc.opcode:CREATE2 object>, 250: <abc.opcode:STATICCALL object>, 253: <abc.opcode:REVERT object>, 255: <abc.opcode:SELFDESTRUCT object>}

eth.vm.forks.london.constants module

eth.vm.forks.london.headers module

class eth.vm.forks.london.headers.LondonBackwardsHeader

Bases: eth.abc.BlockHeaderSedesAPI

An rlp sedes class for block headers.

It can serialize and deserialize both London and pre-London headers.

classmethod deserialize(encoded: List[bytes]) → eth.abc.BlockHeaderAPI

Extract a header from an encoded RLP object.

This method is used by rlp.decode(…, sedes=TransactionBuilderAPI).

classmethod serialize(obj: eth.abc.BlockHeaderAPI) → List[bytes]

Encode a header to a series of bytes used by RLP.

This method is used by rlp.encode(obj).

eth.vm.forks.london.headers.calculate_expected_base_fee_per_gas(parent_header: eth.abc.BlockHeaderAPI) → int
eth.vm.forks.london.headers.create_london_header_from_parent

eth.vm.forks.london.opcodes module

eth.vm.forks.london.receipts module

class eth.vm.forks.london.receipts.LondonReceiptBuilder

Bases: eth.vm.forks.berlin.receipts.BerlinReceiptBuilder

typed_receipt_class

alias of LondonTypedReceipt

class eth.vm.forks.london.receipts.LondonTypedReceipt(type_id: int, proxy_target: eth.abc.ReceiptAPI)

Bases: eth.vm.forks.berlin.receipts.TypedReceipt

codecs = {1: <class 'eth.rlp.receipts.Receipt'>, 2: <class 'eth.rlp.receipts.Receipt'>}

eth.vm.forks.london.state module

class eth.vm.forks.london.state.LondonState(db: eth.abc.AtomicDatabaseAPI, execution_context: eth.abc.ExecutionContextAPI, state_root: NewType.<locals>.new_type)

Bases: eth.vm.forks.berlin.state.BerlinState

computation_class

alias of eth.vm.forks.london.computation.LondonComputation

transaction_executor_class

alias of LondonTransactionExecutor

get_gas_price(transaction: eth.abc.SignedTransactionAPI) → int

Return the gas price of the given transaction.

Factor in the current block’s base gas price, if appropriate. (See EIP-1559)

get_tip(transaction: eth.abc.SignedTransactionAPI) → int

Return the gas price that gets allocated to the miner/validator.

Pre-EIP-1559 that would be the full transaction gas price. After, it would be the tip price (potentially reduced, if the base fee is so high that it surpasses the transaction’s maximum gas price after adding the tip).

get_transaction_context(transaction: eth.abc.SignedTransactionAPI) → eth.abc.TransactionContextAPI

London-specific transaction context creation, where gas_price includes the block base fee

validate_transaction(transaction: eth.abc.SignedTransactionAPI) → None

Validate the given transaction.

base_fee

Return the current base_fee from the current execution_context

Raises a NotImplementedError if called in an execution context prior to the London hard fork.

class eth.vm.forks.london.state.LondonTransactionExecutor(vm_state: eth.abc.StateAPI)

Bases: eth.vm.forks.berlin.state.BerlinTransactionExecutor

build_evm_message(transaction: eth.abc.SignedTransactionAPI) → eth.abc.MessageAPI

Build and return a MessageAPI from the given transaction.

classmethod calculate_gas_refund(computation: eth.abc.ComputationAPI, gas_used: int) → int

eth.vm.forks.london.storage module

eth.vm.forks.london.transactions module

class eth.vm.forks.london.transactions.DynamicFeePayloadDecoder

Bases: eth.abc.TransactionDecoderAPI

classmethod decode(payload: bytes) → eth.abc.SignedTransactionAPI

This decodes a transaction that is encoded to either a typed transaction or a legacy transaction, or even the payload of one of the transaction types. It assumes that typed transactions are not rlp-encoded first.

If dealing with an object that is rlp encoded first, then use this instead:

rlp.decode(encoded, sedes=TransactionBuilderAPI)

For example, you may receive a list of transactions via a devp2p request. Each transaction is either a (legacy) rlp list, or a (new-style) bytestring. Even if the transaction is a bytestring, it’s wrapped in an rlp bytestring, in that context. New-style transactions will not be wrapped in an RLP bytestring in other contexts. They will just be an EIP-2718 type-byte plus payload of concatenated bytes, which cannot be decoded as RLP. An example context for this is calculating the transaction root hash.

class eth.vm.forks.london.transactions.DynamicFeeTransaction(*args, **kwargs)

Bases: rlp.sedes.serializable.Serializable, eth.rlp.transactions.SignedTransactionMethods, eth.abc.SignedTransactionAPI

check_signature_validity() → None

Check if the signature is valid. Raise a ValidationError if the signature is invalid.

encode() → bytes

This encodes a transaction, no matter if it’s: a legacy transaction, a typed transaction, or the payload of a typed transaction. See more context in decode.

get_intrinsic_gas() → int

Return the intrinsic gas for the transaction which is defined as the amount of gas that is needed before any code runs.

get_message_for_signing() → bytes

Return the bytestring that should be signed in order to create a signed transaction.

get_sender() → NewType.<locals>.new_type

Get the 20-byte address which sent this transaction.

This can be a slow operation. transaction.sender is always preferred.

make_receipt(status: bytes, gas_used: int, log_entries: Tuple[Tuple[bytes, Tuple[int, ...], bytes], ...]) → eth.abc.ReceiptAPI

Build a receipt for this transaction.

Transactions have this responsibility because there are different types of transactions, which have different types of receipts. (See access-list transactions, which change the receipt encoding)

Parameters:
  • status – success or failure (used to be the state root after execution)
  • gas_used – cumulative usage of this transaction and the previous ones in the header
  • log_entries – logs generated during execution
access_list
chain_id
data
gas
gas_price

Will raise AttributeError if get or set on a 1559 transaction.

hash
max_fee_per_gas
max_priority_fee_per_gas
nonce
r
s
to
value
y_parity
class eth.vm.forks.london.transactions.LondonLegacyTransaction(*args, **kwargs)

Bases: eth.vm.forks.berlin.transactions.BerlinLegacyTransaction

data
gas
gas_price
nonce
r
s
to
v
value
class eth.vm.forks.london.transactions.LondonTransactionBuilder

Bases: eth.vm.forks.berlin.transactions.BerlinTransactionBuilder

legacy_signed

alias of LondonLegacyTransaction

legacy_unsigned

alias of LondonUnsignedLegacyTransaction

typed_transaction

alias of LondonTypedTransaction

classmethod new_dynamic_fee_transaction(chain_id: int, nonce: int, max_priority_fee_per_gas: int, max_fee_per_gas: int, gas: int, to: NewType.<locals>.new_type, value: int, data: bytes, access_list: Sequence[Tuple[NewType.<locals>.new_type, Sequence[int]]], y_parity: int, r: int, s: int) → eth.vm.forks.london.transactions.LondonTypedTransaction
classmethod new_unsigned_dynamic_fee_transaction(chain_id: int, nonce: int, max_priority_fee_per_gas: int, max_fee_per_gas: int, gas: int, to: NewType.<locals>.new_type, value: int, data: bytes, access_list: Sequence[Tuple[NewType.<locals>.new_type, Sequence[int]]]) → eth.vm.forks.london.transactions.LondonTypedTransaction
class eth.vm.forks.london.transactions.LondonTypedTransaction(type_id: int, proxy_target: eth.abc.SignedTransactionAPI)

Bases: eth.vm.forks.berlin.transactions.TypedTransaction

receipt_builder

alias of eth.vm.forks.london.receipts.LondonReceiptBuilder

decoders = {1: <class 'eth.vm.forks.berlin.transactions.AccessListPayloadDecoder'>, 2: <class 'eth.vm.forks.london.transactions.DynamicFeePayloadDecoder'>}
class eth.vm.forks.london.transactions.LondonUnsignedLegacyTransaction(*args, **kwargs)

Bases: eth.vm.forks.berlin.transactions.BerlinUnsignedLegacyTransaction

as_signed_transaction(private_key: eth_keys.datatypes.PrivateKey, chain_id: int = None) → eth.vm.forks.london.transactions.LondonLegacyTransaction

Return a version of this transaction which has been signed using the provided private_key

data
gas
gas_price
nonce
to
value
class eth.vm.forks.london.transactions.UnsignedDynamicFeeTransaction(*args, **kwargs)

Bases: rlp.sedes.serializable.Serializable

as_signed_transaction(private_key: eth_keys.datatypes.PrivateKey) → eth.vm.forks.berlin.transactions.TypedTransaction
get_intrinsic_gas() → int
get_message_for_signing() → bytes
validate() → None
access_list
chain_id
data
gas
intrinsic_gas
max_fee_per_gas
max_priority_fee_per_gas
nonce
to
value

eth.vm.forks.london.validation module

eth.vm.forks.london.validation.validate_london_normalized_transaction(state: eth.abc.StateAPI, transaction: eth.abc.SignedTransactionAPI) → None

Validates a London normalized transaction.

Raise eth.exceptions.ValidationError if the sender cannot afford to send this transaction.

Module contents

class eth.vm.forks.london.LondonVM(header: eth.abc.BlockHeaderAPI, chaindb: eth.abc.ChainDatabaseAPI, chain_context: eth.abc.ChainContextAPI, consensus_context: eth.abc.ConsensusContextAPI)

Bases: eth.vm.forks.berlin.BerlinVM

block_class

alias of eth.vm.forks.london.blocks.LondonBlock

classmethod calculate_net_gas_refund(consumed_gas: int, gross_refund: int) → int
classmethod validate_gas(header: eth.abc.BlockHeaderAPI, parent_header: eth.abc.BlockHeaderAPI) → None
compute_difficulty

https://github.com/ethereum/EIPs/issues/100

configure_header
create_header_from_parent
fork = 'london'

Arrow Glacier

Submodules

eth.vm.forks.arrow_glacier.blocks module

class eth.vm.forks.arrow_glacier.blocks.ArrowGlacierBlock(header: eth.abc.BlockHeaderAPI, transactions: Sequence[eth.abc.SignedTransactionAPI] = None, uncles: Sequence[eth.abc.BlockHeaderAPI] = None)

Bases: eth.vm.forks.london.blocks.LondonBlock

transaction_builder

alias of eth.vm.forks.arrow_glacier.transactions.ArrowGlacierTransactionBuilder

header
transactions
uncles
class eth.vm.forks.arrow_glacier.blocks.ArrowGlacierBlockHeader(difficulty: int, block_number: NewType.<locals>.new_type, gas_limit: int, timestamp: int = None, coinbase: NewType.<locals>.new_type = b'x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00', parent_hash: NewType.<locals>.new_type = b'x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00', uncles_hash: NewType.<locals>.new_type = b'x1dxccMxe8xdexc7]zxabx85xb5gxb6xccxd4x1axd3x12Ex1bx94x8atx13xf0xa1Bxfd@xd4x93G', state_root: NewType.<locals>.new_type = b'Vxe8x1fx17x1bxccUxa6xffx83Exe6x92xc0xf8n[Hxe0x1bx99lxadxc0x01b/xb5xe3cxb4!', transaction_root: NewType.<locals>.new_type = b'Vxe8x1fx17x1bxccUxa6xffx83Exe6x92xc0xf8n[Hxe0x1bx99lxadxc0x01b/xb5xe3cxb4!', receipt_root: NewType.<locals>.new_type = b'Vxe8x1fx17x1bxccUxa6xffx83Exe6x92xc0xf8n[Hxe0x1bx99lxadxc0x01b/xb5xe3cxb4!', bloom: int = 0, gas_used: int = 0, extra_data: bytes = b'', mix_hash: NewType.<locals>.new_type = b'x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00', nonce: bytes = b'x00x00x00x00x00x00x00B', base_fee_per_gas: int = 0)

Bases: eth.vm.forks.london.blocks.LondonBlockHeader, abc.ABC

base_fee_per_gas
block_number
bloom
coinbase
difficulty
extra_data
gas_limit
gas_used
mix_hash
nonce
parent_hash
receipt_root
state_root
timestamp
transaction_root
uncles_hash
class eth.vm.forks.arrow_glacier.blocks.ArrowGlacierMiningHeader(*args, **kwargs)

Bases: eth.vm.forks.london.blocks.LondonMiningHeader, abc.ABC

base_fee_per_gas
block_number
bloom
coinbase
difficulty
extra_data
gas_limit
gas_used
parent_hash
receipt_root
state_root
timestamp
transaction_root
uncles_hash

eth.vm.forks.arrow_glacier.computation module

class eth.vm.forks.arrow_glacier.computation.ArrowGlacierComputation(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI)

Bases: eth.vm.forks.london.computation.LondonComputation

A class for all execution message computations in the ArrowGlacier fork. Inherits from LondonComputation

eth.vm.forks.arrow_glacier.headers module

eth.vm.forks.arrow_glacier.headers.create_arrow_glacier_header_from_parent

eth.vm.forks.arrow_glacier.state module

class eth.vm.forks.arrow_glacier.state.ArrowGlacierState(db: eth.abc.AtomicDatabaseAPI, execution_context: eth.abc.ExecutionContextAPI, state_root: NewType.<locals>.new_type)

Bases: eth.vm.forks.london.state.LondonState

computation_class

alias of eth.vm.forks.arrow_glacier.computation.ArrowGlacierComputation

transaction_executor_class

alias of ArrowGlacierTransactionExecutor

class eth.vm.forks.arrow_glacier.state.ArrowGlacierTransactionExecutor(vm_state: eth.abc.StateAPI)

Bases: eth.vm.forks.london.state.LondonTransactionExecutor

eth.vm.forks.arrow_glacier.transactions module

class eth.vm.forks.arrow_glacier.transactions.ArrowGlacierLegacyTransaction(*args, **kwargs)

Bases: eth.vm.forks.london.transactions.LondonLegacyTransaction, abc.ABC

data
gas
gas_price
nonce
r
s
to
v
value
class eth.vm.forks.arrow_glacier.transactions.ArrowGlacierTransactionBuilder

Bases: eth.vm.forks.london.transactions.LondonTransactionBuilder

legacy_signed

alias of ArrowGlacierLegacyTransaction

legacy_unsigned

alias of ArrowGlacierUnsignedLegacyTransaction

class eth.vm.forks.arrow_glacier.transactions.ArrowGlacierUnsignedLegacyTransaction(*args, **kwargs)

Bases: eth.vm.forks.london.transactions.LondonUnsignedLegacyTransaction

as_signed_transaction(private_key: eth_keys.datatypes.PrivateKey, chain_id: int = None) → eth.vm.forks.arrow_glacier.transactions.ArrowGlacierLegacyTransaction

Return a version of this transaction which has been signed using the provided private_key

data
gas
gas_price
nonce
to
value

Module contents

class eth.vm.forks.arrow_glacier.ArrowGlacierVM(header: eth.abc.BlockHeaderAPI, chaindb: eth.abc.ChainDatabaseAPI, chain_context: eth.abc.ChainContextAPI, consensus_context: eth.abc.ConsensusContextAPI)

Bases: eth.vm.forks.london.LondonVM

block_class

alias of eth.vm.forks.arrow_glacier.blocks.ArrowGlacierBlock

compute_difficulty

https://github.com/ethereum/EIPs/issues/100

configure_header
create_header_from_parent
fork = 'arrow-glacier'

Gray Glacier

Submodules

eth.vm.forks.gray_glacier.blocks module

class eth.vm.forks.gray_glacier.blocks.GrayGlacierBlock(header: eth.abc.BlockHeaderAPI, transactions: Sequence[eth.abc.SignedTransactionAPI] = None, uncles: Sequence[eth.abc.BlockHeaderAPI] = None)

Bases: eth.vm.forks.arrow_glacier.blocks.ArrowGlacierBlock

transaction_builder

alias of eth.vm.forks.gray_glacier.transactions.GrayGlacierTransactionBuilder

header
transactions
uncles
class eth.vm.forks.gray_glacier.blocks.GrayGlacierBlockHeader(difficulty: int, block_number: NewType.<locals>.new_type, gas_limit: int, timestamp: int = None, coinbase: NewType.<locals>.new_type = b'x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00', parent_hash: NewType.<locals>.new_type = b'x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00', uncles_hash: NewType.<locals>.new_type = b'x1dxccMxe8xdexc7]zxabx85xb5gxb6xccxd4x1axd3x12Ex1bx94x8atx13xf0xa1Bxfd@xd4x93G', state_root: NewType.<locals>.new_type = b'Vxe8x1fx17x1bxccUxa6xffx83Exe6x92xc0xf8n[Hxe0x1bx99lxadxc0x01b/xb5xe3cxb4!', transaction_root: NewType.<locals>.new_type = b'Vxe8x1fx17x1bxccUxa6xffx83Exe6x92xc0xf8n[Hxe0x1bx99lxadxc0x01b/xb5xe3cxb4!', receipt_root: NewType.<locals>.new_type = b'Vxe8x1fx17x1bxccUxa6xffx83Exe6x92xc0xf8n[Hxe0x1bx99lxadxc0x01b/xb5xe3cxb4!', bloom: int = 0, gas_used: int = 0, extra_data: bytes = b'', mix_hash: NewType.<locals>.new_type = b'x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00', nonce: bytes = b'x00x00x00x00x00x00x00B', base_fee_per_gas: int = 0)

Bases: eth.vm.forks.arrow_glacier.blocks.ArrowGlacierBlockHeader, abc.ABC

base_fee_per_gas
block_number
bloom
coinbase
difficulty
extra_data
gas_limit
gas_used
mix_hash
nonce
parent_hash
receipt_root
state_root
timestamp
transaction_root
uncles_hash
class eth.vm.forks.gray_glacier.blocks.GrayGlacierMiningHeader(*args, **kwargs)

Bases: eth.vm.forks.arrow_glacier.blocks.ArrowGlacierMiningHeader, abc.ABC

base_fee_per_gas
block_number
bloom
coinbase
difficulty
extra_data
gas_limit
gas_used
parent_hash
receipt_root
state_root
timestamp
transaction_root
uncles_hash

eth.vm.forks.gray_glacier.computation module

class eth.vm.forks.gray_glacier.computation.GrayGlacierComputation(state: eth.abc.StateAPI, message: eth.abc.MessageAPI, transaction_context: eth.abc.TransactionContextAPI)

Bases: eth.vm.forks.arrow_glacier.computation.ArrowGlacierComputation

A class for all execution message computations in the GrayGlacier fork. Inherits from ArrowGlacierComputation

eth.vm.forks.gray_glacier.headers module

eth.vm.forks.gray_glacier.headers.create_gray_glacier_header_from_parent

eth.vm.forks.gray_glacier.state module

class eth.vm.forks.gray_glacier.state.GrayGlacierState(db: eth.abc.AtomicDatabaseAPI, execution_context: eth.abc.ExecutionContextAPI, state_root: NewType.<locals>.new_type)

Bases: eth.vm.forks.arrow_glacier.state.ArrowGlacierState

computation_class

alias of eth.vm.forks.gray_glacier.computation.GrayGlacierComputation

transaction_executor_class

alias of GrayGlacierTransactionExecutor

class eth.vm.forks.gray_glacier.state.GrayGlacierTransactionExecutor(vm_state: eth.abc.StateAPI)

Bases: eth.vm.forks.arrow_glacier.state.ArrowGlacierTransactionExecutor

eth.vm.forks.gray_glacier.transactions module

class eth.vm.forks.gray_glacier.transactions.GrayGlacierLegacyTransaction(*args, **kwargs)

Bases: eth.vm.forks.arrow_glacier.transactions.ArrowGlacierLegacyTransaction, abc.ABC

data
gas
gas_price
nonce
r
s
to
v
value
class eth.vm.forks.gray_glacier.transactions.GrayGlacierTransactionBuilder

Bases: eth.vm.forks.arrow_glacier.transactions.ArrowGlacierTransactionBuilder

legacy_signed

alias of GrayGlacierLegacyTransaction

legacy_unsigned

alias of GrayGlacierUnsignedLegacyTransaction

class eth.vm.forks.gray_glacier.transactions.GrayGlacierUnsignedLegacyTransaction(*args, **kwargs)

Bases: eth.vm.forks.arrow_glacier.transactions.ArrowGlacierUnsignedLegacyTransaction

as_signed_transaction(private_key: eth_keys.datatypes.PrivateKey, chain_id: int = None) → eth.vm.forks.gray_glacier.transactions.GrayGlacierLegacyTransaction

Return a version of this transaction which has been signed using the provided private_key

data
gas
gas_price
nonce
to
value

Module contents

class eth.vm.forks.gray_glacier.GrayGlacierVM(header: eth.abc.BlockHeaderAPI, chaindb: eth.abc.ChainDatabaseAPI, chain_context: eth.abc.ChainContextAPI, consensus_context: eth.abc.ConsensusContextAPI)

Bases: eth.vm.forks.arrow_glacier.ArrowGlacierVM

block_class

alias of eth.vm.forks.gray_glacier.blocks.GrayGlacierBlock

compute_difficulty

https://github.com/ethereum/EIPs/issues/100

configure_header
create_header_from_parent
fork = 'gray-glacier'