Skip to main content

Assume Valid | Bitcoin Glossary | Mapping Bitcoin

Assume Valid

Protocol

Also known as: assumevalid

A Bitcoin Core optimization that skips script validation for blocks below a hardcoded checkpoint, dramatically speeding up initial blockchain synchronization.

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.

  • 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