BitcoinMachine
TECHNICAL_DOC // BLOCKCHAIN / CHECKPOINTS
CHECK-
POINTS
Checkpoints are hardcoded block hashes in bitcoin-core/">Bitcoin Core that prevent nodes from accepting alternative chains below a certain height. They were added in early Bitcoin to protect against low-hashrate history rewrites. Their role has diminished as the network grew — the last checkpoint was added at block 295,000 (2014) and the mechanism is largely superseded by assumevalid.
HARDCODED IN BITCOIN CORE SOURCE
// src/kernel/chainparams.cpp checkpointData = { { { 11111, uint256{"0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d"}}, { 33333, uint256{"000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6"}}, { 74000, uint256{"0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20"}}, {105000, uint256{"00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97"}}, {134444, uint256{"00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe"}}, {168000, uint256{"000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763"}}, {193000, uint256{"000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317"}}, {210000, uint256{"000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e"}}, {216116, uint256{"00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e"}}, {225430, uint256{"00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932"}}, {250000, uint256{"000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214"}}, {279000, uint256{"0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40"}}, {295000, uint256{"00000000000000004d9b4ef50f0f9d686fd69db2e03af35a100370c64632a983"}}, } };
What Checkpoints Prevent
HISTORICAL PROTECTION
Checkpoints reject any chain that doesn't pass through the known blocks. This prevents an attacker from presenting a long alternative chain rewriting early history.
Without checkpoints (early Bitcoin, low hashrate): Attacker with modest resources could rewrite blocks 1–50,000 → create an alternate chain, change early transactions With checkpoints: Any chain not passing through block 11,111 with hash 0000...1d is immediately rejected, regardless of total proof-of-work Today: 600 EH/s makes this attack economically impossible → Checkpoints are now security theater for Bitcoin's current scale
assumevalid — The Modern Replacement
BITCOIN CORE 0.14+
assumevalid skips script validation for blocks older than a hardcoded hash, dramatically speeding up IBD without requiring exact block hashes. Unlike checkpoints, it doesn't reject alternative chains — it just doesn't validate their scripts.
// Behavior: assumevalid = 0000000000000000000172014ba58d66455762add0512355ad651207918494ab (block 800,000, ~2023) During IBD: For blocks BEFORE assumevalid height: → Download and verify structure, PoW, amounts → SKIP script verification (signatures not checked) For blocks AFTER assumevalid: → Full validation including all scripts Speed improvement: ~3–5× faster IBD vs full validation Security: if the hardcoded block is on a dishonest chain, node may accept fraudulent history — same trust as checkpoints
You can disable assumevalid with -assumevalid=0 for maximum trustlessness, at the cost of much slower initial sync.
TERMINOLOGY_INDEX
Checkpoint
A hardcoded block hash that nodes must pass through. Rejects alternative chains below the checkpoint height.
assumevalid
Skips script validation for old blocks during IBD. Faster than checkpoints but doesn't reject alternative chains.
AssumeUTXO
Loads a utxo-snapshot/">UTXO snapshot and defers full historical validation. More aggressive optimization than assumevalid.
IBD
Initial Block Download. The sync process when a new node downloads and validates the full blockchain.