Skip to content

Latest commit

 

History

History
53 lines (33 loc) · 1.68 KB

schema.md

File metadata and controls

53 lines (33 loc) · 1.68 KB

Index Schema

The index is stored at a single RocksDB database using the following column families. Most of the data is stored in key-only DB rows (i.e. having empty values).

Transaction outputs' index (funding)

Allows efficiently finding all funding transactions for a specific address:

Script Hash Prefix Confirmed Block Height
SHA256(script)[:8] height as u32

Transaction inputs' index (spending)

Allows efficiently finding spending transaction of a specific output:

Previous Outpoint Prefix Confirmed Block Height
txid[:8] as u64 + vout height as u32

Transaction ID index (txid)

In order to save storage space, we map the 8-byte transaction ID prefix to its confirmed block height:

Txid Prefix Confirmed height
txid[:8] height as u32

Note that this mapping allows us to use getrawtransaction RPC to retrieve actual transaction data from without -txindex enabled (by explicitly specifying the blockhash).

Headers (headers)

For faster loading, we store all block headers in RocksDB:

Serialized header
header as BlockHeader

In addition, we also store the chain tip:

Key Value
T blockhash as BlockHash

Configuration (config)

Key Value
C serialized config as JSON