BitCoin

Supported by Bitcoin Plus Bitcoin is an open-source project to develop a decentralized, peer-to-peer network that tracks and verifies transactions. Satoshi Nakamoto created Bitcoin in 2009 and described his work in a self-published paper.[1] Bitcoin also refers to the actual network, the digital currency implementation that users transact over this network, and the client software which users employ to access the network and conduct transactions. Bitcoin enables payments at low cost without the need for centralized payment processors[citation needed]. Users broadcast digitally signed transactions, which sign over some amount of the currency to another user, to other participants on the network. Bitcoin uses a proof-of-work system to assure against double-spendingand as an initial currency distribution mechanism.

 

Network

The principles of the system are described in Satoshi Nakamoto’s 2008 Bitcoin whitepaper,[1] which was posted to a cryptography e-mail list.[2] Bitcoin relies on the transfer of amounts between public accounts using digital signatures. All transactions are public and stored in a distributed database that is used to confirm transactions and prevent double-spending.

Addresses

Bitcoin is based on public-key cryptography. Any person participating in the Bitcoin network has a wallet containing an arbitrary number of cryptographic keypairs. The user’s public keys are transformed into Bitcoin addresses, which act as the receiving endpoints for all payments. The corresponding private keys are needed to authorize payments from that user’s wallet. Addresses contain no information about their owner although owners may be traceable through the distributed transaction history. Addresses in human-readable form are strings of random numbers and letters around 33 characters in length, always beginning with the number 1, as in the example of 175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W.[3]

Transactions

Bitcoins contain the current owner’s wallet address. Users can create as many wallets as they wish. When a bitcoin belonging to user A is transferred to user B, then A’s ownership over that bitcoin is relinquished by adding B’s address to it and signing the result with the private key that is associated with A’s address.[4] Because of the asymmetric cryptographic method, nobody else can grant this signature, and the private key cannot be determined based on the signed bitcoin.[Notes 1] The resulting bitcoin is broadcast in a message, the transaction, on the peer-to-peer network. The rest of the network nodes validate the cryptographic signatures and the amounts of the transaction before accepting it.[5]

Block-chain and confirmations

The main chain (black) consists of the longest series of blocks from the genesis block (green) to the current block. Orphan blocks (grey) exist outside of the main chain.

To prevent double-spending, the network implements what Nakamoto describes as a peer-to-peer distributed timestamp server, which assigns sequential identifiers to each transaction, which are then hardened against modification using the idea of chained proofs of work (shown in the Bitcoin client as confirmations). In his white paper, Nakamoto wrote: “we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions.”[1] Any time a transaction is made, it immediately starts out labeled as unconfirmed. The confirmation status is reflective of the likelihood that the transaction could be successfully reversed in the event of a deliberate attempt to do so. Any transaction broadcast to other nodes does not become confirmed until acknowledged in a collectively maintained timestamped-list of all known transactions, the block chain. In particular, each generating node collects all unacknowledged transactions it knows of in a file known as a block,[6] which references all recent transactions as well as the previous valid block known to that node. It then appends a nonce value to this block which is essentially an integer number and computes the SHA-256 cryptographic hash of the block and the appended nonce value. It looks for a nonce that produces a hash that starts with a given number of zero bits. Because the hash function is not reversible, finding such a nonce is hard and requires on average a predictable amount of repetitious trial and error. When a node finds such a solution, it announces it to the rest of the network. Peers receiving the new solved block validate it by computing the hash and checking that it really starts with the given number of zero bits. Then they accept it and add it to the chain. When a transaction is first acknowledged in a block, it receives one confirmation. The transaction itself is only acknowledged once, but blocks themselves are acknowledged repeatedly as time passes and the chain grows. Each time that first block is acknowledged by future blocks, the transaction is considered to have received another confirmation. After six confirmations, the Bitcoin client switches from showing “unconfirmed” to “confirmed”. Although a transaction could be considered “confirmed” after a single confirmation, the client avoids reporting it as such until several further confirmations to ensure that it is overwhelmingly likely that the transactions are part of the main block chain rather than an orphaned one, and more importantly, practically impossible to reverse. Eventually, the block-chain contains the cryptographic ownership history of all coins from their creator-address to their current owner-address.[7] Therefore, if a user attempts to reuse coins he already spent, the network rejects the transaction. The whole history of transactions must be stored inside the block chain database, which grows constantly as new records are added and never removed. By design, some but not all users need the entire database to use Bitcoin – some users only need the portion of the database that pertains to the coins they own or might receive in the future. Presently, the database is manageable enough (less than 600 MB as of July 2011) that all users of the Bitcoin software receive the entire database over the peer-to-peer network after running the software the first time. Nakamoto conceived that as the database became larger, applications for Bitcoin without the entire database on each user’s computer would be desirable. To enable this, a Merkle treeis used to organize the transaction records in such a way that a future Bitcoin client can locally delete portions of its own database it knows it will never need, such as earlier transaction records of bitcoins that have changed ownership multiple times, while keeping the cryptographic integrity of the remaining database intact.

