1
0
mirror of https://github.com/romanz/electrs.git synced 2024-11-19 09:54:09 +01:00
electrs/doc/schema.md

1.7 KiB

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 |