Documentation ¶
Index ¶
- Constants
- Variables
- func AbciHeaderToTendermint(header abci.Header) tmtypes.Header
- func AddressStoragePrefix(address ethcmn.Address) []byte
- func BloomKey(height int64) []byte
- func CopyCommitStateDB(from, to *CommitStateDB)
- func EncodeResultData(data ResultData) ([]byte, error)
- func GenerateEthAddress() ethcmn.Address
- func GetHashFn(ctx sdk.Context, csdb *CommitStateDB) vm.GetHashFunc
- func HashFromContext(ctx sdk.Context) common.Hash
- func HeightHashKey(height uint64) []byte
- func MarshalLogs(logs []*ethtypes.Log) ([]byte, error)
- func ParamKeyTable() params.KeyTable
- func RegisterCodec(cdc *codec.Codec)
- func TxDecoder(cdc *codec.Codec) sdk.TxDecoder
- func UnmarshalLogs(in []byte) ([]*ethtypes.Log, error)
- func ValidateLog(log *ethtypes.Log) error
- func ValidateSigner(signBytes, sig []byte, signer ethcmn.Address) error
- type AccountKeeper
- type ChainConfig
- type CommitStateDB
- func (csdb *CommitStateDB) AddAddressToAccessList(addr ethcmn.Address)
- func (csdb *CommitStateDB) AddBalance(addr ethcmn.Address, amount *big.Int)
- func (csdb *CommitStateDB) AddLog(log *ethtypes.Log)
- func (csdb *CommitStateDB) AddPreimage(hash ethcmn.Hash, preimage []byte)
- func (csdb *CommitStateDB) AddRefund(gas uint64)
- func (csdb *CommitStateDB) AddSlotToAccessList(addr ethcmn.Address, slot ethcmn.Hash)
- func (csdb *CommitStateDB) AddressInAccessList(addr ethcmn.Address) bool
- func (csdb *CommitStateDB) AllLogs() []*ethtypes.Log
- func (csdb *CommitStateDB) BlockHash() ethcmn.Hash
- func (csdb *CommitStateDB) ClearStateObjects()
- func (csdb *CommitStateDB) Commit(deleteEmptyObjects bool) (ethcmn.Hash, error)
- func (csdb *CommitStateDB) Copy() *CommitStateDB
- func (csdb *CommitStateDB) CreateAccount(addr ethcmn.Address)
- func (csdb *CommitStateDB) Database() ethstate.Database
- func (csdb *CommitStateDB) DeleteLogs(hash ethcmn.Hash)
- func (csdb *CommitStateDB) Empty(addr ethcmn.Address) bool
- func (csdb *CommitStateDB) Error() error
- func (csdb *CommitStateDB) Exist(addr ethcmn.Address) bool
- func (csdb *CommitStateDB) Finalise(deleteEmptyObjects bool) error
- func (csdb *CommitStateDB) ForEachStorage(addr ethcmn.Address, cb func(key, value ethcmn.Hash) (stop bool)) error
- func (csdb *CommitStateDB) GetBalance(addr ethcmn.Address) *big.Int
- func (csdb *CommitStateDB) GetCode(addr ethcmn.Address) []byte
- func (csdb *CommitStateDB) GetCodeHash(addr ethcmn.Address) ethcmn.Hash
- func (csdb *CommitStateDB) GetCodeSize(addr ethcmn.Address) int
- func (csdb *CommitStateDB) GetCommittedState(addr ethcmn.Address, hash ethcmn.Hash) ethcmn.Hash
- func (csdb *CommitStateDB) GetHeightHash(height uint64) ethcmn.Hash
- func (csdb *CommitStateDB) GetLogs(hash ethcmn.Hash) ([]*ethtypes.Log, error)
- func (csdb *CommitStateDB) GetNonce(addr ethcmn.Address) uint64
- func (csdb *CommitStateDB) GetOrNewStateObject(addr ethcmn.Address) StateObject
- func (csdb *CommitStateDB) GetParams() (params Params)
- func (csdb *CommitStateDB) GetRefund() uint64
- func (csdb *CommitStateDB) GetState(addr ethcmn.Address, hash ethcmn.Hash) ethcmn.Hash
- func (csdb *CommitStateDB) HasSuicided(addr ethcmn.Address) bool
- func (csdb *CommitStateDB) IntermediateRoot(deleteEmptyObjects bool) (ethcmn.Hash, error)
- func (csdb *CommitStateDB) Preimages() map[ethcmn.Hash][]byte
- func (csdb *CommitStateDB) Prepare(thash, bhash ethcmn.Hash, txi int)
- func (csdb *CommitStateDB) RawDump() ethstate.Dump
- func (csdb *CommitStateDB) Reset(_ ethcmn.Hash) error
- func (csdb *CommitStateDB) RevertToSnapshot(revID int)
- func (csdb *CommitStateDB) SetBalance(addr ethcmn.Address, amount *big.Int)
- func (csdb *CommitStateDB) SetCode(addr ethcmn.Address, code []byte)
- func (csdb *CommitStateDB) SetHeightHash(height uint64, hash ethcmn.Hash)
- func (csdb *CommitStateDB) SetLogs(hash ethcmn.Hash, logs []*ethtypes.Log) error
- func (csdb *CommitStateDB) SetNonce(addr ethcmn.Address, nonce uint64)
- func (csdb *CommitStateDB) SetParams(params Params)
- func (csdb *CommitStateDB) SetState(addr ethcmn.Address, key, value ethcmn.Hash)
- func (csdb *CommitStateDB) SlotInAccessList(addr ethcmn.Address, slot ethcmn.Hash) (bool, bool)
- func (csdb *CommitStateDB) Snapshot() int
- func (csdb *CommitStateDB) StorageTrie(addr ethcmn.Address) ethstate.Trie
- func (csdb *CommitStateDB) SubBalance(addr ethcmn.Address, amount *big.Int)
- func (csdb *CommitStateDB) SubRefund(gas uint64)
- func (csdb *CommitStateDB) Suicide(addr ethcmn.Address) bool
- func (csdb *CommitStateDB) TxIndex() int
- func (csdb *CommitStateDB) UpdateAccounts()
- func (csdb *CommitStateDB) WithContext(ctx sdk.Context) *CommitStateDB
- type ExecutionResult
- type GasInfo
- type GenesisAccount
- type GenesisState
- type MsgEthereumTx
- func (msg *MsgEthereumTx) ChainID() *big.Int
- func (msg MsgEthereumTx) Cost() *big.Int
- func (msg *MsgEthereumTx) DecodeRLP(s *rlp.Stream) error
- func (msg *MsgEthereumTx) EncodeRLP(w io.Writer) error
- func (msg MsgEthereumTx) Fee() *big.Int
- func (msg *MsgEthereumTx) From() sdk.AccAddress
- func (msg MsgEthereumTx) GetGas() uint64
- func (msg MsgEthereumTx) GetMsgs() []sdk.Msg
- func (msg MsgEthereumTx) GetSignBytes() []byte
- func (msg MsgEthereumTx) GetSigners() []sdk.AccAddress
- func (msg MsgEthereumTx) RLPSignBytes(chainID *big.Int) ethcmn.Hash
- func (msg MsgEthereumTx) RawSignatureValues() (v, r, s *big.Int)
- func (msg MsgEthereumTx) Route() string
- func (msg *MsgEthereumTx) Sign(chainID *big.Int, priv *ecdsa.PrivateKey) error
- func (msg MsgEthereumTx) String() string
- func (msg MsgEthereumTx) To() *ethcmn.Address
- func (msg MsgEthereumTx) Type() string
- func (msg MsgEthereumTx) ValidateBasic() error
- func (msg *MsgEthereumTx) VerifySig(chainID *big.Int) (ethcmn.Address, error)
- type MsgEthermint
- func (msg MsgEthermint) GetSignBytes() []byte
- func (msg MsgEthermint) GetSigners() []sdk.AccAddress
- func (msg MsgEthermint) Route() string
- func (msg MsgEthermint) String() string
- func (msg MsgEthermint) To() *ethcmn.Address
- func (msg MsgEthermint) Type() string
- func (msg MsgEthermint) ValidateBasic() error
- type Params
- type QueryBloomFilter
- type QueryETHLogs
- type QueryResAccount
- type QueryResBalance
- type QueryResBlockNumber
- type QueryResCode
- type QueryResExportAccount
- type QueryResNonce
- type QueryResStorage
- type Recipient
- type ResultData
- type State
- type StateObject
- type StateTransition
- type Storage
- type TransactionLogs
- type TxData
Constants ¶
const ( EventTypeEthermint = TypeMsgEthermint EventTypeEthereumTx = TypeMsgEthereumTx AttributeKeyContractAddress = "contract" AttributeKeyRecipient = "recipient" AttributeValueCategory = ModuleName )
Evm module events
const ( // ModuleName string name of module ModuleName = "evm" // StoreKey key for ethereum storage data, account code (StateDB) or block // related data for Web3. // The EVM module should use a prefix store. StoreKey = ModuleName // RouterKey uses module name for routing RouterKey = ModuleName )
const ( // TypeMsgEthereumTx defines the type string of an Ethereum tranasction TypeMsgEthereumTx = "ethereum" // TypeMsgEthermint defines the type string of Ethermint message TypeMsgEthermint = "ethermint" )
message type and route constants
const ( QueryBalance = "balance" QueryBlockNumber = "blockNumber" QueryStorage = "storage" QueryCode = "code" QueryNonce = "nonce" QueryHashToHeight = "hashToHeight" QueryTransactionLogs = "transactionLogs" QueryBloom = "bloom" QueryLogs = "logs" QueryAccount = "account" )
Supported endpoints
const ( // DefaultParamspace for params keeper DefaultParamspace = ModuleName )
Variables ¶
var ( // ErrInvalidState returns an error resulting from an invalid Storage State. ErrInvalidState = sdkerrors.Register(ModuleName, 2, "invalid storage state") // ErrChainConfigNotFound returns an error if the chain config cannot be found on the store. ErrChainConfigNotFound = sdkerrors.Register(ModuleName, 3, "chain configuration not found") // ErrInvalidChainConfig returns an error resulting from an invalid ChainConfig. ErrInvalidChainConfig = sdkerrors.Register(ModuleName, 4, "invalid chain configuration") // ErrCreateDisabled returns an error if the EnableCreate parameter is false. ErrCreateDisabled = sdkerrors.Register(ModuleName, 5, "EVM Create operation is disabled") // ErrCallDisabled returns an error if the EnableCall parameter is false. ErrCallDisabled = sdkerrors.Register(ModuleName, 6, "EVM Call operation is disabled") )
var ( KeyPrefixBlockHash = []byte{0x01} KeyPrefixBloom = []byte{0x02} KeyPrefixLogs = []byte{0x03} KeyPrefixCode = []byte{0x04} KeyPrefixStorage = []byte{0x05} KeyPrefixChainConfig = []byte{0x06} KeyPrefixHeightHash = []byte{0x07} )
KVStore key prefixes
var ( ParamStoreKeyEVMDenom = []byte("EVMDenom") ParamStoreKeyEnableCreate = []byte("EnableCreate") ParamStoreKeyEnableCall = []byte("EnableCall") ParamStoreKeyExtraEIPs = []byte("EnableExtraEIPs") )
Parameter keys
var ModuleCdc = codec.New()
ModuleCdc defines the evm module's codec
Functions ¶
func AbciHeaderToTendermint ¶ added in v0.3.2
AbciHeaderToTendermint is a util function to parse a tendermint ABCI Header to tendermint types Header.
func AddressStoragePrefix ¶
AddressStoragePrefix returns a prefix to iterate over a given account storage.
func CopyCommitStateDB ¶ added in v0.3.2
func CopyCommitStateDB(from, to *CommitStateDB)
func EncodeResultData ¶
func EncodeResultData(data ResultData) ([]byte, error)
EncodeResultData takes all of the necessary data from the EVM execution and returns the data as a byte slice encoded with amino
func GenerateEthAddress ¶
GenerateEthAddress generates an Ethereum address.
func GetHashFn ¶ added in v0.3.2
func GetHashFn(ctx sdk.Context, csdb *CommitStateDB) vm.GetHashFunc
GetHashFn implements vm.GetHashFunc for Ethermint. It handles 3 cases:
- The requested height matches the current height from context (and thus same epoch number)
- The requested height is from an previous height from the same chain epoch
- The requested height is from a height greater than the latest one
func HashFromContext ¶ added in v0.3.2
HashFromContext returns the Ethereum Header hash from the context's Tendermint block header.
func HeightHashKey ¶ added in v0.3.2
HeightHashKey returns the key for the given chain epoch and height. The key will be composed in the following order:
key = prefix + bytes(height)
This ordering facilitates the iteration by height for the EVM GetHashFn queries.
func MarshalLogs ¶
MarshalLogs encodes an array of logs using amino
func ParamKeyTable ¶ added in v0.2.0
ParamKeyTable returns the parameter key table.
func RegisterCodec ¶
RegisterCodec registers all the necessary types and interfaces for the evm module
func TxDecoder ¶
TxDecoder returns an sdk.TxDecoder that can decode both auth.StdTx and MsgEthereumTx transactions.
func UnmarshalLogs ¶
UnmarshalLogs decodes an amino-encoded byte array into an array of logs
func ValidateLog ¶
ValidateLog performs a basic validation of an ethereum Log fields.
func ValidateSigner ¶
ValidateSigner attempts to validate a signer for a given slice of bytes over which a signature and signer is given. An error is returned if address derived from the signature and bytes signed does not match the given signer.
Types ¶
type AccountKeeper ¶
type AccountKeeper interface { NewAccountWithAddress(ctx sdk.Context, addr sdk.AccAddress) authexported.Account GetAllAccounts(ctx sdk.Context) (accounts []authexported.Account) IterateAccounts(ctx sdk.Context, cb func(account authexported.Account) bool) GetAccount(ctx sdk.Context, addr sdk.AccAddress) authexported.Account SetAccount(ctx sdk.Context, account authexported.Account) RemoveAccount(ctx sdk.Context, account authexported.Account) }
AccountKeeper defines the expected account keeper interface
type ChainConfig ¶ added in v0.2.0
type ChainConfig struct { HomesteadBlock sdk.Int `json:"homestead_block" yaml:"homestead_block"` // Homestead switch block (< 0 no fork, 0 = already homestead) DAOForkBlock sdk.Int `json:"dao_fork_block" yaml:"dao_fork_block"` // TheDAO hard-fork switch block (< 0 no fork) DAOForkSupport bool `json:"dao_fork_support" yaml:"dao_fork_support"` // Whether the nodes supports or opposes the DAO hard-fork // EIP150 implements the Gas price changes (https://github.com/ethereum/EIPs/issues/150) EIP150Block sdk.Int `json:"eip150_block" yaml:"eip150_block"` // EIP150 HF block (< 0 no fork) EIP150Hash string `json:"eip150_hash" yaml:"eip150_hash"` // EIP150 HF hash (needed for header only clients as only gas pricing changed) EIP155Block sdk.Int `json:"eip155_block" yaml:"eip155_block"` // EIP155 HF block EIP158Block sdk.Int `json:"eip158_block" yaml:"eip158_block"` // EIP158 HF block ByzantiumBlock sdk.Int `json:"byzantium_block" yaml:"byzantium_block"` // Byzantium switch block (< 0 no fork, 0 = already on byzantium) ConstantinopleBlock sdk.Int `json:"constantinople_block" yaml:"constantinople_block"` // Constantinople switch block (< 0 no fork, 0 = already activated) PetersburgBlock sdk.Int `json:"petersburg_block" yaml:"petersburg_block"` // Petersburg switch block (< 0 same as Constantinople) IstanbulBlock sdk.Int `json:"istanbul_block" yaml:"istanbul_block"` // Istanbul switch block (< 0 no fork, 0 = already on istanbul) MuirGlacierBlock sdk.Int `json:"muir_glacier_block" yaml:"muir_glacier_block"` // Eip-2384 (bomb delay) switch block (< 0 no fork, 0 = already activated) YoloV2Block sdk.Int `json:"yoloV2_block" yaml:"yoloV2_block"` // YOLO v1: https://github.com/ethereum/EIPs/pull/2657 (Ephemeral testnet) EWASMBlock sdk.Int `json:"ewasm_block" yaml:"ewasm_block"` // EWASM switch block (< 0 no fork, 0 = already activated) }
ChainConfig defines the Ethereum ChainConfig parameters using sdk.Int values instead of big.Int.
NOTE 1: Since empty/uninitialized Ints (i.e with a nil big.Int value) are parsed to zero, we need to manually specify that negative Int values will be considered as nil. See getBlockValue for reference.
NOTE 2: This type is not a configurable Param since the SDK does not allow for validation against a previous stored parameter values or the current block height (retrieved from context). If you want to update the config values, use an software upgrade procedure.
func DefaultChainConfig ¶ added in v0.2.0
func DefaultChainConfig() ChainConfig
DefaultChainConfig returns default evm parameters. Th
func (ChainConfig) EthereumConfig ¶ added in v0.2.0
func (cc ChainConfig) EthereumConfig(chainID *big.Int) *params.ChainConfig
EthereumConfig returns an Ethereum ChainConfig for EVM state transitions. All the negative or nil values are converted to nil
func (ChainConfig) IsHomestead ¶ added in v0.3.2
func (cc ChainConfig) IsHomestead() bool
IsHomestead returns whether the Homestead version is enabled.
func (ChainConfig) IsIstanbul ¶ added in v0.3.2
func (cc ChainConfig) IsIstanbul() bool
IsIstanbul returns whether the Istanbul version is enabled.
func (ChainConfig) String ¶ added in v0.2.0
func (cc ChainConfig) String() string
String implements the fmt.Stringer interface
func (ChainConfig) Validate ¶ added in v0.2.0
func (cc ChainConfig) Validate() error
Validate performs a basic validation of the ChainConfig params. The function will return an error if any of the block values is uninitialized (i.e nil) or if the EIP150Hash is an invalid hash.
type CommitStateDB ¶
type CommitStateDB struct {
// contains filtered or unexported fields
}
CommitStateDB implements the Geth state.StateDB interface. Instead of using a trie and database for querying and persistence, the Keeper uses KVStores and an AccountKeeper to facilitate state transitions.
TODO: This implementation is subject to change in regards to its statefull manner. In otherwords, how this relates to the keeper in this module.
func NewCommitStateDB ¶
func NewCommitStateDB( ctx sdk.Context, storeKey sdk.StoreKey, paramSpace params.Subspace, ak AccountKeeper, ) *CommitStateDB
NewCommitStateDB returns a reference to a newly initialized CommitStateDB which implements Geth's state.StateDB interface.
CONTRACT: Stores used for state must be cache-wrapped as the ordering of the key/value space matters in determining the merkle root.
func (*CommitStateDB) AddAddressToAccessList ¶ added in v0.3.0
func (csdb *CommitStateDB) AddAddressToAccessList(addr ethcmn.Address)
AddAddressToAccessList adds the given address to the access list
func (*CommitStateDB) AddBalance ¶
func (csdb *CommitStateDB) AddBalance(addr ethcmn.Address, amount *big.Int)
AddBalance adds amount to the account associated with addr.
func (*CommitStateDB) AddLog ¶
func (csdb *CommitStateDB) AddLog(log *ethtypes.Log)
AddLog adds a new log to the state and sets the log metadata from the state.
func (*CommitStateDB) AddPreimage ¶
func (csdb *CommitStateDB) AddPreimage(hash ethcmn.Hash, preimage []byte)
AddPreimage records a SHA3 preimage seen by the VM.
func (*CommitStateDB) AddRefund ¶
func (csdb *CommitStateDB) AddRefund(gas uint64)
AddRefund adds gas to the refund counter.
func (*CommitStateDB) AddSlotToAccessList ¶ added in v0.3.0
func (csdb *CommitStateDB) AddSlotToAccessList(addr ethcmn.Address, slot ethcmn.Hash)
AddSlotToAccessList adds the given (address, slot)-tuple to the access list
func (*CommitStateDB) AddressInAccessList ¶ added in v0.3.0
func (csdb *CommitStateDB) AddressInAccessList(addr ethcmn.Address) bool
AddressInAccessList returns true if the given address is in the access list.
func (*CommitStateDB) AllLogs ¶
func (csdb *CommitStateDB) AllLogs() []*ethtypes.Log
AllLogs returns all the current logs in the state.
func (*CommitStateDB) BlockHash ¶
func (csdb *CommitStateDB) BlockHash() ethcmn.Hash
BlockHash returns the current block hash set by Prepare.
func (*CommitStateDB) ClearStateObjects ¶
func (csdb *CommitStateDB) ClearStateObjects()
ClearStateObjects clears cache of state objects to handle account changes outside of the EVM
func (*CommitStateDB) Commit ¶
func (csdb *CommitStateDB) Commit(deleteEmptyObjects bool) (ethcmn.Hash, error)
Commit writes the state to the appropriate KVStores. For each state object in the cache, it will either be removed, or have it's code set and/or it's state (storage) updated. In addition, the state object (account) itself will be written. Finally, the root hash (version) will be returned.
func (*CommitStateDB) Copy ¶
func (csdb *CommitStateDB) Copy() *CommitStateDB
Copy creates a deep, independent copy of the state.
NOTE: Snapshots of the copied state cannot be applied to the copy.
func (*CommitStateDB) CreateAccount ¶
func (csdb *CommitStateDB) CreateAccount(addr ethcmn.Address)
CreateAccount explicitly creates a state object. If a state object with the address already exists the balance is carried over to the new account.
CreateAccount is called during the EVM CREATE operation. The situation might arise that a contract does the following:
- sends funds to sha(account ++ (nonce + 1))
- tx_create(sha(account ++ nonce)) (note that this gets the address of 1)
Carrying over the balance ensures that Ether doesn't disappear.
func (*CommitStateDB) Database ¶
func (csdb *CommitStateDB) Database() ethstate.Database
Database retrieves the low level database supporting the lower level trie ops. It is not used in Ethermint, so it returns nil.
func (*CommitStateDB) DeleteLogs ¶
func (csdb *CommitStateDB) DeleteLogs(hash ethcmn.Hash)
DeleteLogs removes the logs from the KVStore. It is used during journal.Revert.
func (*CommitStateDB) Empty ¶
func (csdb *CommitStateDB) Empty(addr ethcmn.Address) bool
Empty returns whether the state object is either non-existent or empty according to the EIP161 specification (balance = nonce = code = 0).
func (*CommitStateDB) Error ¶
func (csdb *CommitStateDB) Error() error
Error returns the first non-nil error the StateDB encountered.
func (*CommitStateDB) Exist ¶
func (csdb *CommitStateDB) Exist(addr ethcmn.Address) bool
Exist reports whether the given account address exists in the state. Notably, this also returns true for suicided accounts.
func (*CommitStateDB) Finalise ¶
func (csdb *CommitStateDB) Finalise(deleteEmptyObjects bool) error
Finalise finalizes the state objects (accounts) state by setting their state, removing the csdb destructed objects and clearing the journal as well as the refunds.
func (*CommitStateDB) ForEachStorage ¶
func (csdb *CommitStateDB) ForEachStorage(addr ethcmn.Address, cb func(key, value ethcmn.Hash) (stop bool)) error
ForEachStorage iterates over each storage items, all invoke the provided callback on each key, value pair.
func (*CommitStateDB) GetBalance ¶
func (csdb *CommitStateDB) GetBalance(addr ethcmn.Address) *big.Int
GetBalance retrieves the balance from the given address or 0 if object not found.
func (*CommitStateDB) GetCode ¶
func (csdb *CommitStateDB) GetCode(addr ethcmn.Address) []byte
GetCode returns the code for a given account.
func (*CommitStateDB) GetCodeHash ¶
func (csdb *CommitStateDB) GetCodeHash(addr ethcmn.Address) ethcmn.Hash
GetCodeHash returns the code hash for a given account.
func (*CommitStateDB) GetCodeSize ¶
func (csdb *CommitStateDB) GetCodeSize(addr ethcmn.Address) int
GetCodeSize returns the code size for a given account.
func (*CommitStateDB) GetCommittedState ¶
GetCommittedState retrieves a value from the given account's committed storage.
func (*CommitStateDB) GetHeightHash ¶ added in v0.3.2
func (csdb *CommitStateDB) GetHeightHash(height uint64) ethcmn.Hash
GetHeightHash returns the block header hash associated with a given block height and chain epoch number.
func (*CommitStateDB) GetLogs ¶
GetLogs returns the current logs for a given transaction hash from the KVStore.
func (*CommitStateDB) GetNonce ¶
func (csdb *CommitStateDB) GetNonce(addr ethcmn.Address) uint64
GetNonce returns the nonce (sequence number) for a given account.
func (*CommitStateDB) GetOrNewStateObject ¶
func (csdb *CommitStateDB) GetOrNewStateObject(addr ethcmn.Address) StateObject
GetOrNewStateObject retrieves a state object or create a new state object if nil.
func (*CommitStateDB) GetParams ¶ added in v0.2.0
func (csdb *CommitStateDB) GetParams() (params Params)
GetParams returns the total set of evm parameters.
func (*CommitStateDB) GetRefund ¶
func (csdb *CommitStateDB) GetRefund() uint64
GetRefund returns the current value of the refund counter.
func (*CommitStateDB) HasSuicided ¶
func (csdb *CommitStateDB) HasSuicided(addr ethcmn.Address) bool
HasSuicided returns if the given account for the specified address has been killed.
func (*CommitStateDB) IntermediateRoot ¶
func (csdb *CommitStateDB) IntermediateRoot(deleteEmptyObjects bool) (ethcmn.Hash, error)
IntermediateRoot returns the current root hash of the state. It is called in between transactions to get the root hash that goes into transaction receipts.
NOTE: The SDK has not concept or method of getting any intermediate merkle root as commitment of the merkle-ized tree doesn't happen until the BaseApps' EndBlocker.
func (*CommitStateDB) Preimages ¶
func (csdb *CommitStateDB) Preimages() map[ethcmn.Hash][]byte
Preimages returns a list of SHA3 preimages that have been submitted.
func (*CommitStateDB) Prepare ¶
func (csdb *CommitStateDB) Prepare(thash, bhash ethcmn.Hash, txi int)
Prepare sets the current transaction hash and index and block hash which is used when the EVM emits new state logs.
func (*CommitStateDB) RawDump ¶
func (csdb *CommitStateDB) RawDump() ethstate.Dump
RawDump returns a raw state dump.
TODO: Implement if we need it, especially for the RPC API.
func (*CommitStateDB) Reset ¶
func (csdb *CommitStateDB) Reset(_ ethcmn.Hash) error
Reset clears out all ephemeral state objects from the state db, but keeps the underlying account mapper and store keys to avoid reloading data for the next operations.
func (*CommitStateDB) RevertToSnapshot ¶
func (csdb *CommitStateDB) RevertToSnapshot(revID int)
RevertToSnapshot reverts all state changes made since the given revision.
func (*CommitStateDB) SetBalance ¶
func (csdb *CommitStateDB) SetBalance(addr ethcmn.Address, amount *big.Int)
SetBalance sets the balance of an account.
func (*CommitStateDB) SetCode ¶
func (csdb *CommitStateDB) SetCode(addr ethcmn.Address, code []byte)
SetCode sets the code for a given account.
func (*CommitStateDB) SetHeightHash ¶ added in v0.3.2
func (csdb *CommitStateDB) SetHeightHash(height uint64, hash ethcmn.Hash)
SetHeightHash sets the block header hash associated with a given height.
func (*CommitStateDB) SetNonce ¶
func (csdb *CommitStateDB) SetNonce(addr ethcmn.Address, nonce uint64)
SetNonce sets the nonce (sequence number) of an account.
func (*CommitStateDB) SetParams ¶ added in v0.2.0
func (csdb *CommitStateDB) SetParams(params Params)
SetParams sets the evm parameters to the param space.
func (*CommitStateDB) SetState ¶
func (csdb *CommitStateDB) SetState(addr ethcmn.Address, key, value ethcmn.Hash)
SetState sets the storage state with a key, value pair for an account.
func (*CommitStateDB) SlotInAccessList ¶ added in v0.3.0
SlotInAccessList returns true if the given (address, slot)-tuple is in the access list.
func (*CommitStateDB) Snapshot ¶
func (csdb *CommitStateDB) Snapshot() int
Snapshot returns an identifier for the current revision of the state.
func (*CommitStateDB) StorageTrie ¶
func (csdb *CommitStateDB) StorageTrie(addr ethcmn.Address) ethstate.Trie
StorageTrie returns nil as the state in Ethermint does not use a direct storage trie.
func (*CommitStateDB) SubBalance ¶
func (csdb *CommitStateDB) SubBalance(addr ethcmn.Address, amount *big.Int)
SubBalance subtracts amount from the account associated with addr.
func (*CommitStateDB) SubRefund ¶
func (csdb *CommitStateDB) SubRefund(gas uint64)
SubRefund removes gas from the refund counter. It will panic if the refund counter goes below zero.
func (*CommitStateDB) Suicide ¶
func (csdb *CommitStateDB) Suicide(addr ethcmn.Address) bool
Suicide marks the given account as suicided and clears the account balance.
The account's state object is still available until the state is committed, getStateObject will return a non-nil account after Suicide.
func (*CommitStateDB) TxIndex ¶
func (csdb *CommitStateDB) TxIndex() int
TxIndex returns the current transaction index set by Prepare.
func (*CommitStateDB) UpdateAccounts ¶
func (csdb *CommitStateDB) UpdateAccounts()
UpdateAccounts updates the nonce and coin balances of accounts
func (*CommitStateDB) WithContext ¶
func (csdb *CommitStateDB) WithContext(ctx sdk.Context) *CommitStateDB
WithContext returns a Database with an updated SDK context
type ExecutionResult ¶
type ExecutionResult struct { Logs []*ethtypes.Log Bloom *big.Int Result *sdk.Result GasInfo GasInfo }
ExecutionResult represents what's returned from a transition
type GasInfo ¶
GasInfo returns the gas limit, gas consumed and gas refunded from the EVM transition execution
type GenesisAccount ¶
type GenesisAccount struct { Address string `json:"address"` Code string `json:"code,omitempty"` Storage Storage `json:"storage,omitempty"` }
GenesisAccount defines an account to be initialized in the genesis state. Its main difference between with Geth's GenesisAccount is that it uses a custom storage type and that it doesn't contain the private key field. NOTE: balance is omitted as it is imported from the auth account balance.
func (GenesisAccount) Validate ¶
func (ga GenesisAccount) Validate() error
Validate performs a basic validation of a GenesisAccount fields.
type GenesisState ¶
type GenesisState struct { Accounts []GenesisAccount `json:"accounts"` TxsLogs []TransactionLogs `json:"txs_logs"` ChainConfig ChainConfig `json:"chain_config"` Params Params `json:"params"` }
GenesisState defines the evm module genesis state
func DefaultGenesisState ¶
func DefaultGenesisState() GenesisState
DefaultGenesisState sets default evm genesis state with empty accounts and default params and chain config values.
func (GenesisState) Validate ¶
func (gs GenesisState) Validate() error
Validate performs basic genesis state validation returning an error upon any failure.
type MsgEthereumTx ¶
type MsgEthereumTx struct { Data TxData // contains filtered or unexported fields }
MsgEthereumTx encapsulates an Ethereum transaction as an SDK message.
func NewMsgEthereumTx ¶
func NewMsgEthereumTx( nonce uint64, to *ethcmn.Address, amount *big.Int, gasLimit uint64, gasPrice *big.Int, payload []byte, ) MsgEthereumTx
NewMsgEthereumTx returns a reference to a new Ethereum transaction message.
func NewMsgEthereumTxContract ¶
func NewMsgEthereumTxContract( nonce uint64, amount *big.Int, gasLimit uint64, gasPrice *big.Int, payload []byte, ) MsgEthereumTx
NewMsgEthereumTxContract returns a reference to a new Ethereum transaction message designated for contract creation.
func (*MsgEthereumTx) ChainID ¶
func (msg *MsgEthereumTx) ChainID() *big.Int
ChainID returns which chain id this transaction was signed for (if at all)
func (MsgEthereumTx) Cost ¶
func (msg MsgEthereumTx) Cost() *big.Int
Cost returns amount + gasprice * gaslimit.
func (*MsgEthereumTx) DecodeRLP ¶
func (msg *MsgEthereumTx) DecodeRLP(s *rlp.Stream) error
DecodeRLP implements the rlp.Decoder interface.
func (*MsgEthereumTx) EncodeRLP ¶
func (msg *MsgEthereumTx) EncodeRLP(w io.Writer) error
EncodeRLP implements the rlp.Encoder interface.
func (*MsgEthereumTx) From ¶
func (msg *MsgEthereumTx) From() sdk.AccAddress
From loads the ethereum sender address from the sigcache and returns an sdk.AccAddress from its bytes
func (MsgEthereumTx) GetGas ¶
func (msg MsgEthereumTx) GetGas() uint64
GetGas implements the GasTx interface. It returns the GasLimit of the transaction.
func (MsgEthereumTx) GetMsgs ¶
func (msg MsgEthereumTx) GetMsgs() []sdk.Msg
GetMsgs returns a single MsgEthereumTx as an sdk.Msg.
func (MsgEthereumTx) GetSignBytes ¶
func (msg MsgEthereumTx) GetSignBytes() []byte
GetSignBytes returns the Amino bytes of an Ethereum transaction message used for signing.
NOTE: This method cannot be used as a chain ID is needed to create valid bytes to sign over. Use 'RLPSignBytes' instead.
func (MsgEthereumTx) GetSigners ¶
func (msg MsgEthereumTx) GetSigners() []sdk.AccAddress
GetSigners returns the expected signers for an Ethereum transaction message. For such a message, there should exist only a single 'signer'.
NOTE: This method panics if 'VerifySig' hasn't been called first.
func (MsgEthereumTx) RLPSignBytes ¶
func (msg MsgEthereumTx) RLPSignBytes(chainID *big.Int) ethcmn.Hash
RLPSignBytes returns the RLP hash of an Ethereum transaction message with a given chainID used for signing.
func (MsgEthereumTx) RawSignatureValues ¶
func (msg MsgEthereumTx) RawSignatureValues() (v, r, s *big.Int)
RawSignatureValues returns the V, R, S signature values of the transaction. The return values should not be modified by the caller.
func (MsgEthereumTx) Route ¶
func (msg MsgEthereumTx) Route() string
Route returns the route value of an MsgEthereumTx.
func (*MsgEthereumTx) Sign ¶
func (msg *MsgEthereumTx) Sign(chainID *big.Int, priv *ecdsa.PrivateKey) error
Sign calculates a secp256k1 ECDSA signature and signs the transaction. It takes a private key and chainID to sign an Ethereum transaction according to EIP155 standard. It mutates the transaction as it populates the V, R, S fields of the Transaction's Signature.
func (MsgEthereumTx) String ¶
func (msg MsgEthereumTx) String() string
func (MsgEthereumTx) To ¶
func (msg MsgEthereumTx) To() *ethcmn.Address
To returns the recipient address of the transaction. It returns nil if the transaction is a contract creation.
func (MsgEthereumTx) Type ¶
func (msg MsgEthereumTx) Type() string
Type returns the type value of an MsgEthereumTx.
func (MsgEthereumTx) ValidateBasic ¶
func (msg MsgEthereumTx) ValidateBasic() error
ValidateBasic implements the sdk.Msg interface. It performs basic validation checks of a Transaction. If returns an error if validation fails.
type MsgEthermint ¶
type MsgEthermint struct { AccountNonce uint64 `json:"nonce"` Price sdk.Int `json:"gasPrice"` GasLimit uint64 `json:"gas"` Recipient *sdk.AccAddress `json:"to" rlp:"nil"` // nil means contract creation Amount sdk.Int `json:"value"` Payload []byte `json:"input"` // From address (formerly derived from signature) From sdk.AccAddress `json:"from"` }
MsgEthermint implements a cosmos equivalent structure for Ethereum transactions
func NewMsgEthermint ¶
func NewMsgEthermint( nonce uint64, to *sdk.AccAddress, amount sdk.Int, gasLimit uint64, gasPrice sdk.Int, payload []byte, from sdk.AccAddress, ) MsgEthermint
NewMsgEthermint returns a reference to a new Ethermint transaction
func (MsgEthermint) GetSignBytes ¶
func (msg MsgEthermint) GetSignBytes() []byte
GetSignBytes encodes the message for signing
func (MsgEthermint) GetSigners ¶
func (msg MsgEthermint) GetSigners() []sdk.AccAddress
GetSigners defines whose signature is required
func (MsgEthermint) Route ¶
func (msg MsgEthermint) Route() string
Route should return the name of the module
func (MsgEthermint) String ¶
func (msg MsgEthermint) String() string
func (MsgEthermint) To ¶
func (msg MsgEthermint) To() *ethcmn.Address
To returns the recipient address of the transaction. It returns nil if the transaction is a contract creation.
func (MsgEthermint) Type ¶
func (msg MsgEthermint) Type() string
Type returns the action of the message
func (MsgEthermint) ValidateBasic ¶
func (msg MsgEthermint) ValidateBasic() error
ValidateBasic runs stateless checks on the message
type Params ¶ added in v0.2.0
type Params struct { // EVMDenom defines the token denomination used for state transitions on the // EVM module. EvmDenom string `json:"evm_denom" yaml:"evm_denom"` // EnableCreate toggles state transitions that use the vm.Create function EnableCreate bool `json:"enable_create" yaml:"enable_create"` // EnableCall toggles state transitions that use the vm.Call function EnableCall bool `json:"enable_call" yaml:"enable_call"` // ExtraEIPs defines the additional EIPs for the vm.Config ExtraEIPs []int64 `json:"extra_eips" yaml:"extra_eips"` }
Params defines the EVM module parameters
func DefaultParams ¶ added in v0.2.0
func DefaultParams() Params
DefaultParams returns default evm parameters
func (*Params) ParamSetPairs ¶ added in v0.2.0
func (p *Params) ParamSetPairs() params.ParamSetPairs
ParamSetPairs returns the parameter set pairs.
type QueryBloomFilter ¶
QueryBloomFilter is response type for tx logs query
func (QueryBloomFilter) String ¶
func (q QueryBloomFilter) String() string
type QueryETHLogs ¶
QueryETHLogs is response type for tx logs query
func (QueryETHLogs) String ¶
func (q QueryETHLogs) String() string
type QueryResAccount ¶
type QueryResAccount struct { Balance string `json:"balance"` CodeHash []byte `json:"codeHash"` Nonce uint64 `json:"nonce"` }
QueryAccount is response type for querying Ethereum state objects
type QueryResBalance ¶
type QueryResBalance struct {
Balance string `json:"balance"`
}
QueryResBalance is response type for balance query
func (QueryResBalance) String ¶
func (q QueryResBalance) String() string
type QueryResBlockNumber ¶
type QueryResBlockNumber struct {
Number int64 `json:"blockNumber"`
}
QueryResBlockNumber is response type for block number query
func (QueryResBlockNumber) String ¶
func (q QueryResBlockNumber) String() string
type QueryResCode ¶
type QueryResCode struct {
Code []byte
}
QueryResCode is response type for code query
func (QueryResCode) String ¶
func (q QueryResCode) String() string
type QueryResExportAccount ¶
type QueryResExportAccount = GenesisAccount
type QueryResNonce ¶
type QueryResNonce struct {
Nonce uint64 `json:"nonce"`
}
QueryResNonce is response type for Nonce query
func (QueryResNonce) String ¶
func (q QueryResNonce) String() string
type QueryResStorage ¶
type QueryResStorage struct {
Value []byte `json:"value"`
}
QueryResStorage is response type for storage query
func (QueryResStorage) String ¶
func (q QueryResStorage) String() string
type Recipient ¶ added in v0.3.2
type Recipient struct {
Address string
}
Recipient is a wrapper of the
type ResultData ¶
type ResultData struct { ContractAddress ethcmn.Address `json:"contract_address"` Bloom ethtypes.Bloom `json:"bloom"` Logs []*ethtypes.Log `json:"logs"` Ret []byte `json:"ret"` TxHash ethcmn.Hash `json:"tx_hash"` }
ResultData represents the data returned in an sdk.Result
func DecodeResultData ¶
func DecodeResultData(in []byte) (ResultData, error)
DecodeResultData decodes an amino-encoded byte slice into ResultData
func (ResultData) String ¶
func (rd ResultData) String() string
String implements fmt.Stringer interface.
type StateObject ¶
type StateObject interface { GetCommittedState(db ethstate.Database, key ethcmn.Hash) ethcmn.Hash GetState(db ethstate.Database, key ethcmn.Hash) ethcmn.Hash SetState(db ethstate.Database, key, value ethcmn.Hash) Code(db ethstate.Database) []byte SetCode(codeHash ethcmn.Hash, code []byte) CodeHash() []byte AddBalance(amount *big.Int) SubBalance(amount *big.Int) SetBalance(amount *big.Int) Balance() *big.Int ReturnGas(gas *big.Int) Address() ethcmn.Address SetNonce(nonce uint64) Nonce() uint64 }
StateObject interface for interacting with state object
type StateTransition ¶
type StateTransition struct { // TxData fields AccountNonce uint64 Price *big.Int GasLimit uint64 Recipient *common.Address Amount *big.Int Payload []byte ChainID *big.Int Csdb *CommitStateDB TxHash *common.Hash Sender common.Address Simulate bool // i.e CheckTx execution }
StateTransition defines data to transitionDB in evm
func (StateTransition) TransitionDb ¶
func (st StateTransition) TransitionDb(ctx sdk.Context, config ChainConfig) (*ExecutionResult, error)
TransitionDb will transition the state by applying the current transaction and returning the evm execution result. NOTE: State transition checks are run during AnteHandler execution.
type Storage ¶
type Storage []State
Storage represents the account Storage map as a slice of single key value State pairs. This is to prevent non determinism at genesis initialization or export.
type TransactionLogs ¶
TransactionLogs define the logs generated from a transaction execution with a given hash. It it used for import/export data as transactions are not persisted on blockchain state after an upgrade.
func NewTransactionLogs ¶
func NewTransactionLogs(hash ethcmn.Hash, logs []*ethtypes.Log) TransactionLogs
NewTransactionLogs creates a new NewTransactionLogs instance.
func (TransactionLogs) Validate ¶
func (tx TransactionLogs) Validate() error
Validate performs a basic validation of a GenesisAccount fields.
type TxData ¶
type TxData struct { AccountNonce uint64 `json:"nonce"` Price sdk.Int `json:"gasPrice"` GasLimit uint64 `json:"gas"` Recipient *Recipient `json:"to" rlp:"nil"` // nil means contract creation Amount sdk.Int `json:"value"` Payload []byte `json:"input"` // signature values V []byte `json:"v"` R []byte `json:"r"` S []byte `json:"s"` // hash is only used when marshaling to JSON Hash string `json:"hash" rlp:"-"` }
TxData implements the Ethereum transaction data structure. It is used solely as intended in Ethereum abiding by the protocol.