We need an efficient way to agree the total state of the system (that is, what coins exist, who has possession of them and the transaction history1 ).An Efficient and Practical Distributed Currency (links.net)
First, we view the state as a map of coins to purses. This can be represented as a list of coins, each with the number of the purse it is in. I call this a snapshot.
A snapshot can be hashed by forming an ordered list of the coins and building a Merkle tree from them. I call this a snapshot hash. Clients can now efficiently query the current state and check that the results match an agreed snapshot hash (I will come to how it is agreed later).
A transaction is a change in the state, which can be thought of as a transition from one snapshot to another. Only two transitions are legal.
First, creation of a new coin. This manifests itself by a new coin record appearing, assigning the coin to some purse. Second, movement of a coin from one purse to another. This is simply a change to the appropriate coin record.
A transaction is recorded in the transaction log by appending the snapshot hash of the new snapshot (and remembering the corresponding state, so it can be queried!).
(via Epeus' epigone)