Generation

To make sybil attacks against the block-chain consensus practically infeasible, the generation of a Bitcoin block requires finding the solution to a difficult cryptographic proof-of-work problem. Nodes that attempt to generate blocks are called “miners.” They repeatedly try solving instances of the problem through trial and error, each attempt having an equal and very low prior chance of being a correct solution. The probability of success is adjusted automatically by the protocol[citation needed] in steps after 2016 blocks have been created to regulate the rate of new block creation. As a result, the rate at which a given user solves blocks depends on the computing power that user contributes to the network relative to the computing power of all nodes combined.[8] All newly announced blocks are validated by all Bitcoin nodes to ensure that they conform to the protocol rules before they are accepted, added to the block chain, and forwarded on. Because block solutions arise out of an independent random process, block creation by the Bitcoin network can be described as a Poisson process. The protocol adjusts the problem difficulty so that the distribution mean is λ = 2016 blocks per two weeks, so there are roughly ten minutes between the creation of new blocks on average (the wait times between events in a Poisson process follow an exponential distribution). The difficulty updates happen every 2016 blocks. The difficulty is set to the value that would have most likely caused the prior 2016 blocks to take two weeks to complete, given the same computational effort (according to the timestamps recorded in the blocks).[9] All nodes perform and enforce the same difficulty calculation. In addition to the pending transactions confirmed in the block, a generating node adds a “generate” transaction, which awards new bitcoins to the operator of the node that generated the block. The payout of this generated transaction is set according to the inflation schedule programmed into the protocol. The process of solving blocks is often referred to as mining, as in gold mining, in reference to the coins brought into existence by the generate transactions.[1] The “miner” that generates a block also receives the surplus from any transactions that have input value in excess of the output value, effectively a transaction fee that provides an incentive to give a transaction priority for faster confirmation. The proof-of-work problems are especially suitable to GPUs and specialized hardware. Because of the growing computing power behind the system driving the difficulty to high levels, individual contributors with typical CPUs are no longer likely to solve a block on their own but can still receive small portion of the bitcoins generated in a new block by contributing their processing power to a mining pool.[10] This increased difficulty makes it cost prohibitive for an attacker to perform double-spending attacks so it is beneficial to the system. The number of Bitcoins created per block is never more than 50 BTC, and the awards are programmed to decrease over time towards zero, such that no more than 21 million will ever exist.[11] As this payout decreases, the motive for users to run block-generating nodes is expected to change to earning transaction fees, funding from supporting auxiliary block-chains,[12]and simply to improve the security of the public Bitcoin infrastructure they depend on.

Transaction fees

Miners have no obligation to include transactions in the blocks they try to solve. A transaction fee can be associated with any transaction, giving miners an incentive to put the transaction in a block, as miners collect the transaction fees associated with all transactions included in blocks they solve. Very small transactions, or those that use relatively new coins, have low “priority” and may be assessed a transaction fee to reduce spam. As of version 0.3.23 of the official bitcoin client, the minimum transaction fee for low priority transactions is 0.0005 BTC.

Anonymity

Because transactions are broadcast to the entire network, they are inherently public. Unlike regular banking, which preserves customer privacy by keeping transaction records private, transactional anonymity is accomplished in Bitcoin by keeping the ownership of addresses private, while at the same time publishing all transactions. As an example, if Alice sends 123.45 BTC to Bob, a public record is created that allows anyone to see that 123.45 was sent from one address to another. However, unless Alice or Bob make their ownership of these addresses publicly known in some way, it is difficult for anyone else to connect the transaction with them. However, if an address is connected to a user at any point it can be possible to follow back a series of transactions because each participant likely knows who paid them and may disclose that information on request or under duress.[13][14][15] Jeff Garzik, one of the Bitcoin developers, explained as such in an interview and concluded that “attempting major illicit transactions with bitcoin, given existing statistical analysis techniques deployed in the field by law enforcement, is pretty damned dumb”.[16][17] He also said “We are working with the government to make sure indeed the long arm of the government can reach Bitcoin… the only way bitcoins are gonna be successful is working with regulation and with the government”[18]

