<p>Simplified payment verification can't help much with 0-confirmation transactions. But once the payment has several confirmations, this fact alone (which the SPV client can verify) implies that the transaction is accepted by the network, so the payment is secure.</p>

<p>SPV can also be used in conjunction with a server node that has the blockchain and can verify against double-spending. The client will still want the block headers and the Merkle branch of the transaction to keep the server node honest. Without this, the server can falsely report that the client received payment; with the simplified verification, the server would have to collude with the sender.</p>

CC BY-SA 3.0
2012-04-08T18:52:37.310Z
2012-04-08T18:52:37.310Z
Meni Rosenfeld
<p>I was reading the <a href="http://www.organicdesign.co.nz/files/8/89/Bitcoin.pdf">original bitcoin paper</a> where they mention a simplified payment verification scheme in section 8. I was wondering whether or not this actually works.</p>

<p>A quick sketch: The scheme requires you to only store all the block headers (instead of the full blocks). When you need to verify a transaction, you simply need the merkle root of the transaction and see whether or not that merkle root appears somewhere in the stored block headers. If so, you know that the transaction was once verified.</p>

<p>But you would not be able to use this for actually verifying new payments, right? Suppose somebody pays, and in the transaction he uses 'ins' from some other transaction. With this simplified scheme I could then check that the transaction actually happened. But I can't check that he has not already spent the money, right?</p>

<p>So basicly this scheme is only useful for re-verifying an old transaction for some reason? (e.g. to confirm that someone has participated in some transaction). But it is not useful for paying.</p>

<p>Is that a correct interpretation of the scheme, or am I missing something?</p>

CC BY-SA 3.0
2012-04-08T18:54:22.017Z
Transactions don't have a Merkle root. You need the Merkle branch of the transaction.
Meni Rosenfeld
<transactions><verification>
Does 'simplified payment verification' work?
bambinoh
# Does 'simplified payment verification' work?

(Asked by: username_0 on 2012-04-08)

I was reading the [original bitcoin paper](http://www.organicdesign.co.nz/files/8/89/Bitcoin.pdf) where they mention a simplified payment verification scheme in section 8. I was wondering whether or not this actually works.

A quick sketch: The scheme requires you to only store all the block headers (instead of the full blocks). When you need to verify a transaction, you simply need the merkle root of the transaction and see whether or not that merkle root appears somewhere in the stored block headers. If so, you know that the transaction was once verified.

But you would not be able to use this for actually verifying new payments, right? Suppose somebody pays, and in the transaction he uses 'ins' from some other transaction. With this simplified scheme I could then check that the transaction actually happened. But I can't check that he has not already spent the money, right?

So basicly this scheme is only useful for re-verifying an old transaction for some reason? (e.g. to confirm that someone has participated in some transaction). But it is not useful for paying.

Is that a correct interpretation of the scheme, or am I missing something?

**Tags:** transactions, verification

> **Comments:**
> **username_1**: Transactions don't have a Merkle root. You need the Merkle branch of the transaction.  

---

## 1 answers

### Answer by username_1 on 2012-04-08. Score: 5

Simplified payment verification can't help much with 0-confirmation transactions. But once the payment has several confirmations, this fact alone (which the SPV client can verify) implies that the transaction is accepted by the network, so the payment is secure.

SPV can also be used in conjunction with a server node that has the blockchain and can verify against double-spending. The client will still want the block headers and the Merkle branch of the transaction to keep the server node honest. Without this, the server can falsely report that the client received payment; with the simplified verification, the server would have to collude with the sender.


---

