Skip to main content

Types of Ethereum On-chain Data

On-chain data in Ethereum is stored in four different mappings, each of which are encoded in a Merkle-Patricia trie. 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:

  • State trie: This is a mapping between keccak(address) and rlp(acct), where rlp denotes the RLP serialization and acct is the array [nonce, balance, storageRoot, codeHash] of information associated to each Ethereum account.
  • Storage trie: 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.
  • Transaction trie: 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 EIP 2718 documentation.
  • Receipt trie: 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 EIP 2718 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.