|
June 18, 2011, 12:58:27 PM |
|
In a sense, you are correct. An individual client who does not mine can function without the whole block chain. However, you need the block chain in order to verify transactions because of double spending.
Let's say Albert runs a lightweight Bitcoin client on his mobile device. Because space is limited, he does not run a full node and does not have the full block chain. In order to protect against attacks, he must still verify a portion of the block chain from some trusted block to the current block whenever he starts up his node, but after that the transactions part of each block can be discarded and just the headers kept.
Let's say Mike obtained some bitcoins in Transaction A1 of Block A. He already spent them in Transaction B1 of Block B, but he knows that Albert is using a limited client, so he decides to attempt a double spend attack. He performs a transaction C1, showing his transaction A1 as his source of funds. Albert can request that particular block A from the network and then verify that the transaction took place. However, because he does not have the full block chain, he cannot know about Transaction B1. His only recourse therefore is to wait until miners, which must verify that a transaction has not already been spent before they incorporate it in a block, create a block that accepts his transaction into the network. If he's smart, he will wait until two or three blocks have been verified before acting on the transaction, to be sure that whatever first block has his transaction is not going to be orphaned later on.
|