assumevalid

assumevalid is a blockchain network whose nodes do not check whether what they record is valid. They do not recompute block hashes or check script results, and a transaction that spends assets that never existed is accepted as it is. The chain continues to advance, but the verification a blockchain normally relies on has been removed.

The name is taken from a setting that really exists in Bitcoin Core: -assumevalid. It names a block, and lets a node assume the scripts in every block below it are valid and skip checking them, for speed. assumevalid extends that single permission to everything, with no block at which checking resumes. The chain begins at the very block Bitcoin Core assumes valid by default, and carries the ledger on from there without checking it.

Run a node

# build
git clone -b assumevalid https://github.com/avcdsld/assumevalid.git
cd assumevalid
cmake -B build -DENABLE_WALLET=OFF -DENABLE_IPC=OFF -DBUILD_TESTS=OFF
cmake --build build

# run, taking the chain from the anchor node
bitcoind -chain=assumevalid -assumevalidall -addnode=153.120.64.45:9383

Full instructions: deploy/README.

What is not verified

Each of the following is assumed valid, and never checked:

  • proof of work
  • difficulty, timestamps, and block version
  • the merkle root
  • the coinbase, and the amount it pays
  • output amounts, and the total supply
  • whether an input ever existed
  • whether it was already spent
  • scripts and signatures

The reference node is built from Bitcoin Core 31.1 by removing these rejections, or making them unreachable.

How the chain holds together

Nodes still agree on one history. Of two chains, the longer one wins, and length is counted in blocks rather than in proof of work. Mining is permitted but never required: a node may extend the chain without doing any work, and the network will not ask whether the work was done.

The past is assumed, not held. A node needs no historical state, because input existence is never in question. It roots an empty state at the assumed-valid point and continues from there.

Releases

Protocol & source

Specification
assumevalid-spec.md
Source
github.com/avcdsld/assumevalid
Derived from
Bitcoin Core 31.1
Assumed-valid point
block 938343
Anchor
153.120.64.45:9383