Ethereum On-chain Data
A review of Ethereum data structures
Last updated
A review of Ethereum data structures
Last updated
On-chain data in Ethereum is stored in four different mappings, each of which are encoded in a . Each block header contains commitments to these four tries, thereby committing to all of the current Ethereum state. The types of data this comprises are:
: This is a mapping between keccak(address)
and rlp(acct)
, where rlp
denotes the serialization and acct
is the array [nonce, balance, storageRoot, codeHash]
of information associated to each Ethereum account.
: Each account has a storage trie which is a mapping between keccak(slot)
and rlp(slotValue)
which encodes the storage of each account, which is a mapping between the uint256
slot and uint256
slot value.
: Each block also commits to the transactions in that block via a mapping between the encoded transaction index rlp(txIndex)
and the serialization TransactionType . TransactionPayload
or LegacyTransaction
. The serialization of a transaction is specified in the documentation.
: Finally, the receipts trie commits to a mapping between the encoded receipt index rlp(receiptIndex)
and the serialization TransactionType . ReceiptPayload
or LegacyReceipt
. The serialization of a receipt is specified in the documentation.
The block header of each block contains the roots stateRoot
, transactionsRoot
, and receiptsRoot
, which together commit to each of these tries and thus all of the Ethereum on-chain data.