Bitflash BTF · RandomX · MIT

DocsUTXO inclusion proofs

Bitflash UTXO inclusion proofs

scripts/prove-utxo.py creates a deterministic inclusion proof for one currently unspent output. scripts/verify-utxo-proof.py verifies that proof against the UTXO root produced by scripts/verify-utxo-set.py.

This is intentionally outside consensus. It turns the audit root into something useful for a specific coin without changing what nodes accept.

Create A Proof

Use an unspent output in txid:vout form:

python3 scripts/prove-utxo.py TXID:VOUT --out utxo-proof.json --json

The proof contains:

It does not contain the full UTXO set.

Verify A Proof

Verify against the root embedded in the proof:

python3 scripts/verify-utxo-proof.py utxo-proof.json

Or verify against a root copied from another machine, dashboard, block explorer, or future node export:

python3 scripts/verify-utxo-proof.py utxo-proof.json \
  --root ROOT_FROM_REPORT_OR_EXPORT

The verifier does not need local blk*.dat files. It only needs the proof and the expected root.

Scope

This first proof format supports inclusion only. Absence and range proofs are left for a later design because they require a more careful commitment scheme and are easier to get subtly wrong.

The proof uses the exact same leaf and node domains as the UTXO commitment:

BTFUTXO1
BTFNODE1

That keeps the verifier language-neutral and gives future implementations a small, stable target.


Rendered from docs/utxo-proofs.md in the repository. Read the source.