Client

Bitcoin software running under Windows 7

People interact with bitcoin using a “wallet,” which may be either stored on their computer by the bitcoin software or hosted on a third-party website. The wallet shows users their available bitcoin balance, transaction history, and the collection of bitcoin addresses they may use to send and receive bitcoins with other users. Because all transactions are added to the transaction log in the bitcoin block-chain, which is a distributed database formed by all the bitcoin participants, a user’s bitcoin software does not need to be running for that user to receive bitcoins. Bitcoin payments are normally displayed to the receiver near-instantly, but they are initially displayed as unconfirmed, because the bitcoin system cannot yet assure that the transaction is permanent. A transaction may be invalidated due to conflicting transactions (such as the same bitcoins being sent to two different receivers). This may happen if a sender malfunctions, or if a sender intentionally attempts to defraud a receiver. When the bitcoin network processes the transaction, an increasing number of confirmations are added every time the chain containing the transaction is extended. Eventually, the bitcoin software displays the transaction as confirmed. The process of confirming a transaction is accomplished by solving a computationally difficult proof-of-work problem.[19] The problem is based on data from the transactions that must be confirmed, as well as the entire previous transaction history. This process makes it infeasible for an attacker to rewrite the transaction history without having more computing power than the rest of the bitcoin system. Nodes that process blocks of transactions are rewarded by receiving a programmed amount of bitcoin, which arises “out of thin air,” as well as any transaction fees associated with the transactions they process. This compensates the operators of these systems for their computational work used to secure bitcoin transactions against reversal, and also accomplishes the initial wealth distributionfor the bitcoin system as a whole. The difficulty of the proof-of-work problems is automatically adjusted by the system so that the average time between new blocks being awarded is ten minutes. All participating systems check the validity of every transaction and of every block and ignore any that violate the rules, such as blocks that bring the wrong amount of new bitcoin into existence, or transactions that would involve one sender spending the same bitcoin twice.

Alternative implementations

Besides the original C++ Bitcoin client, there is an open source implementation of the Bitcoin protocol in Java called BitCoinJ.[20] Alternative user interfaces include bitcoin-js-remote, a JavaScript web user interface for Bitcoin wallets,[21] as well as Spesmilo, a PySide interface more open to a diversity of users, which can run independently of an external wallet.[22]

Currency

As of August 2011, there were over 7.1 million bitcoins in existence.[23] This figure is algorithmically determined as described in Nakamoto’s whitepaper. Because by definition the only spendable Bitcoins in existence are those represented in the block chain database passed around on the peer to peer network, the number is not only easy to determine, but can be quickly determined with precision by all participants.[1] Anyone can view the block-chain and observe transactions in real-time.[24] Currency exchanges also exist between bitcoins and other real and virtual currencies, such as the US dollar and the Linden Dollar.[25]

Monetary differences

Expected future bitcoin supply (for 10-minute issuance frequency).

Unlike conventional fiat currency, Bitcoin has no centralized issuing authority.[5][26][27] There is a limited controlled expansion of the monetary base hardcoded in the Bitcoin software.[citation needed] Transfers are facilitated directly without the use of a centralized financial processor between nodes. This type of transaction makes chargebacks unlikely.[28] Bitcoin transactions can represent many kinds of operations such as pure peer-to-peer escrow and deposits but user interface software for this advanced functionality is currently underdeveloped.[citation needed] The Bitcoin client broadcasts transactions to surrounding nodes, which propagate them across the network. Corrupted or invalid transactions are rejected by legitimate clients. Transactions are free; however, an optional, often necessary, fee may be paid to other nodes to prioritize transaction processing.[citation needed] The total number of bitcoins is programmed to approach 21 million over time.[5] The money supply is programmed to grow as a geometric series every 210,000 blocks (roughly every 4 years); by 2013 half of the total supply will be generated, and by 2017, 3/4 will be generated. To ensure sufficient granularity of the money supply, bitcoins are divisible down to eight decimal places (a total of 2.1 × 1015 or 2.1 quadrillion units).[11] The diminishing geometric expansion combined with the expansion of Bitcoin users provides an incentive for early adopters, who can obtain bitcoin at preferential exchange rates. Bitcoin’s design allows for pseudonymous ownership and transfers. Because of this, Bitcoin has anonymity properties weaker than cash but stronger than traditional electronic payment systems[citation needed]. Although the complete history of every bitcoin transaction is public, it is not possible in general [13] to associate bitcoin identities with real-life identities. This property makes bitcoin transactions attractive to some sellers of illegal products.[29][30]