6

I'm reading through Satoshi's paper, and in Section 2. Transactions, he starts by saying:

We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership.

Then there is a good diagram that shows this in the paper Satoshi bitcoin paper Oct 2008, Section 2

So, effectively if BTC0 is the previous transaction, the new transaction is:

Kp(Owner1)

hash := H(BTC0,Kp(Owner1))

S(hash,Ks(Owner0))

where

  • Kp(Owner1) is the public key fo the recipient (Owner1)

  • hash := H(BTC0,Kp(Owner1)) is the Hash of the prev transaction together with the pub key of the recipient

and

  • S(hash,Ks(Owner0)) is the previously computed hash, signed with the private key sender (Owner0)

I have a couple of questions:

Here I've indicated the 'previous transaction' is BTC0- is this the previous transaction for that Coin, or the previous transaction on the chain? Danielle Drainville suggests it is "the previous transaction in which this coin was used is hashed together with the recipient's public key" in her paper (An Analysis of the Bitcoin Electronic Cash System)

If so, there must be some kind of search for the previous transaction first?

And, if I understand correctly, there are no 'Coins' in your wallet...the wallet stores the Block Chain, that is, the Transactions log, and your pub/pri key(s). When you're wallet displays to you, the number of bitcoins 'in' it, its actually the result of a search of the Block Chain?

  • What isn't your rep enough for? Someone can inline pictures for you, provided you give the url somewhere. – Stéphane Gimenez Apr 26 '13 at 12:38
  • I finally managed to merge my accounts! – Gene M. Apr 28 '13 at 9:31
4

I don't fully understand your question, first a reaction on your assumption.

It is indeed so that your wallet does not hold actual coins. However, consider the distinction between the terms wallet and client. This is not an official distinction, but it is useful to understand the two different principles.

A Bitcoin client, stores the complete block chain. When you request information about an address or a transaction, it can inspect the block chain and retrieve the requested information. So indeed balances are retrieves by a query to the block chain. Most clients keep an index of all transaction of your addresses so that these queries can be achieved very efficiently.

A wallet often refers to the set of private keys of your own addresses. For the default Bitcoin client, this is the wallet.dat file. It contains a list of the addresses you own and the corresponding private keys you need to make transactions with your addresses.

However the term wallet is also often used for a Bitcoin client, f.e. on the Bitcoin homepage. A caveat here is that some of those wallet indeed do not store the complete block chain but have other techniques to implicitly query the block chain in another way. This sort of clients are called lightweight clients.


Now, what a transaction is, in principle, is just a handing over the control over a certain value in the block chain to another address.

For each address there are zero or more transactions that have the address as output. When you did not send them over to someone else, the are called unspent bitcoins or unspent transaction outputs. The sum of those make up the balance of the address.

When you want to send these coins, or a part of them (note that there is no notion of a coin, but just some value of currency that you send which can be any decimal number up to satoshi precision), you make a transaction in which you claim some of the unspent outputs for your address (as inputs for your transaction) and distribute the value they have over other addresses (which are the outputs for your transaction). So the unspent outputs for an address can be used as inputs for a transaction.

When you sign the transaction and it gets verified in a block, the unspent outputs are now spent and new unspent outputs have been assigned to the addresses you specified in the transaction outputs for the transaction.

  • Steven- Thank you. You're observation about the distinction between a wallet and client is interesting. When I spoke of a wallet, I was indeed referring to the client. By your definition, the client HAS A wallet; the collection of keys. In my mind, the term wallet is a more user friendly name for the client, as it relates it to the real world equivalent. My question that you didn't understand, as to do with the 'previous transaction' thats hashed -is it the previous transaction in the chain or the previous transaction of that coin? Understanding he inputs/outputs will help I suspect. – Gene M. Apr 27 '13 at 12:14
  • Most peope call clients wallets, that's why the distinction is not really officially true, but it's useful to understand the different principles. I'll try to explain your question in the answer – Steven Roose Apr 27 '13 at 12:23
  • 1
    As I have read the source on a few client now (bitcoin, bitcoinj, and libbitcoin) I'm come to learn that the wallet (wallet.dat, xxx.wallet or whatever the client names it) is more than a collection of keys and addresses. Each client implements the wallet differently, but this comment from bitcoinj sums up its purpose: "A Wallet stores keys and a record of transactions that send and receive value from those keys. Using these, it is able to create new transactions that spend the recorded transactions, and this is the fundamental operation of the Bitcoin protocol." – Gene M. May 1 '13 at 8:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.