mirror of
https://github.com/status-im/nimbus-eth1.git
synced 2025-02-14 21:19:07 +00:00
The rationale in EIP-6[1] for changing names to `selfDestruct` applies to code as much as it does to specs. Also, Ethereum uses the new names consistently, so it's useful for our code to match the terms used in later EIP specs and testsuite entries. This change is straightforward, and is a prerequisite for patches to come that do things with the `selfDestruct` fields. [1] https://eips.ethereum.org/EIPS/eip-6 Hudson Jameson, "EIP-6: Renaming SUICIDE opcode," Ethereum Improvement Proposals, no. 6, November 2015. Signed-off-by: Jamie Lokier <jamie@shareable.org>
114 lines
3.2 KiB
Nim
114 lines
3.2 KiB
Nim
# Nimbus
|
|
# Copyright (c) 2018 Status Research & Development GmbH
|
|
# Licensed under either of
|
|
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
|
|
# http://www.apache.org/licenses/LICENSE-2.0)
|
|
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or
|
|
# http://opensource.org/licenses/MIT)
|
|
# at your option. This file may not be copied, modified, or distributed except
|
|
# according to those terms.
|
|
|
|
import
|
|
tables, eth/common,
|
|
options, json, sets,
|
|
./stack, ./memory, ./code_stream,
|
|
./interpreter/[gas_costs, op_codes, forks_list],
|
|
# TODO - will be hidden at a lower layer
|
|
../db/[db_chain, accounts_cache]
|
|
|
|
type
|
|
VMFlag* = enum
|
|
ExecutionOK
|
|
GenerateWitness
|
|
ClearCache
|
|
|
|
BaseVMState* = ref object of RootObj
|
|
prevHeaders* : seq[BlockHeader]
|
|
chaindb* : BaseChainDB
|
|
accessLogs* : AccessLogs
|
|
blockHeader* : BlockHeader
|
|
name* : string
|
|
flags* : set[VMFlag]
|
|
tracer* : TransactionTracer
|
|
logEntries* : seq[Log]
|
|
receipts* : seq[Receipt]
|
|
accountDb* : AccountsCache
|
|
cumulativeGasUsed*: GasInt
|
|
touchedAccounts*: HashSet[EthAddress]
|
|
selfDestructs* : HashSet[EthAddress]
|
|
txOrigin* : EthAddress
|
|
txGasPrice* : GasInt
|
|
gasCosts* : GasCosts
|
|
fork* : Fork
|
|
minerAddress* : EthAddress
|
|
|
|
AccessLogs* = ref object
|
|
reads*: Table[string, string]
|
|
writes*: Table[string, string]
|
|
|
|
TracerFlags* {.pure.} = enum
|
|
EnableTracing
|
|
DisableStorage
|
|
DisableMemory
|
|
DisableStack
|
|
DisableState
|
|
DisableStateDiff
|
|
EnableAccount
|
|
|
|
TransactionTracer* = object
|
|
trace*: JsonNode
|
|
flags*: set[TracerFlags]
|
|
accounts*: HashSet[EthAddress]
|
|
storageKeys*: seq[HashSet[Uint256]]
|
|
|
|
Computation* = ref object
|
|
# The execution computation
|
|
vmState*: BaseVMState
|
|
msg*: Message
|
|
memory*: Memory
|
|
stack*: Stack
|
|
returnStack*: seq[int]
|
|
gasMeter*: GasMeter
|
|
code*: CodeStream
|
|
output*: seq[byte]
|
|
returnData*: seq[byte]
|
|
error*: Error
|
|
touchedAccounts*: HashSet[EthAddress]
|
|
selfDestructs*: HashSet[EthAddress]
|
|
logEntries*: seq[Log]
|
|
savePoint*: SavePoint
|
|
instr*: Op
|
|
opIndex*: int
|
|
parent*, child*: Computation
|
|
continuation*: proc() {.gcsafe.}
|
|
|
|
Error* = ref object
|
|
info*: string
|
|
burnsGas*: bool
|
|
|
|
GasMeter* = object
|
|
gasRefunded*: GasInt
|
|
gasRemaining*: GasInt
|
|
|
|
CallKind* = enum
|
|
evmcCall = 0, # CALL
|
|
evmcDelegateCall = 1, # DELEGATECALL
|
|
evmcCallCode = 2, # CALLCODE
|
|
evmcCreate = 3, # CREATE
|
|
evmcCreate2 = 4 # CREATE2
|
|
|
|
MsgFlags* = enum
|
|
emvcNoFlags = 0
|
|
emvcStatic = 1
|
|
|
|
Message* = ref object
|
|
kind*: CallKind
|
|
depth*: int
|
|
gas*: GasInt
|
|
sender*: EthAddress
|
|
contractAddress*: EthAddress
|
|
codeAddress*: EthAddress
|
|
value*: UInt256
|
|
data*: seq[byte]
|
|
flags*: MsgFlags
|