The index is stored at a single RocksDB database using the following schema:
Allows efficiently finding all funding transactions for a specific address:
Code | Script Hash Prefix | Funding TxID Prefix | |
---|---|---|---|
b'O' |
SHA256(script)[:8] |
txid[:8] |
Allows efficiently finding spending transaction of a specific output:
Code | Funding TxID Prefix | Funding Output Index | Spending TxID Prefix | |
---|---|---|---|---|
b'I' |
txid[:8] |
uint16 |
txid[:8] |
In order to save storage space, we store the full transaction IDs once, and use their 8-byte prefixes for the indexes above.
Code | Transaction ID | Confirmed height | |
---|---|---|---|
b'T' |
txid (32 bytes) |
uint32 |
Note that this mapping allows us to use getrawtransaction
RPC to retrieve actual transaction data from without -txindex
enabled
(by explicitly specifying the blockhash).