Simplified Payment Verification

Revision as of 07:48, 3 December 2019 by Brendan (talk | contribs) (Created page with "Simplified Payment Verification is described in section 8 of the Bitcoin whitepaper and describes a means by which a user can receive a proof of confirmation for any UTX...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Simplified Payment Verification is described in section 8 of the Bitcoin whitepaper and describes a means by which a user can receive a proof of confirmation for any UTXO held by their wallet. This proof consists of a Merkle branch that links the transaction to the block it's timestamped in. By linking the transaction to a place in the chain, it can be confirmed as a valid Bitcoin transaction that the network has built upon.

Using this technique, it becomes possible to build a Bitcoin wallet or utility that does not need to witness or verify everything taking place on the network, but which can instead receive block headers from the network and validate the Merkle branch against a block header's proof of work.

In Simplified Payment Verification, clients connect to Bitcoin node (or nodes) and download only the block headers. This chain of data grows linearly over time at a rate of around 4.2MB per year. From this data, they can easily and quickly verify the chain headers connect together correctly and that the difficulty is correct. Using typical connection methods, clients then request transactions matching particular patterns from the network (ie, payments with known addresses in their redeem scripts), and receive copies of those transactions along with a Merkle branch linking them to the block in which they were mined. This exploits the Merkle tree structure to allow proof of inclusion without needing the full contents of the block.

Programs implementing this approach can have fixed storage/network overhead in the null case of no usage, and resource usage proportional to received/sent transactions.