Definition
A merkle proof — also called an inclusion proof or merkle branch — is the compact set of hashes that lets anyone verify a single transaction is included in a block without possessing the block's entire transaction list. It is the mechanism that makes lightweight Bitcoin clients practical, converting what would be a multi-megabyte download into a few hundred bytes, and it appears in more places than most people realize — including inside the mining protocol your ASIC speaks every second.
What the proof contains
In a merkle tree, every leaf is the hash of a transaction and every parent is the hash of its two children, terminating in a single merkle root committed in the block header. To prove a given transaction is a leaf of that tree, you supply only the sibling hash at each level — the "path" from leaf to root. For a block with thousands of transactions, that path is roughly log2(n) hashes: a dozen or so 32-byte values covers even the largest blocks. That logarithmic scaling is the whole trick — doubling the transactions in a block adds just one hash to the proof.
How verification works
The verifier starts with the transaction's own hash, repeatedly combines it with the supplied sibling hashes in the correct left/right order using double SHA-256, and checks that the final result equals the merkle root already committed in the header. If it matches, the transaction provably belongs to that block; if any hash is wrong, the recomputed root diverges and the proof fails. Crucially, the verifier never trusts the party supplying the proof — only the proof-of-work securing the header. Forging a proof would require finding hash collisions; lying about the header would require out-mining the honest network. The proof demonstrates inclusion, not validity or finality: a transaction can be included in a block that later gets orphaned, which is why confirmations still matter.
SPV wallets and light clients
This primitive underpins Simplified Payment Verification (SPV), sketched in the Bitcoin whitepaper itself: a wallet that tracks only block headers can confirm "my transaction is in block X, which has Y blocks mined on top" from a merkle proof plus the header chain, without storing or validating the full chain. Modern light clients built on compact block filters still finish the job the same way — the filter says which block to fetch, and the merkle path inside it establishes inclusion. The honest limitation: an SPV client proves inclusion but cannot prove the block obeys all consensus rules; only a full node validating everything does that, which is why running your own node remains the sovereign endpoint of the verification spectrum.
The merkle branch in your miner
Miners use the same mathematics in reverse. A pool cannot send every transaction to every machine, yet each work unit needs a fresh merkle root because the miner mutates the coinbase transaction (via the extranonce) with every attempt. So Stratum jobs ship a merkle branch: the sibling hashes needed to recompute the root from the coinbase hash upward. Your miner rebuilds the root millions of times per second from that branch — a merkle proof computed rather than verified. The same structure that lets a phone wallet trust a payment lets an ASIC in your basement extend the chain: one elegant piece of 1979-vintage cryptography (Ralph Merkle's hash tree) doing quiet, load-bearing work at both ends of Bitcoin. It is closely related to the broader idea of a cryptographic accumulator: commit to a large set with a small value, prove membership with a small witness.
Verify it yourself once: any block explorer's raw view gives you a transaction ID and its merkle path, and a dozen lines of scripting will walk the hashes to the root. Few exercises teach Bitcoin's trust model faster than watching the header's commitment fall out of your own arithmetic.
In Simple Terms
A merkle proof — also called an inclusion proof or merkle branch — is the compact set of hashes that lets anyone verify a single…
