From 9d7ef19a37720ea185a310f00c8750b6df973031 Mon Sep 17 00:00:00 2001 From: edeykholt Date: Wed, 23 Jul 2014 00:07:20 -0700 Subject: [PATCH 01/40] Update ch01.asciidoc Clarifications and grammar suggestions --- ch01.asciidoc | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/ch01.asciidoc b/ch01.asciidoc index 74c3c7e7..22285000 100644 --- a/ch01.asciidoc +++ b/ch01.asciidoc @@ -7,9 +7,9 @@ Bitcoin is collection of concepts and technologies that form the basis of a digi Users can transfer bitcoin over the network to do just about anything that can be done with conventional currencies, such as buy and sell goods, send money to people or organizations, or extend credit. Bitcoin technology includes features that are based on encryption and digital signatures to ensure the security of the bitcoin network. Bitcoins can be purchased, sold and exchanged for other currencies at specialized currency exchanges. Bitcoin in a sense is the perfect form of money for the Internet because it is fast, secure, and borderless. -Unlike traditional currencies, bitcoins are entirely virtual. There are no physical coins or even digital coins per se. The coins are implied in transactions which transfer value from sender to recipient. Users of bitcoin own keys which allow them to prove ownership of transactions in the bitcoin network, unlocking the value to spend it and transfer it to a new recipient. Those keys are stored in a digital wallet on each user’s computer. Possession of the key that unlocks a transaction is the only prerequisite to spending bitcoins, putting the control entirely in the hands of each user. +Unlike traditional currencies, bitcoins are entirely virtual. There are no physical coins or even digital coins per se. The coins are implied in transactions which transfer value from sender to recipient. Users of bitcoin own keys which allow them to prove ownership of transactions in the bitcoin network, unlocking the value to spend it and transfer it to a new recipient. Those keys are often stored in a digital wallet on each user’s computer. Possession of the key that unlocks a transaction is the only prerequisite to spending bitcoins, putting the control entirely in the hands of each user. -Bitcoin is a fully-distributed, peer-to-peer system. As such there is no "central" server or point of control. Bitcoins are created through a process called "mining", which involves looking for a solution to a difficult problem. Any participant in the bitcoin network (i.e. any device running the full bitcoin protocol stack) may operate as a miner, using their computer's processing power to attempt to find solutions to this problem. Every 10 minutes on average, a new solution is found by someone who then is able to validate the transactions of the past 10 minutes and is rewarded with brand new bitcoins. Essentially, the currency issuance function of a central bank and the clearing function are de-centralized and turned into a global competition. +Bitcoin is a fully-distributed, peer-to-peer system. As such there is no "central" server or point of control. Bitcoins are created through a process called "mining", which involves looking for a solution to a difficult problem. Any participant in the bitcoin network (i.e., any device running the full bitcoin protocol stack) may operate as a miner, using their computer's processing power to attempt to find solutions to this problem. Every 10 minutes on average, a new solution is found by someone who then is able to validate the transactions of the past 10 minutes and is rewarded with brand new bitcoins. Essentially, bitcoin mining de-centralizes the currency-issuance and clearing functions of a central bank and removes the need for any central bank with this global competition. The bitcoin protocol includes built-in algorithms that regulate the mining function across the network. The difficulty of the problem that miners must solve is adjusted dynamically so that, on average, someone finds a correct answer every 10 minutes regardless of how many miners (and CPUs) are working on the problem at any moment. The protocol also halves the rate at which new bitcoins are created every 4 years, and limits the total number of bitcoins that will be created to a fixed total of 21 million coins. The result is that the number of bitcoins in circulation closely follows an easily predictable curve that reaches 21 million by the year 2140. As a result, the bitcoin currency is deflationary and cannot be inflated by "printing" new money above and beyond the expected issuance rate. @@ -24,18 +24,18 @@ The emergence of viable digital money is closely linked to developments in crypt 1. Can I trust the money is authentic and not counterfeit? 2. Can I be sure that no one else can claim that this money belongs to them and not me? (aka the “double-spend” problem) -Issuers of paper money are constantly battling the counterfeiting problem by using increasingly sophisticated papers and printing technology. Physical money addresses the double-spend issue easily because the same paper note cannot be in two places at once. Of course, conventional money is also often stored and transmitted digitally. In this case the counterfeiting and double-spend issues are handled by clearing all electronic transactions through central authorities that have a global view of the currency in circulation. For digital money, which cannot take advantage of esoteric inks or holographic strips, cryptography provides the basis for trusting the legitimacy of a user’s claim to value. Specifically, cryptographic digital signatures enable a user to sign a digital asset or transaction proving the ownership of that asset. With the appropriate architecture, digital signatures also can be used to address the double-spend issue. +Issuers of paper money are constantly battling the counterfeiting problem by using increasingly sophisticated papers and printing technology. Physical money addresses the double-spend issue easily because the same paper note cannot be in two places at once. Of course, conventional money is also often stored and transmitted digitally. In this case the counterfeiting and double-spend issues are handled by clearing all electronic transactions through central authorities that have a global view of the currency in circulation. For digital money, which cannot take advantage of esoteric inks or holographic strips, cryptography provides the basis for trusting the legitimacy of a user’s claim to value. Specifically, cryptographic digital signatures enable a user to sign a digital asset or transaction, producing a signature which proves ownership of that asset. With the appropriate architecture, digital signatures also can be used to address the double-spend issue. When cryptography started becoming more broadly available and understood in the late 1980s, many researchers began trying to use cryptography to build digital currencies. These early digital currency projects issued digital money, usually backed by a national currency or precious metal such as gold. -While these earlier digital currencies worked, they were centralized and as a result they were easy to attack by governments and hackers. Early digital currencies used a central clearinghouse to settle all transactions at regular intervals, just like a traditional banking system. Unfortunately, in most cases these nascent digital currencies were targeted by worried governments and eventually litigated out of existence. Some failed in spectacular crashes when the parent company liquidated abruptly. To be robust against intervention by antagonists, whether they are legitimate governments or criminal elements, a digital currency is needed to avoid the use of a central currency issuer or transaction clearing authority that could be a single point of attack. Bitcoin is such a system, completely de-centralized by design, lacking any central authority or point of control that can be attacked or corrupted. +While these earlier digital currencies worked, they were centralized and as a result they were easy to attack by governments and hackers. Early digital currencies used a central clearinghouse to settle all transactions at regular intervals, just like a traditional banking system. Unfortunately, in most cases these nascent digital currencies were targeted by worried governments and eventually litigated out of existence. Some failed in spectacular crashes when the parent company liquidated abruptly. To be robust against intervention by antagonists, whether they are legitimate governments or criminal elements, a new digital currency was needed to avoid the use of a central currency issuer or transaction clearing authority that could be a single point of attack. Bitcoin is such a system, completely de-centralized by design, and free of any central authority or point of control that can be attacked or corrupted. Bitcoin represents the culmination of decades of research in cryptography and distributed systems and includes four key innovations brought together in a unique and powerful combination. Bitcoin consists of: * A de-centralized peer-to-peer network (the bitcoin protocol); * A public transaction ledger (the blockchain); * A de-centralized mathematical and deterministic currency issuance (distributed mining), and; -* A de-centralized transaction verification system (transaction script) +* A de-centralized transaction verification system (transaction script). Bitcoin was invented in 2008 by Satoshi Nakamoto with the publication of a paper titled "Bitcoin: A Peer-to-Peer Electronic Cash System". Satoshi Nakamoto combined several prior inventions such as b-money and HashCash to create a completely de-centralized electronic cash system that does not rely on a central authority for currency issuance or settlement and validation of transactions. The key innovation was to use a Proof-Of-Work algorithm to conduct a global "election" every 10 minutes, allowing the de-centralized network to arrive at _consensus_ about the state of transactions. This elegantly solves the issue of double-spend where a single currency unit can be spent twice. Previously, the double-spend problem was a weakness of digital currency and was addressed by clearing all transactions through a central clearinghouse. @@ -46,7 +46,7 @@ Satoshi Nakamoto withdrew from the public in April of 2011, leaving the responsi .A Solution To a Distributed Computing Problem **** -Satoshi Nakamoto's invention is also a practical solution to a previously unsolved problem in distributed computing, known as the Byzantine Generals problem. Briefly, the problem consists of trying to agree on a course of action by exchanging information over an unreliable and potentially compromised network. Satoshi Nakamoto's solution, which uses the concept of Proof-of-Work to achieve consensus without a central trusted authority represents a breakthrough in distributed computing science and has wide applicability beyond currency. It can be used to achieve consensus on decentralized networks for provably-fair elections, lotteries, asset registries, digital notarization and more. +Satoshi Nakamoto's invention is also a practical solution to a previously unsolved problem in distributed computing, known as the Byzantine Generals' Problem. Briefly, the problem consists of trying to agree on a course of action by exchanging information over an unreliable and potentially compromised network. Satoshi Nakamoto's solution, which uses the concept of Proof-of-Work to achieve consensus without a central trusted authority represents a breakthrough in distributed computing science and has wide applicability beyond currency. It can be used to achieve consensus on decentralized networks for provably-fair elections, lotteries, asset registries, digital notarization and more. **** @@ -80,7 +80,7 @@ Each of the stories above is based on real people and real industries that are c === Getting Started -To join the bitcoin network and start using the currency, all a user has to do is download an application. Since bitcoin is a standard, there are many implementations of the bitcoin client software. There is also a "reference implementation", also known as the Satoshi Client, which is managed as an open source project by a team of developers and is derived from the original implementation written by Satoshi Nakamoto. +To join the bitcoin network and start using the currency, all a user has to do is download an application or use a web application. Since bitcoin is a standard, there are many implementations of the bitcoin client software. There is also a "reference implementation", also known as the Satoshi Client, which is managed as an open source project by a team of developers and is derived from the original implementation written by Satoshi Nakamoto. The three primary forms of bitcoin clients are: @@ -124,7 +124,7 @@ The most important part of this screen is Alice's _bitcoin address_. Like an ema [TIP] ==== -Bitcoin addresses start with the digit "1". Like email addresses, they can be shared with other bitcoin users who can use them to send bitcoin directly to your wallet. Unlike email addresses, you can create new addresses as often as you like, all of which will direct funds to your wallet. A wallet is simply a collection of addresses and the keys that unlock the funds within. There is practically no limit to the number of addresses a user can create. +Bitcoin addresses start with the digit "1" or "3". Like email addresses, they can be shared with other bitcoin users who can use them to send bitcoin directly to your wallet. Unlike email addresses, you can create new addresses as often as you like, all of which will direct funds to your wallet. A wallet is simply a collection of addresses and the keys that unlock the funds within. There is practically no limit to the number of addresses a user can create. ==== Alice is now ready to start using her new bitcoin web-wallet. @@ -132,7 +132,7 @@ Alice is now ready to start using her new bitcoin web-wallet. [[getting_first_bitcoin]] ==== Getting your first bitcoins -It is not possible to buy bitcoins at a bank or foreign exchange kiosks at this time. It is not possible to use a credit card to buy bitcoins, either. As of 2014, it is still quite difficult to acquire bitcoins in most countries. There are a number of specialized currency exchanges where you can buy and sell bitcoin in exchange for a local currency. These operate as web-based currency markets and include: +It is not possible to buy bitcoins at a bank or foreign exchange kiosks at this time. It is not possible to use a credit card to buy bitcoins, either. As of 2014, it is still quite difficult to acquire bitcoins in most countries. A small number of bitcoin Automated Teller Machines are starting to appear around the world to convert national currencies to and from bitcoin. There are a number of specialized currency exchanges where you can buy and sell bitcoin in exchange for a local currency. These operate as web-based currency markets and include: * Bitstamp (bitstamp.net), a European currency market that supports several currencies including euros (EUR) and US dollars (USD) via wire transfer * Coinbase (coinbase.com), a US-based currency market in California that supports US dollar exchange to and from bitcoin. Coinbase can connect to US checking accounts via the ACH system. @@ -151,7 +151,7 @@ Alice was introduced to bitcoin by a friend and so she has an easy way of gettin ==== Sending and receiving bitcoins -Alice has created her bitcoin web-wallet and she is now ready to receive funds. Her web-wallet application generated a bitcoin address and the corresponding key (an elliptic curve private key, described in more detail in <>). At this point, her bitcoin address is not known to the bitcoin network or "registered" with any part of the bitcoin system. Her bitcoin address is simply a number that corresponds to a key that she can use to control access to the funds. There is no account or association between that address and an account. Until the moment this address is referenced as the recipient of value in a transaction posted on the bitcoin ledger (the blockchain), it is simply part of the vast number of possible addresses that are "valid" in bitcoin. Once it has been associated with a transaction, it becomes part of the known addresses in the network and anyone can check its balance on the public ledger. +Alice has created her bitcoin web-wallet and she is now ready to receive funds. Her web-wallet application randomly generated a bitcoin address together with its corresponding key (an elliptic curve private key, described in more detail in <>). At this point, her bitcoin address is not known to the bitcoin network or "registered" with any part of the bitcoin system. Her bitcoin address is simply a number that corresponds to a key that she can use to control access to the funds. There is no account or association between that address and an account. Until the moment this address is referenced as the recipient of value in a transaction posted on the bitcoin ledger (the blockchain), it is simply part of the vast number of possible addresses that are "valid" in bitcoin. Once it has been associated with a transaction, it becomes part of the known addresses in the network and anyone can check its balance on the public ledger. Alice meets her friend Joe who introduced her to bitcoin at a local restaurant so they can exchange some US dollars and put some bitcoins into her account. She has brought a print out of her address and the QR code as shown on the home page of her web-wallet. There is nothing sensitive from a security perspective about the bitcoin address. It can be posted anywhere without risking the security of her account and it can be changed by creating a new address at any time. Alice wants to convert just $10 US dollars into bitcoin, so as not to risk too much money on this new technology. She gives Joe a $10 bill and the printout of her address so that Joe can send her the equivalent amount of bitcoin. @@ -187,5 +187,5 @@ If Alice has a smartphone or laptop with her, she will also be able to see the t At first, Alice's address will show the transaction from Joe as "Unconfirmed". This means that the transaction has been propagated to the network but has not yet been included in the bitcoin transaction ledger, known as the blockchain. To be included, the transaction must be "picked up" by a miner and included in a block of transactions. Once a miner has discovered a solution to the Proof-of-Work algorithm for this block (in approximately 10 minutes), the transactions within the block will be accepted as "confirmed" by the network and can be spent. The transaction is seen by all instantly, but it is only "trusted" by all when it is included in a newly mined block. The more blocks mined after that block, the more trusted it is, as more and more computation is "piled" on top of it. **** -Alice is now the proud owner of 0.10 bitcoin which she can spend. In the next chapter we will look at her first purchase with bitcoin and examine the underlying transaction and propagation technologies in more detail. +Alice is now the proud owner of 0.10 bitcoin, which she can spend anywhere in the world. In the next chapter we will look at her first purchase with bitcoin and examine the underlying transaction and propagation technologies. From 5eed7fe5096846287f36ee5a3cca9c23b3dbb4ba Mon Sep 17 00:00:00 2001 From: edeykholt Date: Wed, 23 Jul 2014 00:31:43 -0700 Subject: [PATCH 02/40] Update ch01.asciidoc not "remove" but "replace" --- ch01.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch01.asciidoc b/ch01.asciidoc index 22285000..d7fa9303 100644 --- a/ch01.asciidoc +++ b/ch01.asciidoc @@ -9,7 +9,7 @@ Users can transfer bitcoin over the network to do just about anything that can b Unlike traditional currencies, bitcoins are entirely virtual. There are no physical coins or even digital coins per se. The coins are implied in transactions which transfer value from sender to recipient. Users of bitcoin own keys which allow them to prove ownership of transactions in the bitcoin network, unlocking the value to spend it and transfer it to a new recipient. Those keys are often stored in a digital wallet on each user’s computer. Possession of the key that unlocks a transaction is the only prerequisite to spending bitcoins, putting the control entirely in the hands of each user. -Bitcoin is a fully-distributed, peer-to-peer system. As such there is no "central" server or point of control. Bitcoins are created through a process called "mining", which involves looking for a solution to a difficult problem. Any participant in the bitcoin network (i.e., any device running the full bitcoin protocol stack) may operate as a miner, using their computer's processing power to attempt to find solutions to this problem. Every 10 minutes on average, a new solution is found by someone who then is able to validate the transactions of the past 10 minutes and is rewarded with brand new bitcoins. Essentially, bitcoin mining de-centralizes the currency-issuance and clearing functions of a central bank and removes the need for any central bank with this global competition. +Bitcoin is a fully-distributed, peer-to-peer system. As such there is no "central" server or point of control. Bitcoins are created through a process called "mining", which involves looking for a solution to a difficult problem. Any participant in the bitcoin network (i.e., any device running the full bitcoin protocol stack) may operate as a miner, using their computer's processing power to attempt to find solutions to this problem. Every 10 minutes on average, a new solution is found by someone who then is able to validate the transactions of the past 10 minutes and is rewarded with brand new bitcoins. Essentially, bitcoin mining de-centralizes the currency-issuance and clearing functions of a central bank and replaces the need for any central bank with this global competition. The bitcoin protocol includes built-in algorithms that regulate the mining function across the network. The difficulty of the problem that miners must solve is adjusted dynamically so that, on average, someone finds a correct answer every 10 minutes regardless of how many miners (and CPUs) are working on the problem at any moment. The protocol also halves the rate at which new bitcoins are created every 4 years, and limits the total number of bitcoins that will be created to a fixed total of 21 million coins. The result is that the number of bitcoins in circulation closely follows an easily predictable curve that reaches 21 million by the year 2140. As a result, the bitcoin currency is deflationary and cannot be inflated by "printing" new money above and beyond the expected issuance rate. From a6936290eca97714bcaf260ac7b8ad20194c567b Mon Sep 17 00:00:00 2001 From: Michalis Kargakis Date: Wed, 23 Jul 2014 13:56:46 +0300 Subject: [PATCH 03/40] Add info about btcd --- ch03.asciidoc | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/ch03.asciidoc b/ch03.asciidoc index 88bc1330..b456417a 100644 --- a/ch03.asciidoc +++ b/ch03.asciidoc @@ -1195,3 +1195,51 @@ With deterministic keys we can generate and re-generate thousands of keys, all d The sx toolkit offers many useful commands for encoding and decoding addresses, converting to and from different formats and representations. Use them to explore the various formats such as base58, base58check, hex etc. ==== +==== btcd +btcd is a full node bitcoin implementation written in Go. It currently properly downloads, validates, and serves the block chain using the exact rules (including bugs) for block acceptance as the reference implementation, bitcoind. It also properly relays newly mined blocks, maintains a transaction pool, and relays individual transactions that have not yet made it into a block. It ensures all individual transactions admitted to the pool follow the rules required into the block chain and also includes the vast majority of the more strict checks which filter transactions based on miner requirements ("standard" transactions). + +One key difference between btcd and bitcoind is that btcd does not include wallet functionality and this was a very intentional design decision. This means you can't actually make or receive payments directly with btcd. That functionality is provided by the btcwallet and btcgui projects which are both under active development. + +===== Installing btcd + +To install btcd, for Windows, download and run the msi available at https://github.com/conformal/btcd/releases or run the following command on Linux, assuming you already have installed the Go language: + +---- +$ go get github.com/conformal/btcd/... +---- + +===== Controlling btcd + +btcd has a number of configuration options, which can be viewed by running: + +---- +$ btcd --help +---- + +btcd comes prepacked with some goodies such as btcctl, a command line utility that can be used to both control and query btcd via RPC. btcd does not enable its RPC server by default; you must configure at minimum both an RPC username and password: + +* btcd.conf configuration file +---- +[Application Options] +rpcuser=myuser +rpcpass=SomeDecentp4ssw0rd +---- +* btcctl.conf configuration file +---- +[Application Options] +rpcuser=myuser +rpcpass=SomeDecentp4ssw0rd +---- + +Or if you want to override the configuration files from the command line: + +---- +$ btcd -u myuser -P SomeDecentp4ssw0rd +$ btcctl -u myuser -P SomeDecentp4ssw0rd +---- + +For a list of available options, run: + +---- +$ btcctl --help +---- From 5966a9ecb8d56e15d691ed0c531e62fd4714498f Mon Sep 17 00:00:00 2001 From: Michalis Kargakis Date: Thu, 24 Jul 2014 22:35:08 +0300 Subject: [PATCH 04/40] Various fixes --- ch07.asciidoc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ch07.asciidoc b/ch07.asciidoc index aa931c41..340c4c1a 100644 --- a/ch07.asciidoc +++ b/ch07.asciidoc @@ -16,7 +16,7 @@ One way to think about the blockchain is like layers in a geological formation, === Structure of a Block -A block is a container data structure that aggregates transactions for inclusion in the public ledger, the blockchain. The block is made of a header, containing metadata, followed by a long list of transactions that make up the bulk of it's size. The block header is 80 bytes, whereas the average transaction is at least 250 bytes and the average block contains more than 500 transactions. A complete block, with all transactions, is therefore 1000 times larger than the block header. +A block is a container data structure that aggregates transactions for inclusion in the public ledger, the blockchain. The block is made of a header, containing metadata, followed by a long list of transactions that make up the bulk of its size. The block header is 80 bytes, whereas the average transaction is at least 250 bytes and the average block contains more than 500 transactions. A complete block, with all transactions, is therefore 1000 times larger than the block header. [[block_structure]] .The structure of a block @@ -47,7 +47,7 @@ The block header consists of three sets of block metadata. First, there is a ref | 4 bytes | Nonce | A counter used for the proof-of-work algorithm |======= -The Nonce, Difficulty Target and Timestamp are used in the mining process and will be discussed in more detail in <>. +The Nonce, Difficulty Target, and Timestamp are used in the mining process and will be discussed in more detail in <>. [[block_hash]] === Block Identifiers - Block Header Hash and Block Height @@ -67,7 +67,7 @@ A block's _block hash_ always identifies a single block uniquely. A block also a === The Genesis Block -The first block in the blockchain is called the _genesis block_ and was created in 2009. It is the "common ancestor" of all the blocks in the blockchain, meaning that if you start at any block and follow the chain backwards in time you will eventually arrive at the _genesis block_. +The first block in the blockchain is called the _genesis block_ and was created in 2009. It is the "common ancestor" of all the blocks in the blockchain, meaning that if you start at any block and follow the chain backwards in time, you will eventually arrive at the _genesis block_. Every node always starts with a blockchain of at least one block because the genesis block is statically encoded within the bitcoin client software, such that it cannot be altered. Every node always "knows" the genesis block's hash and structure, the fixed time it was created and even the single transaction within. Thus, every node has the starting point for the blockchain, a secure "root" from which to build a trusted blockchain. @@ -108,7 +108,7 @@ The genesis block contains a hidden message within it. The coinbase transaction Bitcoin nodes maintain a local copy of the blockchain, starting at the genesis block. The local copy of the blockchain is constantly updated as new blocks are found and used to extend the chain. As a node receives incoming blocks from the network, it will validate these blocks and then link them to the existing blockchain. To establish a link, a node will examine the incoming block header and look for the "previous block hash". -Let's assume for example that a node has 277,314 blocks in the local copy of the blockchain. The last block the node knows about is block 277,314, with a block header hash of +00000000000000027e7ba6fe7bad39faf3b5a83daed765f05f7d1b71a1632249+. +Let's assume, for example, that a node has 277,314 blocks in the local copy of the blockchain. The last block the node knows about is block 277,314, with a block header hash of +00000000000000027e7ba6fe7bad39faf3b5a83daed765f05f7d1b71a1632249+. The bitcoin node then receives a new block from the network, which it parses as follows: ---- @@ -149,7 +149,7 @@ Merkle trees are used in bitcoin to summarize all the transactions in a block, p When N data elements are hashed and summarized in a Merkle Tree, you can check to see if any one data element is included in the tree with at most +2*log~2~(N)+ calculations, making this a very efficient data structure. -The merkle tree is constructed bottom-up. In the example below, we start with four transactions A, B, C and D, which form the _leaves_ of the Merkle Tree, shown in the diagram at the bottom. The transactions are not stored in the merkle tree, rather their data is hashed and the resulting hash is stored in each leaf node as H~A~, H~B~, H~C~ and H~D~: +The merkle tree is constructed bottom-up. In the example below, we start with four transactions A, B, C and D, which form the _leaves_ of the Merkle Tree, shown in the diagram at the bottom. The transactions are not stored in the merkle tree, rather their data are hashed and the resulting hash is stored in each leaf node as H~A~, H~B~, H~C~ and H~D~: +H~A~ = SHA256(SHA256(Transaction A))+ @@ -163,7 +163,7 @@ The process continues until there is only one node at the top, the node known as .Calculating the nodes in a Merkle Tree image::images/MerkleTree.png["merkle_tree"] -Since the merkle tree is a binary tree, it needs an even number of leaf nodes. If there is an odd number of transactions to summarize, the last transaction hash is duplicated to create an even number of leaf nodes, also known as a _balanced tree_. This is shown in the example below, where transaction C is duplicated: +Since the merkle tree is a binary tree, it needs an even number of leaf nodes. If there is an odd number of transactions to summarize, the last transaction hash will be duplicated to create an even number of leaf nodes, also known as a _balanced tree_. This is shown in the example below, where transaction C is duplicated: [[merkle_tree_odd]] .An even number of data elements, by duplicating one data element @@ -200,7 +200,7 @@ As you can see from the table above, while the block size increases rapidly, fro Merkle trees are used extensively by Simple Payment Verification nodes. SPV nodes don't have all transactions and do not download full blocks, just block headers. In order to verify that a transaction is included in a block, without having to download all the transactions in the block, they use an _authentication path_, or merkle path. -Consider for example an SPV node that is interested in incoming payments to an address contained in its wallet. The SPV node will establish a bloom filter on its connections to peers to limit the transactions received to only those containing addresses of interest. When a peer sees a transaction that matches the bloom filter, it will send that block using a +merkleblock+ message. The +merkleblock+ message contains the block header as well as a merkle path that links the transaction of interest to the merkle root in the block. The SPV node can use this merkle path to connect the transaction to the block and verify that the transaction is included in the block. The SPV node also uses the block header to link the block to the rest of the blockchain. The combination of these two links, between the transaction and block, and between the block and blockchain, proves that the transaction is recorded in the blockchain. All in all, the SPV node will have received less than a kilobyte of data for the block header and merkle path, an amount of data that is a thousand times less than a full block (about 1 megabyte currently) +Consider for example an SPV node that is interested in incoming payments to an address contained in its wallet. The SPV node will establish a bloom filter on its connections to peers to limit the transactions received to only those containing addresses of interest. When a peer sees a transaction that matches the bloom filter, it will send that block using a +merkleblock+ message. The +merkleblock+ message contains the block header as well as a merkle path that links the transaction of interest to the merkle root in the block. The SPV node can use this merkle path to connect the transaction to the block and verify that the transaction is included in the block. The SPV node also uses the block header to link the block to the rest of the blockchain. The combination of these two links, between the transaction and block, and between the block and blockchain, proves that the transaction is recorded in the blockchain. All in all, the SPV node will have received less than a kilobyte of data for the block header and merkle path, an amount of data that is more than a thousand times less than a full block (about 1 megabyte currently) From 2577657b5419f0fa194ffed46f46fd30fb16e6b1 Mon Sep 17 00:00:00 2001 From: "Minh T. Nguyen" Date: Thu, 24 Jul 2014 23:02:19 -0700 Subject: [PATCH 05/40] Undoing the digital signature part, as signature that produces a signature sounds unnecessary --- ch01.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch01.asciidoc b/ch01.asciidoc index d7fa9303..c7c6f38d 100644 --- a/ch01.asciidoc +++ b/ch01.asciidoc @@ -24,7 +24,7 @@ The emergence of viable digital money is closely linked to developments in crypt 1. Can I trust the money is authentic and not counterfeit? 2. Can I be sure that no one else can claim that this money belongs to them and not me? (aka the “double-spend” problem) -Issuers of paper money are constantly battling the counterfeiting problem by using increasingly sophisticated papers and printing technology. Physical money addresses the double-spend issue easily because the same paper note cannot be in two places at once. Of course, conventional money is also often stored and transmitted digitally. In this case the counterfeiting and double-spend issues are handled by clearing all electronic transactions through central authorities that have a global view of the currency in circulation. For digital money, which cannot take advantage of esoteric inks or holographic strips, cryptography provides the basis for trusting the legitimacy of a user’s claim to value. Specifically, cryptographic digital signatures enable a user to sign a digital asset or transaction, producing a signature which proves ownership of that asset. With the appropriate architecture, digital signatures also can be used to address the double-spend issue. +Issuers of paper money are constantly battling the counterfeiting problem by using increasingly sophisticated papers and printing technology. Physical money addresses the double-spend issue easily because the same paper note cannot be in two places at once. Of course, conventional money is also often stored and transmitted digitally. In this case the counterfeiting and double-spend issues are handled by clearing all electronic transactions through central authorities that have a global view of the currency in circulation. For digital money, which cannot take advantage of esoteric inks or holographic strips, cryptography provides the basis for trusting the legitimacy of a user’s claim to value. Specifically, cryptographic digital signatures enable a user to sign a digital asset or transaction proving the ownership of that asset. With the appropriate architecture, digital signatures also can be used to address the double-spend issue. When cryptography started becoming more broadly available and understood in the late 1980s, many researchers began trying to use cryptography to build digital currencies. These early digital currency projects issued digital money, usually backed by a national currency or precious metal such as gold. From e0983892717117029314f5135c741f281bb63257 Mon Sep 17 00:00:00 2001 From: "Minh T. Nguyen" Date: Thu, 24 Jul 2014 23:03:51 -0700 Subject: [PATCH 06/40] Reverting the mentioning of ATMs. While it's true, let's leave it to Andreas to update this chapter. We just finished half of 2014, and there is a lot that will change here in Bitcoin space. The previous sentence of using credit card is also already outdated --- ch01.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch01.asciidoc b/ch01.asciidoc index c7c6f38d..270731b0 100644 --- a/ch01.asciidoc +++ b/ch01.asciidoc @@ -132,7 +132,7 @@ Alice is now ready to start using her new bitcoin web-wallet. [[getting_first_bitcoin]] ==== Getting your first bitcoins -It is not possible to buy bitcoins at a bank or foreign exchange kiosks at this time. It is not possible to use a credit card to buy bitcoins, either. As of 2014, it is still quite difficult to acquire bitcoins in most countries. A small number of bitcoin Automated Teller Machines are starting to appear around the world to convert national currencies to and from bitcoin. There are a number of specialized currency exchanges where you can buy and sell bitcoin in exchange for a local currency. These operate as web-based currency markets and include: +It is not possible to buy bitcoins at a bank or foreign exchange kiosks at this time. It is not possible to use a credit card to buy bitcoins, either. As of 2014, it is still quite difficult to acquire bitcoins in most countries. There are a number of specialized currency exchanges where you can buy and sell bitcoin in exchange for a local currency. These operate as web-based currency markets and include: * Bitstamp (bitstamp.net), a European currency market that supports several currencies including euros (EUR) and US dollars (USD) via wire transfer * Coinbase (coinbase.com), a US-based currency market in California that supports US dollar exchange to and from bitcoin. Coinbase can connect to US checking accounts via the ACH system. From b970d2051c867b05f66db07027ecb34d63517e6e Mon Sep 17 00:00:00 2001 From: "Minh T. Nguyen" Date: Thu, 24 Jul 2014 23:06:44 -0700 Subject: [PATCH 07/40] Reverting some more text back to the original text --- ch01.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch01.asciidoc b/ch01.asciidoc index 270731b0..c9cd60c7 100644 --- a/ch01.asciidoc +++ b/ch01.asciidoc @@ -187,5 +187,5 @@ If Alice has a smartphone or laptop with her, she will also be able to see the t At first, Alice's address will show the transaction from Joe as "Unconfirmed". This means that the transaction has been propagated to the network but has not yet been included in the bitcoin transaction ledger, known as the blockchain. To be included, the transaction must be "picked up" by a miner and included in a block of transactions. Once a miner has discovered a solution to the Proof-of-Work algorithm for this block (in approximately 10 minutes), the transactions within the block will be accepted as "confirmed" by the network and can be spent. The transaction is seen by all instantly, but it is only "trusted" by all when it is included in a newly mined block. The more blocks mined after that block, the more trusted it is, as more and more computation is "piled" on top of it. **** -Alice is now the proud owner of 0.10 bitcoin, which she can spend anywhere in the world. In the next chapter we will look at her first purchase with bitcoin and examine the underlying transaction and propagation technologies. +Alice is now the proud owner of 0.10 bitcoin which she can spend. In the next chapter we will look at her first purchase with bitcoin and examine the underlying transaction and propagation technologies in more detail. From b4cb4da5de94a7687d779f12cadeb23ddb61ea1a Mon Sep 17 00:00:00 2001 From: "Minh T. Nguyen" Date: Thu, 24 Jul 2014 23:27:59 -0700 Subject: [PATCH 08/40] I believe 'data' is always treated singular. --- ch07.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch07.asciidoc b/ch07.asciidoc index 340c4c1a..650342d7 100644 --- a/ch07.asciidoc +++ b/ch07.asciidoc @@ -149,7 +149,7 @@ Merkle trees are used in bitcoin to summarize all the transactions in a block, p When N data elements are hashed and summarized in a Merkle Tree, you can check to see if any one data element is included in the tree with at most +2*log~2~(N)+ calculations, making this a very efficient data structure. -The merkle tree is constructed bottom-up. In the example below, we start with four transactions A, B, C and D, which form the _leaves_ of the Merkle Tree, shown in the diagram at the bottom. The transactions are not stored in the merkle tree, rather their data are hashed and the resulting hash is stored in each leaf node as H~A~, H~B~, H~C~ and H~D~: +The merkle tree is constructed bottom-up. In the example below, we start with four transactions A, B, C and D, which form the _leaves_ of the Merkle Tree, shown in the diagram at the bottom. The transactions are not stored in the merkle tree, rather their data is hashed and the resulting hash is stored in each leaf node as H~A~, H~B~, H~C~ and H~D~: +H~A~ = SHA256(SHA256(Transaction A))+ From 61344a9a77f67e59599e3383c6756272e7584174 Mon Sep 17 00:00:00 2001 From: Michalis Kargakis Date: Fri, 25 Jul 2014 20:42:30 +0300 Subject: [PATCH 09/40] pay-to-addr-script example code --- code/pay-to-addr-script.go | 47 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 code/pay-to-addr-script.go diff --git a/code/pay-to-addr-script.go b/code/pay-to-addr-script.go new file mode 100644 index 00000000..0cc3a35a --- /dev/null +++ b/code/pay-to-addr-script.go @@ -0,0 +1,47 @@ +package main + +import ( + "fmt" + "os" + + "github.com/conformal/btcnet" + "github.com/conformal/btcscript" + "github.com/conformal/btcutil" +) + +// This example demonstrates creating a script which pays to a bitcoin address. +// It also prints the created script hex and uses the DisasmString function to +// display the disassembled script. + +func main() { + addressStr := "12gpXQVcCL2qhTNQgyLVdCFG2Qs2px98nV" + + PayToAddrScript(addressStr) + // Output: + // Script Hex: 76a914128004ff2fcaf13b2b91eb654b1dc2b674f7ec6188ac + // Script Disassembly: OP_DUP OP_HASH160 128004ff2fcaf13b2b91eb654b1dc2b674f7ec61 OP_EQUALVERIFY OP_CHECKSIG +} + +func PayToAddrScript(addressStr string) { + // Parse the address to send the coins to into a btcutil.Address + // which is useful to ensure the accuracy of the address and determine + // the address type. It is also required for the upcoming call to + // PayToAddrScript. + address, err := btcutil.DecodeAddress(addressStr, &btcnet.MainNetParams) + + // Create a public key script that pays to the address. + script, err := btcscript.PayToAddrScript(address) + handle(err) + fmt.Printf("Script Hex: %x\n", script) + + disasm, err := btcscript.DisasmString(script) + handle(err) + fmt.Println("Script Disassembly:", disasm) +} + +func handle(err error) { + if err != nil { + fmt.Println(err) + os.Exit(1) + } +} From 004c015db2e874bc4cf10adfb07a84c036a42f2a Mon Sep 17 00:00:00 2001 From: Michalis Kargakis Date: Sat, 26 Jul 2014 15:58:56 +0300 Subject: [PATCH 10/40] Handle error when decoding address --- code/pay-to-addr-script.go | 1 + 1 file changed, 1 insertion(+) diff --git a/code/pay-to-addr-script.go b/code/pay-to-addr-script.go index 0cc3a35a..b8949544 100644 --- a/code/pay-to-addr-script.go +++ b/code/pay-to-addr-script.go @@ -28,6 +28,7 @@ func PayToAddrScript(addressStr string) { // the address type. It is also required for the upcoming call to // PayToAddrScript. address, err := btcutil.DecodeAddress(addressStr, &btcnet.MainNetParams) + handle(err) // Create a public key script that pays to the address. script, err := btcscript.PayToAddrScript(address) From ceaa91d28ea31c4d1c10174874220968cabc2099 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Wahlstr=C3=B6m?= Date: Sat, 26 Jul 2014 15:30:57 +0200 Subject: [PATCH 11/40] Update ch06.asciidoc Typos --- ch06.asciidoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ch06.asciidoc b/ch06.asciidoc index 1b45a685..579a6044 100644 --- a/ch06.asciidoc +++ b/ch06.asciidoc @@ -21,9 +21,9 @@ image::images/FullNodeReferenceClient_Small.png["FullNodeReferenceClient_Small"] All nodes include the routing function to participate in the network and may include other functionality. All nodes validate and propagate transactions and blocks, discover and maintain connections to peers. In the full node example above, the routing function is indicated by an orange circle named "Network Routing Node". -Some nodes, called full nodes, also maintain a complete and up-to-date copy of the blockchain. Full nodes can autonomously and authoritatively verify any transaction without external reference. Some nodes maintain only a subset of the blockchain and verify transactions using a method called _Simple Payment Verification_ or SPV. These nodes are known as SPV or Lightweight nodes. In the full node example above, the full node blockchain database function is indicated by a blue circle named "Blockchain Database". SPV nodes are drawn without the blue circle, showing that they do not have a full copy of the blockchain. +Some nodes, called full nodes, also maintain a complete and up-to-date copy of the blockchain. Full nodes can autonomously and authoritatively verify any transaction without external reference. Some nodes maintain only a subset of the blockchain and verify transactions using a method called _Simple Payment Verification_ or SPV. These nodes are known as SPV or Lightweight nodes. In the full node example above, the full node blockchain database function is indicated by a blue circle named "Full Blockchain". SPV nodes are drawn without the blue circle, showing that they do not have a full copy of the blockchain. -Mining nodes compete to create new blocks by running specialized hardware to solve the proof-of-work algorithm. Some mining nodes are also full nodes, maintaining a full copy of the blockchain while others are lightweight nodes participating in pool mining and depending on a pool server to maintain a full node. The mining function is shown in the full node above as a black circle named "Mining". +Mining nodes compete to create new blocks by running specialized hardware to solve the proof-of-work algorithm. Some mining nodes are also full nodes, maintaining a full copy of the blockchain while others are lightweight nodes participating in pool mining and depending on a pool server to maintain a full node. The mining function is shown in the full node above as a black circle named "Miner". User wallets may be part of a full node, as is usually the case with desktop bitcoin clients. Increasingly many user wallets, especially those running on resource constrained devices such as smart phones, are SPV nodes. The wallet function is shown above as a green circle named "Wallet". @@ -71,14 +71,14 @@ image::images/NetworkHandshake.png["NetworkHandshake"] How does a new node find peers? While there are no special nodes in bitcoin, there are some long running stable nodes that are listed in the client as _seed nodes_. While a new node does not have to connect with the seed nodes, it can use them to quickly discover other nodes in the network. In the Bitcoin Core client, the option to use the seed nodes is controlled by the option switch +-dnsseed+, which is set to 1, to use the seed nodes, by default. Alternatively, a bootstrapping node that knows nothing of the network must be given the IP address of at least one bitcoin node after which it can establish connections through further introductions. The command line argument +-seednode+ can be used to connect to one node just for introductions, using it as a DNS seed. After the initial seed node is used to form introductions, the client will disconnect from it and use the newly discovered peers. -Once one or more connections is established, the new node will send an +addr+ message containing its own IP address, to its neighbors. The neighbors will in turn forward the +addr+ message to their neighbors, ensuring that the newly connected node becomes well known and better connected. Additionally, the newly connected node can send +getaddr+ to the neighbors asking them to return a list of IP addresses of other peers. That way, a node can find peers to connect to and advertise its existence on the network for other nodes to find it. +Once one or more connections are established, the new node will send an +addr+ message containing its own IP address, to its neighbors. The neighbors will in turn forward the +addr+ message to their neighbors, ensuring that the newly connected node becomes well known and better connected. Additionally, the newly connected node can send +getaddr+ to the neighbors asking them to return a list of IP addresses of other peers. That way, a node can find peers to connect to and advertise its existence on the network for other nodes to find it. [[address_propagation]] .Address Propagation and Discovery image::images/AddressPropagation.png["AddressPropagation"] -A node must connect to a few different peers in order to establish diverse paths into the bitcoin network. These paths are not reliable, nodes come and go, and so the node must continue to discover new nodes as it loses old connections as well as assist other nodes when they bootstrap. Only one connection is needed to bootstrap, as the first node can offer introductions to its peer nodes and those peers can offer further introductions. Its also unnecessary and wasteful of network resources to connect to more than a handful of nodes. After bootstrapping a node will remember its most recent successful peer connections, so that if it is rebooted it can quickly reestablish connections with its former peer network. If none of the former peers respond to its connection request, the node can use the seed nodes to bootstrap again. +A node must connect to a few different peers in order to establish diverse paths into the bitcoin network. These paths are not reliable, nodes come and go, and so the node must continue to discover new nodes as it loses old connections as well as assist other nodes when they bootstrap. Only one connection is needed to bootstrap, as the first node can offer introductions to its peer nodes and those peers can offer further introductions. Its also unnecessary and wasteful of network resources to connect to more than a handful of nodes. After bootstrapping, a node will remember its most recent successful peer connections, so that if it is rebooted it can quickly reestablish connections with its former peer network. If none of the former peers respond to its connection request, the node can use the seed nodes to bootstrap again. On a node running the Bitcoin Core client, you can list the peer connections with the command +getpeerinfo+: ---- From 1e3306d47bd3ad57cdca723db3195cd359600092 Mon Sep 17 00:00:00 2001 From: Michalis Kargakis Date: Sat, 26 Jul 2014 15:26:05 +0300 Subject: [PATCH 12/40] Dont use github link to line number If any line above the linked line is ever added or removed from chainparams.cpp, the link pointing to L.123 will continue to point to L.123 but the start of the comment won't be there. See andrew.yurisich.com/work/2014/07/16/dont-link-that-line-number/ for the workaround i have used on this. --- ch07.asciidoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ch07.asciidoc b/ch07.asciidoc index 650342d7..c06e17d2 100644 --- a/ch07.asciidoc +++ b/ch07.asciidoc @@ -71,8 +71,8 @@ The first block in the blockchain is called the _genesis block_ and was created Every node always starts with a blockchain of at least one block because the genesis block is statically encoded within the bitcoin client software, such that it cannot be altered. Every node always "knows" the genesis block's hash and structure, the fixed time it was created and even the single transaction within. Thus, every node has the starting point for the blockchain, a secure "root" from which to build a trusted blockchain. -See the statically encoded genesis block inside the Bitcoin Core client, in chainparams.cpp, line 123: -https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L123 +See the statically encoded genesis block inside the Bitcoin Core client, in chainparams.cpp: +https://github.com/bitcoin/bitcoin/blob/3955c3940eff83518c186facfec6f50545b5aab5/src/chainparams.cpp#L123 The genesis block has the identifier hash +000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f+. You can search for that block hash in any block explorer website, such as blockchain.info, and you will find a page describing the contents of this block, with a URL containing that hash: From c1f8e543fc414c2b1f99d069e0df0e65639f54b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Wahlstr=C3=B6m?= Date: Mon, 28 Jul 2014 08:46:47 +0200 Subject: [PATCH 13/40] Update ch07.asciidoc Proposed rephrase of text in "tip box". --- ch07.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch07.asciidoc b/ch07.asciidoc index 650342d7..59945e13 100644 --- a/ch07.asciidoc +++ b/ch07.asciidoc @@ -62,7 +62,7 @@ Unlike the block hash, the block height is not a unique identifier. While a sing [TIP] ==== -A block's _block hash_ always identifies a single block uniquely. A block also always has a specific _block height_. However, it is not always the case that a specific block height can identify a single block, rather more than one blocks can compete for a single position in the blockchain. +A block's _block hash_ always identifies a single block uniquely. A block also always has a specific _block height_. However, it is not always the case that a specific block height can identify a single block. Rather, two or more blocks may compete for a single position in the blockchain. ==== === The Genesis Block From 4f4c60ca1f4ef0d673841dddbb1b9368d30c14d0 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Mon, 28 Jul 2014 15:47:06 -0400 Subject: [PATCH 14/40] corrections, generation Tx, reward calculation, coinbase data --- ch08.asciidoc | 218 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 192 insertions(+), 26 deletions(-) diff --git a/ch08.asciidoc b/ch08.asciidoc index fe7cab69..fa0e0426 100644 --- a/ch08.asciidoc +++ b/ch08.asciidoc @@ -6,28 +6,28 @@ === Introduction ((("blockchain"))) -Bitcoin's blockchain is the global public ledger (list) of all transactions, which everyone in the bitcoin network accepts as the authoritative record of ownership. +In the previous chapter we looked at the blockchain, the global public ledger (list) of all transactions, which everyone in the bitcoin network accepts as the authoritative record of ownership. But how can everyone in the network agree on a single universal "truth" about who owns what, without having to trust anyone? All traditional payment systems depend on a trust model that has a central authority providing a clearinghouse service, basically verifying and clearing all transactions. Bitcoin has no central authority, yet somehow every node has a complete copy of a public ledger that it can trust as the authoritative record. The blockchain is not created by a central authority, but is assembled independently by every node in the network. Somehow, every node in the network, acting on information transmitted across insecure network connections can arrive at the same conclusion and assemble a copy of the same public ledger as everyone else. This chapter examines the process by which the bitcoin network achieves global consensus without central authority. -Satoshi Nakamoto's main invention is the decentralized mechanism for emergent consensus. All the properties of bitcoin, including currency, transactions, payments and the security model that does not depend central authority or trust derive from this invention. +Satoshi Nakamoto's main invention is the decentralized mechanism for _emergent consensus_. Emergent, because consensus is not achieved explicitly - there is no election or fixed moment when consensus occurs. Instead, consensus is an emergent artifact of the asynchronous interaction of thousands of independent nodes, all following simple rules. All the properties of bitcoin, including currency, transactions, payments and the security model that does not depend central authority or trust derive from this invention. -Bitcoin's consensus emerges from the interplay of three processes that occur independently on nodes across the network: +Bitcoin's consensus emerges from the interplay of four processes that occur independently on nodes across the network: * Independent verification of each transaction, by every full node, based on a comprehensive list of criteria * Independent aggregation of those transactions into new blocks by mining nodes, coupled with demonstrated computation through a Proof-of-Work algorithm -* Independent assembly of the new blocks by every full node into a chain and selection of the chain with the most cumulative computation demonstrated through Proof-of-Work +* Independent verification of the new blocks by every node and assembly into a chain +* Independent selection, by every node, of the chain with the most cumulative computation demonstrated through Proof-of-Work In the next few sections we will examine these processes and how they interact to create the emergent property of network-wide consensus that allows any bitcoin node to assemble its own copy of the authoritative, trusted, public, global ledger. -Each of these processes also aggregates smaller bitcoin units into larger data structures. First, unspent transaction outputs (UTXO) are aggregated into transactions. Next, many transactions are aggregated into a block. Finally, blocks are added to a chain of blocks, the blockchain. In the previous chapter we looked at transactions as a data structure. In this chapter we will also look at the larger data structures: blocks and the blockchain. - +{check transition here - maybe move this above previous paragraph?} Each of these processes also aggregates smaller bitcoin units into larger data structures. First, unspent transaction outputs (UTXO) are aggregated into transactions. Next, many transactions are aggregated into a block. Finally, blocks are added to a chain of blocks, the blockchain. In the previous chapter we looked at transactions as a data structure. In this chapter we will also look at the larger data structures: blocks and the blockchain. === Independent Verification of Transactions -In the previous chapter we saw how wallet software creates transactions by collecting UTXO, providing the appropriate unlocking scripts and then constructing new outputs assigned to a new owner. The resulting transaction is then sent to the neighboring nodes in the bitcoin network so that it may be propagated across the entire bitcoin network. +In the previous chapter {check reference} we saw how wallet software creates transactions by collecting UTXO, providing the appropriate unlocking scripts and then constructing new outputs assigned to a new owner. The resulting transaction is then sent to the neighboring nodes in the bitcoin network so that it may be propagated across the entire bitcoin network. -Every bitcoin node that receives a transaction will first verify the transaction before forwarding it to its neighbors. This ensures that only valid transactions are propagated across the network, while invalid transactions are discarded at the first node that encounters them. +However, before forwarding transactions to its neighbors, every bitcoin node that receives a transaction will first verify the transaction. This ensures that only valid transactions are propagated across the network, while invalid transactions are discarded at the first node that encounters them. Each node verifies every transaction against a long checklist of criteria: @@ -50,29 +50,33 @@ Each node verifies every transaction against a long checklist of criteria: * Reject if transaction fee would be too low to get into an empty block * Verify the unlocking scripts for each input against the corresponding output locking scripts -These conditions can be seen in detail in the functions AcceptToMemoryPool, CheckTransaction and CheckInputs in the bitcoin reference client. Note that the conditions change over time, to address new types of Denial-of-Service attacks or sometimes to relax the rules so as to include more types of transactions. +These conditions can be seen in detail in the functions +AcceptToMemoryPool+, +CheckTransaction+ and +CheckInputs+ in the bitcoin reference client. Note that the conditions change over time, to address new types of Denial-of-Service attacks or sometimes to relax the rules so as to include more types of transactions. By independently verifying each transaction as it is received and before propagating it, every node builds a pool of valid new transactions (the transaction pool), roughly in the same order. -=== Aggregating Transactions into Blocks +=== Mining Nodes -Some of the nodes on the bitcoin network are specialized nodes called _miners_. A miner will collect, validate and relay new transactions just like any other node. Unlike other nodes, a miner will then aggregate these transactions into a _block_. The block of transactions constructed by a miner is a candidate block and becomes valid only if the miner succeeds in winning the mining competition. Each miner competes by trying billions of possible solutions to an equation based on a cryptographic hash. If they find a solution, they broadcast the candidate block for everyone to record on the blockchain. The competition difficulty is calibrated to ensure that a new block solution is found by someone every 10 minutes on average. We will look at the mining process itself in more detail in <>. For now, let's look at how miners aggregate transactions into blocks. +Some of the nodes on the bitcoin network are specialized nodes called _miners_. In Chapter 1 we introduced Jing, a computer engineering student in Shanghai China, who is a bitcoin miner. Jing earns bitcoin by running a "mining rig" which is a specialized computer-hardware system designed to mine bitcoins. Jing's specialized mining hardware is connected to a server running a full bitcoin node. Unlike Jing, some miners mine without a full node as we will see in <>. Like every other full node, Jing's node receives and propagates unconfirmed transactions on the bitcoin network. Jing's node, however, also aggregates these transactions into new blocks. + +Jing's node is listening for new blocks, propagated on the bitcoin network, as do all nodes. However, the arrival of a new block has special significance for a mining node. The competition among miners effectively ends with the propagation of a new block which acts as an announcement of a winner. To a miner, receiving a new block means someone else won the competition and they lost. However, the end of one round of a competition is also the beginning of the next round. The new block is not just a checkered flag, marking the end of the race, it is also the starting pistol starting the race for the next block. -In Chapter 1 we introduced Jing, a computer engineering student in Shanghai China, who is a bitcoin miner. Jing earns bitcoin by running a "mining rig" which is a specialized computer-hardware system designed to mine bitcoins. Jing started mining for bitcoin in 2010, when mining was not as competitive as it is today. At that time, Jing could mine bitcoin using a desktop computer. Today, he uses a much more powerful mining system based on Application Specific Integrated Circuits (ASICs), which are specialized silicon chips designed exclusively for one application - bitcoin mining. Over time, the way Jing participates in the mining process has changed slightly, but the fundamentals remain the same. We will start by looking at how Jing mined in 2010, when things were simpler and then look at how he mines today, as bitcoin mining has become a more complex and competitive activity. +The role of a mining node is to act as a gatekeeper to the public ledger. Mining nodes secure the network by validating transactions and controlling access to the blockchain. This places enormous power in mining nodes. To ensure that they follow the rules and behave honestly the bitcoin consensus mechanism imposes incentives by imposing a heavy burden and offering a lavish reward. The burden is the computational effort expended in mining which consumes electricity and therefore has a real-world cost. For those who carry that burden honestly, there is a possibility of reward. Each new block adds new bitcoin to the monetary supply; transactions within a block include transaction fees. The miner that successfully creates a new block collects both the new bitcoin and the transaction fees as a reward. Rewards are not all profit, in fact the miner will spend most of its winnings on electricity. Even successful miners are in a precarious position of marginal profitability, constantly competing under the scrutiny of the entire network. This fragile equilibrium and fierce competition ensures that honesty is the only winning strategy. + +=== Aggregating Transactions into Blocks -In 2010, Jing mined on a desktop computer. At the time, he would run a full bitcoin node, connected to the bitcoin network. A full bitcoin node keeps a full copy of the blockchain, the list of all transactions since the first ever transaction in 2009. Jing's bitcoin node receives transactions propagated by other nodes, just like any other node on the bitcoin network. After validating those transactions, the bitcoin software adds them to the _memory pool_, or _transaction pool_, where transactions would await until they could be included (mined) into a block. +After validating transactions, a bitcoin node will add them to the _memory pool_, or _transaction pool_, where transactions await until they can be included (mined) into a block. Jing's node collects, validates and relays new transactions just like any other node. Unlike other nodes, however, Jing's node will then aggregate these transactions into a _candidate block_. -Jing's bitcoin node is also listening for new blocks, propagated on the bitcoin network. Let's follow the blocks that were created during the time Alice bought a cup of coffee from Bob's Cafe (see <>). Alice's transaction was included in block 277316. For the purpose of demonstrating the concepts in this chapter let's assume that block was mined by Jing's mining system and follow Alice's transaction as it becomes part of this new block. +Let's follow the blocks that were created during the time Alice bought a cup of coffee from Bob's Cafe (see <>). Alice's transaction was included in block 277316. For the purpose of demonstrating the concepts in this chapter let's assume that block was mined by Jing's mining system and follow Alice's transaction as it becomes part of this new block. -Jing's mining node maintains a local copy of the blockchain, the list of all blocks created since the beginning of the bitcoin system in 2009. By the time Alice buys the cup of coffee, Jing's node has assembled a chain of 277,314 blocks of transactions. Jing's node is listening for transactions, trying to mine a new block and also listening for blocks discovered by other nodes. Jing's node receives an incoming block, propagated by the bitcoin network, which fits into the existing blockchain at height 277,315. +Jing's mining node maintains a local copy of the blockchain, the list of all blocks created since the beginning of the bitcoin system in 2009. By the time Alice buys the cup of coffee, Jing's node has assembled a chain of 277,314 blocks. Jing's node is listening for transactions, trying to mine a new block and also listening for blocks discovered by other nodes. As Jing's node is mining, it receives block 277,315 through the bitcoin network. The arrival of this block signifies the end of the competition for block 277,315 and the beginning of the competition to create block 277,316. -As soon a Jing's bitcoin node receives a valid new block, it immediately starts the next round of competition. Receiving a new block signifies that someone else has won the previous round, meaning that Jing's system did not win that round and should abandon its current efforts and shift its resources to try and win the next round. During the previous 10 minutes, while Jing's node was searching for a solution, it was also collecting transactions. By now it has collected a few hundred transactions in the memory pool. After removing any transactions that appear in the new block recently received, Jing's memory pool is left containing unconfirmed transactions that are waiting to be recorded in a new block. +During the previous 10 minutes, while Jing's node was searching for a solution to block 277,315, it was also collecting transactions in preparation for the next block. By now it has collected a few hundred transactions in the memory pool. Upon receiving block 277,315 and validating it, Jing's node will also check all the transactions in the memory pool and remove any that were included in block 277,315. Whatever transaction remain in the memory pool are unconfirmed and are waiting to be recorded in a new block. -Jing's node immediately constructs a new candidate block, to participate in the competition. +Jing's node immediately constructs a new empty block, a candidate for block 277,316. This block is called a candidate block because it is not yet a valid block, as it does not contain a valid proof-of-work. The block becomes valid only if the miner succeeds in finding a solution to the proof-of-work algorithm. -=== Adding Transactions to a Candidate Block +=== Transaction Age, Fees and Priority -To construct the candidate block Jing's bitcoin node selects transactions from the memory pool, by applying a priority metric to each transaction and adding the highest priority transactions first. Transactions are prioritized based on the "age" of the UTXO that is being spent in their inputs, allowing for old and high-value inputs to be prioritized over newer and smaller inputs. Prioritized transactions can be sent without any fees, if there is enough space in the block. +To construct the candidate block Jing's bitcoin node selects transactions from the memory pool, by applying a priority metric to each transaction and adding the highest priority transactions first. Transactions are prioritized based on the "age" of the UTXO that is being spent in their inputs, allowing for old and high-value inputs to be prioritized over newer and smaller inputs. Prioritized transactions can be sent without any fees, if there is enough space in the block. The priority of a transaction is calculated as the sum of the value and age of the inputs divided by the total size of the transaction: ---- @@ -95,15 +99,177 @@ If there is any space remaining in the block, Jing's mining node may choose to f Any transactions left in the memory pool after the block is filled will remain in the pool for inclusion in the next block. As transactions remain in the memory pool, their inputs "age", as the UTXO they spend get deeper into the blockchain with new blocks added on top. Since a transactions priority depends on the age of its inputs, transactions remaining in the pool will age and therefore increase in priority. Eventually a transaction without fees may reach a high enough priority to be included in the block for free. -Bitcoin transactions do not have an expiration time-out. A transaction that is valid now will be valid in perpetuity. However, if a transaction is only propagated across the network once it will persist only as long as it is held in a mining node memory pool. When a mining node is restarted, its memory pool is wiped clear, as it is a transient non-persistent form of storage. While a valid transaction may have been propagated across the network, if it is not executed it may eventually not reside in the memory pool of any miner. Wallet software is expected to retransmit such transactions or reconstruct them with higher fees if they are not successfully executed within a reasonable amount of time. +Bitcoin transactions do not have an expiration time-out. A transaction that is valid now will be valid in perpetuity. However, if a transaction is only propagated across the network once it will persist only as long as it is held in a mining node memory pool. When a mining node is restarted, its memory pool is wiped clear, as it is a transient non-persistent form of storage. While a valid transaction may have been propagated across the network, if it is not executed it may eventually not reside in the memory pool of any miner. Wallet software is expected to retransmit such transactions or reconstruct them with higher fees if they are not successfully executed within a reasonable amount of time. + +When Jing's node aggregates all the transactions from the memory pool, the new candidate block has 418 transactions with total transaction fees of 0.09094928 bitcoin. You can see this block in the blockchain using the Bitcoin Core client command line interface: + +---- +$ bitcoin-cli getblockhash 277316 +0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4 +$ bitcoin-cli getblock 0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4 +{ + "hash" : "0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4", + "confirmations" : 35561, + "size" : 218629, + "height" : 277316, + "version" : 2, + "merkleroot" : "c91c008c26e50763e9f548bb8b2fc323735f73577effbc55502c51eb4cc7cf2e", + "tx" : [ + "d5ada064c6417ca25c4308bd158c34b77e1c0eca2a73cda16c737e7424afba2f", + "b268b45c59b39d759614757718b9918caf0ba9d97c56f3b91956ff877c503fbe", + + ... 417 more transactions ... + + ], + "time" : 1388185914, + "nonce" : 924591752, + "bits" : "1903a30c", + "difficulty" : 1180923195.25802612, + "chainwork" : "000000000000000000000000000000000000000000000934695e92aaf53afa1a", + "previousblockhash" : "0000000000000002a7bbd25a417c0374cc55261021e8a9ca74442b01284f0569", + "nextblockhash" : "000000000000000010236c269dd6ed714dd5db39d36b33959079d78dfd431ba7" +} +---- + +=== The Generation Transaction + +The first transaction added to the block is a special transaction, called a _generation transaction_ or _coinbase transaction_. This transaction is constructed by Jing's node and is his reward for the mining effort. Jing's node creates the generation transaction as a payment to his own wallet: "Pay Jing's address 25.09094928 bitcoin". The total amount of reward that Jing collects for mining a block is the sum of the coinbase reward (25 new bitcoins) and the transaction fees (0.09094928) from all the transactions included in the block. + + +==== +[source, bash] +---- +$ bitcoin-cli getrawtransaction d5ada064c6417ca25c4308bd158c34b77e1c0eca2a73cda16c737e7424afba2f 1 +---- +==== + +[[generation_tx_example]] +==== +[source,json] +---- +{ + "hex" : "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f03443b0403858402062f503253482fffffffff0110c08d9500000000232102aa970c592640d19de03ff6f329d6fd2eecb023263b9ba5d1b81c29b523da8b21ac00000000", + "txid" : "d5ada064c6417ca25c4308bd158c34b77e1c0eca2a73cda16c737e7424afba2f", + "version" : 1, + "locktime" : 0, + "vin" : [ + { + "coinbase" : "03443b0403858402062f503253482f", + "sequence" : 4294967295 + } + ], + "vout" : [ + { + "value" : 25.09094928, + "n" : 0, + "scriptPubKey" : { + "asm" : "02aa970c592640d19de03ff6f329d6fd2eecb023263b9ba5d1b81c29b523da8b21 OP_CHECKSIG", + "hex" : "2102aa970c592640d19de03ff6f329d6fd2eecb023263b9ba5d1b81c29b523da8b21ac", + "reqSigs" : 1, + "type" : "pubkey", + "addresses" : [ + "1MxTkeEP2PmHSMze5tUZ1hAV3YTKu2Gh1N" + ] + } + } + ], + "blockhash" : "0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4", + "confirmations" : 35566, + "time" : 1388185914, + "blocktime" : 1388185914 +} +---- +==== + + +Unlike regular transactions, the generation transaction does not consume (spend) UTXO as inputs. Instead, it has only one input, called the _coinbase_, which creates bitcoin from nothing. The generation transaction has one output, payable to the miner's own bitcoin address. + +=== Coinbase Reward and Fees + +To construct the generation transaction, Jing's node first calculates the total amount of transaction fees, by adding all the inputs and outputs of the 418 transactions that were added to the block. The fees are calculated as: + +---- +Total Fees = Sum(Inputs) - Sum(Outputs) +---- + +In block 277,316 the total transaction fees are 0.09094928 bitcoin. + +Next, Jing's node calculates the correct reward for the new block. The reward is calculated based on the block height, starting at 50 bitcoin per block and reduced by half every 210,000 blocks. Since this block is at height 277,316, the correct reward is 25 bitcoin. +The calculation can be seen in function +GetBlockValue+ in the Bitcoin Core client: + +[[getblockvalue_source]] +.Calculating the block reward - Function GetBlockValue, Bitcoin Core Client, main.cpp, line 1305 +==== +[source, cpp] +---- +int64_t GetBlockValue(int nHeight, int64_t nFees) +{ + int64_t nSubsidy = 50 * COIN; + int halvings = nHeight / Params().SubsidyHalvingInterval(); + + // Force block reward to zero when right shift is undefined. + if (halvings >= 64) + return nFees; + + // Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years. + nSubsidy >>= halvings; + + return nSubsidy + nFees; +} +---- +==== + +The initial subsidy is calculated in satoshis by multiplying 50 with the +COIN+ constant (100,000,000 satoshis). This sets the initial reward (+nSubsidy+) at 5 billion satoshis. + +Next, the function calculates the number of +halvings+ that have occurred by dividing the current block height by the halving interval (+SubsidyHalvingInterval+). In the case of block 277,316, with a halving interval every 210,000 blocks, the result is 1 halving. + +The maximum number of halvings allowed is 64, so the code imposes a zero reward (return only the fees) if the 64 halvings is exceeded. + +Next, the function uses the binary-right-shift operator to divide the reward (+nSubsidy+) by 2 for each round of halving. In the case of block 277,316 this would binary-right-shift the reward of 5 billion satoshis once (one halving) and result in 2.5 billion satoshis, or 25 bitcoin. The binary-right-shift operator is used because it is more efficient for division by 2 than integer or floating point division. + +Finally, the coinbase reward (+nSubsidy+) is added to the transaction fees (+nFees+), and the sum is returned. + +=== Structure of the Generation Transaction + +With these calculations, Jing's node then constructs the generation transaction to pay himself 25.09094928 bitcoin. The generation transaction is the first transaction in the block, so we can see it in more detail using the Bitcoin Core command-line interface: + +As you can see in <>, the generation transaction has a special format. Instead of a transaction input specifying a previous UTXO to spend, it has a "coinbase" input. We examined transaction inputs in <>. A regular transaction input looks like this: + +.The structure of a "normal" transaction input +[options="header"] +|======= +|Size| Field | Description +| 32 bytes | Transaction Hash | Pointer to the transaction containing the UTXO to be spent +| 4 bytes | Output Index | The index number of the UTXO to be spent, first one is 0 +| 1-9 bytes (VarInt) | Unlocking-Script Size | Unlocking-Script length in bytes, to follow +| Variable | Unlocking-Script | A script that fulfills the conditions of the UTXO locking-script. +| 4 bytes | Sequence Number | Currently-disabled Tx-replacement feature, set to 0xFFFFFFFF +|======= + +In a generation transaction, the first two fields are set to values that do not represent a UTXO reference. Instead of a "Transaction Hash", the first field is filled with 32 bytes all set to zero. The "Output Index" is filled with 4 bytes all set to 0xFF (255 decimal). + +The "Unlocking Script", also known as the +scriptSig+ field that follows must be between 2 and 100 bytes. This is where miners put the coinbase data. Except for the first few bytes (see below) the rest of the coinbase data can be used by miners in any way they want, it is arbitrary data. + +The first few bytes of the coinbase used to be arbitrary, but that is no longer the case. As per Bitcoin Improvement Proposal 34 (BIP0034), version-2 blocks (blocks with the version field set to 2) must contain the block height index (little endian) as a script "push" operation in the beginning of the coinbase field. + +In block 277,316 we see that the coinbase (see <>), which is in the "Unlocking Script" or scriptSig field of the transaction input, contains the hexadecimal value +03443b0403858402062f503253482f+. Let's decode this value. + +The first byte, +03+ instructs the script execution engine to push the next 3 bytes onto the script stack (see <>). The next 3 bytes, +0x443b04+, are the block height encoded in little-endian format (backwards, least significant bit first). Reverse the order of the bytes and the result is +0x043b44+ which is 277,316 in decimal. + +The next few hexadecimal digits (+03858402062+) are used to encode an extra _nonce_, or random value, used to find a suitable proof-of-work solution. This is discussed in more detail in the next section on <> + +The final part of the coinbase data (+2f503253482f+) is the ASCII-encoded string "/P2SH/", which indicates that mining node that mined this block supports the Pay-to-Script-Hash (P2SH) improvement defined in BIP0016. The introduction of the P2SH capability required a "vote" by miners to endorse either BIP0016 or BIP0017. Those endorsing the BIP0016 implementation were to include "/P2SH/" in their coinbase data. Those endorsing the BIP0017 implementation of P2SH were to include the string "p2sh/CHV" in their coinbase data. The BIP0016 was elected as the winner, and many miners continued including the string "/P2SH/" in their coinbase to indicate support for this feature. + +The single output of the generation transaction sends the value of 25.09094928 bitcoins to the miner's bitcoin address, in this case +1MxTkeEP2PmHSMze5tUZ1hAV3YTKu2Gh1N+. + +=== Constructing the Block Header [[mining]] === Proof-of-Work (Mining) and Consensus ((("Mining", "Proof of Work", "SHA256", "hashing power", "difficulty", "nonce"))) Mining is the process by which new bitcoin is added to the money supply. Mining also serves to secure the bitcoin system against fraudulent transactions or transactions spending the same amount of bitcoin more than once, known as a double-spend. Miners act as a decentralized clearinghouse, validating new transactions and recording them on the global ledger. A new block, containing transactions which occurred since the last block, is "mined" every 10 minutes thereby adding those transactions to the blockchain. Transactions that become part of a block and added to the blockchain are considered "confirmed", which allows the new owners of bitcoin to spend the bitcoin they received in those transactions. Miners receive two types of reward for mining: new coins created with each new block and transaction fees from all the transactions included in the block. To earn this reward, the miners compete to solve a difficult mathematical problem based on a cryptographic hash algorithm. The solution to the problem, called the Proof-of-Work, is included in the new block and acts as proof that the miner expended significant computing effort. The competition to solve the Proof-of-Work algorithm to earn reward and the right to record transactions on the blockchain is the basis for bitcoin's security model. - Bitcoin's security is underpinned by computation. New blocks are added to the blockchain through a consensus mechanism called the _Proof-of-Work_ (PoW) that requires a predictable computational effort, one that takes approximately 10 minutes to solve on average. Specialized bitcoin nodes called _miners_ validate transactions and collect them into blocks, then attempt to find the solution that satisfies the Proof-of-Work algorithm. The first miner to find such a solution, propagates the newly created block across the network. All other nodes on the network verify that the new block contains valid transactions and satisfies the Proof-of-Work algorithm, then they add it to the blockchain, thereby extending it by one block. The miners add a special coin generation transaction into the blocks they build, which creates new bitcoin from nothing and is payable to the miner's own bitcoin address. Once the block is accepted as valid by the entire network, that transaction is also recorded on the blockchain, thereby rewarding the miner for the computational effort it took to satisfy the Proof-of-Work. This de-centralized consensus mechanism, based on a global competition and requiring computation to create new blocks, is the basis for the security of the bitcoin transaction ledger and also for the issuance of new bitcoin. {move the last sentence to the beginning of the paragraph - to explain more about security} The equilibrium between the incentive of bitcoin reward and the immense computing effort required to win it force the participants to behave honestly, without the need for a centralized clearinghouse or currency issuer. The bitcoin consensus mechanism is a dynamic, self-regulating and completely decentralized security model that operates at very large scale. The process of new coin generation is called mining, because the reward is designed to simulate diminishing returns, just like mining for precious metals. Bitcoin's money supply is created through mining, just like a central bank issues new money by printing bank notes. The amount of newly created bitcoin a miner can add to a block decreases approximately every four years (or precisely every 210,000 blocks). It started at 50 bitcoin per block in January of 2009 and halved to 25 bitcoin per block in November of 2012. It will halve again to 12.5 bitcoin per block sometime in 2016. Based on this formula, bitcoin mining rewards decrease exponentially until approximately the year 2140 when all 21 million bitcoin have been issued. @@ -112,7 +278,6 @@ Bitcoin miners also earn fees from transactions. Every transaction may include a Today the fees represent 1% or less of a bitcoin miner's income, the vast majority coming from the newly minted bitcoins. However, as the reward decreases over time and the number of transactions per block increases, a greater proportion of bitcoin mining earnings will come from fees. After 2140 all bitcoin miner earnings will be in the form of transaction fees. - [[figure_sha256_logical]] .The Secure Hash Algorithm (SHA-256) image::images/sha256-logical.png["SHA256"] @@ -363,6 +528,11 @@ image::images/BlockChainWithForks.png["chainforks"] ==== Competition and Coinbase ==== Mining Pools + +Jing started mining for bitcoin in 2010, when mining was not as competitive as it is today. At that time, Jing could mine bitcoin using a desktop computer. Today, he uses a much more powerful mining system based on Application Specific Integrated Circuits (ASICs), which are specialized silicon chips designed exclusively for one application - bitcoin mining. Over time, the way Jing participates in the mining process has changed slightly, but the fundamentals remain the same. We will start by looking at how Jing mined in 2010, when things were simpler and then look at how he mines today, as bitcoin mining has become a more complex and competitive activity. + + In 2010, Jing mined on a desktop computer. At the time, he would run a full bitcoin node, connected to the bitcoin network. + ===== Managed Pools ===== P2Pool ==== Mining Economics @@ -370,7 +540,3 @@ image::images/BlockChainWithForks.png["chainforks"] ===== 51% Attack ===== Selfish Mining Attack -==== Normal Forks -==== Soft Forks -==== Hard Forks -==== Unusual Forks From 5ff9890943597dffcba34e48b2fcf810509b147f Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Mon, 28 Jul 2014 18:36:29 -0400 Subject: [PATCH 15/40] Constructing the block header, difficulty representation --- ch08.asciidoc | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/ch08.asciidoc b/ch08.asciidoc index fa0e0426..3a2eb225 100644 --- a/ch08.asciidoc +++ b/ch08.asciidoc @@ -102,11 +102,20 @@ Any transactions left in the memory pool after the block is filled will remain i Bitcoin transactions do not have an expiration time-out. A transaction that is valid now will be valid in perpetuity. However, if a transaction is only propagated across the network once it will persist only as long as it is held in a mining node memory pool. When a mining node is restarted, its memory pool is wiped clear, as it is a transient non-persistent form of storage. While a valid transaction may have been propagated across the network, if it is not executed it may eventually not reside in the memory pool of any miner. Wallet software is expected to retransmit such transactions or reconstruct them with higher fees if they are not successfully executed within a reasonable amount of time. When Jing's node aggregates all the transactions from the memory pool, the new candidate block has 418 transactions with total transaction fees of 0.09094928 bitcoin. You can see this block in the blockchain using the Bitcoin Core client command line interface: - +==== +[source,bash] ---- $ bitcoin-cli getblockhash 277316 0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4 + $ bitcoin-cli getblock 0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4 +---- +==== +[[block277316]] +.Block 277,316 +==== +[source,json] +---- { "hash" : "0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4", "confirmations" : 35561, @@ -130,6 +139,7 @@ $ bitcoin-cli getblock 0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2 "nextblockhash" : "000000000000000010236c269dd6ed714dd5db39d36b33959079d78dfd431ba7" } ---- +==== === The Generation Transaction @@ -144,6 +154,7 @@ $ bitcoin-cli getrawtransaction d5ada064c6417ca25c4308bd158c34b77e1c0eca2a73cda1 ==== [[generation_tx_example]] +.Generation Transaction ==== [source,json] ---- @@ -265,6 +276,31 @@ The single output of the generation transaction sends the value of 25.09094928 b === Constructing the Block Header +To construct the block header, the mining node needs to fill in six fields: + +[[block_header_structure]] +.The structure of the block header +[options="header"] +|======= +|Size| Field | Description +| 4 bytes | Version | A version number to track software/protocol upgrades +| 32 bytes | Previous Block Hash | A reference to the hash of the previous (parent) block in the chain +| 32 bytes | Merkle Root | A hash of the root of the Merkle-Tree of this block's transactions +| 4 bytes | Timestamp | The approximate creation time of this block (seconds from Unix Epoch) +| 4 bytes | Difficulty Target | The proof-of-work algorithm difficulty target for this block +| 4 bytes | Nonce | A counter used for the proof-of-work algorithm +|======= + +At the time block 277,316 was mined, the version number describing the block structure is version "2", which is encoded in little-endian format in 4 bytes as +0x02000000+. + +Next, the mining node needs to add the "Previous Block Hash". That is the hash of the block header of block 277,315, the previous block received from the network, which Jing's node has accepted and selected as the parent of the candidate block 277,316. The block header hash for block 277,315 is +0000000000000002a7bbd25a417c0374cc55261021e8a9ca74442b01284f0569+. + +The next step is to summarize all the transactions with a Merkle Tree, in order to add the Merkle Root to the block header. The generation transaction is listed as the first transaction in the block. Then, 418 more transactions are added after it, for a total of 419 transactions in the block. As we saw in the <>, there must be an even number of "leaf" nodes in the tree, so the last transaction is duplicated, creating 420 nodes, each containing the hash of one transaction. The transaction hashes are then combined, in pairs, creating each level of the tree, until all the transactions are summarized into one node at the "root" of the tree. The root of the merkle tree summarizes all the transactions into a single 32 byte value +c91c008c26e50763e9f548bb8b2fc323735f73577effbc55502c51eb4cc7cf2e+ which you can see listed as "merkle root" in <> + +The mining node will then add a 4-byte timestamp, encoded as a Unix "Epoch" timestamp, which is based on the number of seconds elapsed from January 1st, 1970, midnight UTC/GMT. The time +1388185914+ is equal to Friday, 27 Dec 2013, 23:11:54 UTC/GMT. + +Finally, the node fills in the difficulty target, which defines the required proof-of-work difficulty to make this a valid block. The difficulty is stored in the block as a "difficulty bits" metric, which is a mantissa-exponent encoding of the target. The encoding has a one-byte exponent, followed by a 3 byte mantissa (coefficient). In block 277,316, for example, the difficulty bits value is +0x1903a30c+. The first part +0x19+ is a hexadecimal exponent, while the next part +0x03a30c+ is the coefficient. The concept of a difficulty target is explained in <> and the "difficulty bits" representation is explained in <>. + [[mining]] === Proof-of-Work (Mining) and Consensus ((("Mining", "Proof of Work", "SHA256", "hashing power", "difficulty", "nonce"))) @@ -426,6 +462,26 @@ As you can see, increasing the difficulty by 1 bit causes an exponential increas At the time of writing this, the network is attempting to find a block whose header hash is less than +000000000000004c296e6376db3a241271f43fd3f5de7ba18986e517a243baa7+. As you can see, there are a lot of zeroes at the beginning of that hash, meaning that the acceptable range of hashes is much smaller, hence more difficult to find a valid hash. It will take on average more 150 quadrillion hash calculations per second for the network to discover the next block. That seems like an impossible task, but fortunately the network is bringing 500 TH/sec of processing power to bear, which will be able to find a block in about 10 minutes on average. +==== Difficulty Representation + +The formula to calculate the difficulty target from this representation is: + +---- +target = coefficient * 2^(8 * (exponent - 3)) +---- + +Using that formula, we can +difficulty bits is 0x1903a30c + +target = 0x03a30c * 2^(0x08 * (0x19 - 0x03))^ + +=> target = 0x03a30c * 2^(0x08 * 0x16)^ +=> target = 238,348 * 2^176^ +=> target = 238,348 * 2^176^ +=> target = 9,223,372,036,854,775,807 +=> target = 0x0000000000000003A30C00000000000000000000000000000000000000000000 +---- + ==== Difficulty Target and Re-Targetting Bitcoin is tuned to generate blocks approximately every 10 minutes. This is achieved by automatically adjusting the target difficulty to account for increases and decreases in the available computing power on the network. This process occurs automatically and on every full node independently. Each node recalculates the expected difficulty every 2106 blocks, based on the time it took to hash the previous 2106 blocks. In simple terms: If the network is finding blocks faster than every 10 minutes, the difficulty increases. If block discovery is slower than expected, the difficulty will decrease. From 7c56fca0f01b5bbda7d5e23a97b9e34797badbe5 Mon Sep 17 00:00:00 2001 From: Ed Eykholt Date: Mon, 28 Jul 2014 20:38:32 -0700 Subject: [PATCH 16/40] wordsmithing ch02.asciidoc --- ch02.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index 32e5881c..0b36c6c6 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -3,7 +3,7 @@ === Transactions, Blocks, Mining and the Blockchain -The bitcoin system, unlike traditional banking and payment systems, is based on de-centralized trust. Instead of a central trusted authority, in bitcoin, trust is achieved as an emergent property from the interactions of different participants in the bitcoin system. In this chapter we will examine bitcoin from a high-level by tracking a single transaction through the bitcoin system and watch as it becomes "trusted" and accepted by the bitcoin mechanism of distributed consensus and is finally recorded on the blockchain, the distributed ledger of all transactions. +In the bitcoin system trust is de-centralized and achieved as an emergent property from the interactions of different participants in the bitcoin system. This is completely unlike traditional banking and payment systems, where trust is necessarily placed in one or more central trusted authorities. In this chapter we will examine bitcoin from a high-level by tracking a single transaction through the bitcoin system and watch as it becomes "trusted" and accepted by the bitcoin mechanism of distributed consensus and is finally recorded on the blockchain, the distributed ledger of all transactions. Each example below is based upon an actual transaction made on the bitcoin network, simulating the interactions between the users (Joe, Alice and Bob) by sending funds from one wallet to another. While tracking a transaction through the bitcoin network and blockchain, we will use a _blockchain explorer_ site to visualize each step. A blockchain explorer is a web application that operates as a bitcoin search engine, in that it allows you to search for addresses, transactions and blocks and see the relationships and flows between them. From 6fd49cc2f5f6b4fee5c66860a40695d240554e0e Mon Sep 17 00:00:00 2001 From: Ed Eykholt Date: Mon, 28 Jul 2014 20:41:40 -0700 Subject: [PATCH 17/40] wordsmithing ch02.asciidoc #2 --- ch02.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index 0b36c6c6..e25165a8 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -3,7 +3,7 @@ === Transactions, Blocks, Mining and the Blockchain -In the bitcoin system trust is de-centralized and achieved as an emergent property from the interactions of different participants in the bitcoin system. This is completely unlike traditional banking and payment systems, where trust is necessarily placed in one or more central trusted authorities. In this chapter we will examine bitcoin from a high-level by tracking a single transaction through the bitcoin system and watch as it becomes "trusted" and accepted by the bitcoin mechanism of distributed consensus and is finally recorded on the blockchain, the distributed ledger of all transactions. +In the bitcoin system trust is de-centralized and achieved as an emergent property from the interactions of different participants in the bitcoin system. This is completely unlike traditional banking and payment systems, where trust is necessarily placed in one or more central trusted authorities. In this chapter we will examine bitcoin from a high level by tracking a single transaction through the bitcoin system and watch as it becomes "trusted" and accepted by the bitcoin mechanism of distributed consensus and is finally recorded on the blockchain, the distributed ledger of all transactions. Each example below is based upon an actual transaction made on the bitcoin network, simulating the interactions between the users (Joe, Alice and Bob) by sending funds from one wallet to another. While tracking a transaction through the bitcoin network and blockchain, we will use a _blockchain explorer_ site to visualize each step. A blockchain explorer is a web application that operates as a bitcoin search engine, in that it allows you to search for addresses, transactions and blocks and see the relationships and flows between them. From 32d2c0bfb6478343f1908efb295d373c20a1ed07 Mon Sep 17 00:00:00 2001 From: Ed Eykholt Date: Mon, 28 Jul 2014 20:45:14 -0700 Subject: [PATCH 18/40] wordsmithing ch02.asciidoc #3 --- ch02.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index e25165a8..4aeb4427 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -26,7 +26,7 @@ image::images/Bitcoin_Overview.png["Bitcoin Overview"] ==== Buying a cup of coffee -Alice, who we introduced in the previous chapter, is a new user who has just acquired her first bitcoin. In <>, Alice met with her friend Joe to exchange some cash for bitcoin. The transaction created by Joe, funded Alice's wallet with 0.10 BTC. Now Alice will make her first retail transaction, buying a cup of coffee at Bob's coffee shop in Palo Alto, California. Bob's coffee shop recently started accepting bitcoin payments, by adding a bitcoin option to his point-of-sale system (see <> for information on using bitcoin for merchants/retail). The prices at Bob's Cafe are listed in the local currency (US dollars) but at the register, customers have the option of paying in either dollars or bitcoin. Alice places her order for a cup of coffee and Bob enters the transaction at the register. The point-of-sale system will convert the total price from US dollars to bitcoins at the prevailing market rate and displays the prices in both currencies, as well as showing a QR code containing a _payment request_ for this transaction: +Alice, who we introduced in the previous chapter, is a new user who has just acquired her first bitcoin. In <>, Alice met with her friend Joe to exchange some cash for bitcoin. The transaction created by Joe, funded Alice's wallet with 0.10 BTC. Now Alice will make her first retail transaction, buying a cup of coffee at Bob's coffee shop in Palo Alto, California. Bob's coffee shop recently started accepting bitcoin payments, by adding a bitcoin option to his point-of-sale system (see <> for information on using bitcoin for merchants/retail). The prices at Bob's Cafe are listed in the local currency (US dollars) but at the register, customers have the option of paying in either dollars or bitcoin. Alice places her order for a cup of coffee and Bob enters the transaction at the register. The point-of-sale system will convert the total price from US dollars to bitcoins at the prevailing market rate and display the prices in both currencies, as well as showing a QR code containing a _payment request_ for this transaction: .Displayed on Bob's cash register ---- From aa0e6cfbca674cc7551a7f412bd5c437c162ee7d Mon Sep 17 00:00:00 2001 From: Ed Eykholt Date: Mon, 28 Jul 2014 20:53:07 -0700 Subject: [PATCH 19/40] wordsmithing ch02.asciidoc #4 --- ch02.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index 4aeb4427..a7b74a9c 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -58,7 +58,7 @@ A description for the payment: "Purchase at Bob's Cafe" [TIP] ==== -Unlike a QR code that simply contains a destination bitcoin address, a "payment request" is a QR encoded URL that contains a destination address, a payment amount and a generic description such as "Bob's Cafe". This allows a bitcoin wallet application to pre-fill the information to send the payment while showing a human-readable description to the user. See <>, for more details. You can scan the QR code above with a bitcoin wallet application to see what Alice would see. +Unlike a QR code that simply contains a destination bitcoin address, a "payment request" is a QR encoded URL that contains a destination address, a payment amount and a generic description such as "Bob's Cafe". This allows a bitcoin wallet application to pre-fill the information used to send the payment while showing a human-readable description to the user. See <>, for more details. You can scan the QR code above with a bitcoin wallet application to see what Alice would see. ==== Bob says "That's one-dollar-fifty, or fifteen milliBits". From e9d5c982ccebc00afe015993ab5e6e35537e9491 Mon Sep 17 00:00:00 2001 From: Ed Eykholt Date: Mon, 28 Jul 2014 21:15:47 -0700 Subject: [PATCH 20/40] wordsmithing ch02.asciidoc #5 In the paragraph beginning "Transactions are like lines in a double-entry bookkeeping ledger." This paragraph needed to be re-written. It was incorrect from an accounting interpretation. Debits (meaning "left") are not really on the left side of the graphic and typical display for Inputs in this case, since this is in effect a balance sheet journal entry. Feel free to double check this with an actual accountant. --- ch02.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index a7b74a9c..8eb8cb1f 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -77,7 +77,7 @@ The bitcoin network can transact in fractional values, e.g. from millibitcoins ( In simple terms, a transaction tells the network that the owner of a number of bitcoins has authorized the transfer of some of those bitcoins to another owner. The new owner can now spend these bitcoins by creating another transaction that authorizes transfer to another owner, and so on, in a chain of ownership. -Transactions are like lines in a double-entry bookkeeping ledger. In simple terms, each transaction contains one or more "inputs", which are debits against a bitcoin account. On the other side of the transaction, there are one or more "outputs", which are credits added to a bitcoin account. The inputs and outputs (debits and credits) do not necessarily add up to the same amount. Instead, outputs add up to slightly less than inputs and the difference represents an implied "transaction fee", a small payment collected by the miner who includes the transaction in the ledger. +Transactions are like a journal entry record in a double-entry bookkeeping ledger. In simple terms, each transaction contains one or more "inputs", which are reductions to bitcoin accounts. On the other side of the transaction, there are one or more "outputs", which are increases to other bitcoin accounts. A type of output is a "transaction fee", a small output payment collected by the miner who includes the transaction in the ledger; this fee is typically not shown together with the other outputs. The input and output (including fee) amounts balance, like credits and debits must match in a journal entry. [[transaction-double-entry]] .Transaction As Double-Entry Bookkeeping From 1d419c9449e7b524b0844eb4d7b46e65195145c8 Mon Sep 17 00:00:00 2001 From: Ed Eykholt Date: Mon, 28 Jul 2014 21:17:57 -0700 Subject: [PATCH 21/40] wordsmithing ch02.asciidoc #6 --- ch02.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index 8eb8cb1f..e85bb452 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -26,7 +26,7 @@ image::images/Bitcoin_Overview.png["Bitcoin Overview"] ==== Buying a cup of coffee -Alice, who we introduced in the previous chapter, is a new user who has just acquired her first bitcoin. In <>, Alice met with her friend Joe to exchange some cash for bitcoin. The transaction created by Joe, funded Alice's wallet with 0.10 BTC. Now Alice will make her first retail transaction, buying a cup of coffee at Bob's coffee shop in Palo Alto, California. Bob's coffee shop recently started accepting bitcoin payments, by adding a bitcoin option to his point-of-sale system (see <> for information on using bitcoin for merchants/retail). The prices at Bob's Cafe are listed in the local currency (US dollars) but at the register, customers have the option of paying in either dollars or bitcoin. Alice places her order for a cup of coffee and Bob enters the transaction at the register. The point-of-sale system will convert the total price from US dollars to bitcoins at the prevailing market rate and display the prices in both currencies, as well as showing a QR code containing a _payment request_ for this transaction: +Alice, introduced in the previous chapter, is a new user who has just acquired her first bitcoin. In <>, Alice met with her friend Joe to exchange some cash for bitcoin. The transaction created by Joe, funded Alice's wallet with 0.10 BTC. Now Alice will make her first retail transaction, buying a cup of coffee at Bob's coffee shop in Palo Alto, California. Bob's coffee shop recently started accepting bitcoin payments, by adding a bitcoin option to his point-of-sale system (see <> for information on using bitcoin for merchants/retail). The prices at Bob's Cafe are listed in the local currency (US dollars) but at the register, customers have the option of paying in either dollars or bitcoin. Alice places her order for a cup of coffee and Bob enters the transaction at the register. The point-of-sale system will convert the total price from US dollars to bitcoins at the prevailing market rate and display the prices in both currencies, as well as showing a QR code containing a _payment request_ for this transaction: .Displayed on Bob's cash register ---- From a3b430e0974950659aa1b060a073cb988eef2fb4 Mon Sep 17 00:00:00 2001 From: Ed Eykholt Date: Mon, 28 Jul 2014 21:30:42 -0700 Subject: [PATCH 22/40] wordsmithing ch02.asciidoc #7 --- ch02.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index e85bb452..1d8f6db3 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -83,7 +83,7 @@ Transactions are like a journal entry record in a double-entry bookkeeping ledge .Transaction As Double-Entry Bookkeeping image::images/Transaction_Double_Entry.png["Transaction Double-Entry"] -The transaction contains proof of ownership for each amount of bitcoin (inputs) whose value is transferred, in the form of a digital signature from the owner, that can be independently validated by anyone. In bitcoin terms, "spending" is signing the value of a previous transaction for which you have the keys over to a new owner identified by a bitcoin address. +The transaction also contains proof of ownership for each amount of bitcoin (inputs) whose value is transferred, in the form of a digital signature from the owner, which can be independently validated by anyone. In bitcoin terms, "spending" is signing the value (or a portion of the value) received from previous transaction for which you have the keys over to a new owner identified by a bitcoin address. [TIP] From 556763749fde4e10988cb8e24762c594f539c579 Mon Sep 17 00:00:00 2001 From: Ed Eykholt Date: Mon, 28 Jul 2014 21:52:13 -0700 Subject: [PATCH 23/40] wordsmithing ch02.asciidoc #8 --- ch02.asciidoc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index 1d8f6db3..25d19ef8 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -118,7 +118,7 @@ Finally, another transaction form that is seen often on the bitcoin ledger is a .Transaction Distributing Funds image::images/Bitcoin_Transaction_Structure_Distribution.png["Distributing Transaction"] -=== Constructing A Transaction +=== Constructing a Transaction Alice's wallet application contains all the logic for selecting appropriate inputs and outputs to build a transaction to Alice's specification. Alice only needs to specify a destination and an amount and the rest happens in the wallet application without her seeing the details. Importantly, a wallet application can construct transactions even if it is completely offline. Like writing a cheque at home and later sending it to the bank in an envelope, the transaction does not need to be constructed and signed while connected to the bitcoin network. It only has to be sent to the network eventually for it to be executed. @@ -126,7 +126,7 @@ Alice's wallet application contains all the logic for selecting appropriate inpu Alice's wallet application will first have to find inputs that can pay for the amount she wants to send to Bob. Most wallet applications keep a small database of "unspent transaction outputs" that are locked (encumbered) with the wallet's own keys. Therefore, Alice's wallet would contain a copy of the transaction output from Joe's transaction which was created in exchange for cash (see <>). A bitcoin wallet application that runs as a full-index client actually contains a copy of *every unspent output* from every transaction in the blockchain. This allows a wallet to construct transaction inputs as well as to quickly verify incoming transactions as having correct inputs. -If the wallet application does not maintain a copy of unspent transaction outputs, it can query the bitcoin network to retrieve this information, using a variety of APIs available by different providers, or by asking a full-index node using the bitcoin JSON RPC API. Below we see an example of a RESTful API request, constructed as a HTTP GET command to a specific URL. This URL will return all the unspent transaction outputs for an address, giving any application the information it needs to construct transaction inputs for spending. We use the simple command-line HTTP client _cURL_ to retrieve the response: +If the wallet application does not maintain a copy of unspent transaction outputs, it can query the bitcoin network to retrieve this information, using a variety of APIs available by different providers, or by asking a full-index node using the bitcoin JSON RPC API. Below we see an example of a RESTful API request, constructed as an HTTP GET command to a specific URL. This URL will return all the unspent transaction outputs for an address, giving any application the information it needs to construct transaction inputs for spending. We use the simple command-line HTTP client _cURL_ to retrieve the response: .Look up all the unspent outputs for Alice's address 1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK ---- @@ -194,15 +194,15 @@ Since the transaction contains all the information necessary to process, it does ===== How it propagates -Alice's wallet application can send the new transaction to any of the other bitcoin clients it is connected to over any Internet connection: wired, WiFi, or mobile. Her bitcoin wallet does not have to be connected to Bob's bitcoin wallet directly and she does not have to use the Internet connection offered by the cafe, though both those options are possible too. Any bitcoin network node (other client) that receives a valid transaction it has not seen before, will immediately forward it to other nodes it is connected to. Thus, the transaction rapidly propagates out across the peer-to-peer network, reaching a large percentage of the nodes within a few seconds. +Alice's wallet application can send the new transaction to any of the other bitcoin clients it is connected to over any Internet connection: wired, WiFi, or mobile. Her bitcoin wallet does not have to be connected to Bob's bitcoin wallet directly and she does not have to use the Internet connection offered by the cafe, though both those options are possible too. Any bitcoin network node (other client) that receives a valid transaction it has not seen before, will immediately forward it to other nodes to which it is connected. Thus, the transaction rapidly propagates out across the peer-to-peer network, reaching a large percentage of the nodes within a few seconds. ===== Bob's view -If Bob's bitcoin wallet application is directly connected to Alice's wallet application, it may be the first node to receive the transaction. However, even if Alice's wallet sends it through other nodes, the transaction will reach Bob's wallet within a few seconds. Bob's wallet will immediately identify Alice's transaction as an incoming payment because it contains outputs redeemable by Bob's keys. Bob's wallet application can also independently verify that the transaction is well-formed, uses previously-unspent inputs and contains sufficient transaction fees to be included in the next block. At this point Bob can assume, with little risk, that the transaction will shortly be included in a block and confirmed. +If Bob's bitcoin wallet application is directly connected to Alice's wallet application, Bob's wallet application may be the first node to receive the transaction. However, even if Alice's wallet sends the transaction through other nodes, it will reach Bob's wallet within a few seconds. Bob's wallet will immediately identify Alice's transaction as an incoming payment because it contains outputs redeemable by Bob's keys. Bob's wallet application can also independently verify that the transaction is well-formed, uses previously-unspent inputs and contains sufficient transaction fees to be included in the next block. At this point Bob can assume, with little risk, that the transaction will shortly be included in a block and confirmed. [TIP] ==== -A common misconception about bitcoin transactions is that they must be "confirmed" by waiting 10 minutes for a new block, or up to sixty minutes for a full six confirmations. While confirmations ensure the transaction has been accepted by the whole network, such a delay is unnecessary for small value items like a cup of coffee. A merchant may accept a valid small-value transaction with no confirmations, with no more risk than a credit card payment made without ID or a signature, as many do today. +A common misconception about bitcoin transactions is that they must be "confirmed" by waiting 10 minutes for a new block, or up to sixty minutes for a full six confirmations. While confirmations ensure the transaction has been accepted by the whole network, such a delay is unnecessary for small value items like a cup of coffee. A merchant may accept a valid small-value transaction with no confirmations, with no more risk than a credit card payment made without ID or a signature, like merchants routinely accept today. ==== === Bitcoin Mining From 95bf1158ca1cf5765f524ac3b01f43d6588e3e33 Mon Sep 17 00:00:00 2001 From: Ed Eykholt Date: Mon, 28 Jul 2014 22:06:22 -0700 Subject: [PATCH 24/40] wordsmithing ch02.asciidoc #9 --- ch02.asciidoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index 25d19ef8..8b072508 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -209,12 +209,12 @@ A common misconception about bitcoin transactions is that they must be "confirme The transaction is now propagated on the bitcoin network. It does not become part of the shared ledger (the _blockchain_) until it is verified and included in a block by a process called _mining_. See <> for a detailed explanation. -The bitcoin system of trust is based on computation. Transactions are bundled into _blocks_ which require an enormous amount of computation to prove, but only a small amount of computation to verify as proven. This process is called _mining_ and serves two purposes in bitcoin: +The bitcoin system of trust is based on computation. Transactions are bundled into _blocks_, which require an enormous amount of computation to prove, but only a small amount of computation to verify as proven. This process is called _mining_ and serves two purposes in bitcoin: -* Mining creates new bitcoins in each block, almost like a central bank printing new money. The amount of bitcoin created is fixed and diminishes with time. +* Mining creates new bitcoins in each block, almost like a central bank printing new money. The protocol regulates the bitcoin creation rate over time: It sets a fixed amount of bitcoin created per block, gradually reduces the amount created in future blocks, and will ultimately produce a predictable amount of total bitcoin. * Mining creates trust by ensuring that transactions are only confirmed if enough computational power was devoted to the block that contains them. More blocks mean more computation which means more trust. -A good way to describe mining is like a giant competitive game of sudoku that resets every time someone finds a solution and whose difficulty automatically adjusts so that it takes approximately 10 minutes to find a solution. Imagine a giant sudoku puzzle, several thousand rows and columns in size. If I show you a completed puzzle you can verify it quite quickly. If it is empty, however, it takes a lot of work to solve! The difficulty of the sudoku can be adjusted by changing its size (more or fewer rows and columns), but it can still be verified quite easily even if it is very large. The "puzzle" used in bitcoin is based on a cryptographic hash and exhibits similar characteristics: it is asymmetrically hard to solve, but easy to verify and its difficulty can be adjusted. +A good way to describe mining is like a giant competitive game of sudoku that resets every time someone finds a solution and whose difficulty automatically adjusts so that it takes approximately 10 minutes to find a solution. Imagine a giant sudoku puzzle, several thousand rows and columns in size. If I show you a completed puzzle you can verify it quite quickly. If it is empty, however, it takes a lot of work to solve! The difficulty of the sudoku can be adjusted by changing its size (more or fewer rows and columns), but it can still be verified quite easily even if it is very large. The "puzzle" used in bitcoin is based on a cryptographic hash and exhibits similar characteristics: it is asymmetrically hard to solve but easy to verify, and its difficulty can be adjusted. In <> we introduced Jing, a computer engineering student in Shanghai. Jing is participating in the bitcoin network as a miner. Every 10 minutes or so, Jing joins thousands of other miners in a global race to find a solution to a block of transactions. Finding such a solution, the so-called "Proof-of-Work", requires quadrillions of hashing operations per second across the entire bitcoin network. The algorithm for "Proof-of-Work" involves repeatedly hashing the header of the block and a random number with the SHA256 cryptographic algorithm until a solution matching a pre-determined pattern emerges. The first miner to find such a solution wins the round of competition and publishes that block into the blockchain. From 7f7ad0cd6532a98e5f7c0e80d38be43fa26cd2ca Mon Sep 17 00:00:00 2001 From: Ed Eykholt Date: Mon, 28 Jul 2014 22:22:51 -0700 Subject: [PATCH 25/40] wordsmithing ch02.asciidoc #10 --- ch02.asciidoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index 8b072508..204ee6c5 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -218,11 +218,11 @@ A good way to describe mining is like a giant competitive game of sudoku that re In <> we introduced Jing, a computer engineering student in Shanghai. Jing is participating in the bitcoin network as a miner. Every 10 minutes or so, Jing joins thousands of other miners in a global race to find a solution to a block of transactions. Finding such a solution, the so-called "Proof-of-Work", requires quadrillions of hashing operations per second across the entire bitcoin network. The algorithm for "Proof-of-Work" involves repeatedly hashing the header of the block and a random number with the SHA256 cryptographic algorithm until a solution matching a pre-determined pattern emerges. The first miner to find such a solution wins the round of competition and publishes that block into the blockchain. -Jing started mining in 2010 using a very fast desktop computer to find a suitable Proof-of-Work for new blocks. As more miners started joining the bitcoin network, the difficulty of the problem increased rapidly. Soon, Jing and other miners upgraded to more specialized hardware, such as Graphical Processing Units (GPU), as used in gaming desktops or consoles. As this book is written, by 2014, the difficulty is so high that it is only profitable to mine with Application Specific Integrated Circuits (ASIC), essentially hundreds of mining algorithms printed in hardware, running in parallel on a single silicon chip. Jing also joined a "mining pool", which much like a lottery-pool allows several participants to share their efforts and the rewards. Jing now runs two USB-connected ASIC machines to mine for bitcoin 24 hours a day. He pays his electricity costs by selling the bitcoin he is able to generate from mining, creating some income from the profits. His computer runs a copy of bitcoind, the reference bitcoin client, as a back-end to his specialized mining software. +Jing started mining in 2010 using a very fast desktop computer to find a suitable Proof-of-Work for new blocks. As more miners started joining the bitcoin network, the difficulty of the problem increased rapidly. Soon, Jing and other miners upgraded to more specialized hardware, such as Graphical Processing Units (GPUs), as used in gaming desktops or consoles. As this book is written, by 2014, the difficulty is so high that it is only profitable to mine with Application Specific Integrated Circuits (ASIC), essentially hundreds of mining algorithms printed in hardware, running in parallel on a single silicon chip. Jing also joined a "mining pool", which much like a lottery-pool allows several participants to share their efforts and the rewards. Jing now runs two USB-connected ASIC machines to mine for bitcoin 24 hours a day. He pays his electricity costs by selling the bitcoin he is able to generate from mining, creating some income from the profits. His computer runs a copy of bitcoind, the reference bitcoin client, as a back-end to his specialized mining software. === Mining transactions in blocks -A transaction transmitted across the network is not verified until it becomes part of the global distributed ledger, the blockchain. Every ten minutes, miners generate a new block, which contains all the transactions since the last block. New transactions are constantly flowing into the network from user wallets and other applications. As these are seen by the bitcoin network nodes, they get added to a temporary "pool" of unverified transactions maintained by each node. As miners build a new block, they add unverified transactions from this pool to a new block and then attempt to solve a very hard problem (aka Proof-of-Work) to prove the validity of that new block. The process of mining is explained in detail in <> +A transaction transmitted across the network is verified only when it becomes part of the global distributed ledger, the blockchain. Every ten minutes, miners generate a new block that contains all the transactions since the last block. New transactions are constantly flowing into the network from user wallets and other applications. As these are seen by the bitcoin network nodes, they get added to a temporary "pool" of unverified transactions maintained by each node. As miners build a new block, they add unverified transactions from this pool to a new block and then attempt to solve a very hard problem (aka Proof-of-Work) to prove the validity of that new block. The process of mining is explained in detail in <>. Transactions are added to the new block, prioritized by the highest-fee transactions first and a few other criteria. Each miner starts the process of mining a new block of transactions as soon as they receive the previous block from the network, knowing they have lost that previous round of competition. They immediately create a new block, fill it with transactions and the fingerprint of the previous block and start calculating the Proof-of-Work for the new block. Each miner includes a special transaction in their block, one that pays their own bitcoin address a reward of newly created bitcoins (currently 25 BTC per block). If they find a solution that makes that block valid, they "win" this reward because their successful block is added to the global blockchain and the reward transaction they included becomes spendable. Jing, who participates in a mining pool, has set up his software to create new blocks that assign the reward to a pool address. From there, a share of the reward is distributed to Jing and other miners in proportion to the amount of work they contributed in the last round. From 6f76de968c6c76b9a13fc3e0306131204c2f4d6a Mon Sep 17 00:00:00 2001 From: Ed Eykholt Date: Mon, 28 Jul 2014 22:47:50 -0700 Subject: [PATCH 26/40] wordsmithing ch02.asciidoc #5a A better wording than "wordsmithing ch02.asciidoc #5" --- ch02.asciidoc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index 204ee6c5..dc1cfe38 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -77,7 +77,12 @@ The bitcoin network can transact in fractional values, e.g. from millibitcoins ( In simple terms, a transaction tells the network that the owner of a number of bitcoins has authorized the transfer of some of those bitcoins to another owner. The new owner can now spend these bitcoins by creating another transaction that authorizes transfer to another owner, and so on, in a chain of ownership. -Transactions are like a journal entry record in a double-entry bookkeeping ledger. In simple terms, each transaction contains one or more "inputs", which are reductions to bitcoin accounts. On the other side of the transaction, there are one or more "outputs", which are increases to other bitcoin accounts. A type of output is a "transaction fee", a small output payment collected by the miner who includes the transaction in the ledger; this fee is typically not shown together with the other outputs. The input and output (including fee) amounts balance, like credits and debits must match in a journal entry. +Transactions are like a journal entry record in a double-entry bookkeeping ledger. Each transaction contains: + +* a set of one or more "inputs", each with an input address and value +* a set of one or more "outputs", each with an output address and value + +The inputs are to become the reductions to bitcoin addresses, and the outputs increases to other bitcoin addresses. The net inputs and net outputs must balance, with the exception of an optional implicit "transaction fee", a small output payment collected by the miner. Similar to debits and credits in an accounting journal entry, the net amount (input values less output values less fee) must be zero. [[transaction-double-entry]] .Transaction As Double-Entry Bookkeeping From 4d1f53956064e6977d736ba1d5643d19953aac88 Mon Sep 17 00:00:00 2001 From: Ed Eykholt Date: Mon, 28 Jul 2014 22:54:15 -0700 Subject: [PATCH 27/40] wordsmithing ch02.asciidoc #11 --- ch02.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index dc1cfe38..df4f2e5a 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -85,7 +85,7 @@ Transactions are like a journal entry record in a double-entry bookkeeping ledge The inputs are to become the reductions to bitcoin addresses, and the outputs increases to other bitcoin addresses. The net inputs and net outputs must balance, with the exception of an optional implicit "transaction fee", a small output payment collected by the miner. Similar to debits and credits in an accounting journal entry, the net amount (input values less output values less fee) must be zero. [[transaction-double-entry]] -.Transaction As Double-Entry Bookkeeping +.Transaction as Double-Entry Bookkeeping image::images/Transaction_Double_Entry.png["Transaction Double-Entry"] The transaction also contains proof of ownership for each amount of bitcoin (inputs) whose value is transferred, in the form of a digital signature from the owner, which can be independently validated by anyone. In bitcoin terms, "spending" is signing the value (or a portion of the value) received from previous transaction for which you have the keys over to a new owner identified by a bitcoin address. From d5e4a9f2da54b88b73850b6541a5814970c54d7f Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Tue, 29 Jul 2014 10:38:01 -0400 Subject: [PATCH 28/40] block header and mining --- ch07.asciidoc | 2 +- ch08.asciidoc | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ch07.asciidoc b/ch07.asciidoc index aa931c41..71b5bd05 100644 --- a/ch07.asciidoc +++ b/ch07.asciidoc @@ -34,7 +34,7 @@ A block is a container data structure that aggregates transactions for inclusion The block header consists of three sets of block metadata. First, there is a reference to a previous block hash, which connects this block to the previous block in the blockchain. We will examine this in more detail in <>. The second set of metadata, namely the difficulty, timestamp and nonce, relate to the mining competition, as detailed in <>. The third piece of metadata is the Merkle Tree root, a data structure used to efficiently summarize all the transactions in the block. -[[block_structure]] +[[block_header_structure]] .The structure of the block header [options="header"] |======= diff --git a/ch08.asciidoc b/ch08.asciidoc index 3a2eb225..d2b0ccfe 100644 --- a/ch08.asciidoc +++ b/ch08.asciidoc @@ -299,10 +299,14 @@ The next step is to summarize all the transactions with a Merkle Tree, in order The mining node will then add a 4-byte timestamp, encoded as a Unix "Epoch" timestamp, which is based on the number of seconds elapsed from January 1st, 1970, midnight UTC/GMT. The time +1388185914+ is equal to Friday, 27 Dec 2013, 23:11:54 UTC/GMT. -Finally, the node fills in the difficulty target, which defines the required proof-of-work difficulty to make this a valid block. The difficulty is stored in the block as a "difficulty bits" metric, which is a mantissa-exponent encoding of the target. The encoding has a one-byte exponent, followed by a 3 byte mantissa (coefficient). In block 277,316, for example, the difficulty bits value is +0x1903a30c+. The first part +0x19+ is a hexadecimal exponent, while the next part +0x03a30c+ is the coefficient. The concept of a difficulty target is explained in <> and the "difficulty bits" representation is explained in <>. +The node then fills in the difficulty target, which defines the required proof-of-work difficulty to make this a valid block. The difficulty is stored in the block as a "difficulty bits" metric, which is a mantissa-exponent encoding of the target. The encoding has a one-byte exponent, followed by a 3 byte mantissa (coefficient). In block 277,316, for example, the difficulty bits value is +0x1903a30c+. The first part +0x19+ is a hexadecimal exponent, while the next part +0x03a30c+ is the coefficient. The concept of a difficulty target is explained in <> and the "difficulty bits" representation is explained in <>. + +The final field is the nonce, which is initialized to zero. + +With all the other fields filled, the block header is now complete and the process of mining can begin. The goal is now to find a value for the nonce that results in a block header hash that is less than the difficulty target. The mining node will need to test billions or trillions of nonce values before a nonce is found that satisfies the requirement. [[mining]] -=== Proof-of-Work (Mining) and Consensus +=== Proof-of-Work (Mining) ((("Mining", "Proof of Work", "SHA256", "hashing power", "difficulty", "nonce"))) Mining is the process by which new bitcoin is added to the money supply. Mining also serves to secure the bitcoin system against fraudulent transactions or transactions spending the same amount of bitcoin more than once, known as a double-spend. Miners act as a decentralized clearinghouse, validating new transactions and recording them on the global ledger. A new block, containing transactions which occurred since the last block, is "mined" every 10 minutes thereby adding those transactions to the blockchain. Transactions that become part of a block and added to the blockchain are considered "confirmed", which allows the new owners of bitcoin to spend the bitcoin they received in those transactions. Miners receive two types of reward for mining: new coins created with each new block and transaction fees from all the transactions included in the block. To earn this reward, the miners compete to solve a difficult mathematical problem based on a cryptographic hash algorithm. The solution to the problem, called the Proof-of-Work, is included in the new block and acts as proof that the miner expended significant computing effort. The competition to solve the Proof-of-Work algorithm to earn reward and the right to record transactions on the blockchain is the basis for bitcoin's security model. From 88030ed78d3260c1c1d03f0e2f62d334f34bdf0b Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Tue, 29 Jul 2014 11:22:32 -0400 Subject: [PATCH 29/40] format fix --- ch08.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch08.asciidoc b/ch08.asciidoc index d2b0ccfe..7a5e89a1 100644 --- a/ch08.asciidoc +++ b/ch08.asciidoc @@ -477,8 +477,8 @@ target = coefficient * 2^(8 * (exponent - 3)) Using that formula, we can difficulty bits is 0x1903a30c +---- target = 0x03a30c * 2^(0x08 * (0x19 - 0x03))^ - => target = 0x03a30c * 2^(0x08 * 0x16)^ => target = 238,348 * 2^176^ => target = 238,348 * 2^176^ From b1cd52b9e92278c10f25457e71cc248f4c22018a Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Tue, 29 Jul 2014 11:39:31 -0400 Subject: [PATCH 30/40] generation Tx example --- ch08.asciidoc | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/ch08.asciidoc b/ch08.asciidoc index 7a5e89a1..f58fc4d8 100644 --- a/ch08.asciidoc +++ b/ch08.asciidoc @@ -245,7 +245,7 @@ Finally, the coinbase reward (+nSubsidy+) is added to the transaction fees (+nFe With these calculations, Jing's node then constructs the generation transaction to pay himself 25.09094928 bitcoin. The generation transaction is the first transaction in the block, so we can see it in more detail using the Bitcoin Core command-line interface: -As you can see in <>, the generation transaction has a special format. Instead of a transaction input specifying a previous UTXO to spend, it has a "coinbase" input. We examined transaction inputs in <>. A regular transaction input looks like this: +As you can see in <>, the generation transaction has a special format. Instead of a transaction input specifying a previous UTXO to spend, it has a "coinbase" input. We examined transaction inputs in <>. Let's compare a regular transaction input with a generation transaction input. A regular transaction looks like this: .The structure of a "normal" transaction input [options="header"] @@ -260,9 +260,23 @@ As you can see in <>, the generation transaction has a sp In a generation transaction, the first two fields are set to values that do not represent a UTXO reference. Instead of a "Transaction Hash", the first field is filled with 32 bytes all set to zero. The "Output Index" is filled with 4 bytes all set to 0xFF (255 decimal). -The "Unlocking Script", also known as the +scriptSig+ field that follows must be between 2 and 100 bytes. This is where miners put the coinbase data. Except for the first few bytes (see below) the rest of the coinbase data can be used by miners in any way they want, it is arbitrary data. +The "Unlocking Script", also known as the +scriptSig+ field that follows is no longer used as an unlocking script. Instead, it is replaced by coinbase data, a field used by miners, which must be between 2 and 100 bytes. Except for the first few bytes (see below) the rest of the coinbase data can be used by miners in any way they want, it is arbitrary data. Most often, miners use the coinbase data to include extra nonce values and strings identifying the mining pool, as we will see in the following sections. -The first few bytes of the coinbase used to be arbitrary, but that is no longer the case. As per Bitcoin Improvement Proposal 34 (BIP0034), version-2 blocks (blocks with the version field set to 2) must contain the block height index (little endian) as a script "push" operation in the beginning of the coinbase field. +The generation transaction input, therefore, looks like this: + +.The structure of a generation transaction input +[options="header"] +|======= +|Size| Field | Description +| 32 bytes | Transaction Hash | All bits are zero: Not a transaction hash reference +| 4 bytes | Output Index | All bits are ones: 0xFFFF +| 1-9 bytes (VarInt) | Coinbase Data Size | Length of the Coinbase Data, from 2 to 100 bytes +| Variable | Coinbase Data | Arbitrary Data used for extra nonce and mining tags +In v2 blocks, must begin with block height +| 4 bytes | Sequence Number | Set to 0xFFFFFFFF +|======= + +The first few bytes of the coinbase used to be arbitrary, but that is no longer the case. As per Bitcoin Improvement Proposal 34 (BIP0034), version-2 blocks (blocks with the version field set to 2) must contain the block height index as a script "push" operation in the beginning of the coinbase field. In block 277,316 we see that the coinbase (see <>), which is in the "Unlocking Script" or scriptSig field of the transaction input, contains the hexadecimal value +03443b0403858402062f503253482f+. Let's decode this value. @@ -272,7 +286,7 @@ The next few hexadecimal digits (+03858402062+) are used to encode an extra _non The final part of the coinbase data (+2f503253482f+) is the ASCII-encoded string "/P2SH/", which indicates that mining node that mined this block supports the Pay-to-Script-Hash (P2SH) improvement defined in BIP0016. The introduction of the P2SH capability required a "vote" by miners to endorse either BIP0016 or BIP0017. Those endorsing the BIP0016 implementation were to include "/P2SH/" in their coinbase data. Those endorsing the BIP0017 implementation of P2SH were to include the string "p2sh/CHV" in their coinbase data. The BIP0016 was elected as the winner, and many miners continued including the string "/P2SH/" in their coinbase to indicate support for this feature. -The single output of the generation transaction sends the value of 25.09094928 bitcoins to the miner's bitcoin address, in this case +1MxTkeEP2PmHSMze5tUZ1hAV3YTKu2Gh1N+. +Finally, the output of the generation transaction sends the value of 25.09094928 bitcoins to the miner's bitcoin address, in this case +1MxTkeEP2PmHSMze5tUZ1hAV3YTKu2Gh1N+. === Constructing the Block Header From efe3a962a93131cd601c91a57319dc81677d1f98 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Tue, 29 Jul 2014 11:54:24 -0400 Subject: [PATCH 31/40] coinbase data --- ch08.asciidoc | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/ch08.asciidoc b/ch08.asciidoc index f58fc4d8..2b39ec66 100644 --- a/ch08.asciidoc +++ b/ch08.asciidoc @@ -54,6 +54,19 @@ These conditions can be seen in detail in the functions +AcceptToMemoryPool+, +C By independently verifying each transaction as it is received and before propagating it, every node builds a pool of valid new transactions (the transaction pool), roughly in the same order. +[[mining]] +=== Mining + +Mining is the process by which new bitcoin is added to the money supply. Mining also serves to secure the bitcoin system against fraudulent transactions or transactions spending the same amount of bitcoin more than once, known as a double-spend. Miners act as a decentralized clearinghouse, validating new transactions and recording them on the global ledger. A new block, containing transactions which occurred since the last block, is "mined" every 10 minutes thereby adding those transactions to the blockchain. Transactions that become part of a block and added to the blockchain are considered "confirmed", which allows the new owners of bitcoin to spend the bitcoin they received in those transactions. Miners receive two types of reward for mining: new coins created with each new block and transaction fees from all the transactions included in the block. To earn this reward, the miners compete to solve a difficult mathematical problem based on a cryptographic hash algorithm. The solution to the problem, called the Proof-of-Work, is included in the new block and acts as proof that the miner expended significant computing effort. The competition to solve the Proof-of-Work algorithm to earn reward and the right to record transactions on the blockchain is the basis for bitcoin's security model. + +Bitcoin's security is underpinned by computation. New blocks are added to the blockchain through a consensus mechanism called the _Proof-of-Work_ (PoW) that requires a predictable computational effort, one that takes approximately 10 minutes to solve on average. Specialized bitcoin nodes called _miners_ validate transactions and collect them into blocks, then attempt to find the solution that satisfies the Proof-of-Work algorithm. The first miner to find such a solution, propagates the newly created block across the network. All other nodes on the network verify that the new block contains valid transactions and satisfies the Proof-of-Work algorithm, then they add it to the blockchain, thereby extending it by one block. The miners add a special coin generation transaction into the blocks they build, which creates new bitcoin from nothing and is payable to the miner's own bitcoin address. Once the block is accepted as valid by the entire network, that transaction is also recorded on the blockchain, thereby rewarding the miner for the computational effort it took to satisfy the Proof-of-Work. This de-centralized consensus mechanism, based on a global competition and requiring computation to create new blocks, is the basis for the security of the bitcoin transaction ledger and also for the issuance of new bitcoin. {move the last sentence to the beginning of the paragraph - to explain more about security} The equilibrium between the incentive of bitcoin reward and the immense computing effort required to win it force the participants to behave honestly, without the need for a centralized clearinghouse or currency issuer. The bitcoin consensus mechanism is a dynamic, self-regulating and completely decentralized security model that operates at very large scale. + +The process of new coin generation is called mining, because the reward is designed to simulate diminishing returns, just like mining for precious metals. Bitcoin's money supply is created through mining, just like a central bank issues new money by printing bank notes. The amount of newly created bitcoin a miner can add to a block decreases approximately every four years (or precisely every 210,000 blocks). It started at 50 bitcoin per block in January of 2009 and halved to 25 bitcoin per block in November of 2012. It will halve again to 12.5 bitcoin per block sometime in 2016. Based on this formula, bitcoin mining rewards decrease exponentially until approximately the year 2140 when all 21 million bitcoin have been issued. + +Bitcoin miners also earn fees from transactions. Every transaction may include a transaction fee, in the form of a surplus of bitcoin between the transaction's inputs and outputs. The bitcoin miner gets to "keep the change" on the transactions. + +Today the fees represent 1% or less of a bitcoin miner's income, the vast majority coming from the newly minted bitcoins. However, as the reward decreases over time and the number of transactions per block increases, a greater proportion of bitcoin mining earnings will come from fees. After 2140 all bitcoin miner earnings will be in the form of transaction fees. + === Mining Nodes Some of the nodes on the bitcoin network are specialized nodes called _miners_. In Chapter 1 we introduced Jing, a computer engineering student in Shanghai China, who is a bitcoin miner. Jing earns bitcoin by running a "mining rig" which is a specialized computer-hardware system designed to mine bitcoins. Jing's specialized mining hardware is connected to a server running a full bitcoin node. Unlike Jing, some miners mine without a full node as we will see in <>. Like every other full node, Jing's node receives and propagates unconfirmed transactions on the bitcoin network. Jing's node, however, also aggregates these transactions into new blocks. @@ -192,8 +205,7 @@ $ bitcoin-cli getrawtransaction d5ada064c6417ca25c4308bd158c34b77e1c0eca2a73cda1 ---- ==== - -Unlike regular transactions, the generation transaction does not consume (spend) UTXO as inputs. Instead, it has only one input, called the _coinbase_, which creates bitcoin from nothing. The generation transaction has one output, payable to the miner's own bitcoin address. +Unlike regular transactions, the generation transaction does not consume (spend) UTXO as inputs. Instead, it has only one input, called the _coinbase_, which creates bitcoin from nothing. The generation transaction has one output, payable to the miner's own bitcoin address. The output of the generation transaction sends the value of 25.09094928 bitcoins to the miner's bitcoin address, in this case +1MxTkeEP2PmHSMze5tUZ1hAV3YTKu2Gh1N+. === Coinbase Reward and Fees @@ -258,11 +270,8 @@ As you can see in <>, the generation transaction has a sp | 4 bytes | Sequence Number | Currently-disabled Tx-replacement feature, set to 0xFFFFFFFF |======= -In a generation transaction, the first two fields are set to values that do not represent a UTXO reference. Instead of a "Transaction Hash", the first field is filled with 32 bytes all set to zero. The "Output Index" is filled with 4 bytes all set to 0xFF (255 decimal). - -The "Unlocking Script", also known as the +scriptSig+ field that follows is no longer used as an unlocking script. Instead, it is replaced by coinbase data, a field used by miners, which must be between 2 and 100 bytes. Except for the first few bytes (see below) the rest of the coinbase data can be used by miners in any way they want, it is arbitrary data. Most often, miners use the coinbase data to include extra nonce values and strings identifying the mining pool, as we will see in the following sections. -The generation transaction input, therefore, looks like this: +The generation transaction input, however, looks like this: .The structure of a generation transaction input [options="header"] @@ -276,6 +285,14 @@ In v2 blocks, must begin with block height | 4 bytes | Sequence Number | Set to 0xFFFFFFFF |======= +In a generation transaction, the first two fields are set to values that do not represent a UTXO reference. Instead of a "Transaction Hash", the first field is filled with 32 bytes all set to zero. The "Output Index" is filled with 4 bytes all set to 0xFF (255 decimal). The "Unlocking Script" is replaced by coinbase data, an arbitrary data field used by the miners. + +==== Coinbase Data + +Generation transactions do not have an unlocking script (a.k.a scriptSig) field. Instead, this field is replaced by coinbase data, which must be between 2 and 100 bytes. Except for the first few bytes (see below) the rest of the coinbase data can be used by miners in any way they want, it is arbitrary data. + +In the genesis block, for example, Satoshi Nakamoto added the text "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks" in the coinbase data, using it as a proof of the date and to convey a message. Currently, miners use the coinbase data to include extra nonce values (see <>) and strings identifying the mining pool, as we will see in the following sections. + The first few bytes of the coinbase used to be arbitrary, but that is no longer the case. As per Bitcoin Improvement Proposal 34 (BIP0034), version-2 blocks (blocks with the version field set to 2) must contain the block height index as a script "push" operation in the beginning of the coinbase field. In block 277,316 we see that the coinbase (see <>), which is in the "Unlocking Script" or scriptSig field of the transaction input, contains the hexadecimal value +03443b0403858402062f503253482f+. Let's decode this value. @@ -284,9 +301,7 @@ The first byte, +03+ instructs the script execution engine to push the next 3 by The next few hexadecimal digits (+03858402062+) are used to encode an extra _nonce_, or random value, used to find a suitable proof-of-work solution. This is discussed in more detail in the next section on <> -The final part of the coinbase data (+2f503253482f+) is the ASCII-encoded string "/P2SH/", which indicates that mining node that mined this block supports the Pay-to-Script-Hash (P2SH) improvement defined in BIP0016. The introduction of the P2SH capability required a "vote" by miners to endorse either BIP0016 or BIP0017. Those endorsing the BIP0016 implementation were to include "/P2SH/" in their coinbase data. Those endorsing the BIP0017 implementation of P2SH were to include the string "p2sh/CHV" in their coinbase data. The BIP0016 was elected as the winner, and many miners continued including the string "/P2SH/" in their coinbase to indicate support for this feature. - -Finally, the output of the generation transaction sends the value of 25.09094928 bitcoins to the miner's bitcoin address, in this case +1MxTkeEP2PmHSMze5tUZ1hAV3YTKu2Gh1N+. +The final part of the coinbase data (+2f503253482f+) is the ASCII-encoded string "/P2SH/", which indicates that mining node that mined this block supports the Pay-to-Script-Hash (P2SH) improvement defined in BIP0016. The introduction of the P2SH capability required a "vote" by miners to endorse either BIP0016 or BIP0017. Those endorsing the BIP0016 implementation were to include "/P2SH/" in their coinbase data. Those endorsing the BIP0017 implementation of P2SH were to include the string "p2sh/CHV" in their coinbase data. The BIP0016 was elected as the winner, and many miners continued including the string "/P2SH/" in their coinbase to indicate support for this feature. === Constructing the Block Header @@ -319,22 +334,7 @@ The final field is the nonce, which is initialized to zero. With all the other fields filled, the block header is now complete and the process of mining can begin. The goal is now to find a value for the nonce that results in a block header hash that is less than the difficulty target. The mining node will need to test billions or trillions of nonce values before a nonce is found that satisfies the requirement. -[[mining]] -=== Proof-of-Work (Mining) -((("Mining", "Proof of Work", "SHA256", "hashing power", "difficulty", "nonce"))) -Mining is the process by which new bitcoin is added to the money supply. Mining also serves to secure the bitcoin system against fraudulent transactions or transactions spending the same amount of bitcoin more than once, known as a double-spend. Miners act as a decentralized clearinghouse, validating new transactions and recording them on the global ledger. A new block, containing transactions which occurred since the last block, is "mined" every 10 minutes thereby adding those transactions to the blockchain. Transactions that become part of a block and added to the blockchain are considered "confirmed", which allows the new owners of bitcoin to spend the bitcoin they received in those transactions. Miners receive two types of reward for mining: new coins created with each new block and transaction fees from all the transactions included in the block. To earn this reward, the miners compete to solve a difficult mathematical problem based on a cryptographic hash algorithm. The solution to the problem, called the Proof-of-Work, is included in the new block and acts as proof that the miner expended significant computing effort. The competition to solve the Proof-of-Work algorithm to earn reward and the right to record transactions on the blockchain is the basis for bitcoin's security model. - -Bitcoin's security is underpinned by computation. New blocks are added to the blockchain through a consensus mechanism called the _Proof-of-Work_ (PoW) that requires a predictable computational effort, one that takes approximately 10 minutes to solve on average. Specialized bitcoin nodes called _miners_ validate transactions and collect them into blocks, then attempt to find the solution that satisfies the Proof-of-Work algorithm. The first miner to find such a solution, propagates the newly created block across the network. All other nodes on the network verify that the new block contains valid transactions and satisfies the Proof-of-Work algorithm, then they add it to the blockchain, thereby extending it by one block. The miners add a special coin generation transaction into the blocks they build, which creates new bitcoin from nothing and is payable to the miner's own bitcoin address. Once the block is accepted as valid by the entire network, that transaction is also recorded on the blockchain, thereby rewarding the miner for the computational effort it took to satisfy the Proof-of-Work. This de-centralized consensus mechanism, based on a global competition and requiring computation to create new blocks, is the basis for the security of the bitcoin transaction ledger and also for the issuance of new bitcoin. {move the last sentence to the beginning of the paragraph - to explain more about security} The equilibrium between the incentive of bitcoin reward and the immense computing effort required to win it force the participants to behave honestly, without the need for a centralized clearinghouse or currency issuer. The bitcoin consensus mechanism is a dynamic, self-regulating and completely decentralized security model that operates at very large scale. - -The process of new coin generation is called mining, because the reward is designed to simulate diminishing returns, just like mining for precious metals. Bitcoin's money supply is created through mining, just like a central bank issues new money by printing bank notes. The amount of newly created bitcoin a miner can add to a block decreases approximately every four years (or precisely every 210,000 blocks). It started at 50 bitcoin per block in January of 2009 and halved to 25 bitcoin per block in November of 2012. It will halve again to 12.5 bitcoin per block sometime in 2016. Based on this formula, bitcoin mining rewards decrease exponentially until approximately the year 2140 when all 21 million bitcoin have been issued. - -Bitcoin miners also earn fees from transactions. Every transaction may include a transaction fee, in the form of a surplus of bitcoin between the transaction's inputs and outputs. The bitcoin miner gets to "keep the change" on the transactions. - -Today the fees represent 1% or less of a bitcoin miner's income, the vast majority coming from the newly minted bitcoins. However, as the reward decreases over time and the number of transactions per block increases, a greater proportion of bitcoin mining earnings will come from fees. After 2140 all bitcoin miner earnings will be in the form of transaction fees. - -[[figure_sha256_logical]] -.The Secure Hash Algorithm (SHA-256) -image::images/sha256-logical.png["SHA256"] +=== Proof-of-Work With SHA-256, the output is always 256 bits long, regardless of the size of the input. In the example below, we will use the Python interpreter to calculate the SHA256 hash of the phrase "I am Satoshi Nakamoto". From 27b9676294daa863617f8e45830379e7dbe50542 Mon Sep 17 00:00:00 2001 From: Ed Eykholt Date: Tue, 29 Jul 2014 18:34:43 -0700 Subject: [PATCH 32/40] Two or three grammar fixes ch03.asciidoc --- ch03.asciidoc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ch03.asciidoc b/ch03.asciidoc index 88bc1330..f7fbe304 100644 --- a/ch03.asciidoc +++ b/ch03.asciidoc @@ -5,7 +5,7 @@ You can download the Reference Client, also known as _Bitcoin Core_ from bitcoin.org. The reference client implements all aspects of the bitcoin system, including wallets, a transaction verification engine with a full copy of the entire transaction ledger (blockchain) and a full network node in the peer-to-peer bitcoin network. -Go to http://bitcoin.org/en/choose-your-wallet and select "Bitcoin Core" to download the reference client. Depending on your operating system, you will download an executable installer. For Windows, this is either a ZIP archive or an EXE executable. For Mac OS it is DMG disk image. Linux versions include a PPA package for Ubuntu or a TAR.GZ archive. +Go to http://bitcoin.org/en/choose-your-wallet and select "Bitcoin Core" to download the reference client. Depending on your operating system, you will download an executable installer. For Windows, this is either a ZIP archive or an EXE executable. For Mac OS it is a DMG disk image. Linux versions include a PPA package for Ubuntu or a TAR.GZ archive. [[bitcoin-choose-client]] .Bitcoin - Choose A Bitcoin Client @@ -53,7 +53,7 @@ When the git cloning operation has completed, you will have a complete local cop $ cd bitcoin ---- -By default, the local copy will be synchronized with the most recent code which may be an unstable or "beta" version of bitcoin. Before compiling the code, we want to select a specific version by checking out a release _tag_. This will synchronize the local copy with a specific snapshot of the code repository identified by a keyword tag. Tags are used by the developers to mark specific releases of the code by version number. First, to find the available tags, we use the +git tag+ command: +By default, the local copy will be synchronized with the most recent code, which may be an unstable or "beta" version of bitcoin. Before compiling the code, we want to select a specific version by checking out a release _tag_. This will synchronize the local copy with a specific snapshot of the code repository identified by a keyword tag. Tags are used by the developers to mark specific releases of the code by version number. First, to find the available tags, we use the +git tag+ command: ---- $ git tag @@ -378,7 +378,7 @@ $ bitcoind getinfo } ---- -The data is returned in JavaScript Object Notation (JSON), a format which can easily be "consumed" by all programming languages but is also quite human-readable. Among this data we see the version of the bitcoin software client (90000), protocol (70002) and wallet version (60000). We see the current balance contained in the wallet, which is zero. We see the current block height, showing us how many blocks are known to this client, 286216. We also see various statistics about the bitcoin network and the settings related to this client. We will explore these settings in more detail in the rest of this chapter. +The data is returned in JavaScript Object Notation (JSON), a format which can easily be "consumed" by all programming languages but is also quite human-readable. Among this data we see the version numbers for the bitcoin software client (90000), protocol (70002) and wallet (60000). We see the current balance contained in the wallet, which is zero. We see the current block height, showing us how many blocks are known to this client, 286216. We also see various statistics about the bitcoin network and the settings related to this client. We will explore these settings in more detail in the rest of this chapter. [TIP] ==== @@ -397,7 +397,7 @@ wallet encrypted; Bitcoin server stopping, restart to run with encrypted wallet. $ ---- -We can verify the wallet has been encrypted by running +getinfo+ again. This time you will notice a new entry +unlocked_until+ which is a counter showing how long the wallet decryption password will be stored in memory, keeping the wallet unlocked. At first this will be set to zero, meaning the wallet is locked: +We can verify the wallet has been encrypted by running +getinfo+ again. This time you will notice a new entry +unlocked_until+ that is a counter showing how long the wallet decryption password will be stored in memory, keeping the wallet unlocked. At first this will be set to zero, meaning the wallet is locked: ---- $ bitcoind getinfo @@ -636,7 +636,7 @@ $ bitcoind decoderawtransaction 0100000001d717...388ac00000000 The transaction decode shows all the components of this transaction, including the transaction inputs and outputs. In this case we see that the transaction that credited our new address with 50 milliBits used one input and generated two outputs. The input to this transaction was the output from a previously confirmed transaction (shown as the vin txid starting with +d3c7+ above). The two outputs correspond to the 50 millibit credit and an output with change back to the sender. -We can further explore the blockchain by examining the previous transaction referenced by its txid in this transaction using the same commands (eg. +gettransaction+). Jumping from transaction to transaction we can follow a chain of transactions back as the coins are transmitted from owner address to owner address. +We can further explore the blockchain by examining the previous transaction referenced by its txid in this transaction using the same commands (e.g., +gettransaction+). Jumping from transaction to transaction we can follow a chain of transactions back as the coins are transmitted from owner address to owner address. Once the transaction we received has been confirmed by inclusion in a block, the +gettransaction+ command will return additional information, showing the block hash (identifier) in which the transaction was included: @@ -773,7 +773,7 @@ $ bitcoind listunspent We see that the transaction +9ca8f9...+ created an output (with vout index 0) assigned to the address +1hvzSo...+ for the amount of 50 millibits, which at this point has received 7 confirmations. Transactions use previously created outputs as their inputs by referring to them by the previous txid and vout index. We will now create a transaction that will spend the 0th vout of the txid +9ca8f9...+ as its input and assign it to a new output that sends value to a new address. -First, let's look at the specific output in more detail. We use the +gettxout+ to get the details of this unspent output above. Transaction outputs are always referenced by txid and vout and these are the parameters we pass to +gettxout+: +First, let's look at the specific output in more detail. We use the +gettxout+ to get the details of this unspent output above. Transaction outputs are always referenced by txid and vout, and these are the parameters we pass to +gettxout+: ---- $ bitcoind gettxout 9ca8f969bd3ef5ec2a8685660fdbf7a8bd365524c2e1fc66c309acbae2c14ae3 0 @@ -795,7 +795,7 @@ $ bitcoind gettxout 9ca8f969bd3ef5ec2a8685660fdbf7a8bd365524c2e1fc66c309acbae2c1 } ---- -What we see above is the output that assigned 50 millibits to our address +1hvz...+. To spend this output we will create a new transaction. First, let's make an address to send the money to: +What we see above is the output that assigned 50 millibits to our address +1hvz...+. To spend this output we will create a new transaction. First, let's make an address to which we will send the money: ---- $ bitcoind getnewaddress From e90eec22864da231be3c969f185e728a0bb1ff9a Mon Sep 17 00:00:00 2001 From: Ed Eykholt Date: Tue, 29 Jul 2014 18:52:03 -0700 Subject: [PATCH 33/40] italics for hash() in ch03.asciidoc italicized the 3 occurrences of inline hash() types, e.g.: _transaction hash (txid)_ so they are easier to parse when reading --- ch03.asciidoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ch03.asciidoc b/ch03.asciidoc index f7fbe304..4c7b01bc 100644 --- a/ch03.asciidoc +++ b/ch03.asciidoc @@ -577,7 +577,7 @@ $ bitcoind gettransaction 9ca8f969bd3ef5ec2a8685660fdbf7a8bd365524c2e1fc66c309ac Transaction IDs are not authoritative until a transaction has been confirmed. Absence of a transaction hash in the blockchain does not mean the transaction was not processed. This is known as "transaction malleability", as transaction hashes can be modified prior to confirmation in a block. After confirmation, the txid is immutable and authoritative. ==== -The transaction form shown above with the command +gettransaction+ is the simplified form. To retrieve the full transaction code and decode it we will use two commands, +getrawtransaction+ and +decoderawtransaction+. First, +getrawtransaction+ takes the transaction hash (txid) as a parameter and returns the full transaction as a "raw" hex string, exactly as it exists on the bitcoin network: +The transaction form shown above with the command +gettransaction+ is the simplified form. To retrieve the full transaction code and decode it we will use two commands, +getrawtransaction+ and +decoderawtransaction+. First, +getrawtransaction+ takes the _transaction hash (txid)_ as a parameter and returns the full transaction as a "raw" hex string, exactly as it exists on the bitcoin network: ---- $ bitcoind getrawtransaction 9ca8f969bd3ef5ec2a8685660fdbf7a8bd365524c2e1fc66c309acbae2c14ae3 @@ -638,7 +638,7 @@ The transaction decode shows all the components of this transaction, including t We can further explore the blockchain by examining the previous transaction referenced by its txid in this transaction using the same commands (e.g., +gettransaction+). Jumping from transaction to transaction we can follow a chain of transactions back as the coins are transmitted from owner address to owner address. -Once the transaction we received has been confirmed by inclusion in a block, the +gettransaction+ command will return additional information, showing the block hash (identifier) in which the transaction was included: +Once the transaction we received has been confirmed by inclusion in a block, the +gettransaction+ command will return additional information, showing the _block hash (identifier)_ in which the transaction was included: ---- $ bitcoind gettransaction 9ca8f969bd3ef5ec2a8685660fdbf7a8bd365524c2e1fc66c309acbae2c14ae3 @@ -943,7 +943,7 @@ $ bitcoind sendrawtransaction 0100000001e34ac1e2baac09c366fce1c2245536bda8f7db0f ae74538baa914f3799081ba78429d5d84f36a0127438e9f721dff584ac17b346 ---- -The command +sendrawtransaction+ returns a transaction hash (txid) as it submits the transaction on the network. We can now query that transaction id with +gettransaction+: +The command +sendrawtransaction+ returns a _transaction hash (txid)_ as it submits the transaction on the network. We can now query that transaction id with +gettransaction+: ---- $ bitcoind gettransaction ae74538baa914f3799081ba78429d5d84f36a0127438e9f721dff584ac17b346 From fa657f5e40b7067d82f2ff59b9b2f7ae648fac81 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Tue, 29 Jul 2014 22:42:11 -0400 Subject: [PATCH 34/40] chapter re-organization, mining first, then consensus --- ch08.asciidoc | 129 ++++++++++++++++++++++++-------------------------- 1 file changed, 61 insertions(+), 68 deletions(-) diff --git a/ch08.asciidoc b/ch08.asciidoc index 2b39ec66..cb769149 100644 --- a/ch08.asciidoc +++ b/ch08.asciidoc @@ -3,8 +3,50 @@ *DRAFT - DO NOT SUBMIT ISSUES OR PULL REQUESTS YET PLEASE - CONSTANT CHANGES HAPPENING* -=== Introduction -((("blockchain"))) +[[mining]] +=== Introduction - Mining and Consensus + +Mining is the process by which new bitcoin is added to the money supply. Mining also serves to secure the bitcoin system against fraudulent transactions or transactions spending the same amount of bitcoin more than once, known as a double-spend. Miners act as a decentralized clearinghouse, validating new transactions and recording them on the global ledger. A new block, containing transactions which occurred since the last block, is "mined" every 10 minutes thereby adding those transactions to the blockchain. Transactions that become part of a block and added to the blockchain are considered "confirmed", which allows the new owners of bitcoin to spend the bitcoin they received in those transactions. Miners receive two types of reward for mining: new coins created with each new block and transaction fees from all the transactions included in the block. To earn this reward, the miners compete to solve a difficult mathematical problem based on a cryptographic hash algorithm. The solution to the problem, called the Proof-of-Work, is included in the new block and acts as proof that the miner expended significant computing effort. The competition to solve the Proof-of-Work algorithm to earn reward and the right to record transactions on the blockchain is the basis for bitcoin's security model. + +=== Mining + +Bitcoin's security is underpinned by computation. New blocks are added to the blockchain through a consensus mechanism called the _Proof-of-Work_ (PoW) that requires a predictable computational effort, one that takes approximately 10 minutes to solve on average. Specialized bitcoin nodes called _miners_ validate transactions and collect them into blocks, then attempt to find the solution that satisfies the Proof-of-Work algorithm. The first miner to find such a solution, propagates the newly created block across the network. All other nodes on the network verify that the new block contains valid transactions and satisfies the Proof-of-Work algorithm, then they add it to the blockchain, thereby extending it by one block. The miners add a special coin generation transaction into the blocks they build, which creates new bitcoin from nothing and is payable to the miner's own bitcoin address. Once the block is accepted as valid by the entire network, that transaction is also recorded on the blockchain, thereby rewarding the miner for the computational effort it took to satisfy the Proof-of-Work. This de-centralized consensus mechanism, based on a global competition and requiring computation to create new blocks, is the basis for the security of the bitcoin transaction ledger and also for the issuance of new bitcoin. {move the last sentence to the beginning of the paragraph - to explain more about security} The equilibrium between the incentive of bitcoin reward and the immense computing effort required to win it force the participants to behave honestly, without the need for a centralized clearinghouse or currency issuer. The bitcoin consensus mechanism is a dynamic, self-regulating and completely decentralized security model that operates at very large scale. + +The process of new coin generation is called mining, because the reward is designed to simulate diminishing returns, just like mining for precious metals. Bitcoin's money supply is created through mining, just like a central bank issues new money by printing bank notes. The amount of newly created bitcoin a miner can add to a block decreases approximately every four years (or precisely every 210,000 blocks). It started at 50 bitcoin per block in January of 2009 and halved to 25 bitcoin per block in November of 2012. It will halve again to 12.5 bitcoin per block sometime in 2016. Based on this formula, bitcoin mining rewards decrease exponentially until approximately the year 2140 when all 21 million bitcoin have been issued. + +Bitcoin miners also earn fees from transactions. Every transaction may include a transaction fee, in the form of a surplus of bitcoin between the transaction's inputs and outputs. The bitcoin miner gets to "keep the change" on the transactions. + +Today the fees represent 1% or less of a bitcoin miner's income, the vast majority coming from the newly minted bitcoins. However, as the reward decreases over time and the number of transactions per block increases, a greater proportion of bitcoin mining earnings will come from fees. After 2140 all bitcoin miner earnings will be in the form of transaction fees. + +=== Mining Nodes + +Some of the nodes on the bitcoin network are specialized nodes called _miners_. In Chapter 1 we introduced Jing, a computer engineering student in Shanghai China, who is a bitcoin miner. Jing earns bitcoin by running a "mining rig" which is a specialized computer-hardware system designed to mine bitcoins. Jing's specialized mining hardware is connected to a server running a full bitcoin node. Unlike Jing, some miners mine without a full node as we will see in <>. Like every other full node, Jing's node receives and propagates unconfirmed transactions on the bitcoin network. Jing's node, however, also aggregates these transactions into new blocks. + +Jing's node is listening for new blocks, propagated on the bitcoin network, as do all nodes. However, the arrival of a new block has special significance for a mining node. The competition among miners effectively ends with the propagation of a new block which acts as an announcement of a winner. To a miner, receiving a new block means someone else won the competition and they lost. However, the end of one round of a competition is also the beginning of the next round. The new block is not just a checkered flag, marking the end of the race, it is also the starting pistol starting the race for the next block. + +==== Bitcoin Economics and Currency Creation + +Bitcoins are "minted" during the creation of each block at a fixed and diminishing rate. Each block, generated on average every 10 minutes, contains a _reward_ that consists of entirely new bitcoins. The reward was 50BTC for the first four years of operation of the network. Every four years the reward is decreased by 50%, resulting in a diminishing rate of issuance over time. In 2012, the reward was decreased to 25BTC and it will decrease again to 12.5BTC in 2016. By approximately 2140, the last fragments of a bitcoin will be mined, for a total of 21 million bitcoins. {Clarify coinbase transaction as first - includes the reward and transactions. Discuss how the coinbase transaction will change in 2140} + +The finite and diminishing issuance creates a fixed monetary supply that resists inflation. Unlike a fiat currency which can be printed in infinite numbers by a central bank, bitcoin can never be inflated by printing. + +===== Monetary supply + +Bitcoin's monetary supply is defined as the number of coins in circulation (minted). Like any other currency, this measure of monetary supply is called M0, which represents the narrowest measure of the money supply. Just like any other currency, bitcoin can also have a _fractional reserve banking_ which means that an organization can trade bitcoins "off blockchain" which are not part of the M0 monetary measure, but of the broader monetary supply measures M1-M3. {have you explained M1-M3?}{also, i think you should explain fractional reserve banking a bit here} + +While the total bitcoins in circulation will not exceed 21m, that monetary base can support a much broader economy through fractional reserve banking and expansion of the available credit. + +===== Deflationary Money + +The most important and debated consequence of a fixed and diminishing monetary issuance is that the currency will tend to be inherently _deflationary_. Deflation is the phenomenon of appreciation of value due to a mismatch in supply and demand that drives up the value (and exchange rate) of a currency. The opposite of inflation, price deflation means that your money has more purchasing power over time. + +Many economists argue that a deflationary economy is a disaster that should be avoided at all costs. That is because in a period of rapid deflation, the incentives for regular people are to hoard the money and not spend it, hoping that prices will fall. Such a phenomenon unfolded during Japan's "Lost Decade", when a complete collapse of demand pushed the currency into a deflationary spiral. + +Bitcoin experts argue that deflation is not bad *per se*. Rather, we associate deflation with a collapse in demand because that is the only example of deflation we have to study. In a fiat currency with the possibility of unlimited printing, it is very difficult to enter a deflationary spiral unless there is a complete collapse in demand and an unwillingness to print money. Deflation in bitcoin is not caused by a collapse in demand, but by predictably constrained supply. + +In practice, it has become evident that the hoarding instinct caused by a deflationary currency can be overcome by discounting from vendors, until the discount overcomes the hoarding instinct of the buyer. Since the seller is also motivated to hoard, the discount becomes the equilibrium price at which the two hoarding instincts are matched. With discounts of 30% on the bitcoin price, most bitcoin retailers are not experiencing difficulty overcoming the hoarding instinct and generating revenue. It remains to be seen whether the deflationary aspect of the currency is really a problem when it is not driven by rapid economic retraction. + +=== De-centralized Consensus In the previous chapter we looked at the blockchain, the global public ledger (list) of all transactions, which everyone in the bitcoin network accepts as the authoritative record of ownership. @@ -12,7 +54,7 @@ But how can everyone in the network agree on a single universal "truth" about wh Satoshi Nakamoto's main invention is the decentralized mechanism for _emergent consensus_. Emergent, because consensus is not achieved explicitly - there is no election or fixed moment when consensus occurs. Instead, consensus is an emergent artifact of the asynchronous interaction of thousands of independent nodes, all following simple rules. All the properties of bitcoin, including currency, transactions, payments and the security model that does not depend central authority or trust derive from this invention. -Bitcoin's consensus emerges from the interplay of four processes that occur independently on nodes across the network: +Bitcoin's de-centralized consensus emerges from the interplay of four processes that occur independently on nodes across the network: * Independent verification of each transaction, by every full node, based on a comprehensive list of criteria * Independent aggregation of those transactions into new blocks by mining nodes, coupled with demonstrated computation through a Proof-of-Work algorithm @@ -21,11 +63,11 @@ Bitcoin's consensus emerges from the interplay of four processes that occur inde In the next few sections we will examine these processes and how they interact to create the emergent property of network-wide consensus that allows any bitcoin node to assemble its own copy of the authoritative, trusted, public, global ledger. -{check transition here - maybe move this above previous paragraph?} Each of these processes also aggregates smaller bitcoin units into larger data structures. First, unspent transaction outputs (UTXO) are aggregated into transactions. Next, many transactions are aggregated into a block. Finally, blocks are added to a chain of blocks, the blockchain. In the previous chapter we looked at transactions as a data structure. In this chapter we will also look at the larger data structures: blocks and the blockchain. +Before we explore the details of emergent consensus, we will first discuss mining and the central role it plays in this process. === Independent Verification of Transactions -In the previous chapter {check reference} we saw how wallet software creates transactions by collecting UTXO, providing the appropriate unlocking scripts and then constructing new outputs assigned to a new owner. The resulting transaction is then sent to the neighboring nodes in the bitcoin network so that it may be propagated across the entire bitcoin network. +In the previous chapter we saw how wallet software creates transactions by collecting UTXO, providing the appropriate unlocking scripts and then constructing new outputs assigned to a new owner. The resulting transaction is then sent to the neighboring nodes in the bitcoin network so that it may be propagated across the entire bitcoin network. However, before forwarding transactions to its neighbors, every bitcoin node that receives a transaction will first verify the transaction. This ensures that only valid transactions are propagated across the network, while invalid transactions are discarded at the first node that encounters them. @@ -54,27 +96,6 @@ These conditions can be seen in detail in the functions +AcceptToMemoryPool+, +C By independently verifying each transaction as it is received and before propagating it, every node builds a pool of valid new transactions (the transaction pool), roughly in the same order. -[[mining]] -=== Mining - -Mining is the process by which new bitcoin is added to the money supply. Mining also serves to secure the bitcoin system against fraudulent transactions or transactions spending the same amount of bitcoin more than once, known as a double-spend. Miners act as a decentralized clearinghouse, validating new transactions and recording them on the global ledger. A new block, containing transactions which occurred since the last block, is "mined" every 10 minutes thereby adding those transactions to the blockchain. Transactions that become part of a block and added to the blockchain are considered "confirmed", which allows the new owners of bitcoin to spend the bitcoin they received in those transactions. Miners receive two types of reward for mining: new coins created with each new block and transaction fees from all the transactions included in the block. To earn this reward, the miners compete to solve a difficult mathematical problem based on a cryptographic hash algorithm. The solution to the problem, called the Proof-of-Work, is included in the new block and acts as proof that the miner expended significant computing effort. The competition to solve the Proof-of-Work algorithm to earn reward and the right to record transactions on the blockchain is the basis for bitcoin's security model. - -Bitcoin's security is underpinned by computation. New blocks are added to the blockchain through a consensus mechanism called the _Proof-of-Work_ (PoW) that requires a predictable computational effort, one that takes approximately 10 minutes to solve on average. Specialized bitcoin nodes called _miners_ validate transactions and collect them into blocks, then attempt to find the solution that satisfies the Proof-of-Work algorithm. The first miner to find such a solution, propagates the newly created block across the network. All other nodes on the network verify that the new block contains valid transactions and satisfies the Proof-of-Work algorithm, then they add it to the blockchain, thereby extending it by one block. The miners add a special coin generation transaction into the blocks they build, which creates new bitcoin from nothing and is payable to the miner's own bitcoin address. Once the block is accepted as valid by the entire network, that transaction is also recorded on the blockchain, thereby rewarding the miner for the computational effort it took to satisfy the Proof-of-Work. This de-centralized consensus mechanism, based on a global competition and requiring computation to create new blocks, is the basis for the security of the bitcoin transaction ledger and also for the issuance of new bitcoin. {move the last sentence to the beginning of the paragraph - to explain more about security} The equilibrium between the incentive of bitcoin reward and the immense computing effort required to win it force the participants to behave honestly, without the need for a centralized clearinghouse or currency issuer. The bitcoin consensus mechanism is a dynamic, self-regulating and completely decentralized security model that operates at very large scale. - -The process of new coin generation is called mining, because the reward is designed to simulate diminishing returns, just like mining for precious metals. Bitcoin's money supply is created through mining, just like a central bank issues new money by printing bank notes. The amount of newly created bitcoin a miner can add to a block decreases approximately every four years (or precisely every 210,000 blocks). It started at 50 bitcoin per block in January of 2009 and halved to 25 bitcoin per block in November of 2012. It will halve again to 12.5 bitcoin per block sometime in 2016. Based on this formula, bitcoin mining rewards decrease exponentially until approximately the year 2140 when all 21 million bitcoin have been issued. - -Bitcoin miners also earn fees from transactions. Every transaction may include a transaction fee, in the form of a surplus of bitcoin between the transaction's inputs and outputs. The bitcoin miner gets to "keep the change" on the transactions. - -Today the fees represent 1% or less of a bitcoin miner's income, the vast majority coming from the newly minted bitcoins. However, as the reward decreases over time and the number of transactions per block increases, a greater proportion of bitcoin mining earnings will come from fees. After 2140 all bitcoin miner earnings will be in the form of transaction fees. - -=== Mining Nodes - -Some of the nodes on the bitcoin network are specialized nodes called _miners_. In Chapter 1 we introduced Jing, a computer engineering student in Shanghai China, who is a bitcoin miner. Jing earns bitcoin by running a "mining rig" which is a specialized computer-hardware system designed to mine bitcoins. Jing's specialized mining hardware is connected to a server running a full bitcoin node. Unlike Jing, some miners mine without a full node as we will see in <>. Like every other full node, Jing's node receives and propagates unconfirmed transactions on the bitcoin network. Jing's node, however, also aggregates these transactions into new blocks. - -Jing's node is listening for new blocks, propagated on the bitcoin network, as do all nodes. However, the arrival of a new block has special significance for a mining node. The competition among miners effectively ends with the propagation of a new block which acts as an announcement of a winner. To a miner, receiving a new block means someone else won the competition and they lost. However, the end of one round of a competition is also the beginning of the next round. The new block is not just a checkered flag, marking the end of the race, it is also the starting pistol starting the race for the next block. - -The role of a mining node is to act as a gatekeeper to the public ledger. Mining nodes secure the network by validating transactions and controlling access to the blockchain. This places enormous power in mining nodes. To ensure that they follow the rules and behave honestly the bitcoin consensus mechanism imposes incentives by imposing a heavy burden and offering a lavish reward. The burden is the computational effort expended in mining which consumes electricity and therefore has a real-world cost. For those who carry that burden honestly, there is a possibility of reward. Each new block adds new bitcoin to the monetary supply; transactions within a block include transaction fees. The miner that successfully creates a new block collects both the new bitcoin and the transaction fees as a reward. Rewards are not all profit, in fact the miner will spend most of its winnings on electricity. Even successful miners are in a precarious position of marginal profitability, constantly competing under the scrutiny of the entire network. This fragile equilibrium and fierce competition ensures that honesty is the only winning strategy. - === Aggregating Transactions into Blocks After validating transactions, a bitcoin node will add them to the _memory pool_, or _transaction pool_, where transactions await until they can be included (mined) into a block. Jing's node collects, validates and relays new transactions just like any other node. Unlike other nodes, however, Jing's node will then aggregate these transactions into a _candidate block_. @@ -87,7 +108,7 @@ During the previous 10 minutes, while Jing's node was searching for a solution t Jing's node immediately constructs a new empty block, a candidate for block 277,316. This block is called a candidate block because it is not yet a valid block, as it does not contain a valid proof-of-work. The block becomes valid only if the miner succeeds in finding a solution to the proof-of-work algorithm. -=== Transaction Age, Fees and Priority +==== Transaction Age, Fees and Priority To construct the candidate block Jing's bitcoin node selects transactions from the memory pool, by applying a priority metric to each transaction and adding the highest priority transactions first. Transactions are prioritized based on the "age" of the UTXO that is being spent in their inputs, allowing for old and high-value inputs to be prioritized over newer and smaller inputs. Prioritized transactions can be sent without any fees, if there is enough space in the block. @@ -154,7 +175,7 @@ $ bitcoin-cli getblock 0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2 ---- ==== -=== The Generation Transaction +==== The Generation Transaction The first transaction added to the block is a special transaction, called a _generation transaction_ or _coinbase transaction_. This transaction is constructed by Jing's node and is his reward for the mining effort. Jing's node creates the generation transaction as a payment to his own wallet: "Pay Jing's address 25.09094928 bitcoin". The total amount of reward that Jing collects for mining a block is the sum of the coinbase reward (25 new bitcoins) and the transaction fees (0.09094928) from all the transactions included in the block. @@ -207,7 +228,7 @@ $ bitcoin-cli getrawtransaction d5ada064c6417ca25c4308bd158c34b77e1c0eca2a73cda1 Unlike regular transactions, the generation transaction does not consume (spend) UTXO as inputs. Instead, it has only one input, called the _coinbase_, which creates bitcoin from nothing. The generation transaction has one output, payable to the miner's own bitcoin address. The output of the generation transaction sends the value of 25.09094928 bitcoins to the miner's bitcoin address, in this case +1MxTkeEP2PmHSMze5tUZ1hAV3YTKu2Gh1N+. -=== Coinbase Reward and Fees +==== Coinbase Reward and Fees To construct the generation transaction, Jing's node first calculates the total amount of transaction fees, by adding all the inputs and outputs of the 418 transactions that were added to the block. The fees are calculated as: @@ -253,7 +274,7 @@ Next, the function uses the binary-right-shift operator to divide the reward (+n Finally, the coinbase reward (+nSubsidy+) is added to the transaction fees (+nFees+), and the sum is returned. -=== Structure of the Generation Transaction +==== Structure of the Generation Transaction With these calculations, Jing's node then constructs the generation transaction to pay himself 25.09094928 bitcoin. The generation transaction is the first transaction in the block, so we can see it in more detail using the Bitcoin Core command-line interface: @@ -334,7 +355,9 @@ The final field is the nonce, which is initialized to zero. With all the other fields filled, the block header is now complete and the process of mining can begin. The goal is now to find a value for the nonce that results in a block header hash that is less than the difficulty target. The mining node will need to test billions or trillions of nonce values before a nonce is found that satisfies the requirement. -=== Proof-of-Work +=== Mining the Block + +==== Proof-of-Work Algorithm With SHA-256, the output is always 256 bits long, regardless of the size of the input. In the example below, we will use the Python interpreter to calculate the SHA256 hash of the phrase "I am Satoshi Nakamoto". @@ -393,8 +416,6 @@ Each phrase produces a completely different hash result. They seem completely ra To make a challenge out of this algorithm, let's set an arbitrary target: find a phrase starting with "I am Satoshi Nakamoto" which produces a hash that starts with a zero. In numerical terms, that means finding a hash value that is less than +0x1000000000000000000000000000000000000000000000000000000000000000+. Fortunately, this isn't so difficult! If you notice above, we can see that the phrase "I am Satoshi Nakamoto13" produces the hash 0ebc56d59a34f5082aaef3d66b37a661696c2b618e62432727216ba9531041a5, which fits our criteria. It only took 13 attempts to find it. -==== Proof-of-Work Algorithm - Bitcoin's proof-of-work is very similar to the problem above. First, a miner will generate a new block, containing: ((("block"))) * Transactions waiting to be included in a block @@ -517,27 +538,7 @@ Note that the target difficulty is independent of the number of transactions or The target difficulty is closely related to the cost of electricity and the exchange rate of bitcoin vis-a-vis the currency used to pay for electricity. High performance mining systems are about as efficient as possible with the current generation of silicon fabrication, converting electricity into hashing computation at the highest rate possible. The primary influence on the mining market is the price of one kilowatt-hour in bitcoin, as that determines the profitability of mining and therefore the incentives to enter or exit the mining market. -==== Mining New Bitcoins - -Bitcoins are "minted" during the creation of each block at a fixed and diminishing rate. Each block, generated on average every 10 minutes, contains a _reward_ that consists of entirely new bitcoins. The reward was 50BTC for the first four years of operation of the network. Every four years the reward is decreased by 50%, resulting in a diminishing rate of issuance over time. In 2012, the reward was decreased to 25BTC and it will decrease again to 12.5BTC in 2016. By approximately 2140, the last fragments of a bitcoin will be mined, for a total of 21 million bitcoins. {Clarify coinbase transaction as first - includes the reward and transactions. Discuss how the coinbase transaction will change in 2140} - -The finite and diminishing issuance creates a fixed monetary supply that resists inflation. Unlike a fiat currency which can be printed in infinite numbers by a central bank, bitcoin can never be inflated by printing. - -===== Monetary supply - -Bitcoin's monetary supply is defined as the number of coins in circulation (minted). Like any other currency, this measure of monetary supply is called M0, which represents the narrowest measure of the money supply. Just like any other currency, bitcoin can also have a _fractional reserve banking_ which means that an organization can trade bitcoins "off blockchain" which are not part of the M0 monetary measure, but of the broader monetary supply measures M1-M3. {have you explained M1-M3?}{also, i think you should explain fractional reserve banking a bit here} - -While the total bitcoins in circulation will not exceed 21m, that monetary base can support a much broader economy through fractional reserve banking and expansion of the available credit. - -===== Deflationary Money - -The most important and debated consequence of a fixed and diminishing monetary issuance is that the currency will tend to be inherently _deflationary_. Deflation is the phenomenon of appreciation of value due to a mismatch in supply and demand that drives up the value (and exchange rate) of a currency. The opposite of inflation, price deflation means that your money has more purchasing power over time. - -Many economists argue that a deflationary economy is a disaster that should be avoided at all costs. That is because in a period of rapid deflation, the incentives for regular people are to hoard the money and not spend it, hoping that prices will fall. Such a phenomenon unfolded during Japan's "Lost Decade", when a complete collapse of demand pushed the currency into a deflationary spiral. - -Bitcoin experts argue that deflation is not bad *per se*. Rather, we associate deflation with a collapse in demand because that is the only example of deflation we have to study. In a fiat currency with the possibility of unlimited printing, it is very difficult to enter a deflationary spiral unless there is a complete collapse in demand and an unwillingness to print money. Deflation in bitcoin is not caused by a collapse in demand, but by predictably constrained supply. - -In practice, it has become evident that the hoarding instinct caused by a deflationary currency can be overcome by discounting from vendors, until the discount overcomes the hoarding instinct of the buyer. Since the seller is also motivated to hoard, the discount becomes the equilibrium price at which the two hoarding instincts are matched. With discounts of 30% on the bitcoin price, most bitcoin retailers are not experiencing difficulty overcoming the hoarding instinct and generating revenue. It remains to be seen whether the deflationary aspect of the currency is really a problem when it is not driven by rapid economic retraction. +=== Selecting the Highest-Difficulty Chain [[forks]] ==== Blockchain Forks @@ -600,17 +601,9 @@ As of version 0.9, Bitcoin Core's +alertnotify+ option will send alerts whenever image::images/BlockChainWithForks.png["chainforks"] -==== Competition and Coinbase -==== Mining Pools - -Jing started mining for bitcoin in 2010, when mining was not as competitive as it is today. At that time, Jing could mine bitcoin using a desktop computer. Today, he uses a much more powerful mining system based on Application Specific Integrated Circuits (ASICs), which are specialized silicon chips designed exclusively for one application - bitcoin mining. Over time, the way Jing participates in the mining process has changed slightly, but the fundamentals remain the same. We will start by looking at how Jing mined in 2010, when things were simpler and then look at how he mines today, as bitcoin mining has become a more complex and competitive activity. - - In 2010, Jing mined on a desktop computer. At the time, he would run a full bitcoin node, connected to the bitcoin network. - -===== Managed Pools -===== P2Pool -==== Mining Economics -==== Consensus Attacks -===== 51% Attack -===== Selfish Mining Attack - +=== Mining Pools +==== Managed Pools +==== P2Pool +=== Consensus Attacks +==== 51% Attack +==== Selfish Mining Attack From 8c0e2d49ef741650e54cfcf9cb1bfd2ba1971e6f Mon Sep 17 00:00:00 2001 From: Ed Eykholt Date: Wed, 30 Jul 2014 00:52:10 -0700 Subject: [PATCH 35/40] wordsmithing ch04.asciidoc Also merged two tips that had duplicate wording. --- ch04.asciidoc | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/ch04.asciidoc b/ch04.asciidoc index 0511b5a3..fb72ef5f 100644 --- a/ch04.asciidoc +++ b/ch04.asciidoc @@ -47,13 +47,13 @@ Geometrically, this third point P~3~ is calculated by drawing a line between P~1 There are a couple of special cases which explain the need for the "point at infinity". -If P~1~ and P~2~ are the same point, the line "between" P~1~ and P~2~ should extend to be the tangent on the curve at this point P~1~. This tangent will intersect the curve in exactly one new point. You can use techniques from calculus to determine the slope of the tangent line (techniques which curiously work even though we are restricting our interest to points on the curve with to integer coordinates!). +If P~1~ and P~2~ are the same point, the line "between" P~1~ and P~2~ should extend to be the tangent on the curve at this point P~1~. This tangent will intersect the curve in exactly one new point. You can use techniques from calculus to determine the slope of the tangent line. These techniques curiously work even though we are restricting our interest to points on the curve with two integer coordinates! -In some cases (ie. if P~1~ and P~2~ have the same x values but different y values), the tangent line will be exactly vertical, in which case P3 = "point at infinity". +In some cases (i.e., if P~1~ and P~2~ have the same x values but different y values), the tangent line will be exactly vertical, in which case P3 = "point at infinity". If one of P~1~ is the "point at infinity", then the sum P~1~ + P~2~ = P~2~. Similary, if P~2~ is the point at infinity, then P~1~ + P~2~ = P~1~. This shows how the point at infinity plays the roll of 0. -It turns out that + is commutative, which means that (A+B)+C = A+(B+C). That means we can write A+B+C without parantheses without any ambiguity. +It turns out that + is commutative, which means that `(A+B)+C = A+(B+C)`. That means we can write A+B+C without parentheses without any ambiguity. Now that we have defined addition, we can define multiplication in the standard way that extends addition. For a point P on the elliptic curve, if k is a whole number, then kP = P + P + P + ... + P (k times). Note that k is sometimes confusingly called an "exponent" in this case. (It would make a lot more sense to call it this if we used an operator that looked like multiplication rather than "+".) @@ -74,7 +74,7 @@ When spending bitcoins, the current bitcoin owner presents their public key and [TIP] ==== -In most implementations, the private and public keys are stored together as a _key pair_ for convenience. However, the public key can be calculated from the private key, so storing only the private key is also possible. +In most wallet implementations, the private and public keys are stored together as a _key pair_ for convenience. However, the public key can be calculated from the private key, so storing only the private key is also possible. ==== ==== Private and Public Keys @@ -92,14 +92,14 @@ A +private key+ is simply a number, picked at random. Ownership and control over [TIP] ==== -The bitcoin private key is just a number. A public key can be generated from any private key. Therefore, a public key can be generated from any number, up to 256 bits long. You can pick your keys randomly using a method as simple as dice, pencil and paper. +The bitcoin private key is just a number. A public key can be generated from any private key. Therefore, a public key can be generated from any number, up to 256 bits long. You can pick your private keys randomly using just a coin, pencil and paper: Toss a coin 256 times and you have the binary digits of a random private key you can use in a bitcoin wallet. Keys really are just a pair of numbers, the public key being calculated from the private key. ==== ===== Generating a private key from a random number The first and most important step in generating keys is to find a secure source of entropy, or randomness. Creating a bitcoin key is essentially the same as "Pick a number between 1 and 2^256^". The exact method you use to pick that number does not matter as long as it is not predictable or repeatable. Bitcoin software uses the underlying operating system's random number generators to produce 256 bits of entropy (randomness). Usually, the OS random number generator is initialized by a human source of randomness, which is why you may be asked to wiggle your mouse around for a few seconds. For the truly paranoid, nothing beats dice, pencil and paper. -More accurately, the private key can be any number between +1+ and +n - 1+, where n is a constant (n = 1.158 * 10^77^ or slightly less than 2^256^) defined as the order of the elliptic curve used in bitcoin (see <>). To create such a key, we randomly pick a 256-bit number and check that it is less than +n - 1+. In programming terms, this is usually achieved by feeding a larger string of random bits, collected from a cryptographically-secure source of randomness, into the SHA-256 hash algorithm which will conveniently produce a 256-bit number. If the result is less than +n - 1+, we have a suitable private key. Otherwise, we simply try again with another random number. +More accurately, the private key can be any number between +1+ and +n - 1+, where n is a constant (n = 1.158 * 10^77^, slightly less than 2^256^) defined as the order of the elliptic curve used in bitcoin (see <>). To create such a key, we randomly pick a 256-bit number and check that it is less than +n - 1+. In programming terms, this is usually achieved by feeding a larger string of random bits, collected from a cryptographically-secure source of randomness, into the SHA-256 hash algorithm which will conveniently produce a 256-bit number. If the result is less than +n - 1+, we have a suitable private key. Otherwise, we simply try again with another random number. [TIP] ==== @@ -138,15 +138,10 @@ $ sx newkey 5J3mBbAH58CpQ3Y5RNJpUKPE62SQ5tfcvU2JpbnkeyhfsYB1Jcn ---- -[TIP] -==== -A private key is just a number. A public key can be generated from any number, up to 256 bits long. You can pick your keys randomly using just a coin, pencil and paper. Toss a coin 256 times and you have the binary digits of a random private key you can use in a bitcoin wallet. Keys really are just a pair of numbers, one calculated from the other. -==== - [[pubkey]] ==== Public Keys -The public key is calculated from the private key using elliptic curve multiplication, which is irreversible: latexmath:[\(K = k * G\)]+ where +k+ is the private key, +G+ is a constant point called the _Generator Point_ and +K+ is the resulting public key. The reverse operation, known as "finding the discrete logarithm" -- calculating +k+ if you know +K+ -- is as difficult as trying all possible values of +k+, i.e. a brute-force search. Before we demonstrate how to generate a public key from a private key, let's look at Elliptic Curve Cryptography in a bit more detail. +The public key is calculated from the private key using elliptic curve multiplication, which is irreversible: latexmath:[\(K = k * G\)]+ where +k+ is the private key, +G+ is a constant point called the _Generator Point_ and +K+ is the resulting public key. The reverse operation, known as "finding the discrete logarithm" -- calculating +k+ if you know +K+ -- is as difficult as trying all possible values of +k+, i.e., a brute-force search. Before we demonstrate how to generate a public key from a private key, let's look at Elliptic Curve Cryptography in a bit more detail. [[elliptic_curve]] ==== Elliptic Curve Cryptography Explained @@ -215,7 +210,7 @@ x = F028892BAD...DC341A y = 07CF33DA18...505BDB ---- -To visualize multiplication of a point with an integer, we will use the simpler elliptic curve over the real numbers - remember, the math is the same. Our goal is to find the multiple kG of the generator point G. That is the same as adding G to itself, k times in a row. In elliptic curves, adding a point to itself is the equivalent of drawing a tangent line on the point and finding where it intersects the curve again, then reflecting that point on the x-axis. +To visualize multiplication of a point with an integer, we will use the simpler elliptic curve over the real numbers -- remember, the math is the same. Our goal is to find the multiple kG of the generator point G. That is the same as adding G to itself, k times in a row. In elliptic curves, adding a point to itself is the equivalent of drawing a tangent line on the point and finding where it intersects the curve again, then reflecting that point on the x-axis. Starting with the generator point G, we take the tangent of the curve at G until it crosses the curve again at another point. This new point is -2G. Reflecting that point across the x-axis gives us 2G. If we take the tangent at 2G, it crosses the curve at -4G, which again we reflect on the x-axis to find G. Continuing this process, we can bounce around the curve finding the multiples of G, 2G, 4G, 8G, etc. As you can see, a randomly selected large number k, when multiplied against the generator point G is like bouncing around the curve k times, until we land on the point kG which is the public key. This process is irreversible, meaning that it is infeasible to find the factor k (the secret k) in any way other than trying all multiples of G (1G, 2G, 4G, etc) in a brute-force search for k. Since k can be an enormous number, that brute-force search would take an infeasible amount of computation and time. @@ -234,7 +229,7 @@ A private key can be converted into a public key, but a public key cannot be con An address is a string of digits and characters that can be shared with anyone who wants to send you money. In bitcoin, addresses produced from public keys begin with the digit "1". The bitcoin address is what appears most commonly in a transaction as the "recipient" of the funds. If we were to compare a bitcoin transaction to a paper cheque, the bitcoin address is the beneficiary, which is what we write on the line after "Pay to the order of". On a paper cheque, that beneficiary can sometimes be the name of a bank account holder, but can also include corporations, institutions or even cash. Because paper cheques do not need to specify an account, but rather use an abstract name as the recipient of funds, that makes paper cheques very flexible as payment instruments. Bitcoin transactions use a similar abstraction, the bitcoin address, to make them very flexible. A bitcoin address can represent the owner of a private/public key pair, or it can represent something else, such as a payment script, as we will see in <>. For now, let's examine the simple case, a bitcoin address that represents, and is derived from, a public key. -A bitcoin address derived from a public key is a string of numbers and letters that begins with the number one, such as +1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy+. The bitcoin address is derived from the public key through the use of one-way cryptographic hashing; a "hashing algorithm" or simply "hash algorithm" is a one-way function that produces a fingerprint or "hash" of an arbitrary sized input. Cryptographic hash functions are used extensively in bitcoin: in bitcoin addresses, script addresses and in the mining "Proof-of-Work" algorithm. The algorithms used to make a bitcoin address from a public key are the Secure Hash Algorithm (SHA) and the RACE Integrity Primitives Evaluation Message Digest (RIPEMD), specifically SHA256 and RIPEMD160. +A bitcoin address derived from a public key is a string of numbers and letters that begins with the number one, such as +1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy+. The bitcoin address is derived from the public key through the use of one-way cryptographic hashing; a "hashing algorithm" or simply "hash algorithm" is a one-way function that produces a fingerprint or "hash" of an arbitrary sized input. Cryptographic hash functions are used extensively in bitcoin: in bitcoin addresses, in script addresses and in the mining "Proof-of-Work" algorithm. The algorithms used to make a bitcoin address from a public key are the Secure Hash Algorithm (SHA) and the RACE Integrity Primitives Evaluation Message Digest (RIPEMD), specifically SHA256 and RIPEMD160. Starting with the public key K, we compute the SHA256 hash and then compute the RIPEMD160 hash of the result, producing a 160 bit (20 byte) number: [latexmath] @@ -332,11 +327,11 @@ $ sx base58check-decode 5J3mBbAH58CpQ3Y5RNJpUKPE62SQ5tfcvU2JpbnkeyhfsYB1Jcn 1e99423a4ed27608a15a2616a2b0e9e52ced330ac530edcc32c8ffc6a526aedd 128 ---- -The result is the hexadecimal key, followed by the Wallet Import Format (WIF) version prefix 128 +The result is the hexadecimal key, followed by the Wallet Import Format (WIF) version prefix 128. ===== Encode from Hex to Base58Check -To encode into Base58Check, we provide the hex private key, followed by the Wallet Import Format (WIF) version prefix 128 +To encode into Base58Check, we provide the hex private key, followed by the Wallet Import Format (WIF) version prefix 128: ---- $ sx base58check-encode 1e99423a4ed27608a15a2616a2b0e9e52ced330ac530edcc32c8ffc6a526aedd 128 5J3mBbAH58CpQ3Y5RNJpUKPE62SQ5tfcvU2JpbnkeyhfsYB1Jcn @@ -350,7 +345,7 @@ $ sx base58check-encode 1e99423a4ed27608a15a2616a2b0e9e52ced330ac530edcc32c8ffc6 KxFC1jmwwCoACiCAWZ3eXa96mBM6tb3TYzGmf6YwgdGWZgawvrtJ ---- -The resulting WIF-compressed format, starts with a "K". This denotes that the private key within has a suffix of "01" and will be used to produce compressed public keys only (See <> below) +The resulting WIF-compressed format, starts with a "K". This denotes that the private key within has a suffix of "01" and will be used to produce compressed public keys only (See <> below). ===== Public Key Formats @@ -404,7 +399,7 @@ To resolve this issue, when private keys are exported from a wallet, the Wallet Ironically, the name "compressed private key" is misleading, because when a private key is exported as WIF-compressed it is actually one byte _longer_ than an "uncompressed" private key. That is because it has the added 01 suffix which signifies it comes from a newer wallet and should only be used to produce compressed public keys. Private keys are not compressed and cannot be compressed. The term "compressed private key" really means "private key from which compressed public keys should be derived", whereas "uncompressed private key" really means "private key from which uncompressed public keys should be derived". You should only refer to the export format as "WIF-compressed" or "WIF" and not refer to the private key as "compressed" to avoid further confusion. -Remember, these formats are _not_ used interchangeably. In a newer wallet that implements compressed public keys, the private keys will only ever be exported as WIF-compressed (K/L prefix). If the wallet is an older implementation and does not use compressed public keys, the private keys will only ever be exported as WIF (5 prefix). The goal here is to signal to the wallet importing these private keys whether it must search the blockchain for compressed or uncompressed public keys and addresses. +Remember, these formats are _not_ used interchangeably. In a newer wallet that implements compressed public keys, the private keys will only ever be exported as WIF-compressed (with a K or L prefix). If the wallet is an older implementation and does not use compressed public keys, the private keys will only ever be exported as WIF (5 prefix). The goal here is to signal to the wallet importing these private keys whether it must search the blockchain for compressed or uncompressed public keys and addresses. If a bitcoin wallet is able to implement compressed public keys, then it will use those in all transactions. The private keys in the wallet will be used to derive the public key points on the curve, which will be compressed. The compressed public keys will be used to produce bitcoin addresses and those will be used in transactions. When exporting private keys from a new wallet that implements compressed public keys, the Wallet Import Format is modified, with the addition of a one-byte suffix +01+to the private key. The resulting base58check encoded private key is called a "Compressed WIF" and starts with the letter K or L, instead of starting with "5" as is the case with WIF encoded (non-compressed) keys from older wallets. @@ -470,7 +465,7 @@ In the first implementations of bitcoin clients, wallets were simply collections .Type-0 Non-Deterministic (Random) Wallet: A Collection of Randomly Generated Keys image::images/non-deterministic_wallet.png["non-deterministic wallet"] -==== Deterministic (Seeded) +==== Deterministic (Seeded) Wallets Deterministic, or "seeded" wallets are wallets that contain private keys which are all derived from a common seed, through the use of a one-way hash function. The seed is a randomly generated number which is combined with other data, such as an index number or "chain code" (see <>) to derive the private keys. In a deterministic wallet, the seed is sufficient to recover all the derived keys and therefore a single backup at creation time is sufficient. The seed is also sufficient for a wallet export or import, allowing for easy migration of all the user's keys between different wallet implementations. @@ -541,8 +536,7 @@ Private keys must remain secret. The need for _confidentiality_ of the private k BIP0038 proposes a common standard for encrypting private keys with a passphrase and encoding them with Base58Check so that they can be stored securely on backup media, transported securely between wallets or in any other conditions where the key might be exposed. The standard for encryption uses the Advanced Encryption Standard (AES), a standard established by the National Institute of Standards and Technology (NIST) and used broadly in data encryption implementations for commercial and military applications. -A BIP0038 encryption scheme takes a bitcoin private key, usually encoded in the Wallet Import Format (WIF), as a Base58Check string with a prefix of "5". -Additionally, the BIP0038 encryption scheme takes a passphrase -- a long password -- usually composed of several words or a complex string of alphanumeric characters. The result of the BIP0038 encryption scheme is a Base58Check encoded encrypted private key that begins with the prefix +6P+. If you see a key that starts with +6P+ that means it is encrypted and requires a passphrase in order to convert (decrypt) it back into a WIF-formatted private key (prefix +5+) that can be used in any wallet. Many wallet applications now recognize BIP0038 encrypted private keys and will prompt the user for a passphrase to decrypt and import the key. Third party applications, such as the incredibly useful browser-based bitaddress.org (Wallet Details tab), can be used to decrypt BIP0038 keys. +A BIP0038 encryption scheme takes as input a bitcoin private key, usually encoded in the Wallet Import Format (WIF), as a Base58Check string with a prefix of "5". Additionally, the BIP0038 encryption scheme takes a passphrase -- a long password -- usually composed of several words or a complex string of alphanumeric characters. The result of the BIP0038 encryption scheme is a Base58Check encoded encrypted private key that begins with the prefix +6P+. If you see a key that starts with +6P+ that means it is encrypted and requires a passphrase in order to convert (decrypt) it back into a WIF-formatted private key (prefix +5+) that can be used in any wallet. Many wallet applications now recognize BIP0038 encrypted private keys and will prompt the user for a passphrase to decrypt and import the key. Third party applications, such as the incredibly useful browser-based bitaddress.org (Wallet Details tab), can be used to decrypt BIP0038 keys. The most common use case for BIP0038 encrypted keys is for paper wallets that can be used to backup private keys on a piece of paper. As long as the user selects a strong passphrase, a paper wallet with BIP0038 encrypted private keys is incredibly secure and a great way to create offline bitcoin storage (also known as "cold storage"). From 4055987987b223bb5506c2a4a641f0df71d10ad9 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Wed, 30 Jul 2014 14:38:54 -0400 Subject: [PATCH 36/40] fixed intro and flow of mining. --- ch08.asciidoc | 102 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 62 insertions(+), 40 deletions(-) diff --git a/ch08.asciidoc b/ch08.asciidoc index cb769149..d80f081a 100644 --- a/ch08.asciidoc +++ b/ch08.asciidoc @@ -6,35 +6,25 @@ [[mining]] === Introduction - Mining and Consensus -Mining is the process by which new bitcoin is added to the money supply. Mining also serves to secure the bitcoin system against fraudulent transactions or transactions spending the same amount of bitcoin more than once, known as a double-spend. Miners act as a decentralized clearinghouse, validating new transactions and recording them on the global ledger. A new block, containing transactions which occurred since the last block, is "mined" every 10 minutes thereby adding those transactions to the blockchain. Transactions that become part of a block and added to the blockchain are considered "confirmed", which allows the new owners of bitcoin to spend the bitcoin they received in those transactions. Miners receive two types of reward for mining: new coins created with each new block and transaction fees from all the transactions included in the block. To earn this reward, the miners compete to solve a difficult mathematical problem based on a cryptographic hash algorithm. The solution to the problem, called the Proof-of-Work, is included in the new block and acts as proof that the miner expended significant computing effort. The competition to solve the Proof-of-Work algorithm to earn reward and the right to record transactions on the blockchain is the basis for bitcoin's security model. +Mining is the process by which new bitcoin is added to the money supply. Mining also serves to secure the bitcoin system against fraudulent transactions or transactions spending the same amount of bitcoin more than once, known as a double-spend. Miners act as a decentralized clearinghouse, validating new transactions and recording them on the global ledger. A new block, containing transactions which occurred since the last block, is "mined" every 10 minutes thereby adding those transactions to the blockchain. Transactions that become part of a block and added to the blockchain are considered "confirmed", which allows the new owners of bitcoin to spend the bitcoin they received in those transactions. Miners receive two types of reward for mining: new coins created with each new block and transaction fees from all the transactions included in the block. To earn this reward, the miners compete to solve a difficult mathematical problem based on a cryptographic hash algorithm. The solution to the problem, called the Proof-of-Work, is included in the new block and acts as proof that the miner expended significant computing effort. The competition to solve the Proof-of-Work algorithm to earn reward and the right to record transactions on the blockchain is the basis for bitcoin's security model. -=== Mining +The process of new coin generation is called mining, because the reward is designed to simulate diminishing returns, just like mining for precious metals. Bitcoin's money supply is created through mining, just like a central bank issues new money by printing bank notes. The amount of newly created bitcoin a miner can add to a block decreases approximately every four years (or precisely every 210,000 blocks). It started at 50 bitcoin per block in January of 2009 and halved to 25 bitcoin per block in November of 2012. It will halve again to 12.5 bitcoin per block sometime in 2016. Based on this formula, bitcoin mining rewards decrease exponentially until approximately the year 2140 when all bitcoin (20.99 million) will have been issued. After 2140, no new bitcoins are issued. -Bitcoin's security is underpinned by computation. New blocks are added to the blockchain through a consensus mechanism called the _Proof-of-Work_ (PoW) that requires a predictable computational effort, one that takes approximately 10 minutes to solve on average. Specialized bitcoin nodes called _miners_ validate transactions and collect them into blocks, then attempt to find the solution that satisfies the Proof-of-Work algorithm. The first miner to find such a solution, propagates the newly created block across the network. All other nodes on the network verify that the new block contains valid transactions and satisfies the Proof-of-Work algorithm, then they add it to the blockchain, thereby extending it by one block. The miners add a special coin generation transaction into the blocks they build, which creates new bitcoin from nothing and is payable to the miner's own bitcoin address. Once the block is accepted as valid by the entire network, that transaction is also recorded on the blockchain, thereby rewarding the miner for the computational effort it took to satisfy the Proof-of-Work. This de-centralized consensus mechanism, based on a global competition and requiring computation to create new blocks, is the basis for the security of the bitcoin transaction ledger and also for the issuance of new bitcoin. {move the last sentence to the beginning of the paragraph - to explain more about security} The equilibrium between the incentive of bitcoin reward and the immense computing effort required to win it force the participants to behave honestly, without the need for a centralized clearinghouse or currency issuer. The bitcoin consensus mechanism is a dynamic, self-regulating and completely decentralized security model that operates at very large scale. +Bitcoin miners also earn fees from transactions. Every transaction may include a transaction fee, in the form of a surplus of bitcoin between the transaction's inputs and outputs. The winning bitcoin miner gets to "keep the change" on the transactions included in the winning block. Today the fees represent 0.5% or less of a bitcoin miner's income, the vast majority coming from the newly minted bitcoins. However, as the reward decreases over time and the number of transactions per block increases, a greater proportion of bitcoin mining earnings will come from fees. After 2140 all bitcoin miner earnings will be in the form of transaction fees. -The process of new coin generation is called mining, because the reward is designed to simulate diminishing returns, just like mining for precious metals. Bitcoin's money supply is created through mining, just like a central bank issues new money by printing bank notes. The amount of newly created bitcoin a miner can add to a block decreases approximately every four years (or precisely every 210,000 blocks). It started at 50 bitcoin per block in January of 2009 and halved to 25 bitcoin per block in November of 2012. It will halve again to 12.5 bitcoin per block sometime in 2016. Based on this formula, bitcoin mining rewards decrease exponentially until approximately the year 2140 when all 21 million bitcoin have been issued. +The word "mining" is somewhat misleading. By evoking the extraction of precious metals, it focuses our attention on the reward for mining, the new bitcoins in each block. While mining is incentivized by this reward, the primary purpose of mining is not the reward or the generation of new coins. If you view mining only as the process by which coins are created you are mistaking the means (incentives) as a goal of the process. Mining is the main process of the de-centralized clearinghouse, by which transactions are validated and cleared. Mining secures the bitcoin system and enables the emergence of network-wide consensus without a central authority. Mining is the invention that makes bitcoin special, a de-centralized security mechanism that is the basis for peer-to-peer digital cash. The reward of newly minted coins and transaction fees is an incentive scheme that aligns the actions of miners with the security of the network, while simultaneously implementing the monetary supply, the means not the end. -Bitcoin miners also earn fees from transactions. Every transaction may include a transaction fee, in the form of a surplus of bitcoin between the transaction's inputs and outputs. The bitcoin miner gets to "keep the change" on the transactions. - -Today the fees represent 1% or less of a bitcoin miner's income, the vast majority coming from the newly minted bitcoins. However, as the reward decreases over time and the number of transactions per block increases, a greater proportion of bitcoin mining earnings will come from fees. After 2140 all bitcoin miner earnings will be in the form of transaction fees. - -=== Mining Nodes - -Some of the nodes on the bitcoin network are specialized nodes called _miners_. In Chapter 1 we introduced Jing, a computer engineering student in Shanghai China, who is a bitcoin miner. Jing earns bitcoin by running a "mining rig" which is a specialized computer-hardware system designed to mine bitcoins. Jing's specialized mining hardware is connected to a server running a full bitcoin node. Unlike Jing, some miners mine without a full node as we will see in <>. Like every other full node, Jing's node receives and propagates unconfirmed transactions on the bitcoin network. Jing's node, however, also aggregates these transactions into new blocks. - -Jing's node is listening for new blocks, propagated on the bitcoin network, as do all nodes. However, the arrival of a new block has special significance for a mining node. The competition among miners effectively ends with the propagation of a new block which acts as an announcement of a winner. To a miner, receiving a new block means someone else won the competition and they lost. However, the end of one round of a competition is also the beginning of the next round. The new block is not just a checkered flag, marking the end of the race, it is also the starting pistol starting the race for the next block. +In this chapter, we will first examine mining as a monetary supply mechanism and then look at the most important function of mining, the de-centralized emergent consensus mechanism that underpins bitcoin's security. ==== Bitcoin Economics and Currency Creation -Bitcoins are "minted" during the creation of each block at a fixed and diminishing rate. Each block, generated on average every 10 minutes, contains a _reward_ that consists of entirely new bitcoins. The reward was 50BTC for the first four years of operation of the network. Every four years the reward is decreased by 50%, resulting in a diminishing rate of issuance over time. In 2012, the reward was decreased to 25BTC and it will decrease again to 12.5BTC in 2016. By approximately 2140, the last fragments of a bitcoin will be mined, for a total of 21 million bitcoins. {Clarify coinbase transaction as first - includes the reward and transactions. Discuss how the coinbase transaction will change in 2140} +Bitcoins are "minted" during the creation of each block at a fixed and diminishing rate. Each block, generated on average every 10 minutes, contains a entirely new bitcoins, created ex nihilo (from nothing). Every 210,000 blocks or approximately every four years the currency issuance rate is decreased by 50%. For the first four years of operation of the network, each block contained 50 new bitcoin. In November of 2012, the new bitcoin issuance rate was decreased to 25 bitcoin per block and it will decrease again to 12.5 bitcoin at block 420,000, which will be mined sometime in 2016. The rate of new coins decreases like this exponentially over 64 "halvings", until block 13,230,000 (mined in year 2137, approximately) when it reaches the minimum currency unit of 1 satoshi. Finally, after 13.44 million blocks, in approximately 2140, all 2,099,999,997,690,000 satoshis, or almost 21 million bitcoin will be issued. Thereafter, blocks will contain no new bitcoin and miners will be rewarded solely through the transaction fees. -The finite and diminishing issuance creates a fixed monetary supply that resists inflation. Unlike a fiat currency which can be printed in infinite numbers by a central bank, bitcoin can never be inflated by printing. - -===== Monetary supply +[[bitcoin_money_supply]] +.Supply of bitcoin currency over time based on a geometrically decreasing issuance rate +image::images/BitcoinMoneySupply.png["BitcoinMoneySupply"] -Bitcoin's monetary supply is defined as the number of coins in circulation (minted). Like any other currency, this measure of monetary supply is called M0, which represents the narrowest measure of the money supply. Just like any other currency, bitcoin can also have a _fractional reserve banking_ which means that an organization can trade bitcoins "off blockchain" which are not part of the M0 monetary measure, but of the broader monetary supply measures M1-M3. {have you explained M1-M3?}{also, i think you should explain fractional reserve banking a bit here} - -While the total bitcoins in circulation will not exceed 21m, that monetary base can support a much broader economy through fractional reserve banking and expansion of the available credit. +The finite and diminishing issuance creates a fixed monetary supply that resists inflation. Unlike a fiat currency which can be printed in infinite numbers by a central bank, bitcoin can never be inflated by printing. ===== Deflationary Money @@ -63,8 +53,6 @@ Bitcoin's de-centralized consensus emerges from the interplay of four processes In the next few sections we will examine these processes and how they interact to create the emergent property of network-wide consensus that allows any bitcoin node to assemble its own copy of the authoritative, trusted, public, global ledger. -Before we explore the details of emergent consensus, we will first discuss mining and the central role it plays in this process. - === Independent Verification of Transactions In the previous chapter we saw how wallet software creates transactions by collecting UTXO, providing the appropriate unlocking scripts and then constructing new outputs assigned to a new owner. The resulting transaction is then sent to the neighboring nodes in the bitcoin network so that it may be propagated across the entire bitcoin network. @@ -96,6 +84,12 @@ These conditions can be seen in detail in the functions +AcceptToMemoryPool+, +C By independently verifying each transaction as it is received and before propagating it, every node builds a pool of valid new transactions (the transaction pool), roughly in the same order. +=== Mining Nodes + +Some of the nodes on the bitcoin network are specialized nodes called _miners_. In Chapter 1 we introduced Jing, a computer engineering student in Shanghai China, who is a bitcoin miner. Jing earns bitcoin by running a "mining rig" which is a specialized computer-hardware system designed to mine bitcoins. Jing's specialized mining hardware is connected to a server running a full bitcoin node. Unlike Jing, some miners mine without a full node as we will see in <>. Like every other full node, Jing's node receives and propagates unconfirmed transactions on the bitcoin network. Jing's node, however, also aggregates these transactions into new blocks. + +Jing's node is listening for new blocks, propagated on the bitcoin network, as do all nodes. However, the arrival of a new block has special significance for a mining node. The competition among miners effectively ends with the propagation of a new block which acts as an announcement of a winner. To a miner, receiving a new block means someone else won the competition and they lost. However, the end of one round of a competition is also the beginning of the next round. The new block is not just a checkered flag, marking the end of the race, it is also the starting pistol starting the race for the next block. + === Aggregating Transactions into Blocks After validating transactions, a bitcoin node will add them to the _memory pool_, or _transaction pool_, where transactions await until they can be included (mined) into a block. Jing's node collects, validates and relays new transactions just like any other node. Unlike other nodes, however, Jing's node will then aggregate these transactions into a _candidate block_. @@ -357,23 +351,35 @@ With all the other fields filled, the block header is now complete and the proce === Mining the Block +Now that a candidate block has been constructed by Jing's node, it is time for Jing's hardware mining rig to "mine" the block, to find a solution to the Proof-of-Work algorithm that makes the block valid. Throughout this book we have studied cryptographic hash functions as used in various aspects of the bitcoin system. The hash function SHA-256 is the function used in bitcoin's mining process. + +In the simplest terms, mining is the process of hashing the block header repeatedly, changing one parameter, until the resulting hash matches a specific target. The hash function's result cannot be determined in advance, nor can a pattern be created that will produce a specific hash value. This feature of hash functions means that the only way to produce a hash result matching a specific target, is to try again and again, randomly modifying the input until the desired hash result appears by chance. + ==== Proof-of-Work Algorithm +A hash algorithm takes an arbitrary-length data input and produces a fixed-length deterministic result, a digital fingerprint of the input. For any specific input, the resulting hash will always be the same and can be easily calculated and verified by anyone implementing the same hash algorithm. The key characteristic of a cryptographic hash algorithm is that it is impossible to find two different inputs that produce the same fingerprint. As a corollary, it is also impossible to select an input in such a way as to produce a desired fingerprint, other than trying random inputs. + With SHA-256, the output is always 256 bits long, regardless of the size of the input. In the example below, we will use the Python interpreter to calculate the SHA256 hash of the phrase "I am Satoshi Nakamoto". [[sha256_example1]] .SHA256 Example +==== +[source,bash] +---- +$ python +---- +[source,pycon] ---- -$ *python* Python 2.7.1 >>> import hashlib >>> print hashlib.sha256("I am Satoshi Nakamoto").hexdigest() 5d7c7ba21cbbcd75d14800b100252d5b428e5b1213d27c385bc141ca6b47989e ---- +==== The example shows that if we calculate the hash of the phrase +"I am Satoshi Nakamoto"+, it will produce +5d7c7ba21cbbcd75d14800b100252d5b428e5b1213d27c385bc141ca6b47989e+. This 256-bit number is the _hash_ or _digest_ of the phrase and depends on every part of the phrase. Adding a single letter, punctuation mark or any character will produce a different hash. -Now, if we vary the phrase, we will expect to see completely different hashes. Let's try that by adding a number to the end of our phrase, using this simple Python script +Now, if we change the phrase, we will expect to see completely different hashes. Let's try that by adding a number to the end of our phrase, using this simple Python script [[sha256_example_generator]] .SHA256 A script for generating many hashes by iterating on a nonce @@ -384,12 +390,15 @@ include::code/hash_example.py[] ---- ==== -Running this will produce the hashes of several phrases, made different by adding a unique number, called a _nonce_ at the end of the text. By incrementing the nonce, we can get different hashes. +Running this will produce the hashes of several phrases, made different by adding a number at the end of the text. By incrementing the number, we can get different hashes. + ((("nonce"))) [[sha256_example_generator_output]] .SHA256 Output of a script for generating many hashes by iterating on a nonce +==== +[source,bash] ---- -$ *python hash_example.py* +$ python hash_example.py I am Satoshi Nakamoto0 => a80a81401765c8eddee25df36728d732... I am Satoshi Nakamoto1 => f7bc9a6304a4647bb41241a677b5345f... I am Satoshi Nakamoto2 => ea758a8134b115298a1583ffb80ae629... @@ -411,18 +420,19 @@ I am Satoshi Nakamoto17 => dca9b8b4f8d8e1521fa4eaa46f4f0cd... I am Satoshi Nakamoto18 => 9989a401b2a3a318b01e9ca9a22b0f3... I am Satoshi Nakamoto19 => cda56022ecb5b67b2bc93a2d764e75f... ---- +==== Each phrase produces a completely different hash result. They seem completely random, but you can re-produce the exact results in this example on any computer with Python and see the same exact hashes. -To make a challenge out of this algorithm, let's set an arbitrary target: find a phrase starting with "I am Satoshi Nakamoto" which produces a hash that starts with a zero. In numerical terms, that means finding a hash value that is less than +0x1000000000000000000000000000000000000000000000000000000000000000+. Fortunately, this isn't so difficult! If you notice above, we can see that the phrase "I am Satoshi Nakamoto13" produces the hash 0ebc56d59a34f5082aaef3d66b37a661696c2b618e62432727216ba9531041a5, which fits our criteria. It only took 13 attempts to find it. +The number used as a variable in such a scenario is called a _nonce_. The nonce is used to vary the output of a cryptographic function, in this case to vary the SHA-256 fingerprint of the phrase. + +To make a challenge out of this algorithm, let's set an arbitrary target: find a phrase that produces a hexadecimal hash that starts with a zero. Fortunately, this isn't so difficult! If you notice above, we can see that the phrase "I am Satoshi Nakamoto13" produces the hash 0ebc56d59a34f5082aaef3d66b37a661696c2b618e62432727216ba9531041a5, which fits our criteria. It took 13 attempts to find it. In terms of probabilities, if the output of the hash function is evenly distributed we would expect to find a result with a 0 as the hexadecimal prefix once every 16 hashes (one out of 16 hexadecimal digits 0 through F). In numerical terms, that means finding a hash value that is less than +0x1000000000000000000000000000000000000000000000000000000000000000+. We call this threshold the _target_ and the goal is to find a hash that is numerically _less than the target_. If we decrease the target, the task of finding a hash that is less than the target becomes more and more difficult. + +To give a simple analogy, imagine a game where players throw a pair of dice repeatedly, trying to throw less than a specified target. In the first round, the target is 12. Unless you throw double-six, you win. In the next round the target is 11. Players must throw 10 or less to win, again an easy task. Let's say a few rounds later the target is down to 5. Now, more than half the dice throws will add up to more than 5 and therefore be invalid. It takes exponentially more dice throws to win the lower the target gets. Eventually, when the target is 2 (the minimum possible), only one throw out of every 36, or 2% of them will produce a winning result. -Bitcoin's proof-of-work is very similar to the problem above. First, a miner will generate a new block, containing: -((("block"))) -* Transactions waiting to be included in a block -* The hash from the previous block -* A _nonce_ +In the example above, the winning "nonce" is 13 and this result can be confirmed by anyone independently. Anyone can add the number 13 as a suffix to the phrase "I am Satoshi Nakamoto" and compute the hash, verifying that it is less than the target. The successful result is also proof-of-work, as it proves we did the work to find that nonce. While it only takes one hash computation to verify, it took us 13 hash computations to find a nonce that worked. If we had a lower target (higher difficulty) it would take many more hash computations to find a suitable nonce, but only one hash computation for anyone to verify. Furthermore, by knowing the target, anyone can estimate the difficulty using statistics and therefore know how much work was needed to find such a nonce. -The only part a miner can modify is the nonce. Now, the miner will calculate the hash of this block's header and see if it is smaller than the current _target difficulty_. The miner will likely have to try many nonces before finding one that results in a low enough hash. +Bitcoin's proof-of-work is very similar to the problem above. The miner constructs a candidate block filled with transactions. Next, the miner will calculate the hash of this block's header and see if it is smaller than the current _target_. If the hash is not less than the target, the miner will modify the nonce (usually just incrementing it by one) and try again. At the current difficulty in the bitcoin network, miners have to try quadrillions of times before finding a nonce that results in a low enough block header hash. A very simplified proof-of-work algorithm is implemented in Python here: ((("proof of work"))) @@ -439,9 +449,13 @@ Running the code above, you can set the desired difficulty (in bits, how many of [[pow_example_outputs]] .Running the proof-of-work example for various difficulties +==== +[source, bash] +---- +$ python proof-of-work-example.py* ---- -$ *python proof-of-work-example.py* +---- Difficulty: 1 (0 bits) [...] @@ -494,32 +508,40 @@ Success with nonce 84561291 Hash is 0000001f0ea21e676b6dde5ad429b9d131a9f2b000802ab2f169cbca22b1e21a Elapsed Time: 665.0949 seconds Hashing Power: 127141 hashes per second - ---- +==== As you can see, increasing the difficulty by 1 bit causes an exponential increase in the time it takes to find a solution. If you think of the entire 256-bit number space, each time you constrain one more bit to zero, you decrease the search space by half. In the example above, it takes 84 million hash attempts to find a nonce that produces a hash with 26 leading bits as zero. Even at a speed of more than 120 thousand hashes per second, it still requires ten minutes on a consumer laptop to find this solution. -At the time of writing this, the network is attempting to find a block whose header hash is less than +000000000000004c296e6376db3a241271f43fd3f5de7ba18986e517a243baa7+. As you can see, there are a lot of zeroes at the beginning of that hash, meaning that the acceptable range of hashes is much smaller, hence more difficult to find a valid hash. It will take on average more 150 quadrillion hash calculations per second for the network to discover the next block. That seems like an impossible task, but fortunately the network is bringing 500 TH/sec of processing power to bear, which will be able to find a block in about 10 minutes on average. +At the time of writing this, the network is attempting to find a block whose header hash is less than +000000000000004c296e6376db3a241271f43fd3f5de7ba18986e517a243baa7+. As you can see, there are a lot of zeroes at the beginning of that hash, meaning that the acceptable range of hashes is much smaller, hence more difficult to find a valid hash. It will take on average more 150 quadrillion hash calculations per second for the network to discover the next block. That seems like an impossible task, but fortunately the network is bringing 100 Peta Hashes per second of processing power to bear, which will be able to find a block in about 10 minutes on average. ==== Difficulty Representation The formula to calculate the difficulty target from this representation is: ----- target = coefficient * 2^(8 * (exponent - 3)) ----- Using that formula, we can difficulty bits is 0x1903a30c ----- target = 0x03a30c * 2^(0x08 * (0x19 - 0x03))^ + => target = 0x03a30c * 2^(0x08 * 0x16)^ + => target = 238,348 * 2^176^ + => target = 238,348 * 2^176^ + => target = 9,223,372,036,854,775,807 + => target = 0x0000000000000003A30C00000000000000000000000000000000000000000000 ----- + + + + + + + ==== Difficulty Target and Re-Targetting From b4fdbfae15e449034fa7e8c6ffdf15aded3bf368 Mon Sep 17 00:00:00 2001 From: "Minh T. Nguyen" Date: Wed, 30 Jul 2014 22:31:33 -0700 Subject: [PATCH 37/40] Change 'Contains a mining functions with...' to 'Contains a mining function with...' per Issue #71 --- images/BitcoinNodeTypes.png | Bin 141946 -> 141935 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/BitcoinNodeTypes.png b/images/BitcoinNodeTypes.png index 798ea941d27758d31c977abc199c8fedfc90d293..0e3dbce01a549c7256a7ca23b8253df8261a5412 100644 GIT binary patch delta 100065 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 QANFzMy3t=H*B*xdKMb|YumAu6 delta 100272 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

