emulator

package
v0.7.0-alpha.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 11, 2023 License: Apache-2.0 Imports: 24 Imported by: 1

Documentation

Index

Constants

View Source
const (
	KeyStateDB      = "s"
	KeyBlockchainDB = "b"
)
View Source
const (
	BlockKeepAll = -1
)

Variables

This section is empty.

Functions

func GetChainIDFromBlockChainDBState added in v1.0.3

func GetChainIDFromBlockChainDBState(kv kv.KVStore) uint16

func GetNonce added in v1.0.3

func GetNonce(s kv.KVStoreReader, addr common.Address) uint64

func Init

func Init(
	store kv.KVStore,
	chainID uint16,
	gasLimits GasLimits,
	timestamp uint64,
	alloc core.GenesisAlloc,
)

Init initializes the EVM state with the provided genesis allocation parameters

func NewBlockchainDBSubrealm

func NewBlockchainDBSubrealm(store kv.KVStore) kv.KVStore

Types

type BlockchainDB

type BlockchainDB struct {
	// contains filtered or unexported fields
}

BlockchainDB contains logic for storing a fake blockchain (more like a list of blocks), intended for satisfying EVM tools that depend on the concept of a block.

func NewBlockchainDB

func NewBlockchainDB(store kv.KVStore, blockGasLimit uint64, blockKeepAmount int32) *BlockchainDB

func (*BlockchainDB) AddTransaction

func (bc *BlockchainDB) AddTransaction(tx *types.Transaction, receipt *types.Receipt)

func (*BlockchainDB) GetBlockByHash

func (bc *BlockchainDB) GetBlockByHash(hash common.Hash) *types.Block

func (*BlockchainDB) GetBlockByNumber

func (bc *BlockchainDB) GetBlockByNumber(blockNumber uint64) *types.Block

func (*BlockchainDB) GetBlockHashByBlockNumber

func (bc *BlockchainDB) GetBlockHashByBlockNumber(blockNumber uint64) common.Hash

func (*BlockchainDB) GetBlockNumberByBlockHash

func (bc *BlockchainDB) GetBlockNumberByBlockHash(hash common.Hash) (uint64, bool)

func (*BlockchainDB) GetBlockNumberByTxHash

func (bc *BlockchainDB) GetBlockNumberByTxHash(txHash common.Hash) (uint64, bool)

func (*BlockchainDB) GetChainID

func (bc *BlockchainDB) GetChainID() uint16

func (*BlockchainDB) GetCurrentBlock

func (bc *BlockchainDB) GetCurrentBlock() *types.Block

func (*BlockchainDB) GetHeaderByBlockNumber

func (bc *BlockchainDB) GetHeaderByBlockNumber(blockNumber uint64) *types.Header

func (*BlockchainDB) GetHeaderByHash

func (bc *BlockchainDB) GetHeaderByHash(hash common.Hash) *types.Header

func (*BlockchainDB) GetLatestPendingReceipt

func (bc *BlockchainDB) GetLatestPendingReceipt() *types.Receipt

func (*BlockchainDB) GetNumber

func (bc *BlockchainDB) GetNumber() uint64

func (*BlockchainDB) GetPendingBlockNumber

func (bc *BlockchainDB) GetPendingBlockNumber() uint64

func (*BlockchainDB) GetPendingHeader

func (bc *BlockchainDB) GetPendingHeader(timestamp uint64) *types.Header

func (*BlockchainDB) GetReceiptByBlockNumberAndIndex

func (bc *BlockchainDB) GetReceiptByBlockNumberAndIndex(blockNumber uint64, txIndex uint32) *types.Receipt

func (*BlockchainDB) GetReceiptByTxHash

func (bc *BlockchainDB) GetReceiptByTxHash(txHash common.Hash) *types.Receipt

func (*BlockchainDB) GetReceiptsByBlockNumber

func (bc *BlockchainDB) GetReceiptsByBlockNumber(blockNumber uint64) []*types.Receipt

func (*BlockchainDB) GetTimestampByBlockNumber

func (bc *BlockchainDB) GetTimestampByBlockNumber(blockNumber uint64) uint64

func (*BlockchainDB) GetTransactionByBlockNumberAndIndex

func (bc *BlockchainDB) GetTransactionByBlockNumberAndIndex(blockNumber uint64, i uint32) *types.Transaction

