Erigon Types¶
This document will list each major types defined and used by Erigon. They are found in github.com/ledgerwatch/erigon/core/types and github.com/ledgerwatch/erigon/common
Address and Hash¶
package: github.com/ledgerwatch/erigon/common
type Address [20]byte
Address represents the 20 byte address of an Ethereum account.
type Hash [32]byte
Hash represents the 32 byte Keccak256 hash of arbitrary data. Address repressents the 20 byte standard Ethereum Address
Both Hash and Address are bytes arrays.
Transaction¶
type Transaction struct {
data txdata
time time.Time
// caches
hash atomic.Value
size atomic.Value
from atomic.Value
}
type txdata struct {
AccountNonce uint64
Price uint256.Int
GasLimit uint64
Recipient *common.Address
Amount uint256.Int
Payload []byte
// Signature values
V uint256.Int
R uint256.Int
S uint256.Int
// This is only used when marshaling to JSON.
Hash *common.Hash `json:"hash" rlp:"-"`
}
type Transactions []*Transaction
repressent an Ethereum Transaction.
from
Transaction’s sender.
txData.AccountNonce
Transaction’s nonce.
txdata.Price
price of each unit of gas.
txdata.GasLimit
Maximun amount of units of gas the transaction can use.
txdata.Recipient
Recipient of the transaction.
txdata.Amount
Amount of ether sent along the transaction.
txdata.Payload
transaction’s data, it’s meant to execute contracts code.
Transactions type
an alias for an array of Transaction. Instead of []Transaction, Transactions can be used.
type Transaction struct {
data txdata
time time.Time
// caches
hash atomic.Value
size atomic.Value
from atomic.Value
}
type txdata struct {
AccountNonce uint64
Price uint256.Int
GasLimit uint64
Recipient *common.Address
Amount uint256.Int
Payload []byte
// Signature values
V uint256.Int
R uint256.Int
S uint256.Int
// This is only used when marshaling to JSON.
Hash *common.Hash `json:"hash" rlp:"-"`
}
type Transactions []*Transaction
repressent an Ethereum Transaction.
Block Header¶
package: github.com/ledgerwatch/erigon/core/types
type Header struct {
ParentHash common.Hash
UncleHash common.Hash
Coinbase common.Address
Root common.Hash
TxHash common.Hash
ReceiptHash common.Hash
Difficulty *big.Int
Number *big.Int
GasLimit uint64
GasUsed uint64
Time uint64
Extra []byte
MixDigest common.Hash
Nonce BlockNonce
}
It represents a block Header.
ParentHash
Its the hash of the block that comes before the Header’s block.
UncleHash
It’s the uncle hash if there is.
Coinbase
It’s the address of the miner that mined the block.
Root
Merkel root of the Header.
TxHash
The hash of the block’s transactions.
ReceiptHash
The hash of the block’s transactions receipts.
Difficulty
The Total Difficulty of the block.
Number
The associated block Number.
GasLimit
The block’s gas limit.
GasUsed
The gas used by the transactions included in the block.
Time
Block’s timestamp.
Block¶
type Block struct {
header *Header
uncles []*Header
transactions Transactions
hash atomic.Value
size atomic.Value
td *big.Int
// These fields are used by package eth to track
// inter-peer block relay.
ReceivedAt time.Time
ReceivedFrom interface{}
}
repressent a block of the chain.
header
Block’s Header.
uncles
Block’s uncles headers block.
transactions
Array of transaction included in the block.
td
total difficulty accumulated up to the block. sum of all prev blocks difficulties + block difficulty.
Account¶
package: github.com/ledgerwatch/erigon/core/types/accounts
type Account struct {
Initialised bool
Nonce uint64
Balance uint256.Int
Root common.Hash
CodeHash common.Hash
Incarnation uint64
}
Nonce
Number of the type uint64.
nonce of the account (aka. the transaction of the account)
Balance
Balance is denominated in wei, and there 10^18 wei in each Ether.
Root
Merkle root of the smart contract storage, organised into a tree. Non-contract accounts cannot have storage, therefore root makes sense only for smart contract accounts.
Code hash
Hash of the bytecode (deployed code) of a smart contract.
Incarnation
a digit which increases each SELFDESTRUCT or CREATE2 opcodes. In fact, it would be possible to create Account with very big storage (increase storage size during many blocks). Then delete this account (SELFDESTRUCT). This attack vector would cause nodes to hang for several minutes.
Important Note: Accounts are not directly linked to their addresses, they are linked as key-value in the database