CbNC 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

-Touy74CY ziC;CF?_Ra69|#hw#leEspmu zZM+{J2hq@~t!wf$-JN=d znAo__uHw1L4+_-7R6Ol`eHXsSxUNm{`ciYwX8~^yVBeUi{d^`tcDa$PRzoUs^TxIUW)!SPQ6c{*UelBvXpqXURF7vcip&<)o^X z{b<-QoXn7Z)g_3MrVh7?eztl_ z*YDWGfbzX%mHVD|jO_4x z4)|bs^&y>qU7bmT*#9@TDNjNI#F`7n3!)z=A!$v%_=ZIA%ro|%t~dokeLSx?@n)8v z9nscg!4Mw7H>#h12m||8|EdC5gS}Rej;5WemvyX66r*1BgEE?__y60iL!@&2kyMqx z_p}a#PLjECcOaY|!!rm_CAlhX3S=WdQWDdKS}>D`&KYDjSs+ofs8~^gutkMOK$Y`@ z4J}CP1JjD?m0udy30Ab@o?SAoAp5PCb)C<3DHCQ8Y4qs-eA`Q|>A>^B6evH6NEBKPd0g5e-nt}7^}8+ix^ z$%b7)282lL+NsvAg10GZ-p-S%=bqKS)G{{sW=B6&=Q;axs}WT4)gGN;V5~Mtl)Qa0 z5Lux5esH=WHPqa#}xYT0aiWLf}!^8 z#-E>gR>2NHDPgL8Am1Y zrmpUiT1pD%FQ0=t&hMxR0H~NCm7Ad75MZUoSmfPyhF@%SjOEqQXuz0Y74}dmJd&2~ z%UR#Wr7C=*du)a0RCbm7jjyP-$TZ#WKl~Pt7Wx%B!vzv9p5SL zp7LdO$Cr9s*Vq*zTUEEN)hMW#v7JfgsJ;_rmG$JC+exW5PFEn-N&8?ey|}Qic)6$V zwYeJ!6B{rc@SI_Y+*0w{qj)cs36&u7hi_^Ud12$!PME!rAL@_m3%msWw95B>!=8-# z(~bwCxJ-@5;i^rylJS1cbWM-^rmvWfbFZ=e?gzD}cqE}Nnzvs?ql+pFG8z?a*DNb( z4+Qf_%J|8f@D(66CuqvnD*8DHmhDBYyj^ESyiez@PPaczW>1e*ZZCbYrSn34L1Og$ z;hRv%a*J|um8MQ^OnyVFX|0T-B8IN9~& zR(CH&*h$Ye9N&yUuXd|-Tmf%|;Mre5y54zX|H$og9s^W2P8~(<7iJv_A2|x|jCZaH zCK>Rq2ptVC7HRLTz*2F;!LJZ3*h<;u=NylCw#Gl>03*o(>vufp#NW{+!EF<)VB+Jx zNYnC2eaYT0?3(&ETv~l}r6e}~Q~XgrQJgbBe}2a6iPKdp?Ino8_!?SR0DS}OZ;s;y z1>+3efaJ6Jkp~1T#;$t;?u6M%&e}D=;yQ(ju_`$~d zk|NR*#^>t7h{i@<=cBuNR28sPVOm$-Y~N#xiw(hNnVY$DR;!KRPrc|@9&L#k=Gf0M zLfhOBv>`mR-(-?<&nq89o0mE81V5P$X(@pLb6v+Unf1*nHc1yqF`{qRS?CN7CJq_* zNSv-G52Tf;`NRmi8J12B-oN_~W|EL$oaUa()cBu0RA|7)Za(GTsY*V<|8 zP0*@?dZR(kU>{)YN1z8Y%C$KJ#=8I(aQaD|xu_)t*2K^UJN3Il%)* z@uM|iG5qqt$*>ESZVAyYw!5$m{K_=2>r!qoA?lsz?m)V5Y~&1?MWg))W8{`Ar$=s{ ziHHR8>N5?8>GZipR?c7^ube1j41=Qv*6^Sd6&T0B3`khNNIa^))6}ki>W|<$Y`!5$ zC9Oo^gp}4|&|5QEr@%0ME`2bz34OHk($=%6@#3AzNjCuQp@)H9C0J$6MFD9H0)ZaQ zFZj+d>F}FPpNr0w}|~jVy_B$$ZRk_3~vge$%+(Xg-RSjs~v)-yr9Kh&IM0UGDD-F>!aM> z=69Uo?0ZF2v{mr?7WiYw$1^;U@w}IMd^Q}&5Bj)FsL3x1R&U7=_GSmXe}+MDHJ`6S zMy0!6n7DrC!%mhx%AWMj7d`Jdsw>WBNa+MAWquU|u4)O?iISO*XygU~YU z#i~W@ie(g*h)zZrrI2JodA&nyr01TPN%89)rL`&3$qBrZ_{oEwPCgG0jN0zr#&)U) zM`=8{vKBOjywn%rd0p+a)RlH7=a~|>mgrrTb&kF8`esNx--qwO!z0uDJmm?mLv{YC zthlXr+JSpE8)&|Togv%eH)rA!9I_IcwxkBvKSNkhI!h45TluctYp0->?yHV@9vQ>c zd9Hd&zZMwyvM4+H>lj8TerCRC^;j9<2~(kv*dDJ8Y2-UH`{>j<(`}S~Tl2uHhaI%K zE)N+(ikB@8#iDS-fbeAnv6c||`RtcSl_?h{RK)O*fLTBq%ufq>gQHY|`O`V3Zx3J6 zooK^j^2zg?{b+j3b6%Ux;v_THi_@LY?Ws4UVN(lq@v!D~DM@H49ZO-`p zU%opAr`G!hSzhqsdK?f6?tf?oYhB1|TI0=PKSi5|E48}-kEaEq3l~NNNa9ldG;gbm zZo?Qe^_LQH9)!+)H(Vc?@H*h5h(oA@s8)Vt9O4~aK;@%UVh6-JC9Ytpph@~CQSj?&2+KpVlaCYWP z#k))qx{-nbK&`wj+1^Q$?oQJQThhdv_2MN6y`o>saHFYNPN3Ua!}_d(NXO)n(kGO% zmCK{J44|Cr3b$1F;`eaQyogD&@#`aj&6T{j>sdWGzlT$<<-%sllJ&q#5d8*N2E&O= z_We}Tb!%*33D&@3+C^sMdDO}{!6>l3uhTbx*WJ(=K%1DiNo|#yQ{kI2_e|R(6IxI0 zU0jpJ7(rZz0rTLPWBrT3_|kBjdJP4^B~HcsEhTzeCqW90#_FjyRnW$ZkOzMxe~XYLYZ^|SZOHk6_c_zYWNs)1#%r%3Qby2|9l=2C zL(H~8JXn7p)mKa5HK=n&YF!K%zcwjqkoanHx1U(cB+4z66KNppjh<$$a4vBdluNch$Vwm055(#{ASA)-6D?D%ntQ>N&`p7v>*W>4CvE68+iAz*lm@2 zK*6Iy;g<;x^>$A0nG0}P_AyRC>7Wo>8%^+`fM*++lO8=N8$Ec7$l%C!R=#Hg_eDJY znTnynwde(bDIq$#KqRjeoAV=Y`r^IW+omfZ>r8tZq5~_)A-OS=XY1Cp9B(UhXWD|T zr&kvGQrnG|bp26*Yw(p4%#V?mwxS?ZziqSrid$BD7u7WYzL8 z9b35)Exi>@<{5hadFk;AUVUCwSybE6ZB)PQp3eYdPnpQ4xT$OW`@Y+H&s8FmX63IqSyj-lj$0 z#Li&BwqETFUTMvvQJsumZT^IMR*JhQxI7$1X(wncA`5qF~QcTV>Y<#&@1tbWbO zxQ}V#MKrzARsJ+YGyJg=Hv@7!++yPAN}4O-)B0F$lE0zHWA3Sx32B1RIx`{5QnmSX z`faQJxPw`GQ4Qp(N`qD)^3W4>O{W)-ivh2&6-oX{a<^^VF_0?>An5Vncspg2Z@CDN z5j86`>z%6ghU=%5R8D^9BGI8%YV&?r`)nvyJv<3=0Q1~dkrBOrIH$K4I?PES<2r{i zbSm6cW2cV2qvb6lQU)oMmD$ivR$1oO)g;TxYFo-zWEA%?F{X()0a{ z&0s6dWt*a7IX9^NGJmm}wKhCF#QZD0eS~oDX%SyKN>S+Ldj1=)61I)8=QVj74eG@nOje{#sj9;iPq*kOEltUba8qGK-*%sm zH=`1zHK`Cs(K}8?I{@v@-odb?6=Z-P#i-y4P?0=d5mdNc_AD-p1V9nRz1u9Cb&heW zb;)}=+0hKgLdJ|cT^rFEvFKPSa^5J0TUfmblC7=0VXUma? zIoSENFQjM7Xpx-}ZqPUK+XI#?k( z%E_C+5yj*1=-Oy2<%sJ9>We(C9gU8+Jyg8h;x}~-PZ<5AH!#ukIC6!o6ro4X-AMBl z2!nv)OE=}q9!MQ$uM^m(1#kVRN`7@aLPtwqQ+8Vx43x9}y05mm??6<0cB=3x2PR-g z-~y^Fgg_N-!aT@u{C*7{Mca~0xb-0Sjv?@U_R7G%#o*eoV@R0sO=3<09^>& ze|Eq`jNyxY{e0h?T0I&qcS&fw4GK)@#D)WhqKhP*7ophTbvE zt9~HSXpqA%#H#i;@VxT<+sDBg?y-xbe6}q$K><3{a)A}5CqB=UYh*ThkuR;Gp66;U z!6o^j7-5j*JaZ$=%U&6984_#RHZ8EM+V0j6kgXLq0=YpdaG%H@Nqs@AJmazsRt(f4 z8{fTCRIdQbzq%eR`g(JLCorT^DLBxDkywRSUO#*j4weT(tz8J=mirsz!dqXx@7l9t zHM*XjUwJc-(k}}@7HSu}!Ih*_C>E-g)L)H|EuaJ#<|Txf-?y`yx+cLca9<=H9i;3N zMkTkHiJULuLWQ$o95JYbA2ECZjrcN0qn?(%)ydY0oI*9mIg3%m73$kAHwJS;KavdXZutSl%g&$g*i%AN5z zM!;lCQ^vA#GtfIMk#Ty??saR^4ZDcRr4Go1z)8 zoqrihB5!SYTdR$rkVvB61SOg}KEX+I;z5J|)+fb4o9a6X8loEff-N;ibetzq;mjDy z{#M?q1=x8S0Iiu$raBbPKT!O&tJ>(-pm9!GW%K}MohruqC_ zv1>FL;>~TLlb7!58eRn1yu@C)e^Bi)9ekX)x3_oY(?n9C0W7DKpy4*5f!+bzx_hIZ z(dX~d@H1n){_vkx`>oFM0rS~9&HHxhAMkh@h<%kn(0D-*y5*j(8Q>F%b0JiGD!~x) z#m#I%VD=S$%b75^`sLY-iKuDYoAnXn+Ho8!>3jubm+>(;{f(AZD4~*K{V>M4M(4Q- z+J;iXqDJJ{aQeO)_*!Pneg2E*Dz4tp`4sRD`i?~Emr@SfnEurMS0kw16gnRQjOZ7m zz|9A5F1p_yvHC37*4%xt6eq-aT5%>t+bP4mg2LdKMvv&pxS9@6St7zaaK|N~B(=XL z5xwKZuz`$6pW>t1vd-d*^U7{TUxeZV++661EKL{BQpW=&tY%i`+5m?7#)Rs2jN9Zmq||J`{q9HEO!#AE>p|>^T%R= z9LI>um#^$*xD5^TR~C6&=b4fVNd;9OVVBXWPwduTtI`w2!pfR5RG!V14oPac)~VMQd| zq%HK_InF@gH@pqMXXE7IH!3D^!l?I{R|Q-Vs#26b{klzMlUhUJ_a;8iMuHHf?C9mr z7HRd~q>XooaX@5Tmgu-JWACqiQ9Z%DxMdh4w9J7K__mZk_TP8gE4j^DPVx_;qL z2gsuY{81~Xu7J{d5J1ECH9LjlzlTo5=p&1&|eff6U}&Rclayl;)Bp8i%di z{EY~5ff?&md(m4oRaF5Mo_#wtFr5|kg3)|Z@78?dQ~trbPpt=SHu6_IqWp!gXgwMA4&D>bQZEmjXH)x+kxm7D5sVxsWHx|sA$^7Z$Qy5Y(?4aj{uI|9Gje|W? zTjB==U7Mf*6{rfrd1eC}TmJNs9oa`>rNJ?)xTj;VKvyK7TQEz>D*6%>4h8<8ZGbcX zTF&1d?V8EjzUiJZ57_b73qc3=b$}v`^S?XE-iu}u@Iijn0Oeip_elbKUA8|(NjrLR z{!K@R0V}wo#`WNV1dXl34|9ZjlCw%88@N$gw*z$#x zJZp910su|-pP^!Npn9N8)^6sS)LPP-OW8~8!imk7MGO}i#A%k;n2!;Kuy zs`M4v&bb-9KR=N5^2;{%uLz6k_|F%CE8&T-qD)z9MNde_L>D&JA+kR*@G#mt(H>GO{x%^6l&wQd} z|My?+hFL$m?S89%sP+7DqyNvaINbL?Z~Oc>>rWFo)bZ?l_rNUy&5;f;uw*u`Yg$jm zcY!xm=X=2lhFoINXGtD^Vow;$9?>l|L=7#AS`f=1a>g;28 z45>FpUf@Y~*|nVoo*J={!nB0x_AXI;;Kl$FUx(`$sZioW85<{RPyA_RZM$J^ep*ui z{AT=%7FBhk+P9}{gRpvena5m_6;B^!J!)NVFR*xTs|VD3d|D~pe~y!t$TRU1MJD-+ z>UnAxU(ZvHs&6>*A)N51#)D#a!@WE`6|Y{_CH=9i18v)dZ7h%Lw#DtRW2(j-X7Y+& z+u1!A&B+PS`@FHy(6aa5^mV@3qnRFY31RgpKwZvCzOTU%U0m*+BkQ;609w@g$VdcZ z7;WI`>p^f-=uelAoMgf5S2!9;As4IWfPbQ3f#<9fmS(9YZid6 zreKwcIAh0ES?StSe6oQW(#Geu)cCGUz!<|+stHiLmWN`ccZ~ymyvCi(J^h@BD`|2 zF=%qMu`wt%f7n8(a(jFa?>O^I1)rrtjZ01`LGyy?7*A?FsXtDXj;HdZZ3O>fJ*pPZ zN2t3_abJ*;$^QF6RjAatb0@D%XQYe3dWj>`&x?>YitFoex5x%-H)mWzI@J^0*d$op zxudoEIx$5Np8i^Z=P1+fJF^7j5OMd~$g}1U+D$v~DXou8j$6$=?JVgY_quQhr0e*U z%H^H;Cw7xx0Zxg&q@(qsrUW`Bj-Etnz3CmnNU|F3r7;lIpm!Dm>GX1&e$LWO#0qvg zr%11?K>162x;tF7<){Pm1ghaxOpN`6I-DiV9y8vOim+B1kGXg~RFh^4zL>9oE9Ha>0}saxM*l8?Ut9)o{kqBbrwhR5FC z{^aH9>Ith-T~CX%oxPuW1wR-VQ2pRc?Db3V{4~W>cf{XY91a3_w+iqyZ3b`pQQA!?Ii%c*ncwKJ>we%6C6t;~xEW!?Nz7bN@UZDoSCs1^$3QwXATz>$k zHmf2V)Epg>=WD<((S&);j#R>>>f!$Ll(RbLV|^br~CY!Eb80b6`N7 zldRyI$1@da;Rb6*9Tc4?eb3SaOj@jvx(Ox2%ETcHoH^bkftoy9VEDjX|M!ybP3Nyx zje*HFte^=oD3g)SHHXB{5&FwaGIF;7>q580OBHY&kd&2mRx>yIwx9&3#>1H(e6hDu z?7(pyJLZ$BB1BTGb?N`3s(2Xr1y(ria)0HCg9*g{5@;}l5QxB}sY}TexmkZoRJwZ~ zdZ{W%@4}@^pQ?_5|7OPE40W!5YI7>xSTzsh**F zZ})Phyx!)D>ShzY!bJyXGBRhjsCH|0EJuj?NQ>$jkQMKI9Bhj%^YyEJ0hrU*XDbud zvNrWMil|$x6DSGN_m^CK1;D6nS9l!niJsityo4uGH&T^VeumO9&Bao!gn9i^19un) zkB8)IN)SxR4G$SIW51SItWNmP57p$&5b>AJojbRwO?|dSb$@ZF#(4QKwXv_<@6Exu zgoNEdQV_k`MVGC^?Qq4w-)1$11MGcDaz@H-6WZ9nHz`km_8Ko(RH|k`R&ntiwQ>Kv z-vyRN0?LMo`3}F%)m=Au_4VF-5K=HFJK)Wyu}Xyf`b=l37g2Wk$KP=PwXwj?r5Xc= z33WnJ=kH&Cs1O49bKF;=$Y|zDzwqkgdFn?N{JmIoHJs5e9CH0G_kTZ! aq$3)LRJ*@}h}{s?ivD%OYlYem!~PHYKraCR From 55ca4759abfa4744015375c2b56c7150e87dc60a Mon Sep 17 00:00:00 2001 From: "Minh T. Nguyen" Date: Wed, 30 Jul 2014 23:44:12 -0700 Subject: [PATCH 38/40] Undoing some merges from #74 where the text changed to drastically from its original --- ch02.asciidoc | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index df4f2e5a..e82b6113 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -3,7 +3,7 @@ === Transactions, Blocks, Mining and the Blockchain -In the bitcoin system trust is de-centralized and achieved as an emergent property from the interactions of different participants in the bitcoin system. This is completely unlike traditional banking and payment systems, where trust is necessarily placed in one or more central trusted authorities. In this chapter we will examine bitcoin from a high level by tracking a single transaction through the bitcoin system and watch as it becomes "trusted" and accepted by the bitcoin mechanism of distributed consensus and is finally recorded on the blockchain, the distributed ledger of all transactions. +The bitcoin system, unlike traditional banking and payment systems, is based on de-centralized trust. Instead of a central trusted authority, in bitcoin, trust is achieved as an emergent property from the interactions of different participants in the bitcoin system. In this chapter we will examine bitcoin from a high-level by tracking a single transaction through the bitcoin system and watch as it becomes "trusted" and accepted by the bitcoin mechanism of distributed consensus and is finally recorded on the blockchain, the distributed ledger of all transactions. Each example below is based upon an actual transaction made on the bitcoin network, simulating the interactions between the users (Joe, Alice and Bob) by sending funds from one wallet to another. While tracking a transaction through the bitcoin network and blockchain, we will use a _blockchain explorer_ site to visualize each step. A blockchain explorer is a web application that operates as a bitcoin search engine, in that it allows you to search for addresses, transactions and blocks and see the relationships and flows between them. @@ -77,18 +77,13 @@ The bitcoin network can transact in fractional values, e.g. from millibitcoins ( In simple terms, a transaction tells the network that the owner of a number of bitcoins has authorized the transfer of some of those bitcoins to another owner. The new owner can now spend these bitcoins by creating another transaction that authorizes transfer to another owner, and so on, in a chain of ownership. -Transactions are like a journal entry record in a double-entry bookkeeping ledger. Each transaction contains: - -* a set of one or more "inputs", each with an input address and value -* a set of one or more "outputs", each with an output address and value - -The inputs are to become the reductions to bitcoin addresses, and the outputs increases to other bitcoin addresses. The net inputs and net outputs must balance, with the exception of an optional implicit "transaction fee", a small output payment collected by the miner. Similar to debits and credits in an accounting journal entry, the net amount (input values less output values less fee) must be zero. +Transactions are like lines in a double-entry bookkeeping ledger. In simple terms, each transaction contains one or more "inputs", which are debits against a bitcoin account. On the other side of the transaction, there are one or more "outputs", which are credits added to a bitcoin account. The inputs and outputs (debits and credits) do not necessarily add up to the same amount. Instead, outputs add up to slightly less than inputs and the difference represents an implied "transaction fee", a small payment collected by the miner who includes the transaction in the ledger. [[transaction-double-entry]] .Transaction as Double-Entry Bookkeeping image::images/Transaction_Double_Entry.png["Transaction Double-Entry"] -The transaction also contains proof of ownership for each amount of bitcoin (inputs) whose value is transferred, in the form of a digital signature from the owner, which can be independently validated by anyone. In bitcoin terms, "spending" is signing the value (or a portion of the value) received from previous transaction for which you have the keys over to a new owner identified by a bitcoin address. +The transaction also contains proof of ownership for each amount of bitcoin (inputs) whose value is transferred, in the form of a digital signature from the owner, which can be independently validated by anyone. In bitcoin terms, "spending" is signing the value of a previous transaction for which you have the keys over to a new owner identified by a bitcoin address. [TIP] @@ -216,7 +211,7 @@ The transaction is now propagated on the bitcoin network. It does not become par The bitcoin system of trust is based on computation. Transactions are bundled into _blocks_, which require an enormous amount of computation to prove, but only a small amount of computation to verify as proven. This process is called _mining_ and serves two purposes in bitcoin: -* Mining creates new bitcoins in each block, almost like a central bank printing new money. The protocol regulates the bitcoin creation rate over time: It sets a fixed amount of bitcoin created per block, gradually reduces the amount created in future blocks, and will ultimately produce a predictable amount of total bitcoin. +* Mining creates new bitcoins in each block, almost like a central bank printing new money. The amount of bitcoin created per block is fixed and diminishes with time. * Mining creates trust by ensuring that transactions are only confirmed if enough computational power was devoted to the block that contains them. More blocks mean more computation which means more trust. A good way to describe mining is like a giant competitive game of sudoku that resets every time someone finds a solution and whose difficulty automatically adjusts so that it takes approximately 10 minutes to find a solution. Imagine a giant sudoku puzzle, several thousand rows and columns in size. If I show you a completed puzzle you can verify it quite quickly. If it is empty, however, it takes a lot of work to solve! The difficulty of the sudoku can be adjusted by changing its size (more or fewer rows and columns), but it can still be verified quite easily even if it is very large. The "puzzle" used in bitcoin is based on a cryptographic hash and exhibits similar characteristics: it is asymmetrically hard to solve but easy to verify, and its difficulty can be adjusted. @@ -227,7 +222,7 @@ Jing started mining in 2010 using a very fast desktop computer to find a suitabl === Mining transactions in blocks -A transaction transmitted across the network is verified only when it becomes part of the global distributed ledger, the blockchain. Every ten minutes, miners generate a new block that contains all the transactions since the last block. New transactions are constantly flowing into the network from user wallets and other applications. As these are seen by the bitcoin network nodes, they get added to a temporary "pool" of unverified transactions maintained by each node. As miners build a new block, they add unverified transactions from this pool to a new block and then attempt to solve a very hard problem (aka Proof-of-Work) to prove the validity of that new block. The process of mining is explained in detail in <>. +A transaction transmitted across the network is not verified until it becomes part of the global distributed ledger, the blockchain. Every ten minutes, miners generate a new block that contains all the transactions since the last block. New transactions are constantly flowing into the network from user wallets and other applications. As these are seen by the bitcoin network nodes, they get added to a temporary "pool" of unverified transactions maintained by each node. As miners build a new block, they add unverified transactions from this pool to a new block and then attempt to solve a very hard problem (aka Proof-of-Work) to prove the validity of that new block. The process of mining is explained in detail in <>. Transactions are added to the new block, prioritized by the highest-fee transactions first and a few other criteria. Each miner starts the process of mining a new block of transactions as soon as they receive the previous block from the network, knowing they have lost that previous round of competition. They immediately create a new block, fill it with transactions and the fingerprint of the previous block and start calculating the Proof-of-Work for the new block. Each miner includes a special transaction in their block, one that pays their own bitcoin address a reward of newly created bitcoins (currently 25 BTC per block). If they find a solution that makes that block valid, they "win" this reward because their successful block is added to the global blockchain and the reward transaction they included becomes spendable. Jing, who participates in a mining pool, has set up his software to create new blocks that assign the reward to a pool address. From there, a share of the reward is distributed to Jing and other miners in proportion to the amount of work they contributed in the last round. From 713fe0e562a37c307b652b709eec24593c8ee12a Mon Sep 17 00:00:00 2001 From: "Minh T. Nguyen" Date: Thu, 31 Jul 2014 00:04:13 -0700 Subject: [PATCH 39/40] More revertion to original text or minor text adaptation following the merge from #74 --- ch04.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch04.asciidoc b/ch04.asciidoc index fb72ef5f..216049b0 100644 --- a/ch04.asciidoc +++ b/ch04.asciidoc @@ -92,7 +92,7 @@ A +private key+ is simply a number, picked at random. Ownership and control over [TIP] ==== -The bitcoin private key is just a number. A public key can be generated from any private key. Therefore, a public key can be generated from any number, up to 256 bits long. You can pick your private keys randomly using just a coin, pencil and paper: Toss a coin 256 times and you have the binary digits of a random private key you can use in a bitcoin wallet. Keys really are just a pair of numbers, the public key being calculated from the private key. +The bitcoin private key is just a number. You can pick your private keys randomly using just a coin, pencil and paper: Toss a coin 256 times and you have the binary digits of a random private key you can use in a bitcoin wallet. The public key can be then generated from the private key. ==== ===== Generating a private key from a random number From c335c1cf6df7c478f9e67901e745cb5d53234a5f Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Thu, 31 Jul 2014 17:22:08 -0400 Subject: [PATCH 40/40] difficulty targeting, block validation, chain selection --- ch08.asciidoc | 134 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 106 insertions(+), 28 deletions(-) diff --git a/ch08.asciidoc b/ch08.asciidoc index d80f081a..adf38220 100644 --- a/ch08.asciidoc +++ b/ch08.asciidoc @@ -12,7 +12,7 @@ The process of new coin generation is called mining, because the reward is desig Bitcoin miners also earn fees from transactions. Every transaction may include a transaction fee, in the form of a surplus of bitcoin between the transaction's inputs and outputs. The winning bitcoin miner gets to "keep the change" on the transactions included in the winning block. Today the fees represent 0.5% or less of a bitcoin miner's income, the vast majority coming from the newly minted bitcoins. However, as the reward decreases over time and the number of transactions per block increases, a greater proportion of bitcoin mining earnings will come from fees. After 2140 all bitcoin miner earnings will be in the form of transaction fees. -The word "mining" is somewhat misleading. By evoking the extraction of precious metals, it focuses our attention on the reward for mining, the new bitcoins in each block. While mining is incentivized by this reward, the primary purpose of mining is not the reward or the generation of new coins. If you view mining only as the process by which coins are created you are mistaking the means (incentives) as a goal of the process. Mining is the main process of the de-centralized clearinghouse, by which transactions are validated and cleared. Mining secures the bitcoin system and enables the emergence of network-wide consensus without a central authority. Mining is the invention that makes bitcoin special, a de-centralized security mechanism that is the basis for peer-to-peer digital cash. The reward of newly minted coins and transaction fees is an incentive scheme that aligns the actions of miners with the security of the network, while simultaneously implementing the monetary supply, the means not the end. +The word "mining" is somewhat misleading. By evoking the extraction of precious metals, it focuses our attention on the reward for mining, the new bitcoins in each block. While mining is incentivized by this reward, the primary purpose of mining is not the reward or the generation of new coins. If you view mining only as the process by which coins are created you are mistaking the means (incentives) as a goal of the process. Mining is the main process of the de-centralized clearinghouse, by which transactions are validated and cleared. Mining secures the bitcoin system and enables the emergence of network-wide consensus without a central authority. Mining is the invention that makes bitcoin special, a de-centralized security mechanism that is the basis for peer-to-peer digital cash. The reward of newly minted coins and transaction fees is an incentive scheme that aligns the actions of miners with the security of the network, while simultaneously implementing the monetary supply. In this chapter, we will first examine mining as a monetary supply mechanism and then look at the most important function of mining, the de-centralized emergent consensus mechanism that underpins bitcoin's security. @@ -28,11 +28,11 @@ The finite and diminishing issuance creates a fixed monetary supply that resists ===== Deflationary Money -The most important and debated consequence of a fixed and diminishing monetary issuance is that the currency will tend to be inherently _deflationary_. Deflation is the phenomenon of appreciation of value due to a mismatch in supply and demand that drives up the value (and exchange rate) of a currency. The opposite of inflation, price deflation means that your money has more purchasing power over time. +The most important and debated consequence of a fixed and diminishing monetary issuance is that the currency will tend to be inherently _deflationary_. Deflation is the phenomenon of appreciation of value due to a mismatch in supply and demand that drives up the value (and exchange rate) of a currency. The opposite of inflation, price deflation means that the money has more purchasing power over time. -Many economists argue that a deflationary economy is a disaster that should be avoided at all costs. That is because in a period of rapid deflation, the incentives for regular people are to hoard the money and not spend it, hoping that prices will fall. Such a phenomenon unfolded during Japan's "Lost Decade", when a complete collapse of demand pushed the currency into a deflationary spiral. +Many economists argue that a deflationary economy is a disaster that should be avoided at all costs. That is because in a period of rapid deflation people will tend to hoard money instead of spending it, hoping that prices will fall. Such a phenomenon unfolded during Japan's "Lost Decade", when a complete collapse of demand pushed the currency into a deflationary spiral. -Bitcoin experts argue that deflation is not bad *per se*. Rather, we associate deflation with a collapse in demand because that is the only example of deflation we have to study. In a fiat currency with the possibility of unlimited printing, it is very difficult to enter a deflationary spiral unless there is a complete collapse in demand and an unwillingness to print money. Deflation in bitcoin is not caused by a collapse in demand, but by predictably constrained supply. +Bitcoin experts argue that deflation is not bad *per se*. Rather, deflation is associated with a collapse in demand because that is the only example of deflation we have to study. In a fiat currency with the possibility of unlimited printing, it is very difficult to enter a deflationary spiral unless there is a complete collapse in demand and an unwillingness to print money. Deflation in bitcoin is not caused by a collapse in demand, but by a predictably constrained supply. In practice, it has become evident that the hoarding instinct caused by a deflationary currency can be overcome by discounting from vendors, until the discount overcomes the hoarding instinct of the buyer. Since the seller is also motivated to hoard, the discount becomes the equilibrium price at which the two hoarding instincts are matched. With discounts of 30% on the bitcoin price, most bitcoin retailers are not experiencing difficulty overcoming the hoarding instinct and generating revenue. It remains to be seen whether the deflationary aspect of the currency is really a problem when it is not driven by rapid economic retraction. @@ -53,9 +53,10 @@ Bitcoin's de-centralized consensus emerges from the interplay of four processes In the next few sections we will examine these processes and how they interact to create the emergent property of network-wide consensus that allows any bitcoin node to assemble its own copy of the authoritative, trusted, public, global ledger. +[[tx_verification]] === Independent Verification of Transactions -In the previous chapter we saw how wallet software creates transactions by collecting UTXO, providing the appropriate unlocking scripts and then constructing new outputs assigned to a new owner. The resulting transaction is then sent to the neighboring nodes in the bitcoin network so that it may be propagated across the entire bitcoin network. +In a previous chapter we saw how wallet software creates transactions by collecting UTXO, providing the appropriate unlocking scripts and then constructing new outputs assigned to a new owner. The resulting transaction is then sent to the neighboring nodes in the bitcoin network so that it may be propagated across the entire bitcoin network. However, before forwarding transactions to its neighbors, every bitcoin node that receives a transaction will first verify the transaction. This ensures that only valid transactions are propagated across the network, while invalid transactions are discarded at the first node that encounters them. @@ -94,13 +95,13 @@ Jing's node is listening for new blocks, propagated on the bitcoin network, as d After validating transactions, a bitcoin node will add them to the _memory pool_, or _transaction pool_, where transactions await until they can be included (mined) into a block. Jing's node collects, validates and relays new transactions just like any other node. Unlike other nodes, however, Jing's node will then aggregate these transactions into a _candidate block_. -Let's follow the blocks that were created during the time Alice bought a cup of coffee from Bob's Cafe (see <>). Alice's transaction was included in block 277316. For the purpose of demonstrating the concepts in this chapter let's assume that block was mined by Jing's mining system and follow Alice's transaction as it becomes part of this new block. +Let's follow the blocks that were created during the time Alice bought a cup of coffee from Bob's Cafe (see <>). Alice's transaction was included in block 277,316. For the purpose of demonstrating the concepts in this chapter let's assume that block was mined by Jing's mining system and follow Alice's transaction as it becomes part of this new block. Jing's mining node maintains a local copy of the blockchain, the list of all blocks created since the beginning of the bitcoin system in 2009. By the time Alice buys the cup of coffee, Jing's node has assembled a chain of 277,314 blocks. Jing's node is listening for transactions, trying to mine a new block and also listening for blocks discovered by other nodes. As Jing's node is mining, it receives block 277,315 through the bitcoin network. The arrival of this block signifies the end of the competition for block 277,315 and the beginning of the competition to create block 277,316. During the previous 10 minutes, while Jing's node was searching for a solution to block 277,315, it was also collecting transactions in preparation for the next block. By now it has collected a few hundred transactions in the memory pool. Upon receiving block 277,315 and validating it, Jing's node will also check all the transactions in the memory pool and remove any that were included in block 277,315. Whatever transaction remain in the memory pool are unconfirmed and are waiting to be recorded in a new block. -Jing's node immediately constructs a new empty block, a candidate for block 277,316. This block is called a candidate block because it is not yet a valid block, as it does not contain a valid proof-of-work. The block becomes valid only if the miner succeeds in finding a solution to the proof-of-work algorithm. +Jing's node immediately constructs a new empty block, a candidate for block 277,316. This block is called a candidate block because it is not yet a valid block, as it does not contain a valid proof-of-work. The block becomes valid only if the miner succeeds in finding a solution to the Proof-of-Work algorithm. ==== Transaction Age, Fees and Priority @@ -314,7 +315,7 @@ In block 277,316 we see that the coinbase (see <>), which The first byte, +03+ instructs the script execution engine to push the next 3 bytes onto the script stack (see <>). The next 3 bytes, +0x443b04+, are the block height encoded in little-endian format (backwards, least significant bit first). Reverse the order of the bytes and the result is +0x043b44+ which is 277,316 in decimal. -The next few hexadecimal digits (+03858402062+) are used to encode an extra _nonce_, or random value, used to find a suitable proof-of-work solution. This is discussed in more detail in the next section on <> +The next few hexadecimal digits (+03858402062+) are used to encode an extra _nonce_, or random value, used to find a suitable Proof-of-Work solution. This is discussed in more detail in the next section on <> The final part of the coinbase data (+2f503253482f+) is the ASCII-encoded string "/P2SH/", which indicates that mining node that mined this block supports the Pay-to-Script-Hash (P2SH) improvement defined in BIP0016. The introduction of the P2SH capability required a "vote" by miners to endorse either BIP0016 or BIP0017. Those endorsing the BIP0016 implementation were to include "/P2SH/" in their coinbase data. Those endorsing the BIP0017 implementation of P2SH were to include the string "p2sh/CHV" in their coinbase data. The BIP0016 was elected as the winner, and many miners continued including the string "/P2SH/" in their coinbase to indicate support for this feature. @@ -331,8 +332,8 @@ To construct the block header, the mining node needs to fill in six fields: | 32 bytes | Previous Block Hash | A reference to the hash of the previous (parent) block in the chain | 32 bytes | Merkle Root | A hash of the root of the Merkle-Tree of this block's transactions | 4 bytes | Timestamp | The approximate creation time of this block (seconds from Unix Epoch) -| 4 bytes | Difficulty Target | The proof-of-work algorithm difficulty target for this block -| 4 bytes | Nonce | A counter used for the proof-of-work algorithm +| 4 bytes | Difficulty Target | The Proof-of-Work algorithm difficulty target for this block +| 4 bytes | Nonce | A counter used for the Proof-of-Work algorithm |======= At the time block 277,316 was mined, the version number describing the block structure is version "2", which is encoded in little-endian format in 4 bytes as +0x02000000+. @@ -343,7 +344,7 @@ The next step is to summarize all the transactions with a Merkle Tree, in order The mining node will then add a 4-byte timestamp, encoded as a Unix "Epoch" timestamp, which is based on the number of seconds elapsed from January 1st, 1970, midnight UTC/GMT. The time +1388185914+ is equal to Friday, 27 Dec 2013, 23:11:54 UTC/GMT. -The node then fills in the difficulty target, which defines the required proof-of-work difficulty to make this a valid block. The difficulty is stored in the block as a "difficulty bits" metric, which is a mantissa-exponent encoding of the target. The encoding has a one-byte exponent, followed by a 3 byte mantissa (coefficient). In block 277,316, for example, the difficulty bits value is +0x1903a30c+. The first part +0x19+ is a hexadecimal exponent, while the next part +0x03a30c+ is the coefficient. The concept of a difficulty target is explained in <> and the "difficulty bits" representation is explained in <>. +The node then fills in the difficulty target, which defines the required Proof-of-Work difficulty to make this a valid block. The difficulty is stored in the block as a "difficulty bits" metric, which is a mantissa-exponent encoding of the target. The encoding has a one-byte exponent, followed by a 3 byte mantissa (coefficient). In block 277,316, for example, the difficulty bits value is +0x1903a30c+. The first part +0x19+ is a hexadecimal exponent, while the next part +0x03a30c+ is the coefficient. The concept of a difficulty target is explained in <> and the "difficulty bits" representation is explained in <>. The final field is the nonce, which is initialized to zero. @@ -432,9 +433,9 @@ To give a simple analogy, imagine a game where players throw a pair of dice repe In the example above, the winning "nonce" is 13 and this result can be confirmed by anyone independently. Anyone can add the number 13 as a suffix to the phrase "I am Satoshi Nakamoto" and compute the hash, verifying that it is less than the target. The successful result is also proof-of-work, as it proves we did the work to find that nonce. While it only takes one hash computation to verify, it took us 13 hash computations to find a nonce that worked. If we had a lower target (higher difficulty) it would take many more hash computations to find a suitable nonce, but only one hash computation for anyone to verify. Furthermore, by knowing the target, anyone can estimate the difficulty using statistics and therefore know how much work was needed to find such a nonce. -Bitcoin's proof-of-work is very similar to the problem above. The miner constructs a candidate block filled with transactions. Next, the miner will calculate the hash of this block's header and see if it is smaller than the current _target_. If the hash is not less than the target, the miner will modify the nonce (usually just incrementing it by one) and try again. At the current difficulty in the bitcoin network, miners have to try quadrillions of times before finding a nonce that results in a low enough block header hash. +Bitcoin's Proof-of-Work is very similar to the problem above. The miner constructs a candidate block filled with transactions. Next, the miner calculates the hash of this block's header and see if it is smaller than the current _target_. If the hash is not less than the target, the miner will modify the nonce (usually just incrementing it by one) and try again. At the current difficulty in the bitcoin network, miners have to try quadrillions of times before finding a nonce that results in a low enough block header hash. -A very simplified proof-of-work algorithm is implemented in Python here: +A very simplified Proof-of-Work algorithm is implemented in Python here: ((("proof of work"))) [[pow_example1]] .Simplified Proof-Of-Work Implementation @@ -448,7 +449,7 @@ include::code/proof-of-work-example.py[] Running the code above, you can set the desired difficulty (in bits, how many of the leading bits must be zero) and see how long it takes for your computer to find a solution. In the following examples, you can see how it works on an average laptop: [[pow_example_outputs]] -.Running the proof-of-work example for various difficulties +.Running the Proof-of-Work example for various difficulties ==== [source, bash] ---- @@ -536,43 +537,114 @@ target = 0x03a30c * 2^(0x08 * (0x19 - 0x03))^ => target = 0x0000000000000003A30C00000000000000000000000000000000000000000000 +==== Difficulty Target and Re-Targetting +As we saw above the target determines the difficulty and therefore affects how long it takes to find a solution to the Proof-of-Work algorithm. This leads to the obvious questions: Why is the difficulty adjustable, who adjusts it and how? +Bitcoin's blocks are generated every 10 minutes, on average. This is bitcoin's heartbeat and underpins the frequency of currency issuance and the speed of transaction settlement. It has to remain constant not just over the short term, but over a period of many decades. Over this time, it is expected that computer power will continue to increase at a rapid pace. Furthermore, the number of participants in mining and the computers they use will also constantly change. To keep the block generation time at 10 minutes, the difficulty of mining must be adjusted to account for these changes. In fact, difficulty is a dynamic parameter that will be periodically adjusted to meet a 10-minute block target. In simple terms, the difficulty target is set to whatever mining power will result in a 10-minute block interval. +How then is such an adjustment made in a completely de-centralized network? Difficulty re-targeting occurs automatically and on every full node independently. Every 2016 blocks, all nodes re-target the Proof-of-Work difficulty. The equation for retargeting difficulty measures the time it took to find the last 2016 blocks and compares that to the expected time of 20160 minutes (two weeks based upon a desired 10 minute block time). The ratio between the actual timespan and desired timespan is calculated and a corresponding adjustment (up or down) is made to the difficulty. In simple terms: If the network is finding blocks faster than every 10 minutes, the difficulty increases. If block discovery is slower than expected, the difficulty decreases. +The equation can be summarized as: +New Difficulty = Old Difficulty * (Actual Time of Last 2016 Blocks / 20160 minutes) +Here's the code used in the Bitcoin Core client -==== Difficulty Target and Re-Targetting +[[retarget_difficulty_code]] +.Re-targeting the Proof-of-Work difficulty - +GetNextWorkRequired()+ in +pow.cpp+, line 43 +==== +[source,cpp] +---- -Bitcoin is tuned to generate blocks approximately every 10 minutes. This is achieved by automatically adjusting the target difficulty to account for increases and decreases in the available computing power on the network. This process occurs automatically and on every full node independently. Each node recalculates the expected difficulty every 2106 blocks, based on the time it took to hash the previous 2106 blocks. In simple terms: If the network is finding blocks faster than every 10 minutes, the difficulty increases. If block discovery is slower than expected, the difficulty will decrease. + // Go back by what we want to be 14 days worth of blocks + const CBlockIndex* pindexFirst = pindexLast; + for (int i = 0; pindexFirst && i < Params().Interval()-1; i++) + pindexFirst = pindexFirst->pprev; + assert(pindexFirst); -{miners that are on mining pools get the difficulty (do not calculate difficulty independently) they are given the difficulty from the mining pool so they don't have to calculate the difficulty themselves and they are actually given a lower difficulty target. There are essentially two classifications of miners today - pool miners and solo miners. Solo miners run a full node and compete on their own. Whereas pool miners collaborate with one another and compete against the network as a team, while sharing the reward. The reason miners join pools - solo miners need an enormous amount of hashing power in order to have even the slimmest chance of finding a solution to a block which will make their earnings erratic. By participating in a pool, miners get smaller shares but a more regular share of rewards, reducing uncertainty. Solo mining is becoming obsolete, as the difficulty increases the likelihood of a solo miner finding a solution is more like winning the lottery.} + // Limit adjustment step + int64_t nActualTimespan = pindexLast->GetBlockTime() - pindexFirst->GetBlockTime(); + LogPrintf(" nActualTimespan = %d before bounds\n", nActualTimespan); + if (nActualTimespan < Params().TargetTimespan()/4) + nActualTimespan = Params().TargetTimespan()/4; + if (nActualTimespan > Params().TargetTimespan()*4) + nActualTimespan = Params().TargetTimespan()*4; -{ASIC miners do not run full nodes. Full nodes independently calculate the difficulty using the same equation on the same block, arriving at the same result for the new difficulty. Retargeting the difficulty at block heights that are multiples of 2106 from the genesis block. The equation for retargeting difficulty measures the time it took to find the last 2106 blocks, compares that to the expected time of 21,060 minutes (based upon a desired 10 minute block time), the difference is calculated as a percentage and a corresponding percentage adjustment is made to the difficulty. To avoid extreme volatility in the difficulty, the retargeting adjustment cannot exceed {X%} per retargeting. The difficulty will only be retargeted up or down by maximum of {X%} per cycle. If the required difficulty adjustment is greater than the maximum it will be reflected in the next retargeting adjustment as the imbalance will persist through the next 2106 blocks. Large discrepancies between hashing power and difficulty may take several cycles to even out. This leads to a potential problem which has been observed in alt coins, where very large changes in difficulty can cause hashing power to collapse leading to excessively long block times. If the aggregate network hashing power collapses due to the departure of many miners simultaneously, the remaining hashing power may be insufficient to meet the difficulty target leading to excessively long block intervals. Since retargeting is not a function of time but rather block number, a large hashing deficit can mean the next cycle is very far in the future. Usually this is caused for two reasons - scenario one - entry for a brief period of a lot of hashing which temporarily increases the difficulty, followed by the departure of that hashing, resulting in a collapse of block solutions. Essentially a hashing pump and dump. Usually a deliberate attack. This is not a concern in bitcoin because new hashing power introduced into the network will not effect the average enough to cause a major change in difficulty. The other scenario in which hashing power can collapse is a crash in bitcoin price, making mining unprofitable. (If the miner cannot pay their electricity bill, the miner will leave the network.) This is a weakness of the protocol, as an insurmountable hashing deficit could occur with a precipitous collapse in price and corresponding reduction in available hashing power. The network would be unable to recover because ... } + // Retarget + uint256 bnNew; + uint256 bnOld; + bnNew.SetCompact(pindexLast->nBits); + bnOld = bnNew; + bnNew *= nActualTimespan; + bnNew /= Params().TargetTimespan(); + + if (bnNew > Params().ProofOfWorkLimit()) + bnNew = Params().ProofOfWorkLimit(); + +---- +==== + +The parameters Interval (2016 blocks) and TargetTimespan (two weeks as 1,209,600 seconds) are defined in +chainparams.cpp+ + +To avoid extreme volatility in the difficulty, the retargeting adjustment must be less than a factor of four (4) per cycle. If the required difficulty adjustment is greater than a factor of four, it will be adjusted by the maximum and not more. Any further adjustment will be accomplished in the next retargeting period as the imbalance will persist through the next 2016 blocks. Therefore, large discrepancies between hashing power and difficulty may take several 2016 block cycles to balance out. [TIP] ==== -The difficulty of finding a bitcoin block is approximately '10 minutes of processing' for the entire network, based on the time it took to find the previous 2106 blocks, adjusted every 2106 blocks. +The difficulty of finding a bitcoin block is approximately '10 minutes of processing' for the entire network, based on the time it took to find the previous 2016 blocks, adjusted every 2016 blocks. ==== Note that the target difficulty is independent of the number of transactions or the value of transactions. This means that the amount of hashing power and therefore electricity expended to secure bitcoin is also entirely independent of the number of transactions. Bitcoin can scale up, achieve broader adoption and remain secure without any increase in hashing power from today's level. The increase in hashing power represents market forces as new miners enter the market to compete for the reward. As long as enough hashing power is under the control of miners acting honestly in pursuit of the reward, it is enough to prevent "takeover" attacks and therefore it is enough to secure bitcoin. -The target difficulty is closely related to the cost of electricity and the exchange rate of bitcoin vis-a-vis the currency used to pay for electricity. High performance mining systems are about as efficient as possible with the current generation of silicon fabrication, converting electricity into hashing computation at the highest rate possible. The primary influence on the mining market is the price of one kilowatt-hour in bitcoin, as that determines the profitability of mining and therefore the incentives to enter or exit the mining market. +The target difficulty is closely related to the cost of electricity and the exchange rate of bitcoin vis-a-vis the currency used to pay for electricity. High performance mining systems are about as efficient as possible with the current generation of silicon fabrication, converting electricity into hashing computation at the highest rate possible. The primary influence on the mining market is the price of one kilowatt-hour in bitcoin, as that determines the profitability of mining and therefore the incentives to enter or exit the mining market. -=== Selecting the Highest-Difficulty Chain +=== Successfully Mining the Block -[[forks]] -==== Blockchain Forks +As we saw earlier, Jing's node has constructed a candidate block and prepared it for mining. Jing has several hardware mining rigs with Application Specific Integrated Circuits, where hundreds of thousands of integrated circuits run the SHA-256 algorithm in parallel at incredible speeds. These specialized machines are connected to his mining node over USB. Next, the mining node running on Jing's desktop transmits the block header to his mining hardware, which start testing trillions of nonces per second. + +Almost eleven minutes after starting to mine block 277,316, one of the hardware mining machines finds a solution and sends it back to the mining node. The nonce 4,215,469,401 when inserted into the block header produces a block hash of +0000000000000002a7bbd25a417c0374cc55261021e8a9ca74442b01284f0569+, which is less than the target of +0000000000000003A30C00000000000000000000000000000000000000000000+. + +Immediately, Jing's mining node transmits the block to all its peers. They receive, validate and then propagate the new block. As the block ripples out across the network, each node adds it to its own copy of the blockchain, extending it to a new height of 277,316 blocks. As mining nodes receive and validate the block, they abandon their efforts to find a block at the same height and immediately start computing the next block in the chain. + +In the next section we'll look at the process each node uses to validate a block and select the longest chain, creating the consensus that forms the de-centralized blockchain. + +=== Validating a New Block -{Discuss chain selection: As new blocks are found they are added to the chain. Each full node constructs a chain and calculates the cumulative difficulty of that chain. As blocks are constructed and propagated across the network,} +The third step in bitcoin's consensus mechanism is independent validation of each new block by every node on the network. As the newly solved block moves across the network, each node performs a series of tests to validate it before propagating it to its peers. This ensures that only valid blocks are propagated on the network. The independent validation also ensures that miners who act honestly get their blocks incorporated in the blockchain, thus earning the reward. Those miners who act dishonestly have their blocks rejected and not only lose the reward but also waste the effort expended to find a Proof-of-Work solution, thus incurring the cost of electricity without compensation. -{create a graphic showing propagating transaction} +When a node receives a new block, it will validate the block by checking it against a long list of criteria. These criteria can be seen in the Bitcoin Core client in the functions +CheckBlock+ and +CheckBlockHeader+. These criteria include: -{Because the blockchain is a decentralized data structure, different copies of it are not always consistent. Blocks may arrive at different nodes at different times, causing them to have a different perspective o ft the blockchain. To resolve this, each node always selects and attempts to extend the chain of blocks that represents the most Proof-of-Work, also known as the longest chain or greatest cumulative difficulty chain, by adding the difficulty recorded in each block for a chain a node can calculate the total amount of PoW that has been expended to create that chain. As long as all nodes select the longest, i.e. the longest cumulative difficulty chain, the global bitcoin network eventually converges to a consistent state. Forks occur as temporary inconsistencies between versions of the blockchain, which are resolved by the eventual reconvergence.} +* Check the syntactic validity of the block data structure +* Check the Proof-of-Work, by checking the block header hash is less than the target difficulty +* Check the block timestamp is less than two hours in the future (allowing for time errors) +* Check the block size is within acceptable limits +* Check the first transaction (and only the first) is a coinbase generation transaction +* Validate all transactions within the block, using the transaction checklist discussed in <> -{Bitcoin's _consensus mechanism_, which creates the is comprised of the independent validation of transactions by every node, the cumulative work of the miners, and the network convergence upon the greatest difficulty chain. The interplay of these three processes manifests the emergent property of consensus that allows for a global decentralized public ledger without a central authority. which creates one global public ledger, emerges as a property of (1) the selection of the greatest difficulty chain. This chapter is about the emergent property of consensus. This consensus is created by the interplay of three processes - (1) ,2,3. The emergent property of network-wide consensus is what establishes a trusted decentralized global public ledger. Satohsi's invention was not proof of work, elliptic curve cryptography. Satoshi's invention was how the interplay of these processes creates emergent consensus in a decentralized network without the need for a centralized trusted authority.} +The independent validation of each new block by every node on the network ensures that the miners can't cheat. In previous sections we saw how the miners get to write a transaction that awards them the new bitcoins created within the block and claim the transaction fees. Why does the miner not write themselves a transaction for a thousand bitcoin instead of the correct reward? Because that would make the block invalid, which would result in it being rejected and therefore that transaction would never become part of the ledger. The miner has to construct a perfect block, based on the shared rules that all nodes follow and mine it with a correct solution to the Proof-of-Work. To do so they expend a lot of electricity in mining and if they cheat all the electricity and effort is wasted. This is why independent validation is a key component of decentralized consensus. +=== Assembling and Selecting Chains of Blocks + +The final step in bitcoin's de-centralized consensus mechanism is the assembly of blocks into chains and the selection of the chain with the most Proof-of-Work. Once a node has validated a new block, it will then attempt to assemble a chain, by connecting the block to the existing blockchain. + +Nodes maintain three sets of blocks: those connected to the main blockchain, those that form branches off the main blockchain (secondary chains) and finally blocks that do not have a known parent in the known chains (orphans). Invalid blocks are rejected as soon as any one of the validation criteria fails and are therefore not included in any chain. + +The "main chain" at any time is whichever chain of blocks has the most cumulative difficulty associated with it. Under most circumstances this is also the chain with the most blocks in it, unless there are two equal length chains and one has more proof-of-work. The main chain will also have branches with blocks that are "siblings" to the blocks on the main chain. These blocks are valid but not part of the main chain. They are kept for future reference, in case one of those chains is extended to exceeds the main chain in difficulty. In the next section (<>), we will see how secondary chains occur as a result of an almost simultaneous mining of blocks at the same height. + +When a new block is received, a node will try to slot it into the existing blockchain. The node will look at the block's "previous block hash" field, which is the reference to the new block's parent. Then the node will attempt to find that parent in the existing blockchain. Most of the time, the parent will be the "tip" of the main chain, meaning this new block extends the main chain. For example, the new block 277,316 has a reference to the hash of its parent block 277,315. Most nodes that receive 277,316 will already have block 277,315 as the tip of their main chain and will therefore link the new block and extend that chain. + +Sometimes, as we will see in <>, the new block extends a chain that is not the main chain. In that case, the node will attach the new block to the secondary chain it extends and then compare the difficulty of the secondary chain to the main chain. If the secondary chain has more cumulative difficulty than the main chain, the node will _reconverge_ on the secondary chain, meaning it will select the secondary chain as its new main chain, making the old main chain a secondary chain. + +If a block is received and no parent is found in the existing chains, then that block is considered an "orphan". Orphan blocks are put into a temporary pool where they will stay until their parent is received. Once the parent is received and linked into the existing chains, the orphan can be pulled out of the orphan pool and linked to the parent, making it part of a chain. Orphan blocks usually occur when two blocks that were mined within a short time of each other are received in reverse order (child before parent). + +By selecting the greatest-difficulty chain, all nodes eventually achieve network-wide consensus. Temporary discrepancies between chains are resolved eventually as more Proof-of-Work is added, extending one of the possible chains. Mining nodes "vote" with their mining power by choosing which chain to extend by mining the next block. When they find a new block and extend the chain, the new block itself represents their vote. + +In the next section we will look at how discrepancies between competing chains (forks) are resolved by the independent selection of the longest difficulty chain. + +[[forks]] +==== Blockchain Forks + +Because the blockchain is a decentralized data structure, different copies of it are not always consistent. Blocks may arrive at different nodes at different times, causing them to have a different perspective of the blockchain. To resolve this, each node always selects and attempts to extend the chain of blocks that represents the most Proof-of-Work, also known as the longest chain or greatest cumulative difficulty chain. By summing the difficulty recorded in each block in a chain, a node can calculate the total amount of Proof-of-Work that has been expended to create that chain. As long as all nodes select the longest cumulative difficulty chain, the global bitcoin network eventually converges to a consistent state. Forks occur as temporary inconsistencies between versions of the blockchain, which are resolved by eventual re-convergence as more blocks are added to one of the forks. [[fork1]] .Visualization of a blockchain fork event - Before the Fork @@ -586,7 +658,7 @@ A "fork" occurs whenever there are two candidate blocks competing to form the lo .Visualization of a blockchain fork event - Two blocks found simultaneously image::images/GlobalFork2.png["globalfork2"] -Let's assume for example that a miner in Canada finds a proof-of-work solution for block "A" that extends the blockchain from height 315000 to height 315001, building on top of parent block "P". Almost simultaneously, an Australian miner who was also extending block "P", finds a solution for block "B", their candidate block. Now, there are two possible candidates for block height 315001, one we call "A", originating in Canada and one we call "B", originating in Australia. Both blocks are valid, both blocks contain a valid solution to the proof of work, both blocks extend the same parent. Both blocks likely contain most of the same transactions, with only perhaps a few differences in the order of transactions. +Let's assume for example that a miner in Canada finds a Proof-of-Work solution for block "A" that extends the blockchain from height 315000 to height 315001, building on top of parent block "P". Almost simultaneously, an Australian miner who was also extending block "P", finds a solution for block "B", their candidate block. Now, there are two possible candidates for block height 315001, one we call "A", originating in Canada and one we call "B", originating in Australia. Both blocks are valid, both blocks contain a valid solution to the proof of work, both blocks extend the same parent. Both blocks likely contain most of the same transactions, with only perhaps a few differences in the order of transactions. [[fork2]] .Visualization of a blockchain fork event - Two blocks propagate, splitting the network @@ -623,7 +695,13 @@ As of version 0.9, Bitcoin Core's +alertnotify+ option will send alerts whenever image::images/BlockChainWithForks.png["chainforks"] +{ balance between confirmation time and fork frequency } + + === Mining Pools + +{miners that are on mining pools get the difficulty (do not calculate difficulty independently) they are given the difficulty from the mining pool so they don't have to calculate the difficulty themselves and they are actually given a lower difficulty target. There are essentially two classifications of miners today - pool miners and solo miners. Solo miners run a full node and compete on their own. Whereas pool miners collaborate with one another and compete against the network as a team, while sharing the reward. The reason miners join pools - solo miners need an enormous amount of hashing power in order to have even the slimmest chance of finding a solution to a block which will make their earnings erratic. By participating in a pool, miners get smaller shares but a more regular share of rewards, reducing uncertainty. Solo mining is becoming obsolete, as the difficulty increases the likelihood of a solo miner finding a solution is more like winning the lottery.} + ==== Managed Pools ==== P2Pool === Consensus Attacks