func (*BlockchainDB) GetTransactionByHash

func (bc *BlockchainDB) GetTransactionByHash(txHash common.Hash) (tx *types.Transaction, blockHash common.Hash, blockNumber, index uint64, err error)

func (*BlockchainDB) GetTransactionsByBlockNumber

func (bc *BlockchainDB) GetTransactionsByBlockNumber(blockNumber uint64) []*types.Transaction

func (*BlockchainDB) GetTxIndexInBlockByTxHash added in v1.0.3

func (bc *BlockchainDB) GetTxIndexInBlockByTxHash(txHash common.Hash) uint32

func (*BlockchainDB) Init

func (bc *BlockchainDB) Init(chainID uint16, timestamp uint64)

func (*BlockchainDB) Initialized

func (bc *BlockchainDB) Initialized() bool

func (*BlockchainDB) MintBlock

func (bc *BlockchainDB) MintBlock(timestamp uint64)

func (*BlockchainDB) SetChainID

func (bc *BlockchainDB) SetChainID(chainID uint16)

type BufferedStateDB

type BufferedStateDB struct {
	// contains filtered or unexported fields
}

BufferedStateDB is a wrapper for StateDB that writes all mutations into an in-memory buffer, leaving the original state unmodified until the mutations are applied manually with Commit().

func NewBufferedStateDB

func NewBufferedStateDB(base *StateDB) *BufferedStateDB

func (*BufferedStateDB) Commit

func (b *BufferedStateDB) Commit()

func (*BufferedStateDB) StateDB

func (b *BufferedStateDB) StateDB() *StateDB

type EVMEmulator

type EVMEmulator struct {
	// contains filtered or unexported fields
}

func NewEVMEmulator

func NewEVMEmulator(
	store kv.KVStore,
	timestamp uint64,
	gasLimits GasLimits,
	blockKeepAmount int32,
	magicContracts map[common.Address]vm.ISCMagicContract,
	l2Balance L2Balance,
) *EVMEmulator

func (*EVMEmulator) BlockGasLimit added in v1.0.3

func (e *EVMEmulator) BlockGasLimit() uint64

func (*EVMEmulator) BlockchainDB

func (e *EVMEmulator) BlockchainDB() *BlockchainDB

func (*EVMEmulator) CallContract

func (e *EVMEmulator) CallContract(call ethereum.CallMsg, gasBurnEnable func(bool)) (*core.ExecutionResult, error)

CallContract executes a contract call, without committing changes to the state

func (*EVMEmulator) CallGasLimit added in v1.0.3

func (e *EVMEmulator) CallGasLimit() uint64

func (*EVMEmulator) ChainContext

func (e *EVMEmulator) ChainContext() core.ChainContext

func (*EVMEmulator) MintBlock

func (e *EVMEmulator) MintBlock()

func (*EVMEmulator) SendTransaction

func (e *EVMEmulator) SendTransaction(
	tx *types.Transaction,
	gasBurnEnable func(bool),
	chargeISCGas func(*core.ExecutionResult) (uint64, error),
	tracer tracers.Tracer,
) (receipt *types.Receipt, result *core.ExecutionResult, iscGasErr error, err error)

func (*EVMEmulator) Signer

func (e *EVMEmulator) Signer() types.Signer

func (*EVMEmulator) StateDB

func (e *EVMEmulator) StateDB() *StateDB

type GasLimits added in v1.0.3

type GasLimits struct {
	Block uint64
	Call  uint64
}

type L2Balance

type L2Balance interface {
	Get(addr common.Address) *big.Int
	Add(addr common.Address, amount *big.Int)
	Sub(addr common.Address, amount *big.Int)
}

type StateDB

type StateDB struct {
	// contains filtered or unexported fields
}

StateDB implements vm.StateDB with a kv.KVStore as backend. The Ethereum account balance is tied to the L1 balance.

func NewStateDB

func NewStateDB(store kv.KVStore, l2Balance L2Balance) *StateDB

func (*StateDB) AddAddressToAccessList

func (s *StateDB) AddAddressToAccessList(addr common.Address)

AddAddressToAccessList adds the given address to the access list. This operation is safe to perform even if the feature/fork is not active yet

func (*StateDB) AddBalance

