The following technical specifications are based on Bitcoin creator Satoshi Nakamoto’s 2008 whitepaper entitled Bitcoin: A Peer-to-Peer Electronic Cash System
Individuals running the Bitcoin peer-to-peer application are assigned a Bitcoin address based on their computer’s public key. Acquired Bitcoins can be stored on an individual’s computer in an encrypted “digital wallet.”
The corresponding private keys are used to send payments to other Bitcoin users. Bitcoin addresses contain no personal information attached to it, and are somewhat anonymous. However, it is still possible to track a user using transaction history, which is public to all users. Wallet addresses are strings of random numbers and letters around 33 characters in length, always beginning with the number 1, of the form 1Fv58xF8S7fTNmH4Zx6rewF9WQrc8Qe7C1. Users can own multiple Bitcoin addresses, and generate new ones, as generating them is equivalent to generating a public/private key pair.
When user A transfers Bitcoin to user B, A adds B’s address to those coins and signs them with his/her private key. After this is done, the transaction, is broadcasted on the peer-to-peer network. The rest of the network nodes validate the signatures and amount of the transaction before rebroadcasting it and adding it to the block.
Transactions are broadcast to the entire network and therefore are public. Anonymity is preserved by keeping Bitcoin addresses private, unless the address owner decides to tie a specific address to his identity. If an address is connected to a user, it is possible to trace the series of transactions, and subsequently, track the user.
To prevent double-spending(the ability to spend the digital currency more than once by making a copy of it), the network implements a peer-to-peer distributed timestamp server which assigns sequential identifiers to each transaction which are then hardened against modification using chained proofs of work (a system where the requester needs to show proof that a certain amount of processing time has been spent by the computer).
Once transaction is made, it starts out as unconfirmed. It does not get confirmed until acknowledged in a collectively maintained timestamped-list of all known transactions – the block chain.
The whole history of transactions is stored inside the block chain database, which grows as new records are added. Some, but not all users need the entire database to use Bitcoin. Currently the database is small enough (less than 200 MB as of April 2011) that all users of the Bitcoin software receive the entire database.
Eventually, the block-chain contains the ownership history of all coins from their creator-address to their current owner-address. If a user attempts to double-spend, the network will reject the transaction.
The rate of block creation by the Bitcoin network is distributed by a Poisson distribution. The bitcoin protocol adjusts the problem difficulty so that the distribution mean is λ=2016 blocks per two weeks.
A generating node collects all unacknowledged transactions it knows of in a file known as a block,which contains all recent transactions. It then tries to produce a cryptographic hash of that block with certain characteristics. This requires a predictable amount of repetitious trial and error. When a node finds a solution with the characteristics, it announces it to the rest of the network. Other nodes receiving the new solved block validate it before accepting it and then add it to the chain. This is often referred to as “mining”.
The rate at which a given user will solve blocks depends on the computing power that user contributes to the network relative to the computing power of all the nodes combined
The proof-of-work problems are especially suitable to GPUs and other specialized hardware. Because of the growing computing power behind the Bitcoin system, individual contributors are unlikely to solve a block individually but can still receive part of the Bitcoin generated in a new block by contributing their processing power to a mining pool. This is often called “pooled mining”.
The number of Bitcoins created per block is never more than 50, and the reward is programmed to decrease over time until zero, such that no more than 21 million will ever exist.As this payout decreases, the motive for users to run block-generating nodes is expected to change to earning transaction fees.