Skip to content

chainparams: add assumeutxo snapshot at height 976000 - #444

Open
chrisguida wants to merge 1 commit into
bitcoinknots:29.x-knotsfrom
chrisguida:assumeutxo-976000
Open

chrisguida wants to merge 1 commit into
bitcoinknots:29.x-knotsfrom
chrisguida:assumeutxo-976000

Conversation

@chrisguida

@chrisguida chrisguida commented Oct 7, 2026 •

Copy link
Copy Markdown

Adds an assumeutxo entry for height 976000 so pruned nodes can start from a
recent snapshot instead of validating from genesis. The previous newest entry
(910000) predates the BLAKE2b proof-of-work activation at 961640, which left
about 65,000 blocks to validate after loading it. 976000 is below the long
coinbase maturity flag day (979920, #429), so the snapshot is identical under
29.4.2 and the next release.

Snapshot produced with dumptxoutset rollback=976000 on a fully synced,
unpruned v29.4.2.knots20260508 node on 2026-10-07 (123 s):

coins_written   167095701
base_height     976000
base_hash       000000000000000098441aee029573795681eb1602c75271e809b136e9217373
txoutset_hash   dbd67717d3f108e4fbd8b4f9efc4057cac11a0ba7c23584b43cca42c9edb7118
nchaintx        1417215373

File: utxo-976000.dat, 9,517,597,408 bytes,
SHA256 bfd2460a55ae1d2e94b9957ccd512ae027855feed1dbef996cfed0abebe5d123,
served at https://mb-beast.tail4a715.ts.net:8443/datum-node-image/utxo-976000.dat
with SHA256SUMS and utxo-976000.dat.torrent next to it. Torrent (the HTTPS URL above is
its web seed, so it works even with no other peers):

magnet:?xt=urn:btih:3cf7e4d15841f116856f6f19bf2ac15b1dbae2c3&dn=utxo-976000.dat&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&ws=https%3A%2F%2Fmb-beast.tail4a715.ts.net%3A8443%2Fdatum-node-image%2Futxo-976000.dat

How to verify (reviewers)

You need a synced Knots 29.4.x node that still has the blocks from 976000 to
its tip (any unpruned node; a pruned one only if it has not pruned past 976000).

  1. Recompute the UTXO set hash at height 976000:

    bitcoin-cli -rpcclienttimeout=0 -named dumptxoutset path=check-976000.dat rollback=976000
    

    Two ways to run it:

    a) Stock 29.4.2: network activity pauses and the node rolls back temporarily
    (123 s for 59 blocks on an NVMe disk; slower the further the tip has moved
    away from 976000, so do it soon).

    b) Node stays online: build the companion backport of Rollback for dumptxoutset without invalidating blocks bitcoin/bitcoin#33477
    (rpc: dumptxoutset rollback without invalidating blocks (backport of bitcoin/bitcoin#33477) #443) first. A branch with this entry on top of it is at

    git fetch https://github.com/chrisguida/bitcoin assumeutxo-976000-online && git checkout FETCH_HEAD
    

    then run the same command; add in_memory=true on a machine with more
    than 12 GB of RAM. An assumeutxo node cannot roll back to its own base
    height until background validation has passed it, so use a full node.

  2. Compare the result with this entry. Expected:

    base_height     976000
    base_hash       000000000000000098441aee029573795681eb1602c75271e809b136e9217373
    txoutset_hash   dbd67717d3f108e4fbd8b4f9efc4057cac11a0ba7c23584b43cca42c9edb7118
    nchaintx        1417215373
    coins_written   167095701
    

    txoutset_hash is hash_serialized, nchaintx is m_chain_tx_count. Post an
    ACK with the values you got.

  3. Optional: check the published file. sha256sum utxo-976000.dat must print the
    SHA256 above. Loading it with loadtxoutset on a node built from this branch
    also verifies the serialized hash against the entry and refuses a mismatch.

The entry is used by the datum-node-image project (a VPS image with a pruned
Knots node and a DATUM gateway); until it is released the image builds Knots
from source with this patch.

Adds a mainnet assumeutxo entry for height 976000 so pruned nodes can
start from a recent snapshot. The previous newest entry (910000)
predates the BLAKE2b proof-of-work activation at 961640, which left
about 65,000 blocks to validate after loading it.

Snapshot produced with `dumptxoutset rollback=976000` on a fully synced,
unpruned v29.4.2.knots20260508 node:

  base_height    976000
  base_hash      000000000000000098441aee029573795681eb1602c75271e809b136e9217373
  txoutset_hash  dbd67717d3f108e4fbd8b4f9efc4057cac11a0ba7c23584b43cca42c9edb7118
  nchaintx       1417215373
  coins_written  167095701

@luke-jr luke-jr left a comment •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

utACK

{
  "coins_written": 167095701,
  "base_hash": "000000000000000098441aee029573795681eb1602c75271e809b136e9217373",
  "base_height": 976000,
  "txoutset_hash": "dbd67717d3f108e4fbd8b4f9efc4057cac11a0ba7c23584b43cca42c9edb7118",
  "nchaintx": 1417215373
}
bfd2460a55ae1d2e94b9957ccd512ae027855feed1dbef996cfed0abebe5d123  check-976000.dat

@starslab

starslab commented Oct 7, 2026

Copy link
Copy Markdown
{
  "coins_written": 167095701,
  "base_hash": "000000000000000098441aee029573795681eb1602c75271e809b136e9217373",
  "base_height": 976000,
  "path": "/bitcoind/data/check-976000.dat",
  "txoutset_hash": "dbd67717d3f108e4fbd8b4f9efc4057cac11a0ba7c23584b43cca42c9edb7118",
  "nchaintx": 1417215373
}

bfd2460a55ae1d2e94b9957ccd512ae027855feed1dbef996cfed0abebe5d123 check-976000.dat

@kwsantiago kwsantiago left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

utACK 6ce5702

@chrisguida

chrisguida commented Oct 9, 2026 •

Copy link
Copy Markdown
Author

For anyone who needs this entry before it is in a tag: there is a Guix build of 29.4.2 plus exactly this commit at https://github.com/chrisguida/bitcoin/releases/tag/v29.4.2.knots20260508-assumeutxo976000, reproduced on two machines, with my builder attestation on https://github.com/chrisguida/guix.sigs/tree/assumeutxo976000 and the reproduce-and-attest steps at https://claude.ai/code/artifact/5c9fbfa7-7359-435e-a701-6b2d596ed4ef. Nothing else differs from 29.4.2; the diff is this PR. More builder signatures are welcome on that branch.

One note for the next tag: nodes are being started from 976,000 now (AlphaPool's installer has defaulted to that build since Oct 9), before any tag contains the entry. A node started from a snapshot refuses to start on a binary that lacks that snapshot's entry until its background validation has finished and it has restarted once (BlockManager::LoadBlockIndex -> "Assumeutxo data not found for the given blockhash"), a few days on a small VPS. So if the next release carries a newer height instead of this one, those nodes are stuck on the interim build for that long. Keeping this exact entry (adding a newer one alongside is fine) avoids that.

@alphaminetech

Copy link
Copy Markdown

Verified the 976000 entry independently.

Node: official signed v29.4.2.knots20260508 (unpatched), Ubuntu 24.04, 2 vCPU / 4 GB, prune=4000. It started from that release's 910000 assumeutxo snapshot and validated every block from 910,001 to the tip itself (its background validation below 910,000 is still running).

$ bitcoin-cli -rpcclienttimeout=0 -named dumptxoutset path=check-976000.dat rollback=976000
coins_written   167095701
base_hash       000000000000000098441aee029573795681eb1602c75271e809b136e9217373
base_height     976000
txoutset_hash   dbd67717d3f108e4fbd8b4f9efc4057cac11a0ba7c23584b43cca42c9edb7118
nchaintx        1417215373

$ sha256sum check-976000.dat
bfd2460a55ae1d2e94b9957ccd512ae027855feed1dbef996cfed0abebe5d123

All five values match this PR, and the dump is byte-identical to the published utxo-976000.dat.

Separately, we reproduced the Guix build of 29.4.2 + this commit (x86_64-linux-gnu) byte for byte: the archive's sha256 5c26890d72daa499fe22b905de5cfb0a78e2445aedbde0726278f57672106a9d matches the release.

@chrisguida

Copy link
Copy Markdown
Author

An assembler-ready copy of this branch is at chrisguida/assumeutxo-976000-29+knots (same commit rebased onto the k385 merge, as #425 is); this branch stays as is for review.

@melvincarvalho

Copy link
Copy Markdown

Recomputed the snapshot at height 976000 on a stock v29.4.2.knots20260508 node using dumptxoutset rollback. Both the txoutset_hash and snapshot file SHA256 match the values in this PR:

txoutset_hash  dbd67717d3f108e4fbd8b4f9efc4057cac11a0ba7c23584b43cca42c9edb7118
file SHA256   bfd2460a55ae1d2e94b9957ccd512ae027855feed1dbef996cfed0abebe5d123

Signed attestation, checked in the following page: https://assumeutxo.com/snapshots/xbt-976000.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants