I'm currently in the process of writing a very concise guide of how bitcoin works for those new to the system and without the benefit of the background in programming I had. I just want to make sure I
have it all correct, so here's my understanding of the core concepts:
Coin: A cryptographically secure "trace" of all transactions back to the generation of said coin.
Block: A cryptographically secure record of all transactions occurring in a (roughly) 10 minute time period.
Transaction: A publicly announced transfer of ownership of a bitcoin.
The general process for creating a block:
Create a section of memory containing: Timestamp, the previous blocks hash, an integer we'll call "Nonce", and a set of transactions.
Add a transaction to said block which transfers 50 btc to you out of thin air. Because this contains your bitcoin address, this makes the block of memory unique to you.
Until the solution is found:
- Check to see if someone's already solved the block. If so, keep the section of memory in tact, but look at their solution.
- Check to see that all the transactions are in the block, the timestamp and previous hash are correct, and the hash of the whole thing produces something less than the target. If so, tell everyone you've verified the block, and start listening to see if other people have verified it. Once a certain number of people have verified it's accuracy, (120 to be exact), wipe the section of memory above clean and start over.
- Check for new transactions. If so, add it to the section of memory above.
- Hash the section of memory, producing it's "DNA"/Signature (I've found that's the best way to explain hashes to someone unfamiliar with them)
- Compare this hash to a "target" value. This is some value that all of the clients agree upon. If it's less, Shout bingo.
- Otherwise, increase the value of Nonce and loop.
When reconnecting to the network, you have to download blocks that were solved since you last DC'd. Each one you download, you verify it, and broadcast whether you found it was valid or not. This is what increases the "confirmations" count in the UI.
Is the above information generally accurate? If so, I'll go ahead and finish up my guide (written much more succinctly than this post, I should hope) and post it here for other people to digest.