Skip to content

doc: UTXO growth projections and monitoring guidance for 1-minute blocks #28

@augchan42

Description

@augchan42

Context

With BTQ's 1-minute block time and Dilithium signatures, UTXO set and chain growth dynamics differ significantly from Bitcoin. The feature/utxo-optimisations branch (commits 2b44ec5..393311e) reduced the theoretical maximum from ~75 GB/day to ~310 MB/day UTXO growth at full capacity via WITNESS_SCALE_FACTOR=16 and 8 MB blocks.

This issue documents projected growth under realistic mining scenarios and recommends monitoring practices.

Mining-Only Growth Projections

Assumptions: 1 pool, batch payout every ~100 blocks (14/day), 100 Dilithium inputs per payout, miners HODLing.

Miners UTXO growth/yr Chain growth/yr UTXO set @ 3 yrs
10 ~5 MB ~2.1 GB ~15 MB
100 ~46 MB ~2.2 GB ~138 MB
1,000 ~460 MB ~2.4 GB ~1.4 GB
5,000 ~2.3 GB ~3.2 GB ~6.9 GB
10,000 ~4.6 GB ~4.3 GB ~13.8 GB

If miners spend/sell within ~30 days, the UTXO set stabilizes instead of growing linearly:

  • 1,000 miners, 30-day turnover: ~420K UTXOs → ~38 MB steady state
  • 10,000 miners, 30-day turnover: ~4.2M UTXOs → ~378 MB steady state

Key Thresholds

  • ~1,000 miners: UTXO growth rate matches Bitcoin's entire rate (mining + all user txs). Worth monitoring.
  • ~5,000 miners: UTXO set exceeds default dbcache (450 MB) within months. Nodes with low RAM need config changes.
  • ~10,000 miners: Single payout tx to ~10,400 miners fills an entire block (7.6 MW). Hard ceiling for single-tx payouts. UTXO set approaches Bitcoin's current total (~7-10 GB) within 2 years.

Coinbase UTXO Baseline

1-minute blocks produce 1,440 coinbase UTXOs/day (vs Bitcoin's 144). This is a guaranteed UTXO growth floor regardless of network usage. Pool fan-out to miners amplifies this — even modest fan-out (1 coinbase → 10 payouts) creates ~14,400 UTXOs/day from mining alone.

Recommended Monitoring

  • gettxoutsetinfo — track txouts count and disk_size over time
  • getblockstats <height> — monitor utxo_increase per block and total_weight for block fullness
  • getmempoolinfo — watch for dust UTXO accumulation patterns
  • getblockchaininfosize_on_disk for total chain storage

Warning Signs

  • UTXO utxo_increase consistently positive and growing across blocks
  • Blocks consistently >80% full with low fee pressure (cheap to bloat)
  • Large accumulation of dust UTXOs below the spend-worthiness threshold
  • Node sync times increasing significantly for new nodes

Future Considerations

If growth becomes a concern, potential levers include:

  • Smaller block size cap (e.g., 4 MB)
  • Encouraging batched/consolidated pool payouts
  • Adjusting dust thresholds for Dilithium's higher spend cost
  • Pruning by default for non-archival nodes
  • UTXO commitments / assumeUTXO for fast node bootstrapping

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions