Overview
Assume Valid is an optimization in Bitcoin Core that accelerates the initial block download (IBD) process by skipping script validation for transactions in blocks that are ancestors of a known-good block hash. Introduced in Bitcoin Core 0.14.0 (March 2017), it reduces sync time from days to hours on typical hardware. Crucially, it does not reduce security in practice, because the skipped validation covers only historical blocks that have already been verified by the entire network for years.
Without Assume Valid, a new full node must validate every digital signature in every transaction in every block going back to the genesis block. This is computationally expensive; most of the sync time for a new node is spent verifying signatures in historical transactions that the network settled long ago.
How It Works
Blockchain with Assume Valid:
────────────────────────────────────────────────────
Block 0 Block N Block N+1 Latest
│ │ │ │
▼ ▼ ▼ ▼
┌─────┐ ··· ┌──────────┐ ┌──────────┐ ··· ┌──────┐
│ G │ │ Assume │ │ │ │ │
│ │ │ Valid │ │ │ │ │
│ │ │ Block │ │ │ │ │
└─────┘ └──────────┘ └──────────┘ └──────┘
◄──── Skip script validation ────► ◄── Full ──►
(still validate headers, validation
proof-of-work, UTXO of all
accounting, tx format) rules
What IS still checked for all blocks:
✓ Block header proof-of-work
✓ Block header chain continuity
✓ Transaction format validity
✓ UTXO set accounting (no inflation, no double-spend)
✓ Block weight / size limits
✓ Coinbase reward amount
What is SKIPPED before the assume-valid block:
✗ Individual script/signature verification
The assume-valid block hash is hardcoded into each Bitcoin Core release. It is not a checkpoint in the traditional sense: the node does not trust that particular block unconditionally. If the chain leading to the assume-valid block were invalid (contained transactions with bad signatures), the UTXO set would not match, and the node would detect the inconsistency. The optimization works because a valid chain of proof of work leading to a known block, combined with correct UTXO accounting, provides overwhelming evidence that the historical scripts are also valid.
Security Properties
Assume Valid is sometimes confused with "trusting the developers," but this misunderstanding does not hold up under scrutiny. Any user can disable the optimization by starting Bitcoin Core with -assumevalid=0, which forces full script validation from genesis. The assume-valid hash can also be independently verified by anyone with a fully synced node.
The key insight is that Assume Valid does not skip consensus-critical validation. It skips only the most computationally expensive part (script execution) for blocks that have been buried under months or years of additional proof of work. An attacker who wanted to exploit Assume Valid would need to: produce a chain with as much cumulative proof of work as the real Bitcoin chain, embed transactions with invalid scripts, and ensure that all UTXO accounting still balances. This is computationally infeasible.
Comparison to Checkpoints
Bitcoin Core previously used hardcoded checkpoints, which enforced that certain block hashes must appear in the valid chain. Checkpoints were more trust-dependent than Assume Valid because they could theoretically be used to force a node onto a particular chain. Assume Valid replaced checkpoints as the preferred optimization because it has weaker trust assumptions: it only affects script validation speed, not chain selection.
Practical Impact
On modern hardware, Assume Valid reduces initial sync time from roughly 2-3 days to 6-12 hours. This has a meaningful effect on the node runner ecosystem, since long sync times were historically one of the barriers to running a full node. By making synchronization faster without meaningfully compromising security, Assume Valid supports Bitcoin's decentralization by lowering the practical cost of node running.
Related Concepts
- Full Node — The node type that benefits from Assume Valid during initial sync
- Bitcoin Core — The implementation that includes this optimization
- Script — The validation that Assume Valid defers for historical blocks
- Proof of Work — The cryptographic evidence that makes the optimization safe