func (s *StateDB) AddBalance(addr common.Address, amount *big.Int)

func (*StateDB) AddLog

func (s *StateDB) AddLog(log *types.Log)

func (*StateDB) AddPreimage

func (s *StateDB) AddPreimage(common.Hash, []byte)

func (*StateDB) AddRefund

func (s *StateDB) AddRefund(n uint64)

func (*StateDB) AddSlotToAccessList

func (s *StateDB) AddSlotToAccessList(addr common.Address, slot common.Hash)

AddSlotToAccessList adds the given (address,slot) to the access list. This operation is safe to perform even if the feature/fork is not active yet

func (*StateDB) AddressInAccessList

func (s *StateDB) AddressInAccessList(addr common.Address) bool

func (*StateDB) Buffered

func (s *StateDB) Buffered() *BufferedStateDB

func (*StateDB) CreateAccount

func (s *StateDB) CreateAccount(addr common.Address)

func (*StateDB) Empty

func (s *StateDB) Empty(addr common.Address) bool

Empty returns whether the given account is empty. Empty is defined according to EIP161 (balance = nonce = code = 0).

func (*StateDB) Exist

func (s *StateDB) Exist(addr common.Address) bool

Exist reports whether the given account exists in state. Notably this should also return true for suicided accounts.

func (*StateDB) ForEachStorage

func (s *StateDB) ForEachStorage(common.Address, func(common.Hash, common.Hash) bool) error

func (*StateDB) GetBalance

func (s *StateDB) GetBalance(addr common.Address) *big.Int

func (*StateDB) GetCode

func (s *StateDB) GetCode(addr common.Address) []byte

func (*StateDB) GetCodeHash

func (s *StateDB) GetCodeHash(addr common.Address) common.Hash

func (*StateDB) GetCodeSize

func (s *StateDB) GetCodeSize(addr common.Address) int

func (*StateDB) GetCommittedState

func (s *StateDB) GetCommittedState(addr common.Address, key common.Hash) common.Hash

func (*StateDB) GetLogs

func (s *StateDB) GetLogs(_ common.Hash) []*types.Log

func (*StateDB) GetNonce

func (s *StateDB) GetNonce(addr common.Address) uint64

func (*StateDB) GetRefund

func (s *StateDB) GetRefund() uint64

func (*StateDB) GetState

func (s *StateDB) GetState(addr common.Address, key common.Hash) common.Hash

func (*StateDB) GetTransientState added in v1.0.3

func (*StateDB) GetTransientState(addr common.Address, key common.Hash) common.Hash

GetTransientState implements vm.StateDB

func (*StateDB) HasSuicided

func (s *StateDB) HasSuicided(addr common.Address) bool

func (*StateDB) Prepare added in v1.0.3

func (s *StateDB) Prepare(rules params.Rules, sender common.Address, coinbase common.Address, dest *common.Address, precompiles []common.Address, txAccesses types.AccessList)

Prepare implements vm.StateDB

func (*StateDB) PrepareAccessList

func (s *StateDB) PrepareAccessList(sender common.Address, dest *common.Address, precompiles []common.Address, txAccesses types.AccessList)

func (*StateDB) RevertToSnapshot

func (s *StateDB) RevertToSnapshot(int)

func (*StateDB) SetCode

func (s *StateDB) SetCode(addr common.Address, code []byte)

func (*StateDB) SetNonce

func (s *StateDB) SetNonce(addr common.Address, n uint64)

func (*StateDB) SetState

func (s *StateDB) SetState(addr common.Address, key, value common.Hash)

func (*StateDB) SetTransientState added in v1.0.3

func (*StateDB) SetTransientState(addr common.Address, key common.Hash, value common.Hash)

SetTransientState implements vm.StateDB

func (*StateDB) SlotInAccessList

func (s *StateDB) SlotInAccessList(addr common.Address, slot common.Hash) (addressOk, slotOk bool)

func (*StateDB) Snapshot

func (s *StateDB) Snapshot() int

func (*StateDB) SubBalance

func (s *StateDB) SubBalance(addr common.Address, amount *big.Int)

func (*StateDB) SubRefund

func (s *StateDB) SubRefund(n uint64)

func (*StateDB) Suicide

func (s *StateDB) Suicide(addr common.Address) bool

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL