From 19952cdec0d4661fb92ca251b57f59837bfa99c7 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Feb 2018 18:26:59 -0600 Subject: [PATCH 01/45] Cleaned up script, enclosed in quotes, removed spaces #403 --- ch04.asciidoc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ch04.asciidoc b/ch04.asciidoc index 836cf674..d2f32365 100644 --- a/ch04.asciidoc +++ b/ch04.asciidoc @@ -651,8 +651,10 @@ script hash = RIPEMD160(SHA256(script)) The resulting "script hash" is encoded with Base58Check with a version prefix of 5, which results in an encoded address starting with a +3+. An example of a P2SH address is +3F6i6kwkevjR7AsAd4te2YB2zZyASEm1HM+, which can be derived using the Bitcoin Explorer commands +script-encode+, +sha256+, +ripemd160+, and +base58check-encode+ (see <>) as follows: ---- -$ echo dup hash160 [89abcdefabbaabbaabbaabbaabbaabbaabbaabba] equalverify checksig > script -$ bx script-encode < script | bx sha256 | bx ripemd160 | bx base58check-encode --version 5 +$ echo \ +'DUP HASH160 [89abcdefabbaabbaabbaabbaabbaabbaabbaabba] EQUALVERIFY CHECKSIG' > script +$ bx script-encode < script | bx sha256 | bx ripemd160 \ +| bx base58check-encode --version 5 3F6i6kwkevjR7AsAd4te2YB2zZyASEm1HM ---- From e93a8c42b0380fd788581fd97b86518d7d976a82 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Feb 2018 18:49:31 -0600 Subject: [PATCH 02/45] Clarifying revocation keys #406, fixes --- ch12.asciidoc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/ch12.asciidoc b/ch12.asciidoc index 6599b671..2ca5fc5f 100644 --- a/ch12.asciidoc +++ b/ch12.asciidoc @@ -370,7 +370,13 @@ image::images/mbc2_1208.png["Two asymmetric commitment transactions with delayed Now we introduce the final element of this scheme: a revocation key that allows a wronged party to punish a cheater by taking the entire balance of the channel. -Each of the commitment transactions has a "delayed" output. The redemption script for that output allows one party to redeem it after 1000 blocks _or_ the other party to redeem it if they have a revocation key. So when Hitesh creates a commitment transaction for Irene to sign, he makes the second output payable to himself after 1000 blocks, or to whoever can present a revocation key. Hitesh constructs this transaction and creates a revocation key that he keeps secret. He will only reveal it to Irene when he is ready to move to a new channel state and wants to revoke this commitment. The second output's script looks like this: +The revocation key is composed of two secrets, each half generated independently by each channel participant. It is similar to a 2-of-2 multisig, but constructed using elliptic curve arithmetic, so that both parties know the revocation public key but only half the revocation secret key. In each round, both parties reveal their half of the revocation secret to the other party, thereby giving the other party (who now has both halves) the means to claim the penalty output if this revoked transaction is ever broadcast. + +Each of the commitment transactions has a "delayed" output. The redemption script for that output allows one party to redeem it after 1000 blocks, _or_ the other party to redeem it if they have a revocation key, penalizing transmission of a revoked commitment. + +So when Hitesh creates a commitment transaction for Irene to sign, he makes the second output payable to himself after 1000 blocks, or to the revocation public key (of which he only knows half the secret). Hitesh constructs this transaction. He will only reveal his half of the revocation secret to Irene when he is ready to move to a new channel state and wants to revoke this commitment. + +The second output's script looks like this: ---- Output 0 <5 bitcoin>: @@ -391,9 +397,9 @@ CHECKSIG Irene can confidently sign this transaction, since if transmitted it will immediately pay her what she is owed. Hitesh holds the transaction, but knows that if he transmits it in a unilateral channel closing, he will have to wait 1000 blocks to get paid. -When the channel is advanced to the next state, Hitesh has to _revoke_ this commitment transaction before Irene agrees to sign the next commitment transaction. To do that, all he has to do is send the _revocation key_ to Irene. Once Irene has the revocation key for this commitment, she can sign the next commitment with confidence. She knows that if Hitesh tries to cheat by publishing the prior commitment, she can use the revocation key to redeem Hitesh's delayed output. _If Hitesh cheats, Irene gets BOTH outputs_. +When the channel is advanced to the next state, Hitesh has to _revoke_ this commitment transaction before Irene agrees to sign the next commitment transaction. To do that, all he has to do is send his half of the _revocation key_ to Irene. Once Irene has both halves of the revocation secret key for this commitment, she can sign the next commitment with confidence. She knows that if Hitesh tries to cheat by publishing the prior commitment, she can use the revocation key to redeem Hitesh's delayed output. _If Hitesh cheats, Irene gets BOTH outputs_. Meanwhile, Hitesh only has half the revocation secret for that revocation public key and can't redeem the output until 1000 blocks. Irene will be able to redeem the output and punish Hitesh before the 1000 blocks have elapsed. -The revocation protocol is bilateral, meaning that in each round, as the channel state is advanced, the two parties exchange new commitments, exchange revocation keys for the previous commitment, and sign each other's commitment transactions. As they accept a new state, they make the prior state impossible to use, by giving each other the necessary revocation keys to punish any cheating. +The revocation protocol is bilateral, meaning that in each round, as the channel state is advanced, the two parties exchange new commitments, exchange revocation secrets for the previous commitments, and sign each other's new commitment transactions. As they accept a new state, they make the prior state impossible to use, by giving each other the necessary revocation secrets to punish any cheating. Let's look at an example of how it works. One of Irene's customers wants to send 2 bitcoin to one of Hitesh's customers. To transmit 2 bitcoin across the channel, Hitesh and Irene must advance the channel state to reflect the new balance. They will commit to a new state (state number 2) where the channel's 10 bitcoin are split, 7 bitcoin to Hitesh and 3 bitcoin to Irene. To advance the state of the channel, they will each create new commitment transactions reflecting the new channel balance. From 5b035b14dbcfc2aca4959276c917025f55ee13f1 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Feb 2018 18:54:52 -0600 Subject: [PATCH 03/45] Clarifying revocation fixes #406 --- ch12.asciidoc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ch12.asciidoc b/ch12.asciidoc index 2ca5fc5f..63f8f425 100644 --- a/ch12.asciidoc +++ b/ch12.asciidoc @@ -368,9 +368,11 @@ This way, each party has a commitment transaction, spending the 2-of-2 funding o .Two asymmetric commitment transactions with delayed payment for the party holding the transaction image::images/mbc2_1208.png["Two asymmetric commitment transactions with delayed payment for the party holding the transaction"] -Now we introduce the final element of this scheme: a revocation key that allows a wronged party to punish a cheater by taking the entire balance of the channel. +Now we introduce the final element of this scheme: a revocation key that prevents a cheater from broadcasting an expired commitment. The revocation key allows the wronged party to punish the cheater by taking the entire balance of the channel. -The revocation key is composed of two secrets, each half generated independently by each channel participant. It is similar to a 2-of-2 multisig, but constructed using elliptic curve arithmetic, so that both parties know the revocation public key but only half the revocation secret key. In each round, both parties reveal their half of the revocation secret to the other party, thereby giving the other party (who now has both halves) the means to claim the penalty output if this revoked transaction is ever broadcast. +The revocation key is composed of two secrets, each half generated independently by each channel participant. It is similar to a 2-of-2 multisig, but constructed using elliptic curve arithmetic, so that both parties know the revocation public key but each party knows only half the revocation secret key. + +In each round, both parties reveal their half of the revocation secret to the other party, thereby giving the other party (who now has both halves) the means to claim the penalty output if this revoked transaction is ever broadcast. Each of the commitment transactions has a "delayed" output. The redemption script for that output allows one party to redeem it after 1000 blocks, _or_ the other party to redeem it if they have a revocation key, penalizing transmission of a revoked commitment. From 801374b344966c32185d9dcae7ddb31814968dfa Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Feb 2018 19:11:27 -0600 Subject: [PATCH 04/45] Explain extra nonce and timestamp to exceed 32 bit nonce #414 --- ch10.asciidoc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ch10.asciidoc b/ch10.asciidoc index 8216a090..a90d9a7a 100644 --- a/ch10.asciidoc +++ b/ch10.asciidoc @@ -702,9 +702,11 @@ The difficulty of mining is closely related to the cost of electricity and the e === Successfully Mining the Block -((("mining and consensus", "mining the block", "successful completion")))((("use cases", "mining for bitcoin", id="jingtentwo")))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 SHA256 algorithm in parallel at incredible speeds. Many of these specialized machines are connected to his mining node over USB or a local area network. Next, the mining node running on Jing's desktop transmits the block header to his mining hardware, which starts testing trillions of nonces per second. +((("mining and consensus", "mining the block", "successful completion")))((("use cases", "mining for bitcoin", id="jingtentwo")))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 SHA256 algorithm in parallel at incredible speeds. Many of these specialized machines are connected to his mining node over USB or a local area network. Next, the mining node running on Jing's desktop transmits the block header to his mining hardware, which starts testing trillions of nonces per second. Because the nonce is only 32 bits, after exhausting all the nonce possibilities (about 4 billion), the mining hardware changes the block header (adjusting the coinbase extra nonce space or timestamp) and resets the nonce counter, testing new combinations. -Almost 11 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. When inserted into the block header, the nonce 924,591,752 produces a block hash of: +Almost 11 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. + +When inserted into the block header, the nonce 924,591,752 produces a block hash of: ---- 0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4 From ff996795f9d6b5c9aebc83e7671e8cade6a57afc Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Feb 2018 19:17:35 -0600 Subject: [PATCH 05/45] Clarification of os.urandom "quality" caution #417 --- ch04.asciidoc | 156 +++++++++++++++++++++++++------------------------- 1 file changed, 78 insertions(+), 78 deletions(-) diff --git a/ch04.asciidoc b/ch04.asciidoc index d2f32365..135f4311 100644 --- a/ch04.asciidoc +++ b/ch04.asciidoc @@ -1,15 +1,15 @@ [[ch04_keys_addresses]] == Keys, Addresses -((("cryptography", "defined")))((("cryptography", see="also keys and addresses")))You may have heard that bitcoin is based on _cryptography_, which is a branch of mathematics used extensively in computer security. Cryptography means "secret writing" in Greek, but the science of cryptography encompasses more than just secret writing, which is referred to as encryption. Cryptography can also be used to prove knowledge of a secret without revealing that secret (digital signature), or prove the authenticity of data (digital fingerprint). These types of cryptographic proofs are the mathematical tools critical to bitcoin and used extensively in bitcoin applications. ((("encryption")))((("encryption", see="also keys and addresses")))Ironically, encryption is not an important part of bitcoin, as its communications and transaction data are not encrypted and do not need to be encrypted to protect the funds. In this chapter we will introduce some of the cryptography used in bitcoin to control ownership of funds, in the form of keys, addresses, and wallets. +((("cryptography", "defined")))((("cryptography", see="also keys and addresses")))You may have heard that bitcoin is based on _cryptography_, which is a branch of mathematics used extensively in computer security. Cryptography means "secret writing" in Greek, but the science of cryptography encompasses more than just secret writing, which is referred to as encryption. Cryptography can also be used to prove knowledge of a secret without revealing that secret (digital signature), or prove the authenticity of data (digital fingerprint). These types of cryptographic proofs are the mathematical tools critical to bitcoin and used extensively in bitcoin applications. ((("encryption")))((("encryption", see="also keys and addresses")))Ironically, encryption is not an important part of bitcoin, as its communications and transaction data are not encrypted and do not need to be encrypted to protect the funds. In this chapter we will introduce some of the cryptography used in bitcoin to control ownership of funds, in the form of keys, addresses, and wallets. === Introduction -((("digital keys", see="keys and addresses")))((("keys and addresses", "overview of", id="KAover04")))((("digital signatures", "purpose of")))Ownership of bitcoin is established through _digital keys_, _bitcoin addresses_, and _digital signatures_. The digital keys are not actually stored in the network, but are instead created and stored by users in a file, or simple database, called a _wallet_. The digital keys in a user's wallet are completely independent of the bitcoin protocol and can be generated and managed by the user's wallet software without reference to the blockchain or access to the internet. Keys enable many of the interesting properties of bitcoin, including decentralized trust and control, ownership attestation, and the cryptographic-proof security model. +((("digital keys", see="keys and addresses")))((("keys and addresses", "overview of", id="KAover04")))((("digital signatures", "purpose of")))Ownership of bitcoin is established through _digital keys_, _bitcoin addresses_, and _digital signatures_. The digital keys are not actually stored in the network, but are instead created and stored by users in a file, or simple database, called a _wallet_. The digital keys in a user's wallet are completely independent of the bitcoin protocol and can be generated and managed by the user's wallet software without reference to the blockchain or access to the internet. Keys enable many of the interesting properties of bitcoin, including decentralized trust and control, ownership attestation, and the cryptographic-proof security model. Most bitcoin transactions require a valid digital signature to be included in the blockchain, which can only be generated with a secret key; therefore, anyone with a copy of that key has control of the bitcoin. ((("witnesses")))The digital signature used to spend funds is also referred to as a _witness_, a term used in cryptography. The witness data in a bitcoin transaction testifies to the true ownership of the funds being spent. -((("public and private keys", "key pairs")))((("public and private keys", see="also keys and addresses")))Keys come in pairs consisting of a private (secret) key and a public key. Think of the public key as similar to a bank account number and the private key as similar to the secret PIN, or signature on a check, that provides control over the account. These digital keys are very rarely seen by the users of bitcoin. For the most part, they are stored inside the wallet file and managed by the bitcoin wallet software. +((("public and private keys", "key pairs")))((("public and private keys", see="also keys and addresses")))Keys come in pairs consisting of a private (secret) key and a public key. Think of the public key as similar to a bank account number and the private key as similar to the secret PIN, or signature on a check, that provides control over the account. These digital keys are very rarely seen by the users of bitcoin. For the most part, they are stored inside the wallet file and managed by the bitcoin wallet software. In the payment portion of a bitcoin transaction, the recipient's public key is represented by its digital fingerprint, called a _bitcoin address_, which is used in the same way as the beneficiary name on a check (i.e., "Pay to the order of"). In most cases, a bitcoin address is generated from and corresponds to a public key. However, not all bitcoin addresses represent public keys; they can also represent other beneficiaries such as scripts, as we will see later in this chapter. This way, bitcoin addresses abstract the recipient of funds, making transaction destinations flexible, similar to paper checks: a single payment instrument that can be used to pay into people's accounts, pay into company accounts, pay for bills, or pay to cash. The bitcoin address is the only representation of the keys that users will routinely see, because this is the part they need to share with the world. @@ -20,7 +20,7 @@ First, we will introduce cryptography and explain the mathematics used in bitcoi ((("keys and addresses", "overview of", "public key cryptography")))((("digital currencies", "cryptocurrency")))Public key cryptography was invented in the 1970s and is a mathematical foundation for computer and information security. Since the invention of public key cryptography, several suitable mathematical functions, such as prime number exponentiation and elliptic curve multiplication, have been discovered. These mathematical functions are practically irreversible, meaning that they are easy to calculate in one direction and infeasible to calculate in the opposite direction. Based on these mathematical functions, cryptography enables the creation of digital secrets and unforgeable digital signatures. Bitcoin uses elliptic curve multiplication as the basis for its cryptography. - + In bitcoin, we use public key cryptography to create a key pair that controls access to bitcoin. The key pair consists of a private key and--derived from it--a unique public key. The public key is used to receive funds, and the private key is used to sign transactions to spend the funds. There is a mathematical relationship between the public and the private key that allows the private key to be used to generate signatures on messages. This signature can be validated against the public key without revealing the private key. @@ -49,7 +49,7 @@ image::images/mbc2_0401.png["privk_to_pubK_to_addressA"] [[private_keys]] ==== Private Keys -((("keys and addresses", "overview of", "private key generation")))((("warnings and cautions", "private key protection")))A private key is simply a number, picked at random. Ownership and control over the private key is the root of user control over all funds associated with the corresponding bitcoin address. The private key is used to create signatures that are required to spend bitcoin by proving ownership of funds used in a transaction. The private key must remain secret at all times, because revealing it to third parties is equivalent to giving them control over the bitcoin secured by that key. The private key must also be backed up and protected from accidental loss, because if it's lost it cannot be recovered and the funds secured by it are forever lost, too. +((("keys and addresses", "overview of", "private key generation")))((("warnings and cautions", "private key protection")))A private key is simply a number, picked at random. Ownership and control over the private key is the root of user control over all funds associated with the corresponding bitcoin address. The private key is used to create signatures that are required to spend bitcoin by proving ownership of funds used in a transaction. The private key must remain secret at all times, because revealing it to third parties is equivalent to giving them control over the bitcoin secured by that key. The private key must also be backed up and protected from accidental loss, because if it's lost it cannot be recovered and the funds secured by it are forever lost, too. [TIP] ==== @@ -61,7 +61,7 @@ The bitcoin private key is just a number. You can pick your private keys randoml 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. More precisely, the private key can be any number between +0+ and +n - 1+ inclusive, 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+. 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 SHA256 hash algorithm, which will conveniently produce a 256-bit number. If the result is less than +n+, we have a suitable private key. Otherwise, we simply try again with another random number. - + [WARNING] ==== ((("random numbers", "random number generation")))((("entropy", "random number generation")))Do not write your own code to create a random number or use a "simple" random number generator offered by your programming language. Use a cryptographically secure pseudorandom number generator (CSPRNG) with a seed from a source of sufficient entropy. Study the documentation of the random number generator library you choose to make sure it is cryptographically secure. Correct implementation of the CSPRNG is critical to the security of the keys. @@ -88,15 +88,15 @@ $ bitcoin-cli dumpprivkey 1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy KxFC1jmwwCoACiCAWZ3eXa96mBM6tb3TYzGmf6YwgdGWZgawvrtJ ---- -The +dumpprivkey+ command opens the wallet and extracts the private key that was generated by the +getnewaddress+ command. It is not possible for +bitcoind+ to know the private key from the public key unless they are both stored in the wallet. +The +dumpprivkey+ command opens the wallet and extracts the private key that was generated by the +getnewaddress+ command. It is not possible for +bitcoind+ to know the private key from the public key unless they are both stored in the wallet. [TIP] ===================================================================== -The +dumpprivkey+ command does not generate a private key from a public key, as this is impossible. The command simply reveals the private key that is already known to the wallet and which was generated by the +getnewaddress+ command. +The +dumpprivkey+ command does not generate a private key from a public key, as this is impossible. The command simply reveals the private key that is already known to the wallet and which was generated by the +getnewaddress+ command. ===================================================================== [role="pagebreak-before"] -You can also use the Bitcoin Explorer command-line tool (see <>) to generate and display private keys with the commands +seed+, +ec-new+, and +ec-to-wif+: +You can also use the Bitcoin Explorer command-line tool (see <>) to generate and display private keys with the commands +seed+, +ec-new+, and +ec-to-wif+: ---- $ bx seed | bx ec-new | bx ec-to-wif @@ -106,7 +106,7 @@ $ bx seed | bx ec-new | bx ec-to-wif [[pubkey]] ==== Public Keys -((("keys and addresses", "overview of", "public key calculation")))((("generator point")))The public key is calculated from the private key using elliptic curve multiplication, which is irreversible: _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. +((("keys and addresses", "overview of", "public key calculation")))((("generator point")))The public key is calculated from the private key using elliptic curve multiplication, which is irreversible: _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. [TIP] ==== @@ -116,7 +116,7 @@ Elliptic curve multiplication is a type of function that cryptographers call a " [[elliptic_curve]] ==== Elliptic Curve Cryptography Explained -((("keys and addresses", "overview of", "elliptic curve cryptography")))((("elliptic curve cryptography", id="eliptic04")))((("cryptography", "elliptic curve cryptography", id="Celliptic04")))Elliptic curve cryptography is a type of asymmetric or public key cryptography based on the discrete logarithm problem as expressed by addition and multiplication on the points of an elliptic curve. +((("keys and addresses", "overview of", "elliptic curve cryptography")))((("elliptic curve cryptography", id="eliptic04")))((("cryptography", "elliptic curve cryptography", id="Celliptic04")))Elliptic curve cryptography is a type of asymmetric or public key cryptography based on the discrete logarithm problem as expressed by addition and multiplication on the points of an elliptic curve. <> is an example of an elliptic curve, similar to that used by bitcoin. @@ -134,7 +134,7 @@ Bitcoin uses a specific elliptic curve and set of mathematical constants, as def \end{equation} ++++ -or +or [latexmath] ++++ @@ -143,9 +143,9 @@ or \end{equation} ++++ -The _mod p_ (modulo prime number p) indicates that this curve is over a finite field of prime order _p_, also written as latexmath:[\( \mathbb{F}_p \)], where p = 2^256^ – 2^32^ – 2^9^ – 2^8^ – 2^7^ – 2^6^ – 2^4^ – 1, a very large prime number. +The _mod p_ (modulo prime number p) indicates that this curve is over a finite field of prime order _p_, also written as latexmath:[\( \mathbb{F}_p \)], where p = 2^256^ – 2^32^ – 2^9^ – 2^8^ – 2^7^ – 2^6^ – 2^4^ – 1, a very large prime number. -Because this curve is defined over a finite field of prime order instead of over the real numbers, it looks like a pattern of dots scattered in two dimensions, which makes it difficult to visualize. However, the math is identical to that of an elliptic curve over real numbers. As an example, <> shows the same elliptic curve over a much smaller finite field of prime order 17, showing a pattern of dots on a grid. The +secp256k1+ bitcoin elliptic curve can be thought of as a much more complex pattern of dots on a unfathomably large grid. +Because this curve is defined over a finite field of prime order instead of over the real numbers, it looks like a pattern of dots scattered in two dimensions, which makes it difficult to visualize. However, the math is identical to that of an elliptic curve over real numbers. As an example, <> shows the same elliptic curve over a much smaller finite field of prime order 17, showing a pattern of dots on a grid. The +secp256k1+ bitcoin elliptic curve can be thought of as a much more complex pattern of dots on a unfathomably large grid. [[ecc-over-F17-math]] [role="smallersixty"] @@ -155,7 +155,7 @@ image::images/mbc2_0403.png["ecc-over-F17-math"] So, for example, the following is a point P with coordinates (x,y) that is a point on the +secp256k1+ curve: ---- -P = (55066263022277343669578718895168534326250603453777594175500187360389116729240, 32670510020758816978083085130507043184471273380659243275938904335757337482424) +P = (55066263022277343669578718895168534326250603453777594175500187360389116729240, 32670510020758816978083085130507043184471273380659243275938904335757337482424) ---- <> shows how you can check this yourself using Python: @@ -190,14 +190,14 @@ In some cases (i.e., if P~1~ and P~2~ have the same x values but different y val If P~1~ is the "point at infinity," then P~1~ + P~2~ = P~2~. Similarly, if P~2~ is the point at infinity, then P~1~ + P~2~ = P~1~. This shows how the point at infinity plays the role of zero. -It turns out that pass:[+] is associative, which means that (A pass:[+] B) pass:[+] C = A pass:[+] (B pass:[+] C). That means we can write A pass:[+] B pass:[+] C without parentheses and without ambiguity. +It turns out that pass:[+] is associative, which means that (A pass:[+] B) pass:[+] C = A pass:[+] (B pass:[+] C). That means we can write A pass:[+] B pass:[+] C without parentheses and without 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.((("", startref="eliptic04")))((("", startref="Celliptic04"))) +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.((("", startref="eliptic04")))((("", startref="Celliptic04"))) [[public_key_derivation]] -==== Generating a Public Key +==== Generating a Public Key -((("keys and addresses", "overview of", "public key generation")))((("generator point")))Starting with a private key in the form of a randomly generated number _k_, we multiply it by a predetermined point on the curve called the _generator point_ _G_ to produce another point somewhere else on the curve, which is the corresponding public key _K_. The generator point is specified as part of the +secp256k1+ standard and is always the same for all keys in bitcoin: +((("keys and addresses", "overview of", "public key generation")))((("generator point")))Starting with a private key in the form of a randomly generated number _k_, we multiply it by a predetermined point on the curve called the _generator point_ _G_ to produce another point somewhere else on the curve, which is the corresponding public key _K_. The generator point is specified as part of the +secp256k1+ standard and is always the same for all keys in bitcoin: [latexmath] ++++ @@ -206,7 +206,7 @@ Now that we have defined addition, we can define multiplication in the standard \end{equation} ++++ -where _k_ is the private key, _G_ is the generator point, and _K_ is the resulting public key, a point on the curve. Because the generator point is always the same for all bitcoin users, a private key _k_ multiplied with _G_ will always result in the same public key _K_. The relationship between _k_ and _K_ is fixed, but can only be calculated in one direction, from _k_ to _K_. That's why a bitcoin address (derived from _K_) can be shared with anyone and does not reveal the user's private key (_k_). +where _k_ is the private key, _G_ is the generator point, and _K_ is the resulting public key, a point on the curve. Because the generator point is always the same for all bitcoin users, a private key _k_ multiplied with _G_ will always result in the same public key _K_. The relationship between _k_ and _K_ is fixed, but can only be calculated in one direction, from _k_ to _K_. That's why a bitcoin address (derived from _K_) can be shared with anyone and does not reveal the user's private key (_k_). [TIP] ==== @@ -222,7 +222,7 @@ K = 1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD * G Public key _K_ is defined as a point +K = (x,y)+: ---- -K = (x, y) +K = (x, y) where, @@ -230,7 +230,7 @@ x = F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A y = 07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB ---- -To visualize multiplication of a point with an integer, we will use the simpler elliptic curve over real numbers—remember, the math is the same. Our goal is to find the multiple _kG_ of the generator point _G_, which 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 real numbers—remember, the math is the same. Our goal is to find the multiple _kG_ of the generator point _G_, which 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. <> shows the process for deriving _G_, _2G_, _4G_, as a geometric operation on the curve. @@ -254,7 +254,7 @@ image::images/mbc2_0404.png["ecc_illustrated"] The bitcoin address is what appears most commonly in a transaction as the "recipient" of the funds. If we compare a bitcoin transaction to a paper check, the bitcoin address is the beneficiary, which is what we write on the line after "Pay to the order of." On a paper check, that beneficiary can sometimes be the name of a bank account holder, but can also include corporations, institutions, or even cash. Because paper checks do not need to specify an account, but rather use an abstract name as the recipient of funds, they are very flexible 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. -((("addresses", "algorithms used to create")))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. +((("addresses", "algorithms used to create")))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: @@ -265,18 +265,18 @@ Starting with the public key _K_, we compute the SHA256 hash and then compute th \end{equation} ++++ -where _K_ is the public key and _A_ is the resulting bitcoin address. +where _K_ is the public key and _A_ is the resulting bitcoin address. [TIP] ==== -A bitcoin address is _not_ the same as a public key. Bitcoin addresses are derived from a public key using a one-way function. +A bitcoin address is _not_ the same as a public key. Bitcoin addresses are derived from a public key using a one-way function. ==== Bitcoin addresses are almost always encoded as "Base58Check" (see <>), which uses 58 characters (a Base58 number system) and a checksum to help human readability, avoid ambiguity, and protect against errors in address transcription and entry. Base58Check is also used in many other ways in bitcoin, whenever there is a need for a user to read and correctly transcribe a number, such as a bitcoin address, a private key, an encrypted key, or a script hash. In the next section we will examine the mechanics of Base58Check encoding and decoding and the resulting representations. <> illustrates the conversion of a public key into a bitcoin address. [[pubkey_to_address]] -.Public key to bitcoin address: conversion of a public key into a bitcoin address +.Public key to bitcoin address: conversion of a public key into a bitcoin address image::images/mbc2_0405.png["pubkey_to_address"] [[base58]] @@ -298,12 +298,12 @@ To add extra security against typos or transcription errors, Base58Check is a Ba To convert data (a number) into a Base58Check format, we first add a prefix to the data, called the "version byte," which serves to easily identify the type of data that is encoded. For example, in the case of a bitcoin address the prefix is zero (0x00 in hex), whereas the prefix used when encoding a private key is 128 (0x80 in hex). A list of common version prefixes is shown in <>. Next, we compute the "double-SHA" checksum, meaning we apply the SHA256 hash-algorithm twice on the previous result (prefix and data): - + ---- -checksum = SHA256(SHA256(prefix+data)) +checksum = SHA256(SHA256(prefix+data)) ---- -From the resulting 32-byte hash (hash-of-a-hash), we take only the first four bytes. These four bytes serve as the error-checking code, or checksum. The checksum is concatenated (appended) to the end. +From the resulting 32-byte hash (hash-of-a-hash), we take only the first four bytes. These four bytes serve as the error-checking code, or checksum. The checksum is concatenated (appended) to the end. The result is composed of three items: a prefix, the data, and a checksum. This result is encoded using the Base58 alphabet described previously. <> illustrates the Base58Check encoding process. @@ -318,12 +318,12 @@ In bitcoin, most of the data presented to the user is Base58Check-encoded to mak [options="header"] |======= |Type| Version prefix (hex)| Base58 result prefix -| Bitcoin Address | 0x00 | 1 -| Pay-to-Script-Hash Address | 0x05 | 3 -| Bitcoin Testnet Address | 0x6F | m or n -| Private Key WIF | 0x80 | 5, K, or L -| BIP-38 Encrypted Private Key | 0x0142 | 6P -| BIP-32 Extended Public Key | 0x0488B21E | xpub +| Bitcoin Address | 0x00 | 1 +| Pay-to-Script-Hash Address | 0x05 | 3 +| Bitcoin Testnet Address | 0x6F | m or n +| Private Key WIF | 0x80 | 5, K, or L +| BIP-38 Encrypted Private Key | 0x0142 | 6P +| BIP-32 Extended Public Key | 0x0488B21E | xpub |======= @@ -382,7 +382,7 @@ Address: 1PRTTaJesdNovgne6Ehcdu1fpEdX7913CK [options="header"] |======= |Format | Private key -| Hex | 1e99423a4ed27608a15a2616a2b0e9e52ced330ac530edcc32c8ffc6a526aedd +| Hex | 1e99423a4ed27608a15a2616a2b0e9e52ced330ac530edcc32c8ffc6a526aedd | WIF | 5J3mBbAH58CpQ3Y5RNJpUKPE62SQ5tfcvU2JpbnkeyhfsYB1Jcn | WIF-compressed | KxFC1jmwwCoACiCAWZ3eXa96mBM6tb3TYzGmf6YwgdGWZgawvrtJ |======= @@ -451,7 +451,7 @@ The resulting WIF-compressed format starts with a "K." This denotes that the pri ===== Public key formats -((("public and private keys", "public key formats")))Public keys are also presented in different ways, usually as either _compressed_ or _uncompressed_ public keys. +((("public and private keys", "public key formats")))Public keys are also presented in different ways, usually as either _compressed_ or _uncompressed_ public keys. As we saw previously, the public key is a point on the elliptic curve consisting of a pair of coordinates +(x,y)+. It is usually presented with the prefix +04+ followed by two 256-bit numbers: one for the _x_ coordinate of the point, the other for the _y_ coordinate. The prefix +04+ is used to distinguish uncompressed public keys from compressed public keys that begin with a +02+ or a +03+. @@ -479,7 +479,7 @@ K = 04F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A↵ As we saw in the section <>, a public key is a point (x,y) on an elliptic curve. Because the curve expresses a mathematical function, a point on the curve represents a solution to the equation and, therefore, if we know the _x_ coordinate we can calculate the _y_ coordinate by solving the equation y^2^ mod p = (x^3^ + 7) mod p. That allows us to store only the _x_ coordinate of the public key point, omitting the _y_ coordinate and reducing the size of the key and the space required to store it by 256 bits. An almost 50% reduction in size in every transaction adds up to a lot of data saved over time! -Whereas uncompressed public keys have a prefix of +04+, compressed public keys start with either a +02+ or a +03+ prefix. Let's look at why there are two possible prefixes: because the left side of the equation is __y__^2^, the solution for _y_ is a square root, which can have a positive or negative value. Visually, this means that the resulting _y_ coordinate can be above or below the x-axis. As you can see from the graph of the elliptic curve in <>, the curve is symmetric, meaning it is reflected like a mirror by the x-axis. So, while we can omit the _y_ coordinate we have to store the _sign_ of _y_ (positive or negative); or in other words, we have to remember if it was above or below the x-axis because each of those options represents a different point and a different public key. When calculating the elliptic curve in binary arithmetic on the finite field of prime order p, the _y_ coordinate is either even or odd, which corresponds to the positive/negative sign as explained earlier. Therefore, to distinguish between the two possible values of _y_, we store a compressed public key with the prefix +02+ if the _y_ is even, and +03+ if it is odd, allowing the software to correctly deduce the _y_ coordinate from the _x_ coordinate and uncompress the public key to the full coordinates of the point. Public key compression is illustrated in <>. +Whereas uncompressed public keys have a prefix of +04+, compressed public keys start with either a +02+ or a +03+ prefix. Let's look at why there are two possible prefixes: because the left side of the equation is __y__^2^, the solution for _y_ is a square root, which can have a positive or negative value. Visually, this means that the resulting _y_ coordinate can be above or below the x-axis. As you can see from the graph of the elliptic curve in <>, the curve is symmetric, meaning it is reflected like a mirror by the x-axis. So, while we can omit the _y_ coordinate we have to store the _sign_ of _y_ (positive or negative); or in other words, we have to remember if it was above or below the x-axis because each of those options represents a different point and a different public key. When calculating the elliptic curve in binary arithmetic on the finite field of prime order p, the _y_ coordinate is either even or odd, which corresponds to the positive/negative sign as explained earlier. Therefore, to distinguish between the two possible values of _y_, we store a compressed public key with the prefix +02+ if the _y_ is even, and +03+ if it is odd, allowing the software to correctly deduce the _y_ coordinate from the _x_ coordinate and uncompress the public key to the full coordinates of the point. Public key compression is illustrated in <>. [[pubkey_compression]] [role="smallerseventy"] @@ -496,7 +496,7 @@ This compressed public key corresponds to the same private key, meaning it is ge Compressed public keys are gradually becoming the default across bitcoin clients, which is having a significant impact on reducing the size of transactions and therefore the blockchain. However, not all clients support compressed public keys yet. Newer clients that support compressed public keys have to account for transactions from older clients that do not support compressed public keys. This is especially important when a wallet application is importing private keys from another bitcoin wallet application, because the new wallet needs to scan the blockchain to find transactions corresponding to these imported keys. Which bitcoin addresses should the bitcoin wallet scan for? The bitcoin addresses produced by uncompressed public keys, or the bitcoin addresses produced by compressed public keys? Both are valid bitcoin addresses, and can be signed for by the private key, but they are different addresses! -To resolve this issue, when private keys are exported from a wallet, the WIF that is used to represent them is implemented differently in newer bitcoin wallets, to indicate that these private keys have been used to produce _compressed_ public keys and therefore _compressed_ bitcoin addresses. This allows the importing wallet to distinguish between private keys originating from older or newer wallets and search the blockchain for transactions with bitcoin addresses corresponding to the uncompressed, or the compressed, public keys, respectively. Let's look at how this works in more detail, in the next section. +To resolve this issue, when private keys are exported from a wallet, the WIF that is used to represent them is implemented differently in newer bitcoin wallets, to indicate that these private keys have been used to produce _compressed_ public keys and therefore _compressed_ bitcoin addresses. This allows the importing wallet to distinguish between private keys originating from older or newer wallets and search the blockchain for transactions with bitcoin addresses corresponding to the uncompressed, or the compressed, public keys, respectively. Let's look at how this works in more detail, in the next section. [[comp_priv]] ===== Compressed private keys @@ -520,7 +520,7 @@ Notice that the hex-compressed private key format has one extra byte at the end 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 (with a 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, 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 WIF 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 (noncompressed) keys from older wallets. +If a bitcoin wallet is able to implement compressed public keys, 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 WIF 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 (noncompressed) keys from older wallets. [TIP] @@ -528,7 +528,7 @@ If a bitcoin wallet is able to implement compressed public keys, it will use tho "Compressed private keys" is a misnomer! They are not compressed; rather, WIF-compressed signifies that the keys should only be used to derive compressed public keys and their corresponding bitcoin addresses. Ironically, a "WIF-compressed" encoded private key is one byte longer because it has the added +01+ suffix to distinguish it from an "uncompressed" one.((("", startref="KAaddress04"))) ==== -=== Implementing Keys and Addresses in Python +=== Implementing Keys and Addresses in Python ((("keys and addresses", "implementing in Python", id="KApython04")))((("pybitcointools")))The most comprehensive bitcoin library in Python is https://github.com/vbuterin/pybitcointools[pybitcointools] by Vitalik Buterin. In <>, we use the pybitcointools library (imported as "bitcoin") to generate and display keys and addresses in various formats. @@ -548,28 +548,28 @@ include::code/key-to-address-ecc-example.py[] ==== ++++
-$ python key-to-address-ecc-example.py 
-Private Key (hex) is:  
+$ python key-to-address-ecc-example.py
+Private Key (hex) is:
  3aba4162c7251c891207b747840551a71939b0de081f85c4e44cf7c13e41daa6
-Private Key (decimal) is:  
+Private Key (decimal) is:
  26563230048437957592232553826663696440606756685920117476832299673293013768870
-Private Key (WIF) is:  
+Private Key (WIF) is:
  5JG9hT3beGTJuUAmCQEmNaxAuMacCTfXuw1R3FCXig23RQHMr4K
-Private Key Compressed (hex) is:  
+Private Key Compressed (hex) is:
  3aba4162c7251c891207b747840551a71939b0de081f85c4e44cf7c13e41daa601
-Private Key (WIF-Compressed) is:  
+Private Key (WIF-Compressed) is:
  KyBsPXxTuVD82av65KZkrGrWi5qLMah5SdNq6uftawDbgKa2wv6S
-Public Key (x,y) coordinates is: 
- (41637322786646325214887832269588396900663353932545912953362782457239403430124L, 
+Public Key (x,y) coordinates is:
+ (41637322786646325214887832269588396900663353932545912953362782457239403430124L,
  16388935128781238405526710466724741593761085120864331449066658622400339362166L)
-Public Key (hex) is: 
+Public Key (hex) is:
  045c0de3b9c8ab18dd04e3511243ec2952002dbfadc864b9628910169d9b9b00ec↵
 243bcefdd4347074d44bd7356d6a53c495737dd96295e2a9374bf5f02ebfc176
-Compressed Public Key (hex) is: 
+Compressed Public Key (hex) is:
  025c0de3b9c8ab18dd04e3511243ec2952002dbfadc864b9628910169d9b9b00ec
-Bitcoin Address (b58check) is: 
+Bitcoin Address (b58check) is:
  1thMirt546nngXqyPEz532S8fLwbozud8
-Compressed Bitcoin Address (b58check) is: 
+Compressed Bitcoin Address (b58check) is:
  14cxpo3MBCYYWCgF74SWTdcmxipnGUsPw3
 
++++ @@ -591,7 +591,7 @@ include::code/ec-math.py[] [NOTE] ==== -<> ((("random numbers", "os.urandom", see="entropy")))((("entropy", "os.urandom", see="random numbers")))((("random numbers", "random number generation")))((("entropy", "random number generation")))uses +os.urandom+, which reflects a cryptographically secure random number generator (CSRNG) provided by the underlying operating system. In the case of a Unix-like operating system such as Linux, it draws from +/dev/urandom+; and in the case of Windows, it calls +CryptGenRandom()+. If a suitable randomness source is not found, +NotImplementedError+ will be raised. While the random number generator used here is for demonstration purposes, it is _not_ appropriate for generating production-quality bitcoin keys as it is not implemented with sufficient security.((("", startref="KApython04"))) +<> ((("random numbers", "os.urandom", see="entropy")))((("entropy", "os.urandom", see="random numbers")))((("random numbers", "random number generation")))((("entropy", "random number generation")))uses +os.urandom+, which reflects a cryptographically secure random number generator (CSRNG) provided by the underlying operating system. Caution: Depending on the OS, +os.urandom+ may _not_ be implemented with sufficient security or seeded properly and may _not_ be appropriate for generating production-quality bitcoin keys.((("", startref="KApython04"))) ==== [[ec_math_run]] @@ -603,7 +603,7 @@ $ sudo apt-get install python-pip $ # Install the Python ECDSA library $ sudo pip install ecdsa $ # Run the script -$ python ec-math.py +$ python ec-math.py Secret: 38090835015954358862481132628887443905906204995912378278060168703580660294000 EC point: (70048853531867179489857750497606966272382583471322935454624595540007269312627, 105262206478686743191060800263479589329920209527285803935736021686045542353380) BTC public key: 029ade3effb0a67d5c8609850d797366af428f4a0d5194cb221d807770a1522873 @@ -616,18 +616,18 @@ BTC public key: 029ade3effb0a67d5c8609850d797366af428f4a0d5194cb221d807770a15228 ==== Encrypted Private Keys (BIP-38) -((("bitcoin improvement proposals", "Encrypted Private Keys (BIP-38)")))((("keys and addresses", "advanced forms", "encrypted private keys")))((("public and private keys", "encrypted private keys")))((("passwords", "encrypted private keys")))((("security", "passwords")))Private keys must remain secret. The need for _confidentiality_ of the private keys is a truism that is quite difficult to achieve in practice, because it conflicts with the equally important security objective of _availability_. Keeping the private key private is much harder when you need to store backups of the private key to avoid losing it. A private key stored in a wallet that is encrypted by a password might be secure, but that wallet needs to be backed up. At times, users need to move keys from one wallet to another—to upgrade or replace the wallet software, for example. Private key backups might also be stored on paper (see <>) or on external storage media, such as a USB flash drive. But what if the backup itself is stolen or lost? These conflicting security goals led to the introduction of a portable and convenient standard for encrypting private keys in a way that can be understood by many different wallets and bitcoin clients, standardized by BIP-38 (see <>). - -BIP-38 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 kept 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 NIST and used broadly in data encryption implementations for commercial and military applications. +((("bitcoin improvement proposals", "Encrypted Private Keys (BIP-38)")))((("keys and addresses", "advanced forms", "encrypted private keys")))((("public and private keys", "encrypted private keys")))((("passwords", "encrypted private keys")))((("security", "passwords")))Private keys must remain secret. The need for _confidentiality_ of the private keys is a truism that is quite difficult to achieve in practice, because it conflicts with the equally important security objective of _availability_. Keeping the private key private is much harder when you need to store backups of the private key to avoid losing it. A private key stored in a wallet that is encrypted by a password might be secure, but that wallet needs to be backed up. At times, users need to move keys from one wallet to another—to upgrade or replace the wallet software, for example. Private key backups might also be stored on paper (see <>) or on external storage media, such as a USB flash drive. But what if the backup itself is stolen or lost? These conflicting security goals led to the introduction of a portable and convenient standard for encrypting private keys in a way that can be understood by many different wallets and bitcoin clients, standardized by BIP-38 (see <>). + +BIP-38 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 kept 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 NIST and used broadly in data encryption implementations for commercial and military applications. -A BIP-38 encryption scheme takes as input a bitcoin private key, usually encoded in the WIF, as a Base58Check string with the prefix of "5." Additionally, the BIP-38 encryption scheme takes a passphrase—a long password—usually composed of several words or a complex string of alphanumeric characters. The result of the BIP-38 encryption scheme is a Base58Check-encoded encrypted private key that begins with the prefix +6P+. If you see a key that starts with +6P+, 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 BIP-38-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 http://bitaddress.org[Bit Address] (Wallet Details tab), can be used to decrypt BIP-38 keys. +A BIP-38 encryption scheme takes as input a bitcoin private key, usually encoded in the WIF, as a Base58Check string with the prefix of "5." Additionally, the BIP-38 encryption scheme takes a passphrase—a long password—usually composed of several words or a complex string of alphanumeric characters. The result of the BIP-38 encryption scheme is a Base58Check-encoded encrypted private key that begins with the prefix +6P+. If you see a key that starts with +6P+, 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 BIP-38-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 http://bitaddress.org[Bit Address] (Wallet Details tab), can be used to decrypt BIP-38 keys. The most common use case for BIP-38 encrypted keys is for paper wallets that can be used to back up private keys on a piece of paper. As long as the user selects a strong passphrase, a paper wallet with BIP-38 encrypted private keys is incredibly secure and a great way to create offline bitcoin storage (also known as "cold storage"). Test the encrypted keys in <> using bitaddress.org to see how you can get the decrypted key by entering the passphrase. [[table_4-10]] -.Example of BIP-38 encrypted private key +.Example of BIP-38 encrypted private key |======= | *Private Key (WIF)* | 5J3mBbAH58CpQ3Y5RNJpUKPE62SQ5tfcvU2JpbnkeyhfsYB1Jcn | *Passphrase* | MyTestPassphrase @@ -636,18 +636,18 @@ Test the encrypted keys in <> using bitaddress.org to see how you ca [[p2sh_addresses]] -==== Pay-to-Script Hash (P2SH) and Multisig Addresses +==== Pay-to-Script Hash (P2SH) and Multisig Addresses -((("keys and addresses", "advanced forms", "pay-to-script hash and multisig addresses")))((("Pay-to-Script-Hash (P2SH)", "multisig addresses and")))((("multisig addresses")))((("addresses", "multisig addresses")))As we know, traditional bitcoin addresses begin with the number “1” and are derived from the public key, which is derived from the private key. Although anyone can send bitcoin to a “1” address, that bitcoin can only be spent by presenting the corresponding private key signature and public key hash. +((("keys and addresses", "advanced forms", "pay-to-script hash and multisig addresses")))((("Pay-to-Script-Hash (P2SH)", "multisig addresses and")))((("multisig addresses")))((("addresses", "multisig addresses")))As we know, traditional bitcoin addresses begin with the number “1” and are derived from the public key, which is derived from the private key. Although anyone can send bitcoin to a “1” address, that bitcoin can only be spent by presenting the corresponding private key signature and public key hash. ((("bitcoin improvement proposals", "Pay to Script Hash (BIP-16)")))Bitcoin addresses that begin with the number “3” are pay-to-script hash (P2SH) addresses, sometimes erroneously called multisignature or multisig addresses. They designate the beneficiary of a bitcoin transaction as the hash of a script, instead of the owner of a public key. The feature was introduced in January 2012 with BIP-16 (see <>), and is being widely adopted because it provides the opportunity to add functionality to the address itself. Unlike transactions that "send" funds to traditional “1” bitcoin addresses, also known as a pay-to-public-key-hash (P2PKH), funds sent to “3” addresses require something more than the presentation of one public key hash and one private key signature as proof of ownership. The requirements are designated at the time the address is created, within the script, and all inputs to this address will be encumbered with the same requirements. - + A P2SH address is created from a transaction script, which defines who can spend a transaction output (for more details, see <>). Encoding a P2SH address involves using the same double-hash function as used during creation of a bitcoin address, only applied on the script instead of the public key: - + ---- script hash = RIPEMD160(SHA256(script)) ---- - + The resulting "script hash" is encoded with Base58Check with a version prefix of 5, which results in an encoded address starting with a +3+. An example of a P2SH address is +3F6i6kwkevjR7AsAd4te2YB2zZyASEm1HM+, which can be derived using the Bitcoin Explorer commands +script-encode+, +sha256+, +ripemd160+, and +base58check-encode+ (see <>) as follows: ---- @@ -660,22 +660,22 @@ $ bx script-encode < script | bx sha256 | bx ripemd160 \ [TIP] ==== -P2SH is not necessarily the same as a multisignature standard transaction. A P2SH address _most often_ represents a multi-signature script, but it might also represent a script encoding other types of transactions. +P2SH is not necessarily the same as a multisignature standard transaction. A P2SH address _most often_ represents a multi-signature script, but it might also represent a script encoding other types of transactions. ==== ===== Multisignature addresses and P2SH -Currently, the most common implementation of the P2SH function is the multi-signature address script. As the name implies, the underlying script requires more than one signature to prove ownership and therefore spend funds. The bitcoin multi-signature feature is designed to require M signatures (also known as the “threshold”) from a total of N keys, known as an M-of-N multisig, where M is equal to or less than N. For example, Bob the coffee shop owner from <> could use a multisignature address requiring 1-of-2 signatures from a key belonging to him and a key belonging to his spouse, ensuring either of them could sign to spend a transaction output locked to this address. This would be similar to a “joint account” as implemented in traditional banking where either spouse can spend with a single signature. Or Gopesh,((("use cases", "offshore contract services"))) the web designer paid by Bob to create a website, might have a 2-of-3 multisignature address for his business that ensures that no funds can be spent unless at least two of the business partners sign a transaction. +Currently, the most common implementation of the P2SH function is the multi-signature address script. As the name implies, the underlying script requires more than one signature to prove ownership and therefore spend funds. The bitcoin multi-signature feature is designed to require M signatures (also known as the “threshold”) from a total of N keys, known as an M-of-N multisig, where M is equal to or less than N. For example, Bob the coffee shop owner from <> could use a multisignature address requiring 1-of-2 signatures from a key belonging to him and a key belonging to his spouse, ensuring either of them could sign to spend a transaction output locked to this address. This would be similar to a “joint account” as implemented in traditional banking where either spouse can spend with a single signature. Or Gopesh,((("use cases", "offshore contract services"))) the web designer paid by Bob to create a website, might have a 2-of-3 multisignature address for his business that ensures that no funds can be spent unless at least two of the business partners sign a transaction. We will explore how to create transactions that spend funds from P2SH (and multi-signature) addresses in <>. ==== Vanity Addresses -((("keys and addresses", "advanced forms", "vanity addresses")))((("vanity addresses", id="vanity04")))((("addresses", "vanity addresses", id="Avanity04")))Vanity addresses are valid bitcoin addresses that contain human-readable messages. For example, +1LoveBPzzD72PUXLzCkYAtGFYmK5vYNR33+ is a valid address that contains the letters forming the word "Love" as the first four Base-58 letters. Vanity addresses require generating and testing billions of candidate private keys, until a bitcoin address with the desired pattern is found. Although there are some optimizations in the vanity generation algorithm, the process essentially involves picking a private key at random, deriving the public key, deriving the bitcoin address, and checking to see if it matches the desired vanity pattern, repeating billions of times until a match is found. +((("keys and addresses", "advanced forms", "vanity addresses")))((("vanity addresses", id="vanity04")))((("addresses", "vanity addresses", id="Avanity04")))Vanity addresses are valid bitcoin addresses that contain human-readable messages. For example, +1LoveBPzzD72PUXLzCkYAtGFYmK5vYNR33+ is a valid address that contains the letters forming the word "Love" as the first four Base-58 letters. Vanity addresses require generating and testing billions of candidate private keys, until a bitcoin address with the desired pattern is found. Although there are some optimizations in the vanity generation algorithm, the process essentially involves picking a private key at random, deriving the public key, deriving the bitcoin address, and checking to see if it matches the desired vanity pattern, repeating billions of times until a match is found. Once a vanity address matching the desired pattern is found, the private key from which it was derived can be used by the owner to spend bitcoin in exactly the same way as any other address. Vanity addresses are no less or more secure than any other address. They depend on the same Elliptic Curve Cryptography (ECC) and SHA as any other address. You can no more easily find the private key of an address starting with a vanity pattern than you can any other address. -In <>, we introduced Eugenia, a children's charity director operating in the Philippines. Let's say that Eugenia is organizing a bitcoin fundraising drive and wants to use a vanity bitcoin address to publicize the fundraising. Eugenia will create a vanity address that starts with "1Kids" to promote the children's charity fundraiser. Let's see how this vanity address will be created and what it means for the security of Eugenia's charity.((("use cases", "charitable donations", startref="eugeniafour"))) +In <>, we introduced Eugenia, a children's charity director operating in the Philippines. Let's say that Eugenia is organizing a bitcoin fundraising drive and wants to use a vanity bitcoin address to publicize the fundraising. Eugenia will create a vanity address that starts with "1Kids" to promote the children's charity fundraiser. Let's see how this vanity address will be created and what it means for the security of Eugenia's charity.((("use cases", "charitable donations", startref="eugeniafour"))) ===== Generating vanity addresses @@ -699,7 +699,7 @@ Let's look at the pattern "1Kids" as a number and see how frequently we might fi |======= | Length | Pattern | Frequency | Average search time | 1 | 1K | 1 in 58 keys | < 1 milliseconds -| 2 | 1Ki| 1 in 3,364 | 50 milliseconds +| 2 | 1Ki| 1 in 3,364 | 50 milliseconds | 3 | 1Kid | 1 in 195,000 | < 2 seconds | 4 | 1Kids | 1 in 11 million | 1 minute | 5 | 1KidsC | 1 in 656 million | 1 hour @@ -712,9 +712,9 @@ Let's look at the pattern "1Kids" as a number and see how frequently we might fi |======= -As you can see, Eugenia won't be creating the vanity address "1KidsCharity" anytime soon, even if she had access to several thousand computers. Each additional character increases the difficulty by a factor of 58. Patterns with more than seven characters are usually found by specialized hardware, such as custom-built desktops with multiple GPUs. These are often repurposed bitcoin mining "rigs" that are no longer profitable for bitcoin mining but can be used to find vanity addresses. Vanity searches on GPU systems are many orders of magnitude faster than on a general-purpose CPU. +As you can see, Eugenia won't be creating the vanity address "1KidsCharity" anytime soon, even if she had access to several thousand computers. Each additional character increases the difficulty by a factor of 58. Patterns with more than seven characters are usually found by specialized hardware, such as custom-built desktops with multiple GPUs. These are often repurposed bitcoin mining "rigs" that are no longer profitable for bitcoin mining but can be used to find vanity addresses. Vanity searches on GPU systems are many orders of magnitude faster than on a general-purpose CPU. -Another way to find a vanity address is to outsource the work to a pool of vanity miners, such as the pool at http://vanitypool.appspot.com[Vanity Pool]. A pool is a service that allows those with GPU hardware to earn bitcoin searching for vanity addresses for others. For a small payment (0.01 bitcoin or approximately $5 at the time of this writing), Eugenia can outsource the search for a seven-character pattern vanity address and get results in a few hours instead of having to run a CPU search for months. +Another way to find a vanity address is to outsource the work to a pool of vanity miners, such as the pool at http://vanitypool.appspot.com[Vanity Pool]. A pool is a service that allows those with GPU hardware to earn bitcoin searching for vanity addresses for others. For a small payment (0.01 bitcoin or approximately $5 at the time of this writing), Eugenia can outsource the search for a seven-character pattern vanity address and get results in a few hours instead of having to run a CPU search for months. Generating a vanity address is a brute-force exercise: try a random key, check the resulting address to see if it matches the desired pattern, repeat until successful. <> shows an example of a "vanity miner," a program designed to find vanity addresses, written in C++. The example uses the libbitcoin library, which we introduced in <>. @@ -764,9 +764,9 @@ The example code will take a few seconds to find a match for the three-character ===== Vanity address security -((("security", "vanity addresses")))Vanity addresses can be used to enhance _and_ to defeat security measures; they are truly a double-edged sword. Used to improve security, a distinctive address makes it harder for adversaries to substitute their own address and fool your customers into paying them instead of you. Unfortunately, vanity addresses also make it possible for anyone to create an address that _resembles_ any random address, or even another vanity address, thereby fooling your customers. +((("security", "vanity addresses")))Vanity addresses can be used to enhance _and_ to defeat security measures; they are truly a double-edged sword. Used to improve security, a distinctive address makes it harder for adversaries to substitute their own address and fool your customers into paying them instead of you. Unfortunately, vanity addresses also make it possible for anyone to create an address that _resembles_ any random address, or even another vanity address, thereby fooling your customers. -Eugenia could advertise a randomly generated address (e.g., +1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy+) to which people can send their donations. Or, she could generate a vanity address that starts with 1Kids, to make it more distinctive. +Eugenia could advertise a randomly generated address (e.g., +1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy+) to which people can send their donations. Or, she could generate a vanity address that starts with 1Kids, to make it more distinctive. In both cases, one of the risks of using a single fixed address (rather than a separate dynamic address per donor) is that a thief might be able to infiltrate your website and replace it with his own address, thereby diverting donations to himself. If you have advertised your donation address in a number of different places, your users may visually inspect the address before making a payment to ensure it is the same one they saw on your website, on your email, and on your flyer. In the case of a random address like +1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy+, the average user will perhaps inspect the first few characters "1J7mdg" and be satisfied that the address matches. Using a vanity address generator, someone with the intent to steal by substituting a similar-looking address can quickly generate addresses that match the first few characters, as shown in <>. @@ -779,12 +779,12 @@ In both cases, one of the risks of using a single fixed address (rather than a s | *Vanity (6-character match)* | 1J7mdg5WxGENmwyJP9xuGhG5KRzu99BBCX |======= -So does a vanity address increase security? If Eugenia generates the vanity address +1Kids33q44erFfpeXrmDSz7zEqG2FesZEN+, users are likely to look at the vanity pattern word _and a few characters beyond_, for example noticing the "1Kids33" part of the address. That would force an attacker to generate a vanity address matching at least six characters (two more), expending an effort that is 3,364 times (58 × 58) higher than the effort Eugenia expended for her 4-character vanity. Essentially, the effort Eugenia expends (or pays a vanity pool for) "pushes" the attacker into having to produce a longer pattern vanity. If Eugenia pays a pool to generate an 8-character vanity address, the attacker would be pushed into the realm of 10 characters, which is infeasible on a personal computer and expensive even with a custom vanity-mining rig or vanity pool. What is affordable for Eugenia becomes unaffordable for the attacker, especially if the potential reward of fraud is not high enough to cover the cost of the vanity address generation.((("", startref="Avanity04")))((("", startref="vanity04")))((("", startref="eugeniafour"))) +So does a vanity address increase security? If Eugenia generates the vanity address +1Kids33q44erFfpeXrmDSz7zEqG2FesZEN+, users are likely to look at the vanity pattern word _and a few characters beyond_, for example noticing the "1Kids33" part of the address. That would force an attacker to generate a vanity address matching at least six characters (two more), expending an effort that is 3,364 times (58 × 58) higher than the effort Eugenia expended for her 4-character vanity. Essentially, the effort Eugenia expends (or pays a vanity pool for) "pushes" the attacker into having to produce a longer pattern vanity. If Eugenia pays a pool to generate an 8-character vanity address, the attacker would be pushed into the realm of 10 characters, which is infeasible on a personal computer and expensive even with a custom vanity-mining rig or vanity pool. What is affordable for Eugenia becomes unaffordable for the attacker, especially if the potential reward of fraud is not high enough to cover the cost of the vanity address generation.((("", startref="Avanity04")))((("", startref="vanity04")))((("", startref="eugeniafour"))) [[paper_wallets]] ==== Paper Wallets -((("keys and addresses", "advanced forms", "paper wallets")))((("paper wallets", id="paperw04")))((("wallets", "types of", "paper wallets", id="Wpaper04")))Paper wallets are bitcoin private keys printed on paper. Often the paper wallet also includes the corresponding bitcoin address for convenience, but this is not necessary because it can be derived from the private key. Paper wallets are a very effective way to create backups or offline bitcoin storage, also known as "cold storage." As a backup mechanism, a paper wallet can provide security against the loss of key due to a computer mishap such as a hard-drive failure, theft, or accidental deletion. As a "cold storage" mechanism, if the paper wallet keys are generated offline and never stored on a computer system, they are much more secure against hackers, keyloggers, and other online computer threats. +((("keys and addresses", "advanced forms", "paper wallets")))((("paper wallets", id="paperw04")))((("wallets", "types of", "paper wallets", id="Wpaper04")))Paper wallets are bitcoin private keys printed on paper. Often the paper wallet also includes the corresponding bitcoin address for convenience, but this is not necessary because it can be derived from the private key. Paper wallets are a very effective way to create backups or offline bitcoin storage, also known as "cold storage." As a backup mechanism, a paper wallet can provide security against the loss of key due to a computer mishap such as a hard-drive failure, theft, or accidental deletion. As a "cold storage" mechanism, if the paper wallet keys are generated offline and never stored on a computer system, they are much more secure against hackers, keyloggers, and other online computer threats. Paper wallets come in many shapes, sizes, and designs, but at a very basic level are just a key and an address printed on paper. <> shows the simplest form of a paper wallet. @@ -803,7 +803,7 @@ Paper wallets can be generated easily using a tool such as the client-side JavaS .An example of a simple paper wallet from bitaddress.org image::images/mbc2_0408.png[] -((("bitcoin improvement proposals", "Encrypted Private Keys (BIP-38)")))The disadvantage of a simple paper wallet system is that the printed keys are vulnerable to theft. A thief who is able to gain access to the paper can either steal it or photograph the keys and take control of the bitcoin locked with those keys. A more sophisticated paper wallet storage system uses BIP-38 encrypted private keys. The keys printed on the paper wallet are protected by a passphrase that the owner has memorized. Without the passphrase, the encrypted keys are useless. Yet, they still are superior to a passphrase-protected wallet because the keys have never been online and must be physically retrieved from a safe or other physically secured storage. <> shows a paper wallet with an encrypted private key (BIP-38) created on the bitaddress.org site. +((("bitcoin improvement proposals", "Encrypted Private Keys (BIP-38)")))The disadvantage of a simple paper wallet system is that the printed keys are vulnerable to theft. A thief who is able to gain access to the paper can either steal it or photograph the keys and take control of the bitcoin locked with those keys. A more sophisticated paper wallet storage system uses BIP-38 encrypted private keys. The keys printed on the paper wallet are protected by a passphrase that the owner has memorized. Without the passphrase, the encrypted keys are useless. Yet, they still are superior to a passphrase-protected wallet because the keys have never been online and must be physically retrieved from a safe or other physically secured storage. <> shows a paper wallet with an encrypted private key (BIP-38) created on the bitaddress.org site. [[paper_wallet_encrypted]] .An example of an encrypted paper wallet from bitaddress.org. The passphrase is "test." @@ -824,7 +824,7 @@ image::images/mbc2_0410.png[] .The bitcoinpaperwallet.com paper wallet with the private key concealed image::images/mbc2_0411.png[] -Other designs feature additional copies of the key and address, in the form of detachable stubs similar to ticket stubs, allowing you to store multiple copies to protect against fire, flood, or other natural disasters.((("", startref="KAadvanced04")))((("", startref="Wpaper04")))((("", startref="paperw04"))) +Other designs feature additional copies of the key and address, in the form of detachable stubs similar to ticket stubs, allowing you to store multiple copies to protect against fire, flood, or other natural disasters.((("", startref="KAadvanced04")))((("", startref="Wpaper04")))((("", startref="paperw04"))) [[paper_wallet_spw]] .An example of a paper wallet with additional copies of the keys on a backup "stub" From 6e20da5e14982b89eb573275f87d7b8807723d86 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Feb 2018 19:20:38 -0600 Subject: [PATCH 06/45] Removed mention of alternate stack, as it hasn't been defined #418 --- ch06.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch06.asciidoc b/ch06.asciidoc index 7c0f3d7a..27327ba5 100644 --- a/ch06.asciidoc +++ b/ch06.asciidoc @@ -459,7 +459,7 @@ Try validating the preceding script yourself using pencil and paper. When the sc ((("security", "locking and unlocking scripts")))In the original bitcoin client, the unlocking and locking scripts were concatenated and executed in sequence. For security reasons, this was changed in 2010, because of a vulnerability that allowed a malformed unlocking script to push data onto the stack and corrupt the locking script. In the current implementation, the scripts are executed separately with the stack transferred between the two executions, as described next. -First, the unlocking script is executed, using the stack execution engine. If the unlocking script is executed without errors (e.g., it has no "dangling" operators left over), the main stack (not the alternate stack) is copied and the locking script is executed. If the result of executing the locking script with the stack data copied from the unlocking script is "TRUE," the unlocking script has succeeded in resolving the conditions imposed by the locking script and, therefore, the input is a valid authorization to spend the UTXO. If any result other than "TRUE" remains after execution of the combined script, the input is invalid because it has failed to satisfy the spending conditions placed on the UTXO. +First, the unlocking script is executed, using the stack execution engine. If the unlocking script is executed without errors (e.g., it has no "dangling" operators left over), the main stack is copied and the locking script is executed. If the result of executing the locking script with the stack data copied from the unlocking script is "TRUE," the unlocking script has succeeded in resolving the conditions imposed by the locking script and, therefore, the input is a valid authorization to spend the UTXO. If any result other than "TRUE" remains after execution of the combined script, the input is invalid because it has failed to satisfy the spending conditions placed on the UTXO. [[p2pkh]] From 53c74797f18ab57042f07a85def467a0b57db304 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Feb 2018 19:27:34 -0600 Subject: [PATCH 07/45] Removed the "math is scary" cliche #419 --- ch06.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch06.asciidoc b/ch06.asciidoc index 27327ba5..d015b60c 100644 --- a/ch06.asciidoc +++ b/ch06.asciidoc @@ -677,7 +677,7 @@ Note that in verifying the signature, the private key is neither known nor revea [TIP] ==== -The math of ECDSA is complex and difficult to understand. There are a number of great guides online that might help. Search for "ECDSA explained" or try this one: http://bit.ly/2r0HhGB[]. +ECDSA is necessarily a fairly complicated piece of math; a full explanation is beyond the scope of this book. A number of great guides online take you through it step by step: search for "ECDSA explained" or try this one: http://bit.ly/2r0HhGB[]. ==== ==== The Importance of Randomness in Signatures From 8a9869f808b1724ca9dff82793c28a5853d3831d Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Feb 2018 19:31:31 -0600 Subject: [PATCH 08/45] Fixed missing forward reference and clean up #420 --- ch07.asciidoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ch07.asciidoc b/ch07.asciidoc index f7e3bb35..b1ada24f 100644 --- a/ch07.asciidoc +++ b/ch07.asciidoc @@ -12,7 +12,7 @@ First, we will look at _multisignature_ scripts. Next, we will examine the secon [[multisig]] === Multisignature -((("transactions", "advanced", "multisignature scripts")))((("transactions", "advanced", id="Tadv07")))((("scripting", "multisignature scripts", id="Smulti07")))((("multisignature scripts")))Multisignature scripts set a condition where N public keys are recorded in the script and at least M of those must provide signatures to unlock the funds. This is also known as an M-of-N scheme, where N is the total number of keys and M is the threshold of signatures required for validation. For example, a 2-of-3 multisignature is one where three public keys are listed as potential signers and at least two of those must be used to create signatures for a valid transaction to spend the funds. +((("transactions", "advanced", "multisignature scripts")))((("transactions", "advanced", id="Tadv07")))((("scripting", "multisignature scripts", id="Smulti07")))((("multisignature scripts")))Multisignature scripts set a condition where N public keys are recorded in the script and at least M of those must provide signatures to unlock the funds. This is also known as an M-of-N scheme, where N is the total number of keys and M is the threshold of signatures required for validation. For example, a 2-of-3 multisignature is one where three public keys are listed as potential signers and at least two of those must be used to create signatures for a valid transaction to spend the funds. At this time, _standard_ multisignature scripts are limited to at most 3 listed public keys, meaning you can do anything from a 1-of-1 to a 3-of-3 multisignature or any combination within that range. The limitation to 3 listed keys might be lifted by the time this book is published, so check the +IsStandard()+ function to see what is currently accepted by the network. Note that the limit of 3 keys applies only to standard (also known as "bare") multisignature scripts, not to multisignature scripts wrapped in a Pay-to-Script-Hash (P2SH) script. P2SH multisignature scripts are limited to 15 keys, allowing for up to 15-of-15 multisignature. We will learn about P2SH in <>. @@ -211,11 +211,11 @@ P2SH addresses hide all of the complexity, so that the person making a payment d ==== Redeem Script and Validation -((("scripting", "Pay-to-Script-Hash", "redeem scripts and validation")))((("Pay-to-Script-Hash (P2SH)", "redeem scripts and validation")))((("redeem scripts")))((("validation")))Prior to version 0.9.2 of the Bitcoin Core client, Pay-to-Script-Hash was limited to the standard types of bitcoin transaction scripts, by the +IsStandard()+ function. That means that the redeem script presented in the spending transaction could only be one of the standard types: P2PK, P2PKH, or multisig, excluding +RETURN+ and P2SH itself. +((("scripting", "Pay-to-Script-Hash", "redeem scripts and validation")))((("Pay-to-Script-Hash (P2SH)", "redeem scripts and validation")))((("redeem scripts")))((("validation")))Prior to version 0.9.2 of the Bitcoin Core client, Pay-to-Script-Hash was limited to the standard types of bitcoin transaction scripts, by the +IsStandard()+ function. That means that the redeem script presented in the spending transaction could only be one of the standard types: P2PK, P2PKH, or multisig. As of version 0.9.2 of the Bitcoin Core client, P2SH transactions can contain any valid script, making the P2SH standard much more flexible and allowing for experimentation with many novel and complex types of transactions. -Note that you are not able to put a P2SH inside a P2SH redeem script, because the P2SH specification is not recursive. While it is technically possible to include +RETURN+ in a redeem script, as nothing in the rules prevents you from doing so, it is of no practical use because executing +RETURN+ during validation will cause the transaction to be marked invalid. +You are not able to put a P2SH inside a P2SH redeem script, because the P2SH specification is not recursive. Also, while it is technically possible to include +RETURN+ (see <>) in a redeem script, as nothing in the rules prevents you from doing so, it is of no practical use because executing +RETURN+ during validation will cause the transaction to be marked invalid. Note that because the redeem script is not presented to the network until you attempt to spend a P2SH output, if you lock an output with the hash of an invalid redeem script it will be processed regardless. The UTXO will be successfully locked. However, you will not be able to spend it because the spending transaction, which includes the redeem script, will not be accepted because it is an invalid script. This creates a risk, because you can lock bitcoin in a P2SH that cannot be spent later. The network will accept the P2SH locking script even if it corresponds to an invalid redeem script, because the script hash gives no indication of the script it represents.((("", startref="Spay07"))) From 9c783e1edf6c8773d4d7f41a9aa3f8a02c7403a6 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Feb 2018 21:20:42 -0600 Subject: [PATCH 09/45] Clarified #421 --- ch07.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch07.asciidoc b/ch07.asciidoc index b1ada24f..a7bcbe48 100644 --- a/ch07.asciidoc +++ b/ch07.asciidoc @@ -330,7 +330,7 @@ More precisely, +CHECKLOCKTIMEVERIFY+ fails and halts execution, marking the tra After execution, if +CLTV+ is satisfied, the time parameter that preceded it remains as the top item on the stack and may need to be dropped, with +DROP+, for correct execution of subsequent script opcodes. You will often see +CHECKLOCKTIMEVERIFY+ followed by +DROP+ in scripts for this reason. -By using nLocktime in conjunction with +CLTV+, the scenario described in <> changes. Because Alice locked the UTXO itself, it is now impossible for either Bob or Alice to spend it before the 3-month locktime has expired.((("", startref="alicesseven"))) +By using nLocktime in conjunction with +CLTV+, the scenario described in <> changes. Alice can no longer spend the money (because it's locked with Bob's key) and Bob cannot spend it before the 3-month locktime has expired.((("", startref="alicesseven"))) By introducing timelock functionality directly into the scripting language, +CLTV+ allows us to develop some very interesting complex scripts.((("", startref="cltv07"))) From fe0e7f6059e7459ff170fb022481a459c268e224 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sun, 4 Feb 2018 09:54:47 -0600 Subject: [PATCH 10/45] Wording #423 --- ch09.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch09.asciidoc b/ch09.asciidoc index fe4180e5..c134f5a3 100644 --- a/ch09.asciidoc +++ b/ch09.asciidoc @@ -285,7 +285,7 @@ Keep in mind that testnet3 is a large blockchain, in excess of 20 GB in early 20 ===== Using testnet -Bitcoin Core, like almost all other bitcoin software, has full support for operation on testnet instead of mainnet, but also allows you to mine testnet coins and operate a full testnet node. +Bitcoin Core, like almost all other bitcoin software, has full support for operation on testnet instead of mainnet. All of Bitcoin Core's functions work on testnet, including the wallet, mining testnet coins, and syncing a full testnet node. To start Bitcoin Core on testnet instead of mainnet you use the +testnet+ switch: From 69c00abc345019e2e8941ad8032724231cee3a04 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sun, 4 Feb 2018 10:26:45 -0600 Subject: [PATCH 11/45] Moved example down and added tip #449 Example produces a compressed public key, which is not introduced as a concept until later. This results in a different address, causing confusion. Moved the example to after the section on compressed public keys and added a TIP to clarify --- ch04.asciidoc | 68 ++++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/ch04.asciidoc b/ch04.asciidoc index 135f4311..b0e5561c 100644 --- a/ch04.asciidoc +++ b/ch04.asciidoc @@ -326,35 +326,6 @@ In bitcoin, most of the data presented to the user is Base58Check-encoded to mak | BIP-32 Extended Public Key | 0x0488B21E | xpub |======= - -Let's look at the complete process of creating a bitcoin address, from a private key, to a public key (a point on the elliptic curve), to a double-hashed address, and finally, the Base58Check encoding. The C++ code in <> shows the complete step-by-step process, from private key to Base58Check-encoded bitcoin address. The code example uses the libbitcoin library introduced in <> for some helper functions. - -[[addr_example]] -.Creating a Base58Check-encoded bitcoin address from a private key -==== -[role="c_less_space"] -[source, cpp] ----- -include::code/addr.cpp[] ----- -==== - -The code uses a predefined private key to produce the same bitcoin address every time it is run, as shown in <>.((("", startref="base5804")))((("", startref="Abase5804"))) - -[[addr_example_run]] -.Compiling and running the addr code -==== -[source,bash] ----- -# Compile the addr.cpp code -$ g++ -o addr addr.cpp $(pkg-config --cflags --libs libbitcoin) -# Run the addr executable -$ ./addr -Public key: 0202a406624211f2abbdc68da3df929f938c3399dd79fac1b51b0e4ad1d26a47aa -Address: 1PRTTaJesdNovgne6Ehcdu1fpEdX7913CK ----- -==== - ==== Key Formats ((("keys and addresses", "bitcoin addresses", "key formats")))Both private and public keys can be represented in a number of different formats. These representations all encode the same number, even though they look different. These formats are primarily used to make it easy for people to read and transcribe keys without introducing errors. @@ -528,6 +499,41 @@ If a bitcoin wallet is able to implement compressed public keys, it will use tho "Compressed private keys" is a misnomer! They are not compressed; rather, WIF-compressed signifies that the keys should only be used to derive compressed public keys and their corresponding bitcoin addresses. Ironically, a "WIF-compressed" encoded private key is one byte longer because it has the added +01+ suffix to distinguish it from an "uncompressed" one.((("", startref="KAaddress04"))) ==== +=== Implementing Keys and Addresses in Cpass:[++] + +Let's look at the complete process of creating a bitcoin address, from a private key, to a public key (a point on the elliptic curve), to a double-hashed address, and finally, the Base58Check encoding. The C++ code in <> shows the complete step-by-step process, from private key to Base58Check-encoded bitcoin address. The code example uses the libbitcoin library introduced in <> for some helper functions. + +[[addr_example]] +.Creating a Base58Check-encoded bitcoin address from a private key +==== +[role="c_less_space"] +[source, cpp] +---- +include::code/addr.cpp[] +---- +==== + +The code uses a predefined private key to produce the same bitcoin address every time it is run, as shown in <>.((("", startref="base5804")))((("", startref="Abase5804"))) + +[[addr_example_run]] +.Compiling and running the addr code +==== +[source,bash] +---- +# Compile the addr.cpp code +$ g++ -o addr addr.cpp $(pkg-config --cflags --libs libbitcoin) +# Run the addr executable +$ ./addr +Public key: 0202a406624211f2abbdc68da3df929f938c3399dd79fac1b51b0e4ad1d26a47aa +Address: 1PRTTaJesdNovgne6Ehcdu1fpEdX7913CK +---- +==== + +[TIP] +==== +The example in <>, produces a bitcoin address (+1PRTT...+) from a _compressed_ public key (see <>). If you used the uncompressed public key instead, it would produce a different bitcoin address (+14K1y...+). +==== + === Implementing Keys and Addresses in Python ((("keys and addresses", "implementing in Python", id="KApython04")))((("pybitcointools")))The most comprehensive bitcoin library in Python is https://github.com/vbuterin/pybitcointools[pybitcointools] by Vitalik Buterin. In <>, we use the pybitcointools library (imported as "bitcoin") to generate and display keys and addresses in various formats. @@ -829,7 +835,3 @@ Other designs feature additional copies of the key and address, in the form of d [[paper_wallet_spw]] .An example of a paper wallet with additional copies of the keys on a backup "stub" image::images/mbc2_0412.png[] - - - - From 93645d1a5b0e0013924ba41d0e0546dc73e8898b Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sun, 4 Feb 2018 10:31:53 -0600 Subject: [PATCH 12/45] Wording #450 --- ch10.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch10.asciidoc b/ch10.asciidoc index a90d9a7a..57f51e5d 100644 --- a/ch10.asciidoc +++ b/ch10.asciidoc @@ -918,7 +918,7 @@ The massive increase of total hashing power has arguably made bitcoin impervious Not all attackers will be motivated by profit, however. One potential attack scenario is where an attacker intends to disrupt the bitcoin network without the possibility of profiting from such disruption. A malicious attack aimed at crippling bitcoin would require enormous investment and covert planning, but could conceivably be launched by a well-funded, most likely state-sponsored, attacker. Alternatively, a well-funded attacker could attack bitcoin's consensus by simultaneously amassing mining hardware, compromising pool operators, and attacking other pools with denial-of-service. All of these scenarios are theoretically possible, but increasingly impractical as the bitcoin network's overall hashing power continues to grow exponentially. -Undoubtedly, a serious consensus attack would erode confidence in bitcoin in the short term, possibly causing a significant price decline. However, the bitcoin network and software are constantly evolving, so consensus attacks would be met with immediate countermeasures by the bitcoin community, making bitcoin hardier, stealthier, and more robust than ever.((("", startref="Cattack10")))((("", startref="MACattack10")))((("", startref="Sconsens10"))) +Undoubtedly, a serious consensus attack would erode confidence in bitcoin in the short term, possibly causing a significant price decline. However, the bitcoin network and software are constantly evolving, so consensus attacks would be met with immediate countermeasures by the bitcoin community, making bitcoin more robust.((("", startref="Cattack10")))((("", startref="MACattack10")))((("", startref="Sconsens10"))) [[consensus_changes]] === Changing the Consensus Rules From 2d33df073e6be180b305a3b18cfdb47b8abbc488 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sun, 4 Feb 2018 10:33:25 -0600 Subject: [PATCH 13/45] Wording #451 --- ch10.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch10.asciidoc b/ch10.asciidoc index 57f51e5d..7be4e643 100644 --- a/ch10.asciidoc +++ b/ch10.asciidoc @@ -996,7 +996,7 @@ The term _soft fork_ was introduced to distinguish this upgrade method from a "h One aspect of soft forks that is not immediately obvious is that soft fork upgrades can only be used to constrain the consensus rules, not to expand them. In order to be forward compatible, transactions and blocks created under the new rules must be valid under the old rules too, but not vice versa. The new rules can only limit what is valid; otherwise, they will trigger a hard fork when rejected under the old rules. -Soft forks can be implemented in a number of ways—the term does not define a single method, rather a set of methods that all have one thing in common: they don't require all nodes to upgrade or force nonupgraded nodes out of consensus. +Soft forks can be implemented in a number of ways—the term does not specify a particular method, rather a set of methods that all have one thing in common: they don't require all nodes to upgrade or force nonupgraded nodes out of consensus. ===== Soft forks redefining NOP opcodes From e319186321b9afe10403e122610150205b61edf7 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sun, 4 Feb 2018 10:35:38 -0600 Subject: [PATCH 14/45] State name is "FAILED". Wording #452 --- ch10.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch10.asciidoc b/ch10.asciidoc index 7be4e643..803c89e4 100644 --- a/ch10.asciidoc +++ b/ch10.asciidoc @@ -1088,7 +1088,7 @@ Unlike BIP-34, BIP-9 counts activation signaling in whole intervals based on the BIP-9 offers a proposal state diagram to illustrate the various stages and transitions for a proposal, as shown in <>. -Proposals start in the +DEFINED+ state, once their parameters are known (defined) in the bitcoin software. For blocks with MTP after the start time, the proposal state transitions to +STARTED+. If the voting threshold is exceeded within a retarget period and the timeout has not been exceeded, the proposal state transitions to +LOCKED_IN+. One retarget period later, the proposal becomes +ACTIVE+. Proposals remain in the +ACTIVE+ state perpetually once they reach that state. If the timeout is elapsed before the voting threshold has been reached, the proposal state changes to +FAILED+, indicating a rejected proposal. +REJECTED+ proposals remain in that state perpetually. +Proposals start in the +DEFINED+ state, once their parameters are known (defined) in the bitcoin software. For blocks with MTP after the start time, the proposal state transitions to +STARTED+. If the voting threshold is exceeded within a retarget period and the timeout has not been exceeded, the proposal state transitions to +LOCKED_IN+. One retarget period later, the proposal becomes +ACTIVE+. Proposals remain in the +ACTIVE+ state perpetually once they reach that state. If the timeout elapses before the voting threshold has been reached, the proposal state changes to +FAILED+, indicating a rejected proposal. +FAILED+ proposals remain in that state perpetually. [[bip9states]] .BIP-9 state transition diagram From f22700f00ee9525ad60b806d9aef026b263582b6 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sun, 4 Feb 2018 10:36:56 -0600 Subject: [PATCH 15/45] Wording #453 --- ch10.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch10.asciidoc b/ch10.asciidoc index 803c89e4..6d92d9b4 100644 --- a/ch10.asciidoc +++ b/ch10.asciidoc @@ -1100,7 +1100,7 @@ The standard is defined in https://github.com/bitcoin/bips/blob/master/bip-0009. === Consensus Software Development -((("mining and consensus", "consensus software development")))((("development environment", "consensus software development")))Consensus software development continues to evolve and there is much discussion on the various mechanisms for changing the consensus rules. By its very nature, bitcoin sets a very high bar on coordination and consensus for changes. As a decentralized system, it has no "authority" that can impose its will on the participants of the network. Power is diffused between multiple constituencies such as miners, core developers, wallet developers, exchanges, merchants, and end users. Decisions cannot be made unilaterally by any of these constituencies. For example, while miners can theoretically change the rules by simple majority (51%), they are constrained by the consent of the other constituencies. If they act unilaterally, the rest of the participants may simply refuse to follow them, keeping the economic activity on a minority chain. Without economic activity (transactions, merchants, wallets, exchanges), the miners will be mining a worthless coin with empty blocks. This diffusion of power means that all the participants must coordinate, or no changes can be made. Status quo is the stable state of this system with only a few changes possible if there is strong consensus by a very large majority. The 95% threshold for soft forks is reflective of this reality. +((("mining and consensus", "consensus software development")))((("development environment", "consensus software development")))Consensus software continues to evolve and there is much discussion on the various mechanisms for changing the consensus rules. By its very nature, bitcoin sets a very high bar on coordination and consensus for changes. As a decentralized system, it has no "authority" that can impose its will on the participants of the network. Power is diffused between multiple constituencies such as miners, core developers, wallet developers, exchanges, merchants, and end users. Decisions cannot be made unilaterally by any of these constituencies. For example, while miners can theoretically change the rules by simple majority (51%), they are constrained by the consent of the other constituencies. If they act unilaterally, the rest of the participants may simply refuse to follow them, keeping the economic activity on a minority chain. Without economic activity (transactions, merchants, wallets, exchanges), the miners will be mining a worthless coin with empty blocks. This diffusion of power means that all the participants must coordinate, or no changes can be made. Status quo is the stable state of this system with only a few changes possible if there is strong consensus by a very large majority. The 95% threshold for soft forks is reflective of this reality. ((("hard forks")))It is important to recognize that there is no perfect solution for consensus development. Both hard forks and soft forks involve tradeoffs. For some types of changes, soft forks may be a better choice; for others, hard forks may be a better choice. There is no perfect choice; both carry risks. The one constant characteristic of consensus software development is that change is difficult and consensus forces compromise. From 74225613047570ffc7208ad66d4d63170ce1b8b1 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sun, 4 Feb 2018 10:45:15 -0600 Subject: [PATCH 16/45] Wording "spent whenever" to "spent at any time" #455 --- ch10.asciidoc | 2 +- ch12.asciidoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ch10.asciidoc b/ch10.asciidoc index 6d92d9b4..6fbc41c4 100644 --- a/ch10.asciidoc +++ b/ch10.asciidoc @@ -1020,7 +1020,7 @@ Technical debt:: Because soft forks are more technically complex than a hard for Validation relaxation:: Unmodified clients see transactions as valid, without evaluating the modified consensus rules. In effect, the unmodified clients are not validating using the full range of consensus rules, as they are blind to the new rules. This applies to NOP-based upgrades, as well as other soft fork upgrades. -Irreversible upgrades:: Because soft forks create transactions with additional consensus constraints, they become irreversible upgrades in practice. If a soft fork upgrade were to be reversed after being activated, any transactions created under the new rules could result in a loss of funds under the old rules. For example, if a CLTV transaction is evaluated under the old rules, there is no timelock constraint and it can be spent whenever. Therefore, critics contend that a failed soft fork that had to be reversed because of a bug would almost certainly lead to loss of funds.((("", startref="Crule10"))) +Irreversible upgrades:: Because soft forks create transactions with additional consensus constraints, they become irreversible upgrades in practice. If a soft fork upgrade were to be reversed after beings activated, any transactions created under the new rules could result in a loss of funds under the old rules. For example, if a CLTV transaction is evaluated under the old rules, there is no timelock constraint and it can be spent at any time. Therefore, critics contend that a failed soft fork that had to be reversed because of a bug would almost certainly lead to loss of funds.((("", startref="Crule10"))) [[softforksignaling]] === Soft Fork Signaling with Block Version diff --git a/ch12.asciidoc b/ch12.asciidoc index 63f8f425..af90e2b1 100644 --- a/ch12.asciidoc +++ b/ch12.asciidoc @@ -59,7 +59,7 @@ Proof-of-Existence (Digital Notary):: ((("digital notary services")))((("Proof o Kickstarter (Lighthouse):: Consistency + Atomicity + Integrity. If you sign one input and the output (Integrity) of a fundraiser transaction, others can contribute to the fundraiser but it cannot be spent (Atomicity) until the goal (output value) is funded (Consistency). -Payment Channels:: ((("payment (state) channels", "building blocks (primitives) used in")))Quorum of Control + Timelock + No Double Spend + Nonexpiration + Censorship Resistance + Authorization. A multisig 2-of-2 (Quorum) with a timelock (Timelock) used as the "settlement" transaction of a payment channel can be held (Nonexpiration) and spent whenever (Censorship Resistance) by either party (Authorization). The two parties can then create commitment transactions that double-spend (No Double-Spend) the settlement on a shorter timelock (Timelock). +Payment Channels:: ((("payment (state) channels", "building blocks (primitives) used in")))Quorum of Control + Timelock + No Double Spend + Nonexpiration + Censorship Resistance + Authorization. A multisig 2-of-2 (Quorum) with a timelock (Timelock) used as the "settlement" transaction of a payment channel can be held (Nonexpiration) and spent at any time (Censorship Resistance) by either party (Authorization). The two parties can then create commitment transactions that double-spend (No Double-Spend) the settlement on a shorter timelock (Timelock). === Colored Coins From 318e13c9b23ee871c4ddea3303b90008087d45cf Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sun, 4 Feb 2018 10:48:57 -0600 Subject: [PATCH 17/45] Wording #458 --- ch12.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch12.asciidoc b/ch12.asciidoc index af90e2b1..47c48e8f 100644 --- a/ch12.asciidoc +++ b/ch12.asciidoc @@ -245,7 +245,7 @@ image::images/mbc2_1204.png["A payment channel between Bob and Alice, showing th ==== Simple Payment Channel Example -((("payment (state) channels", "example of", id="PSCexample12")))To explain state channels, we have to start with a very simple example. We demonstrate a one-way channel, meaning that value is flowing in one direction only. We will also start with the naive assumption that no one is trying to cheat, to keep things simple. Once we have the basic channel idea explained, we will then look at what it takes to make it trustless so that neither party _can_ cheat, even if they are trying to. +((("payment (state) channels", "example of", id="PSCexample12")))To explain state channels, we start with a very simple example. We demonstrate a one-way channel, meaning that value is flowing in one direction only. We will also start with the naive assumption that no one is trying to cheat, to keep things simple. Once we have the basic channel idea explained, we will then look at what it takes to make it trustless so that neither party _can_ cheat, even if they are trying to. For this example we will assume two participants: Emma and Fabian. Fabian offers a video streaming service that is billed by the second using a micropayment channel. Fabian charges 0.01 millibit (0.00001 BTC) per second of video, equivalent to 36 millibits (0.036 BTC) per hour of video. Emma is a user who purchases this streaming video service from Fabian. <> shows Emma buying the video streaming service from Fabian using a payment channel. From 4cd7fc9af0eb7e1e04eda410db95dd842183939f Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sun, 4 Feb 2018 10:52:15 -0600 Subject: [PATCH 18/45] Wording "at anytime" to "at any time" #459 --- ch12.asciidoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ch12.asciidoc b/ch12.asciidoc index 47c48e8f..d6b5d72e 100644 --- a/ch12.asciidoc +++ b/ch12.asciidoc @@ -17,7 +17,7 @@ No Double-Spend:: The most fundamental guarantee of bitcoin's decentralized cons Immutability:: Once a transaction is recorded in the blockchain and sufficient work has been added with subsequent blocks, the transaction's data becomes immutable. Immutability is underwritten by energy, as rewriting the blockchain requires the expenditure of energy to produce Proof-of-Work. The energy required and therefore the degree of immutability increases with the amount of work committed on top of the block containing a transaction. -Neutrality:: The decentralized bitcoin network propagates valid transactions regardless of the origin or content of those transactions. This means that anyone can create a valid transaction with sufficient fees and trust they will be able to transmit that transaction and have it included in the blockchain at anytime. +Neutrality:: The decentralized bitcoin network propagates valid transactions regardless of the origin or content of those transactions. This means that anyone can create a valid transaction with sufficient fees and trust they will be able to transmit that transaction and have it included in the blockchain at any time. Secure Timestamping:: The consensus rules reject any block whose timestamp is too far in the past or future. This ensures that timestamps on blocks can be trusted. The timestamp on a block implies an unspent-before guarantee for the inputs of all included transactions. @@ -311,7 +311,7 @@ The first form of unidirectional payment channel was demonstrated as a prototype Timelocks are not the only way to invalidate prior commitment transactions. In the next sections we will see how a revocation key can be used to achieve the same result. Timelocks are effective but they have two distinct disadvantages. By establishing a maximum timelock when the channel is first opened, they limit the lifetime of the channel. Worse, they force channel implementations to strike a balance between allowing long-lived channels and forcing one of the participants to wait a very long time for a refund in case of premature closure. For example, if you allow the channel to remain open for 30 days, by setting the refund timelock to 30 days, if one of the parties disappears immediately the other party must wait 30 days for a refund. The more distant the endpoint, the more distant the refund. -The second problem is that since each subsequent commitment transaction must decrement the timelock, there is an explicit limit on the number of commitment transactions that can be exchanged between the parties. For example, a 30-day channel, setting a timelock of 4320 blocks into the future, can only accommodate 4320 intermediate commitment transactions before it must be closed. There is a danger in setting the timelock commitment transaction interval at 1 block. By setting the timelock interval between commitment transactions to 1 block, a developer is creating a very high burden for the channel participants who have to be vigilant, remain online and watching, and be ready to transmit the right commitment transaction at anytime. +The second problem is that since each subsequent commitment transaction must decrement the timelock, there is an explicit limit on the number of commitment transactions that can be exchanged between the parties. For example, a 30-day channel, setting a timelock of 4320 blocks into the future, can only accommodate 4320 intermediate commitment transactions before it must be closed. There is a danger in setting the timelock commitment transaction interval at 1 block. By setting the timelock interval between commitment transactions to 1 block, a developer is creating a very high burden for the channel participants who have to be vigilant, remain online and watching, and be ready to transmit the right commitment transaction at any time. Now that we understand how timelocks can be used to invalidate prior commitments, we can see the difference between closing the channel cooperatively and closing it unilaterally by broadcasting a commitment transaction. All commitment transactions are timelocked, therefore broadcasting a commitment transaction will always involve waiting until the timelock has expired. But if the two parties agree on what the final balance is and know they both hold commitment transactions that will eventually make that balance a reality, they can construct a settlement transaction without a timelock representing that same balance. In a cooperative close, either party takes the most recent commitment transaction and builds a settlement transaction that is identical in every way except that it omits the timelock. Both parties can sign this settlement transaction knowing there is no way to cheat and get a more favorable balance. By cooperatively signing and transmitting the settlement transaction they can close the channel and redeem their balance immediately. Worst case, one of the parties can be petty, refuse to cooperate, and force the other party to do a unilateral close with the most recent commitment transaction. But if they do that, they have to wait for their funds too.((("", startref="PSCtrust12"))) From f66e7c5f0e01a7ac2ea24a49176b8ca14829a1e3 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sun, 4 Feb 2018 10:54:39 -0600 Subject: [PATCH 19/45] Technical error. Refund to "Payer" #460 --- ch12.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch12.asciidoc b/ch12.asciidoc index d6b5d72e..517eab2c 100644 --- a/ch12.asciidoc +++ b/ch12.asciidoc @@ -434,7 +434,7 @@ IF ELSE # Refund after timeout. CHECKLOCKTIMEVERIFY DROP - CHECKSIG + CHECKSIG ENDIF ---- From d441f03e2ad831c36f05328253ad88f51e3b72b7 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sun, 4 Feb 2018 10:56:21 -0600 Subject: [PATCH 20/45] Python version wording #466 --- appdx-pycoin.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appdx-pycoin.asciidoc b/appdx-pycoin.asciidoc index 9fd32208..f4c1fbee 100644 --- a/appdx-pycoin.asciidoc +++ b/appdx-pycoin.asciidoc @@ -5,7 +5,7 @@ ((("pycoin library")))The Python library http://github.com/richardkiss/pycoin[+pycoin+], originally written and maintained by Richard Kiss, is a Python-based library that supports manipulation of bitcoin keys and transactions, even supporting the scripting language enough to properly deal with nonstandard transactions. -The pycoin library supports both Python 2 (2.7.x) and Python 3 (after 3.3) and comes with some handy command-line utilities, +ku+ and +tx+. +The pycoin library supports both Python 2 (2.7.x) and Python 3 (3.3 and later) and comes with some handy command-line utilities, +ku+ and +tx+. === Key Utility (KU) From 1ac8b375e6fc3de1c5d8d8be7ff7fbc3e4fadb40 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sun, 4 Feb 2018 11:06:28 -0600 Subject: [PATCH 21/45] Block 277,316 contains 419 TXs #469 --- ch02.asciidoc | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index 0d94e9df..872ab4ef 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -3,11 +3,11 @@ === Transactions, Blocks, Mining, and the Blockchain -((("bitcoin", "overview of", id="BCover02")))((("central trusted authority")))((("decentralized systems", "bitcoin overview", id="DCSover02")))The bitcoin system, unlike traditional banking and payment systems, is based on decentralized 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. Subsequent chapters will delve into the technology behind transactions, the network, and mining. +((("bitcoin", "overview of", id="BCover02")))((("central trusted authority")))((("decentralized systems", "bitcoin overview", id="DCSover02")))The bitcoin system, unlike traditional banking and payment systems, is based on decentralized 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. Subsequent chapters will delve into the technology behind transactions, the network, and mining. ==== Bitcoin Overview -In the overview diagram shown in <>, we see that the bitcoin system consists of users with wallets containing keys, transactions that are propagated across the network, and miners who produce (through competitive computation) the consensus blockchain, which is the authoritative ledger of all transactions. +In the overview diagram shown in <>, we see that the bitcoin system consists of users with wallets containing keys, transactions that are propagated across the network, and miners who produce (through competitive computation) the consensus blockchain, which is the authoritative ledger of all transactions. ((("blockchain explorer sites")))Each example in this chapter is based on an actual transaction made on the bitcoin network, simulating the interactions between the users (Joe, Alice, Bob, and Gopesh) by sending funds from one wallet to another. While tracking a transaction through the bitcoin network to the 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. @@ -16,7 +16,7 @@ In the overview diagram shown in <>, we see that the bitcoin s .Bitcoin overview image::images/mbc2_0201.png["Bitcoin Overview"] -((("Bitcoin Block Explorer")))((("BlockCypher Explorer")))((("blockchain.info")))((("BitPay Insight")))Popular blockchain explorers include: +((("Bitcoin Block Explorer")))((("BlockCypher Explorer")))((("blockchain.info")))((("BitPay Insight")))Popular blockchain explorers include: * https://blockexplorer.com[Bitcoin Block Explorer] * https://live.blockcypher.com[BlockCypher Explorer] @@ -29,7 +29,7 @@ Each of these has a search function that can take a bitcoin address, transaction [[cup_of_coffee]] ==== Buying a Cup of Coffee -((("use cases", "buying coffee", id="UCcoffee02")))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. +((("use cases", "buying coffee", id="UCcoffee02")))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. ((("exchange rates", "determining")))Bob's Cafe recently started accepting bitcoin payments by adding a bitcoin option to its point-of-sale system. 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 it into the register, as he does for all transactions. The point-of-sale system automatically converts the total price from US dollars to bitcoin at the prevailing market rate and displays the price in both currencies: @@ -44,7 +44,7 @@ $1.50 USD ((("payment requests")))((("QR codes", "payment requests")))Bob's point-of-sale system will also automatically create a special QR code containing a _payment request_ (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 prefill the information used to send the payment while showing a human-readable description to the user. You can scan the QR code 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 prefill the information used to send the payment while showing a human-readable description to the user. You can scan the QR code with a bitcoin wallet application to see what Alice would see. [[payment-request-QR]] @@ -53,7 +53,7 @@ image::images/mbc2_0202.png["payment-request"] [TIP] ==== -((("QR codes", "warnings and cautions")))((("transactions", "warnings and cautions")))((("warnings and cautions", "avoid sending money to addresses appearing in book")))Try to scan this with your wallet to see the address and amount but DO NOT SEND MONEY. +((("QR codes", "warnings and cautions")))((("transactions", "warnings and cautions")))((("warnings and cautions", "avoid sending money to addresses appearing in book")))Try to scan this with your wallet to see the address and amount but DO NOT SEND MONEY. ==== [[payment-request-URL]] .The payment request QR code encodes the following URL, defined in BIP-21: @@ -63,7 +63,7 @@ amount=0.015& label=Bob%27s%20Cafe& message=Purchase%20at%20Bob%27s%20Cafe -Components of the URL +Components of the URL A bitcoin address: "1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQA" The payment amount: "0.015" @@ -77,7 +77,7 @@ In the following sections, we will examine this transaction in more detail. We'l [NOTE] ==== -((("fractional values")))((("milli-bitcoin")))((("satoshis")))The bitcoin network can transact in fractional values, e.g., from millibitcoin (1/1000th of a bitcoin) down to 1/100,000,000th of a bitcoin, which is known as a satoshi. Throughout this book, we’ll use the term “bitcoin” to refer to any quantity of bitcoin currency, from the smallest unit (1 satoshi) to the total number (21,000,000) of all bitcoin that will ever be mined. +((("fractional values")))((("milli-bitcoin")))((("satoshis")))The bitcoin network can transact in fractional values, e.g., from millibitcoin (1/1000th of a bitcoin) down to 1/100,000,000th of a bitcoin, which is known as a satoshi. Throughout this book, we’ll use the term “bitcoin” to refer to any quantity of bitcoin currency, from the smallest unit (1 satoshi) to the total number (21,000,000) of all bitcoin that will ever be mined. ==== You can examine Alice's transaction to Bob's Cafe on the blockchain using a block explorer site (<>): @@ -92,16 +92,16 @@ https://blockexplorer.com/tx/0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a === Bitcoin Transactions -((("transactions", "defined")))In simple terms, a transaction tells the network that the owner of some bitcoin value has authorized the transfer of that value to another owner. The new owner can now spend the bitcoin by creating another transaction that authorizes the transfer to another owner, and so on, in a chain of ownership. +((("transactions", "defined")))In simple terms, a transaction tells the network that the owner of some bitcoin value has authorized the transfer of that value to another owner. The new owner can now spend the bitcoin by creating another transaction that authorizes the transfer to another owner, and so on, in a chain of ownership. ==== Transaction Inputs and Outputs -((("transactions", "overview of", id="Tover02")))((("outputs and inputs", "basics of")))Transactions are like lines in a double-entry bookkeeping ledger. Each transaction contains one or more "inputs," which are like debits against a bitcoin account. On the other side of the transaction, there are one or more "outputs," which are like credits added to a bitcoin account. ((("fees", "transaction fees")))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_, which is a small payment collected by the miner who includes the transaction in the ledger. A bitcoin transaction is shown as a bookkeeping ledger entry in <>. +((("transactions", "overview of", id="Tover02")))((("outputs and inputs", "basics of")))Transactions are like lines in a double-entry bookkeeping ledger. Each transaction contains one or more "inputs," which are like debits against a bitcoin account. On the other side of the transaction, there are one or more "outputs," which are like credits added to a bitcoin account. ((("fees", "transaction fees")))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_, which is a small payment collected by the miner who includes the transaction in the ledger. A bitcoin transaction is shown as a bookkeeping ledger entry in <>. The transaction also contains proof of ownership for each amount of bitcoin (inputs) whose value is being spent, in the form of a digital signature from the owner, which can be independently validated by anyone. ((("spending bitcoin", "defined")))In bitcoin terms, "spending" is signing a transaction that transfers value from a previous transaction over to a new owner identified by a bitcoin address. [[transaction-double-entry]] -.Transaction as double-entry bookkeeping +.Transaction as double-entry bookkeeping image::images/mbc2_0203.png["Transaction Double-Entry"] ==== Transaction Chains @@ -114,7 +114,7 @@ image::images/mbc2_0204.png["Transaction chain"] ==== Making Change -((("change, making")))((("change addresses")))((("addresses", "change addresses")))Many bitcoin transactions will include outputs that reference both an address of the new owner and an address of the current owner, called the _change_ address. This is because transaction inputs, like currency notes, cannot be divided. If you purchase a $5 US dollar item in a store but use a $20 US dollar bill to pay for the item, you expect to receive $15 US dollars in change. The same concept applies to bitcoin transaction inputs. If you purchased an item that costs 5 bitcoin but only had a 20 bitcoin input to use, you would send one output of 5 bitcoin to the store owner and one output of 15 bitcoin back to yourself as change (less any applicable transaction fee). Importantly, the change address does not have to be the same address as that of the input and for privacy reasons is often a new address from the owner's wallet. +((("change, making")))((("change addresses")))((("addresses", "change addresses")))Many bitcoin transactions will include outputs that reference both an address of the new owner and an address of the current owner, called the _change_ address. This is because transaction inputs, like currency notes, cannot be divided. If you purchase a $5 US dollar item in a store but use a $20 US dollar bill to pay for the item, you expect to receive $15 US dollars in change. The same concept applies to bitcoin transaction inputs. If you purchased an item that costs 5 bitcoin but only had a 20 bitcoin input to use, you would send one output of 5 bitcoin to the store owner and one output of 15 bitcoin back to yourself as change (less any applicable transaction fee). Importantly, the change address does not have to be the same address as that of the input and for privacy reasons is often a new address from the owner's wallet. Different wallets may use different strategies when aggregating inputs to make a payment requested by the user. They might aggregate many small inputs, or use one that is equal to or larger than the desired payment. Unless the wallet can aggregate inputs in such a way to exactly match the desired payment plus transaction fees, the wallet will need to generate some change. This is very similar to how people handle cash. If you always use the largest bill in your pocket, you will end up with a pocket full of loose change. If you only use the loose change, you'll always have only big bills. People subconsciously find a balance between these two extremes, and bitcoin wallet developers strive to program this balance. @@ -134,7 +134,7 @@ Another common form of transaction is one that aggregates several inputs into a .Transaction aggregating funds image::images/mbc2_0206.png["Aggregating Transaction"] -Finally, another transaction form that is seen often on the bitcoin ledger is a transaction that distributes one input to multiple outputs representing multiple recipients (see <>). This type of transaction is sometimes used by commercial entities to distribute funds, such as when processing payroll payments to multiple employees.((("", startref="Tover02"))) +Finally, another transaction form that is seen often on the bitcoin ledger is a transaction that distributes one input to multiple outputs representing multiple recipients (see <>). This type of transaction is sometimes used by commercial entities to distribute funds, such as when processing payroll payments to multiple employees.((("", startref="Tover02"))) [[transaction-distributing]] .Transaction distributing funds @@ -146,8 +146,8 @@ image::images/mbc2_0207.png["Distributing Transaction"] ==== Getting the Right Inputs -((("outputs and inputs", "locating and tracking inputs")))Alice's wallet application will first have to find inputs that can pay the amount she wants to send to Bob. Most wallets keep track of all the available outputs belonging to addresses in the wallet. 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-node 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 quickly verify incoming transactions as having correct inputs. However, because a full-node client takes up a lot of disk space, most user wallets run "lightweight" clients that track only the user's own unspent outputs. - +((("outputs and inputs", "locating and tracking inputs")))Alice's wallet application will first have to find inputs that can pay the amount she wants to send to Bob. Most wallets keep track of all the available outputs belonging to addresses in the wallet. 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-node 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 quickly verify incoming transactions as having correct inputs. However, because a full-node client takes up a lot of disk space, most user wallets run "lightweight" clients that track only the user's own unspent outputs. + 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-node using an application programming interface (API) call. <> shows a 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. [[example_2-2]] @@ -162,19 +162,19 @@ $ curl https://blockchain.info/unspent?active=1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK [source,json] ---- { - + "unspent_outputs":[ { "tx_hash":"186f9f998a5...2836dd734d2804fe65fa35779", "tx_index":104810202, - "tx_output_n": 0, + "tx_output_n": 0, "script":"76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac", "value": 10000000, "value_hex": "00989680", "confirmations":0 } - + ] } ---- @@ -192,7 +192,7 @@ As you can see, Alice's wallet contains enough bitcoin in a single unspent outpu ==== Creating the Outputs -((("outputs and inputs", "creating outputs")))A transaction output is created in the form of a script that creates an encumbrance on the value and can only be redeemed by the introduction of a solution to the script. In simpler terms, Alice's transaction output will contain a script that says something like, "This output is payable to whoever can present a signature from the key corresponding to Bob's public address." Because only Bob has the wallet with the keys corresponding to that address, only Bob's wallet can present such a signature to redeem this output. Alice will therefore "encumber" the output value with a demand for a signature from Bob. +((("outputs and inputs", "creating outputs")))A transaction output is created in the form of a script that creates an encumbrance on the value and can only be redeemed by the introduction of a solution to the script. In simpler terms, Alice's transaction output will contain a script that says something like, "This output is payable to whoever can present a signature from the key corresponding to Bob's public address." Because only Bob has the wallet with the keys corresponding to that address, only Bob's wallet can present such a signature to redeem this output. Alice will therefore "encumber" the output value with a demand for a signature from Bob. This transaction will also include a second output, because Alice's funds are in the form of a 0.10 BTC output, too much money for the 0.015 BTC cup of coffee. Alice will need 0.085 BTC in change. Alice's change payment is created by Alice's wallet as an output in the very same transaction as the payment to Bob. Essentially, Alice's wallet breaks her funds into two payments: one to Bob and one back to herself. She can then use (spend) the change output in a subsequent transaction. @@ -234,7 +234,7 @@ If Bob's bitcoin wallet application is directly connected to Alice's wallet appl === Bitcoin Mining -((("mining and consensus", "overview of", id="MACover02")))((("blockchain (the)", "overview of mining", id="BToverview02")))Alice's transaction is now propagated on the bitcoin network. It does not become part of the _blockchain_ until it is verified and included in a block by a process called _mining_. See <> for a detailed explanation. +((("mining and consensus", "overview of", id="MACover02")))((("blockchain (the)", "overview of mining", id="BToverview02")))Alice's transaction is now propagated on the bitcoin network. It does not become part of 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. The mining process serves two purposes in bitcoin: @@ -258,7 +258,7 @@ Transactions are added to the new block, prioritized by the highest-fee transact ((("candidate blocks")))((("blocks", "candidate blocks")))Alice's transaction was picked up by the network and included in the pool of unverified transactions. Once validated by the mining software it was included in a new block, called a _candidate block_, generated by Jing's mining pool. All the miners participating in that mining pool immediately start computing Proof-of-Work for the candidate block. Approximately five minutes after the transaction was first transmitted by Alice's wallet, one of Jing's ASIC miners found a solution for the candidate block and announced it to the network. Once other miners validated the winning block they started the race to generate the next block. -Jing's winning block became part of the blockchain as block #277316, containing 420 transactions, including Alice's transaction. The block containing Alice's transaction is counted as one "confirmation" of that transaction. +Jing's winning block became part of the blockchain as block #277316, containing 419 transactions, including Alice's transaction. The block containing Alice's transaction is counted as one "confirmation" of that transaction. [TIP] ==== @@ -275,10 +275,10 @@ image::images/mbc2_0209.png["Alice's transaction included in a block"] === Spending the Transaction -((("spending bitcoin", "simple-payment-verification (SPV)")))((("simple-payment-verification (SPV)")))Now that Alice's transaction has been embedded in the blockchain as part of a block, it is part of the distributed ledger of bitcoin and visible to all bitcoin applications. Each bitcoin client can independently verify the transaction as valid and spendable. Full-node clients can track the source of the funds from the moment the bitcoin were first generated in a block, incrementally from transaction to transaction, until they reach Bob's address. Lightweight clients can do what is called a simplified payment verification (see <>) by confirming that the transaction is in the blockchain and has several blocks mined after it, thus providing assurance that the miners accepted it as valid. - -Bob can now spend the output from this and other transactions. For example, Bob can pay a contractor or supplier by transferring value from Alice's coffee cup payment to these new owners. Most likely, Bob's bitcoin software will aggregate many small payments into a larger payment, perhaps concentrating all the day's bitcoin revenue into a single transaction. This would aggregate the various payments into a single output (and a single address). For a diagram of an aggregating transaction, see <>. - +((("spending bitcoin", "simple-payment-verification (SPV)")))((("simple-payment-verification (SPV)")))Now that Alice's transaction has been embedded in the blockchain as part of a block, it is part of the distributed ledger of bitcoin and visible to all bitcoin applications. Each bitcoin client can independently verify the transaction as valid and spendable. Full-node clients can track the source of the funds from the moment the bitcoin were first generated in a block, incrementally from transaction to transaction, until they reach Bob's address. Lightweight clients can do what is called a simplified payment verification (see <>) by confirming that the transaction is in the blockchain and has several blocks mined after it, thus providing assurance that the miners accepted it as valid. + +Bob can now spend the output from this and other transactions. For example, Bob can pay a contractor or supplier by transferring value from Alice's coffee cup payment to these new owners. Most likely, Bob's bitcoin software will aggregate many small payments into a larger payment, perhaps concentrating all the day's bitcoin revenue into a single transaction. This would aggregate the various payments into a single output (and a single address). For a diagram of an aggregating transaction, see <>. + As Bob spends the payments received from Alice and other customers, he extends the chain of transactions. Let's assume that Bob pays his web designer Gopesh((("use cases", "offshore contract services"))) in Bangalore for a new website page. Now the chain of transactions will look like <>. [[block-alice2]] From 4e65d83bf50184835493d93905e02225101eaebd Mon Sep 17 00:00:00 2001 From: Reuben Thomas Date: Sun, 4 Feb 2018 20:42:08 +0000 Subject: [PATCH 22/45] =?UTF-8?q?Fix=20issue=20#454:=20change=20adverbial?= =?UTF-8?q?=20=E2=80=9Cjust=20like=E2=80=9D=20=E2=86=92=20=E2=80=9Cjust=20?= =?UTF-8?q?as=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ch06.asciidoc | 2 +- ch12.asciidoc | 2 +- glossary.asciidoc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ch06.asciidoc b/ch06.asciidoc index d015b60c..341a308d 100644 --- a/ch06.asciidoc +++ b/ch06.asciidoc @@ -66,7 +66,7 @@ You may also notice a lot of strange and indecipherable fields and hexadecimal s ((("balances")))When we say that a user's wallet has "received" bitcoin, what we mean is that the wallet has detected a UTXO that can be spent with one of the keys controlled by that wallet. Thus, a user's bitcoin "balance" is the sum of all UTXO that user's wallet can spend and which may be scattered among hundreds of transactions and hundreds of blocks. The concept of a balance is created by the wallet application. The wallet calculates the user's balance by scanning the blockchain and aggregating the value of any UTXO the wallet can spend with the keys it controls. Most wallets maintain a database or use a database service to store a quick reference set of all the UTXO they can spend with the keys they control. -((("satoshis")))A transaction output can have an arbitrary (integer) value denominated as a multiple of satoshis. Just like dollars can be divided down to two decimal places as cents, bitcoin can be divided down to eight decimal places as satoshis. Although an output can have any arbitrary value, once created it is indivisible. This is an important characteristic of outputs that needs to be emphasized: outputs are _discrete_ and _indivisible_ units of value, denominated in integer satoshis. An unspent output can only be consumed in its entirety by a transaction. +((("satoshis")))A transaction output can have an arbitrary (integer) value denominated as a multiple of satoshis. Just as dollars can be divided down to two decimal places as cents, bitcoin can be divided down to eight decimal places as satoshis. Although an output can have any arbitrary value, once created it is indivisible. This is an important characteristic of outputs that needs to be emphasized: outputs are _discrete_ and _indivisible_ units of value, denominated in integer satoshis. An unspent output can only be consumed in its entirety by a transaction. ((("change, making")))If an UTXO is larger than the desired value of a transaction, it must still be consumed in its entirety and change must be generated in the transaction. In other words, if you have a UTXO worth 20 bitcoin and want to pay only 1 bitcoin, your transaction must consume the entire 20-bitcoin UTXO and produce two outputs: one paying 1 bitcoin to your desired recipient and another paying 19 bitcoin in change back to your wallet. As a result of the indivisible nature of transaction outputs, most bitcoin transactions will have to generate change. diff --git a/ch12.asciidoc b/ch12.asciidoc index 517eab2c..95edb271 100644 --- a/ch12.asciidoc +++ b/ch12.asciidoc @@ -7,7 +7,7 @@ In this chapter we will look at the features offered by the bitcoin blockchain, === Introduction -((("blockchain applications", "benefits of bitcoin system")))The bitcoin system was designed as a decentralized currency and payment system. However, most of its functionality is derived from much lower-level constructs that can be used for much broader applications. Bitcoin wasn't built with components such as accounts, users, balances, and payments. Instead, it uses a transactional scripting language with low-level cryptographic functions, as we saw in <>. Just like the higher-level concepts of accounts, balances, and payments can be derived from these basic primitives, so can many other complex applications. Thus, the bitcoin blockchain can become an application platform offering trust services to applications, such as smart contracts, far surpassing the original purpose of digital currency and payments. +((("blockchain applications", "benefits of bitcoin system")))The bitcoin system was designed as a decentralized currency and payment system. However, most of its functionality is derived from much lower-level constructs that can be used for much broader applications. Bitcoin wasn't built with components such as accounts, users, balances, and payments. Instead, it uses a transactional scripting language with low-level cryptographic functions, as we saw in <>. Just as the higher-level concepts of accounts, balances, and payments can be derived from these basic primitives, so can many other complex applications. Thus, the bitcoin blockchain can become an application platform offering trust services to applications, such as smart contracts, far surpassing the original purpose of digital currency and payments. === Building Blocks (Primitives) diff --git a/glossary.asciidoc b/glossary.asciidoc index f72a6032..ffb7bd78 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -4,7 +4,7 @@ This quick glossary contains many of the terms used in relation to bitcoin. These terms are used throughout the book, so bookmark this for a quick reference. address:: - A bitcoin address looks like +1DSrfJdB2AnWaFNgSbv3MZC2m74996JafV+. It consists of a string of letters and numbers. It's really an encoded base58check version of a public key 160-bit hash. Just like you ask others to send an email to your email address, you would ask others to send you bitcoin to one of your bitcoin addresses. + A bitcoin address looks like +1DSrfJdB2AnWaFNgSbv3MZC2m74996JafV+. It consists of a string of letters and numbers. It's really an encoded base58check version of a public key 160-bit hash. Just as you ask others to send an email to your email address, you would ask others to send you bitcoin to one of your bitcoin addresses. bip:: Bitcoin Improvement Proposals. A set of proposals that members of the bitcoin community have submitted to improve bitcoin. For example, BIP-21 is a proposal to improve the bitcoin uniform resource identifier (URI) scheme. From cf87badbd25445b4b725cb01fba455e5fe03a884 Mon Sep 17 00:00:00 2001 From: theStack Date: Mon, 5 Feb 2018 14:23:38 -0500 Subject: [PATCH 23/45] script opcode count IF vs. VERIFY: diff is two ops v1: HASH160 EQUALVERIFY CHECKSIG v2: HASH160 EQUAL IF CHECKSIG ENDIF ignoring the push-data ops (hash, pubkey), v1 consists of [HASH160, EQUALVERIFY, CHECKSIG] -> 3 opcodes, v2 consists of [HASH160, EQUAL, IF, CHECKSIG, ENDIF] -> 5 opcodes, hence the difference is two opcodes. --- ch07.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch07.asciidoc b/ch07.asciidoc index a7bcbe48..f6038901 100644 --- a/ch07.asciidoc +++ b/ch07.asciidoc @@ -498,7 +498,7 @@ Bob's unlocking script is identical: ---- -The script with +IF+ does the same thing as using an opcode with a +VERIFY+ suffix; they both operate as guard clauses. However, the +VERIFY+ construction is more efficient, using one fewer opcode. +The script with +IF+ does the same thing as using an opcode with a +VERIFY+ suffix; they both operate as guard clauses. However, the +VERIFY+ construction is more efficient, using two fewer opcodes. So, when do we use +VERIFY+ and when do we use +IF+? If all we are trying to do is to attach a precondition (guard clause), then +VERIFY+ is better. If, however, we want to have more than one execution path (flow control), then we need an +IF...ELSE+ flow control clause. From 5ff4c255bee71340a522c515e3a533fbc7be22cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Gill=C3=A9?= Date: Tue, 6 Feb 2018 15:19:03 +0100 Subject: [PATCH 24/45] Clarify which tx get moved to mempool Commit contains two changes: - The text previously said that the transactions from the block that gets removed from the main chain (and replaced by another one) are re-inserted in the mempool. But many (if not most) transactions are part of both blocks, because they were found at the same time, meaning the miners probably inluded many of the same tansactions in their block. These transactions don't get re-inserted into the mempool because they're in "triangle" and thus now part of the main chain. - The sentenced ended with "no longer in the main chain", which is a repitition of what was previously said: > as its parent "upside-down-triangle" is no longer on the longest chain But instead of removing that part of the sentence I rephrased it so that the goal of the action becomes even more clear, which is why the transactions get re-inserted into the mempool (like instead of saying "x gets done because y is not the case anymore" we say "x gets done because we want z to be the case") --- ch10.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch10.asciidoc b/ch10.asciidoc index 6fbc41c4..891bacf1 100644 --- a/ch10.asciidoc +++ b/ch10.asciidoc @@ -807,7 +807,7 @@ Any mining node whose perspective resembles Node Y will start building a candida Forks are almost always resolved within one block. While part of the network's hashing power is dedicated to building on top of "triangle" as the parent, another part of the hashing power is focused on building on top of "upside-down triangle." Even if the hashing power is almost evenly split, it is likely that one set of miners will find a solution and propagate it before the other set of miners have found any solutions. Let's say, for example, that the miners building on top of "triangle" find a new block "rhombus" that extends the chain (e.g., star-triangle-rhombus). They immediately propagate this new block and the entire network sees it as a valid solution as shown in <>. -All nodes that had chosen "triangle" as the winner in the previous round will simply extend the chain one more block. The nodes that chose "upside-down triangle" as the winner, however, will now see two chains: star-triangle-rhombus and star-upside-down-triangle. The chain star-triangle-rhombus is now longer (more cumulative work) than the other chain. As a result, those nodes will set the chain star-triangle-rhombus as the main chain and change the star-upside-down-triangle chain to a secondary chain, as shown in <>. This is a chain reconvergence, because those nodes are forced to revise their view of the blockchain to incorporate the new evidence of a longer chain. Any miners working on extending the chain star-upside-down-triangle will now stop that work because their candidate block is an "orphan," as its parent "upside-down-triangle" is no longer on the longest chain. The transactions within "upside-down-triangle" are re-inserted in the mempool for inclusion in the next block, because the block they were in is no longer in the main chain. The entire network reconverges on a single blockchain star-triangle-rhombus, with "rhombus" as the last block in the chain. All miners immediately start working on candidate blocks that reference "rhombus" as their parent to extend the star-triangle-rhombus chain. +All nodes that had chosen "triangle" as the winner in the previous round will simply extend the chain one more block. The nodes that chose "upside-down triangle" as the winner, however, will now see two chains: star-triangle-rhombus and star-upside-down-triangle. The chain star-triangle-rhombus is now longer (more cumulative work) than the other chain. As a result, those nodes will set the chain star-triangle-rhombus as the main chain and change the star-upside-down-triangle chain to a secondary chain, as shown in <>. This is a chain reconvergence, because those nodes are forced to revise their view of the blockchain to incorporate the new evidence of a longer chain. Any miners working on extending the chain star-upside-down-triangle will now stop that work because their candidate block is an "orphan," as its parent "upside-down-triangle" is no longer on the longest chain. The transactions within "upside-down-triangle" that are not within "triangle" are re-inserted in the mempool for inclusion in the next block to become a part of the main chain. The entire network reconverges on a single blockchain star-triangle-rhombus, with "rhombus" as the last block in the chain. All miners immediately start working on candidate blocks that reference "rhombus" as their parent to extend the star-triangle-rhombus chain. [[fork4]] [role="smallereighty"] From cb2d1994bce232b7012680dbcb433a3ecbda4e8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Gill=C3=A9?= Date: Tue, 6 Feb 2018 15:50:45 +0100 Subject: [PATCH 25/45] Fix wrong hashing rate numbers --- ch10.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch10.asciidoc b/ch10.asciidoc index 6fbc41c4..dad4e154 100644 --- a/ch10.asciidoc +++ b/ch10.asciidoc @@ -831,7 +831,7 @@ The following list shows the total hashing power of the bitcoin network, over th 2009:: 0.5 MH/sec–8 MH/sec (16× growth) 2010:: 8 MH/sec–116 GH/sec (14,500× growth) -2011:: 16 GH/sec–9 TH/sec (562× growth) +2011:: 116 GH/sec–9 TH/sec (78× growth) 2012:: 9 TH/sec–23 TH/sec (2.5× growth) 2013:: 23 TH/sec–10 PH/sec (450× growth) 2014:: 10 PH/sec–300 PH/sec (3000× growth) From b01acc076b0bbe318e1e70410b5a162d6dfa1342 Mon Sep 17 00:00:00 2001 From: MaloneGod <809829352@qq.com> Date: Thu, 8 Feb 2018 20:42:50 +0800 Subject: [PATCH 26/45] correct an error line 24 'wif' to 'wif_compressed' --- code/key-to-address-ecc-example.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/key-to-address-ecc-example.py b/code/key-to-address-ecc-example.py index 72f958a1..8e8e93a1 100644 --- a/code/key-to-address-ecc-example.py +++ b/code/key-to-address-ecc-example.py @@ -21,7 +21,7 @@ print("Private Key Compressed (hex) is: ", compressed_private_key) # Generate a WIF format from the compressed private key (WIF-compressed) wif_compressed_private_key = bitcoin.encode_privkey( - bitcoin.decode_privkey(compressed_private_key, 'hex'), 'wif') + bitcoin.decode_privkey(compressed_private_key, 'hex'), 'wif_compressed') print("Private Key (WIF-Compressed) is: ", wif_compressed_private_key) # Multiply the EC generator point G with the private key to get a public key point From 1cc6c60e28ce761428b443e696190a5dd757a1e8 Mon Sep 17 00:00:00 2001 From: trustkim Date: Fri, 9 Feb 2018 18:11:58 +0900 Subject: [PATCH 27/45] correct CLTV's note description I think CLTV is output-level locktime. so it should be corrected --- ch07.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch07.asciidoc b/ch07.asciidoc index a7bcbe48..f3bf4d53 100644 --- a/ch07.asciidoc +++ b/ch07.asciidoc @@ -325,7 +325,7 @@ More precisely, +CHECKLOCKTIMEVERIFY+ fails and halts execution, marking the tra [NOTE] ==== -+CLTV+ and +nLocktime+ use the same format to describe timelocks, either a block height or the time elapsed in seconds since Unix epoch. Critically, when used together, the format of +nLocktime+ must match that of +CLTV+ in the inputs—they must both reference either block height or time in seconds. ++CLTV+ and +nLocktime+ use the same format to describe timelocks, either a block height or the time elapsed in seconds since Unix epoch. Critically, when used together, the format of +nLocktime+ must match that of +CLTV+ in the outputs—they must both reference either block height or time in seconds. ==== After execution, if +CLTV+ is satisfied, the time parameter that preceded it remains as the top item on the stack and may need to be dropped, with +DROP+, for correct execution of subsequent script opcodes. You will often see +CHECKLOCKTIMEVERIFY+ followed by +DROP+ in scripts for this reason. From d44105ac2ed9ea3041c96a94e53db2aedd87c544 Mon Sep 17 00:00:00 2001 From: Yky Date: Fri, 9 Feb 2018 20:01:57 +0100 Subject: [PATCH 28/45] fixed typo a API -> an API --- ch02.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index 872ab4ef..71014b30 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -148,7 +148,7 @@ image::images/mbc2_0207.png["Distributing Transaction"] ((("outputs and inputs", "locating and tracking inputs")))Alice's wallet application will first have to find inputs that can pay the amount she wants to send to Bob. Most wallets keep track of all the available outputs belonging to addresses in the wallet. 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-node 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 quickly verify incoming transactions as having correct inputs. However, because a full-node client takes up a lot of disk space, most user wallets run "lightweight" clients that track only the user's own unspent outputs. -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-node using an application programming interface (API) call. <> shows a 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. +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-node using an application programming interface (API) call. <> shows an 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. [[example_2-2]] .Look up all the unspent outputs for Alice's bitcoin address From 2060819feb3bd7c73bf50cf97a714b9ed5e3089e Mon Sep 17 00:00:00 2001 From: Yky Date: Sat, 10 Feb 2018 11:27:24 +0100 Subject: [PATCH 29/45] fixed typos: "an UTXO" -> "a UTXO" --- ch06.asciidoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ch06.asciidoc b/ch06.asciidoc index d015b60c..ba909700 100644 --- a/ch06.asciidoc +++ b/ch06.asciidoc @@ -68,11 +68,11 @@ You may also notice a lot of strange and indecipherable fields and hexadecimal s ((("satoshis")))A transaction output can have an arbitrary (integer) value denominated as a multiple of satoshis. Just like dollars can be divided down to two decimal places as cents, bitcoin can be divided down to eight decimal places as satoshis. Although an output can have any arbitrary value, once created it is indivisible. This is an important characteristic of outputs that needs to be emphasized: outputs are _discrete_ and _indivisible_ units of value, denominated in integer satoshis. An unspent output can only be consumed in its entirety by a transaction. -((("change, making")))If an UTXO is larger than the desired value of a transaction, it must still be consumed in its entirety and change must be generated in the transaction. In other words, if you have a UTXO worth 20 bitcoin and want to pay only 1 bitcoin, your transaction must consume the entire 20-bitcoin UTXO and produce two outputs: one paying 1 bitcoin to your desired recipient and another paying 19 bitcoin in change back to your wallet. As a result of the indivisible nature of transaction outputs, most bitcoin transactions will have to generate change. +((("change, making")))If a UTXO is larger than the desired value of a transaction, it must still be consumed in its entirety and change must be generated in the transaction. In other words, if you have a UTXO worth 20 bitcoin and want to pay only 1 bitcoin, your transaction must consume the entire 20-bitcoin UTXO and produce two outputs: one paying 1 bitcoin to your desired recipient and another paying 19 bitcoin in change back to your wallet. As a result of the indivisible nature of transaction outputs, most bitcoin transactions will have to generate change. Imagine a shopper buying a $1.50 beverage, reaching into her wallet and trying to find a combination of coins and bank notes to cover the $1.50 cost. The shopper will choose exact change if available e.g. a dollar bill and two quarters (a quarter is $0.25), or a combination of smaller denominations (six quarters), or if necessary, a larger unit such as a $5 note. If she hands too much money, say $5, to the shop owner, she will expect $3.50 change, which she will return to her wallet and have available for future transactions. -Similarly, a bitcoin transaction must be created from a user's UTXO in whatever denominations that user has available. Users cannot cut an UTXO in half any more than they can cut a dollar bill in half and use it as currency. The user's wallet application will typically select from the user's available UTXO to compose an amount greater than or equal to the desired transaction amount. +Similarly, a bitcoin transaction must be created from a user's UTXO in whatever denominations that user has available. Users cannot cut a UTXO in half any more than they can cut a dollar bill in half and use it as currency. The user's wallet application will typically select from the user's available UTXO to compose an amount greater than or equal to the desired transaction amount. As with real life, the bitcoin application can use several strategies to satisfy the purchase amount: combining several smaller units, finding exact change, or using a single unit larger than the transaction value and making change. All of this complex assembly of spendable UTXO is done by the user's wallet automatically and is invisible to users. It is only relevant if you are programmatically constructing raw transactions from UTXO. @@ -171,7 +171,7 @@ Here are some hints: To build a transaction, a wallet selects from the UTXO it controls, UTXO with enough value to make the requested payment. Sometimes one UTXO is enough, other times more than one is needed. For each UTXO that will be consumed to make this payment, the wallet creates one input pointing to the UTXO and unlocks it with an unlocking script. -Let's look at the components of an input in greater detail. The first part of an input is a pointer to an UTXO by reference to the transaction hash and an output index, which identifies the specific UTXO in that transaction. The second part is an unlocking script, which the wallet constructs in order to satisfy the spending conditions set in the UTXO. Most often, the unlocking script is a digital signature and public key proving ownership of the bitcoin. However, not all unlocking scripts contain signatures. The third part is a sequence number, which will be discussed later. +Let's look at the components of an input in greater detail. The first part of an input is a pointer to a UTXO by reference to the transaction hash and an output index, which identifies the specific UTXO in that transaction. The second part is an unlocking script, which the wallet constructs in order to satisfy the spending conditions set in the UTXO. Most often, the unlocking script is a digital signature and public key proving ownership of the bitcoin. However, not all unlocking scripts contain signatures. The third part is a sequence number, which will be discussed later. Consider our example in <>. The transaction inputs are an array (list) called +vin+: From 0f226fbc0781151d989e1b5baa80dac83c51ae70 Mon Sep 17 00:00:00 2001 From: Yky Date: Sat, 10 Feb 2018 11:48:22 +0100 Subject: [PATCH 30/45] fixed typto for minrelaytxfee: 0.0001 -> 0.00001 --- ch06.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch06.asciidoc b/ch06.asciidoc index d015b60c..1d2bdfb8 100644 --- a/ch06.asciidoc +++ b/ch06.asciidoc @@ -298,7 +298,7 @@ Transaction fees are calculated based on the size of the transaction in kilobyte Over time, the way transaction fees are calculated and the effect they have on transaction prioritization has evolved. At first, transaction fees were fixed and constant across the network. Gradually, the fee structure relaxed and may be influenced by market forces, based on network capacity and transaction volume. Since at least the beginning of 2016, capacity limits in bitcoin have created competition between transactions, resulting in higher fees and effectively making free transactions a thing of the past. Zero fee or very low fee transactions rarely get mined and sometimes will not even be propagated across the network. -((("fees", "fee relay policies")))((("minrelaytxfee option")))In Bitcoin Core, fee relay policies are set by the +minrelaytxfee+ option. The current default +minrelaytxfee+ is 0.00001 bitcoin or a hundredth of a millibitcoin per kilobyte. Therefore, by default, transactions with a fee less than 0.0001 bitcoin are treated as free and are only relayed if there is space in the mempool; otherwise, they are dropped. Bitcoin nodes can override the default fee relay policy by adjusting the value of +minrelaytxfee+. +((("fees", "fee relay policies")))((("minrelaytxfee option")))In Bitcoin Core, fee relay policies are set by the +minrelaytxfee+ option. The current default +minrelaytxfee+ is 0.00001 bitcoin or a hundredth of a millibitcoin per kilobyte. Therefore, by default, transactions with a fee less than 0.00001 bitcoin are treated as free and are only relayed if there is space in the mempool; otherwise, they are dropped. Bitcoin nodes can override the default fee relay policy by adjusting the value of +minrelaytxfee+. ((("dynamic fees")))((("fees", "dynamic fees")))Any bitcoin service that creates transactions, including wallets, exchanges, retail applications, etc., _must_ implement dynamic fees. Dynamic fees can be implemented through a third-party fee estimation service or with a built-in fee estimation algorithm. If you're unsure, begin with a third-party service and as you gain experience design and implement your own algorithm if you wish to remove the third-party dependency. From 8704220047f5b41c0efefa945b7ec55eb1f4a605 Mon Sep 17 00:00:00 2001 From: Yancy Ribbens Date: Tue, 20 Feb 2018 23:02:07 -0600 Subject: [PATCH 31/45] Unable to compile without providing c++ version flag --- ch04.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch04.asciidoc b/ch04.asciidoc index b0e5561c..448384b7 100644 --- a/ch04.asciidoc +++ b/ch04.asciidoc @@ -521,7 +521,7 @@ The code uses a predefined private key to produce the same bitcoin address every [source,bash] ---- # Compile the addr.cpp code -$ g++ -o addr addr.cpp $(pkg-config --cflags --libs libbitcoin) +$ g++ -o addr addr.cpp -std=c++11 $(pkg-config --cflags --libs libbitcoin) # Run the addr executable $ ./addr Public key: 0202a406624211f2abbdc68da3df929f938c3399dd79fac1b51b0e4ad1d26a47aa From 47f8434774f9e7ec1857cbdc96a92a16898e5b9e Mon Sep 17 00:00:00 2001 From: Lucas Betschart Date: Wed, 21 Feb 2018 18:08:03 +0100 Subject: [PATCH 32/45] Link to https://bitcoin.meetup.com directly --- ch01.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch01.asciidoc b/ch01.asciidoc index 7b98df00..d17a30e4 100644 --- a/ch01.asciidoc +++ b/ch01.asciidoc @@ -150,7 +150,7 @@ Bitcoin transactions are irreversible. Most electronic payment networks such as [role="pagebreak-before"] Here are some methods for getting bitcoin as a new user: -* Find a friend who has bitcoin and buy some from him or her directly. Many bitcoin users start this way. This method is the least complicated. One way to meet people with bitcoin is to attend a local bitcoin meetup listed at https://meetup.com[Meetup.com]. +* Find a friend who has bitcoin and buy some from him or her directly. Many bitcoin users start this way. This method is the least complicated. One way to meet people with bitcoin is to attend a local bitcoin meetup listed at https://bitcoin.meetup.com[Meetup.com]. * Use a classified service such as pass:[localbitcoins.com] to find a seller in your area to buy bitcoin for cash in an in-person transaction. * Earn bitcoin by selling a product or service for bitcoin. If you are a programmer, sell your programming skills. If you're a hairdresser, cut hair for bitcoin. * ((("Coin ATM Radar")))((("ATMs, locating")))Use a bitcoin ATM in your city. A bitcoin ATM is a machine that accepts cash and sends bitcoin to your smartphone bitcoin wallet. Find a bitcoin ATM close to you using an online map from http://coinatmradar.com[Coin ATM Radar]. From 4c98e406b378b3ef7b52ba2610d7dd4a277e996c Mon Sep 17 00:00:00 2001 From: David Huie Date: Wed, 28 Feb 2018 17:40:42 -0800 Subject: [PATCH 33/45] Remove references to colors The printed version of the book is printed in back and white, so referencing the color "blue" does not make sense. --- ch08.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch08.asciidoc b/ch08.asciidoc index 2bc92c58..be19c311 100644 --- a/ch08.asciidoc +++ b/ch08.asciidoc @@ -20,7 +20,7 @@ image::images/mbc2_0801.png["FullNodeReferenceClient_Small"] All nodes include the routing function to participate in the network and might include other functionality. All nodes validate and propagate transactions and blocks, and discover and maintain connections to peers. In the full-node example in <>, the routing function is indicated by an orange circle named "Network Routing Node" or with the letter "N." -((("full-node clients")))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. ((("simple-payment-verification (SPV)")))Some nodes maintain only a subset of the blockchain and verify transactions using a method called _simplified payment verification_, or SPV. ((("lightweight clients")))These nodes are known as SPV nodes or lightweight nodes. In the full-node example in the figure, the full-node blockchain database function is indicated by a blue circle called "Full Blockchain" or the letter "B." In <>, SPV nodes are drawn without the blue circle, showing that they do not have a full copy of the blockchain. +((("full-node clients")))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. ((("simple-payment-verification (SPV)")))Some nodes maintain only a subset of the blockchain and verify transactions using a method called _simplified payment verification_, or SPV. ((("lightweight clients")))These nodes are known as SPV nodes or lightweight nodes. In the full-node example in the figure, the full-node blockchain database function is indicated by a circle called "Full Blockchain" or the letter "B." In <>, SPV nodes are drawn without the "B" circle, showing that they do not have a full copy of the blockchain. ((("bitcoin nodes", "mining nodes")))((("mining and consensus", "mining nodes")))((("Proof-of-Work algorithm")))((("mining and consensus", "Proof-of-Work algorithm")))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 as a black circle called "Miner" or the letter "M." From 7849e2486de6725345bdb90672b2e7c668ea5d33 Mon Sep 17 00:00:00 2001 From: theStack Date: Fri, 2 Mar 2018 17:48:22 -0500 Subject: [PATCH 34/45] fixed annual hashing growth rates for y. 2014-2016 2014: 300 PH / 10 PH = 30 2015: 800 PH / 300 PH = 2.66 2016: 2500 PH / 800 PH = 3.12 (i.e. growth rates were off by a factor of 100) --- ch10.asciidoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ch10.asciidoc b/ch10.asciidoc index e2b50b13..d705a2c6 100644 --- a/ch10.asciidoc +++ b/ch10.asciidoc @@ -834,9 +834,9 @@ The following list shows the total hashing power of the bitcoin network, over th 2011:: 116 GH/sec–9 TH/sec (78× growth) 2012:: 9 TH/sec–23 TH/sec (2.5× growth) 2013:: 23 TH/sec–10 PH/sec (450× growth) -2014:: 10 PH/sec–300 PH/sec (3000× growth) -2015:: 300 PH/sec-800 PH/sec (266× growth) -2016:: 800 PH/sec-2.5 EH/sec (312× growth)) +2014:: 10 PH/sec–300 PH/sec (30× growth) +2015:: 300 PH/sec-800 PH/sec (2.66× growth) +2016:: 800 PH/sec-2.5 EH/sec (3.12× growth)) In the chart in <>, we can see that bitcoin network's hashing power increased over the past two years. As you can see, the competition between miners and the growth of bitcoin has resulted in an exponential increase in the hashing power (total hashes per second across the network). From 4b93722efd3caabfdb260c260176045d956b8eae Mon Sep 17 00:00:00 2001 From: Will Binns Date: Sat, 3 Mar 2018 13:59:26 -0600 Subject: [PATCH 35/45] ch10: Remove extra parenthesis --- ch10.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch10.asciidoc b/ch10.asciidoc index d705a2c6..c4e924d1 100644 --- a/ch10.asciidoc +++ b/ch10.asciidoc @@ -836,7 +836,7 @@ The following list shows the total hashing power of the bitcoin network, over th 2013:: 23 TH/sec–10 PH/sec (450× growth) 2014:: 10 PH/sec–300 PH/sec (30× growth) 2015:: 300 PH/sec-800 PH/sec (2.66× growth) -2016:: 800 PH/sec-2.5 EH/sec (3.12× growth)) +2016:: 800 PH/sec-2.5 EH/sec (3.12× growth) In the chart in <>, we can see that bitcoin network's hashing power increased over the past two years. As you can see, the competition between miners and the growth of bitcoin has resulted in an exponential increase in the hashing power (total hashes per second across the network). From 307694dd59c0793ec360ef09944675cba779da05 Mon Sep 17 00:00:00 2001 From: Will Binns Date: Sat, 3 Mar 2018 14:06:19 -0600 Subject: [PATCH 36/45] preface: Add newest contributors --- preface.asciidoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/preface.asciidoc b/preface.asciidoc index 85d5f2ef..b4c91835 100644 --- a/preface.asciidoc +++ b/preface.asciidoc @@ -184,6 +184,7 @@ Following is a list of notable GitHub contributors, including their GitHub ID in * Craig Dodd (cdodd) * dallyshalla * Darius Kramer (dkrmr) +* David Huie (DavidHuie) * Diego Viola (diegoviola) * Dirk Jäckel (biafra23) * Dimitris Tsapakidis (dimitris-t) @@ -220,6 +221,7 @@ Following is a list of notable GitHub contributors, including their GitHub ID in * Jonathan Cross (jonathancross) * Jorgeminator * Kai Bakker (kaibakker) +* Lucas Betschart (lclc) * Magomed Aliev (30mb1) * Mai-Hsuan Chia (mhchia) * marcofalke @@ -237,6 +239,7 @@ Following is a list of notable GitHub contributors, including their GitHub ID in * Richard Kiss (richardkiss) * Ruben Alexander (hizzvizz) * Sam Ritchie (sritchie) +* Sebastian Falbesoner (theStack) * Sergej Kotliar (ziggamon) * Seiichi Uchida (topecongiro) * Simon de la Rouviere (simondlr) @@ -249,4 +252,5 @@ Following is a list of notable GitHub contributors, including their GitHub ID in * wintercooled * wjx * Wojciech Langiewicz (wlk) +* Yancy Ribbens (yancyribbens) * yurigeorgiev4((("", startref="acknowledge0"))) From 6fdd7e6eb664ffe7e19253306178dba0ad29cb9f Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Mar 2018 14:23:54 -0600 Subject: [PATCH 37/45] add hyphen to double-spending --- glossary.asciidoc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/glossary.asciidoc b/glossary.asciidoc index ffb7bd78..8f5faa4b 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -55,8 +55,8 @@ difficulty retargeting:: difficulty target:: A difficulty at which all the computation in the network will find blocks approximately every 10 minutes. -double spending:: - Double spending is the result of successfully spending some money more than once. Bitcoin protects against double spending by verifying each transaction added to the block chain to ensure that the inputs for the transaction had not previously already been spent. +double-spending:: + Double spending is the result of successfully spending some money more than once. Bitcoin protects against double-spending by verifying each transaction added to the block chain to ensure that the inputs for the transaction had not previously already been spent. ECDSA:: Elliptic Curve Digital Signature Algorithm or ECDSA is a cryptographic algorithm used by Bitcoin to ensure that funds can only be spent by their rightful owners. @@ -195,7 +195,7 @@ satoshi:: A satoshi is the smallest denomination of bitcoin that can be recorded on the blockchain. It is the equivalent of 0.00000001 bitcoin and is named after the creator of Bitcoin, Satoshi Nakamoto. ((("satoshi"))) Satoshi Nakamoto:: - Satoshi Nakamoto is the name used by the person or people who designed Bitcoin and created its original reference implementation, Bitcoin Core. As a part of the implementation, they also devised the first blockchain database. In the process they were the first to solve the double spending problem for digital currency. Their real identity remains unknown. + Satoshi Nakamoto is the name used by the person or people who designed Bitcoin and created its original reference implementation, Bitcoin Core. As a part of the implementation, they also devised the first blockchain database. In the process they were the first to solve the double-spending problem for digital currency. Their real identity remains unknown. Script:: Bitcoin uses a scripting system for transactions. Forth-like, Script is simple, stack-based, and processed from left to right. It is purposefully not Turing-complete, with no loops. @@ -218,7 +218,7 @@ Segregated Witness:: SHA:: The Secure Hash Algorithm or SHA is a family of cryptographic hash functions published by the National Institute of Standards and Technology (NIST). - + simplified payment verification (SPV):: SPV or simplified payment verification is a method for verifying particular transactions were included in a block without downloading the entire block. The method is used by some lightweight Bitcoin clients. @@ -253,4 +253,4 @@ wallet:: Wallet Import Format (WIF):: WIF or Wallet Import Format is a data interchange format designed to allow exporting and importing a single private key with a flag indicating whether or not it uses a compressed public key. -Some contributed definitions have been sourced under a CC-BY license from the https://en.bitcoin.it/wiki/Main_Page[bitcoin Wiki] or from other open source documentation sources. +Some contributed definitions have been sourced under a CC-BY license from the https://en.bitcoin.it/wiki/Main_Page[bitcoin Wiki] or from other open source documentation sources. From 81f6c7e216022308c8007d4d17ae807f8fb2520a Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Mar 2018 14:31:47 -0600 Subject: [PATCH 38/45] methodology -> method #479 --- ch08.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch08.asciidoc b/ch08.asciidoc index be19c311..477a5a3c 100644 --- a/ch08.asciidoc +++ b/ch08.asciidoc @@ -175,7 +175,7 @@ image::images/mbc2_0806.png["InventorySynchronization"] ((("bitcoin network", "SPV nodes", id="BNspvnodes08")))((("bitcoin nodes", "SPV nodes", id="BNospv08")))((("simple-payment-verification (SPV)", id="simple08")))Not all nodes have the ability to store the full blockchain. Many bitcoin clients are designed to run on space- and power-constrained devices, such as smartphones, tablets, or embedded systems. For such devices, a _simplified payment verification_ (SPV) method is used to allow them to operate without storing the full blockchain. These types of clients are called SPV clients or lightweight clients. As bitcoin adoption surges, the SPV node is becoming the most common form of bitcoin node, especially for bitcoin wallets. -SPV nodes download only the block headers and do not download the transactions included in each block. The resulting chain of blocks, without transactions, is 1,000 times smaller than the full blockchain. SPV nodes cannot construct a full picture of all the UTXOs that are available for spending because they do not know about all the transactions on the network. SPV nodes verify transactions using a slightly different methodology that relies on peers to provide partial views of relevant parts of the blockchain on demand. +SPV nodes download only the block headers and do not download the transactions included in each block. The resulting chain of blocks, without transactions, is 1,000 times smaller than the full blockchain. SPV nodes cannot construct a full picture of all the UTXOs that are available for spending because they do not know about all the transactions on the network. SPV nodes verify transactions using a slightly different method that relies on peers to provide partial views of relevant parts of the blockchain on demand. As an analogy, a full node is like a tourist in a strange city, equipped with a detailed map of every street and every address. By comparison, an SPV node is like a tourist in a strange city asking random strangers for turn-by-turn directions while knowing only one main avenue. Although both tourists can verify the existence of a street by visiting it, the tourist without a map doesn't know what lies down any of the side streets and doesn't know what other streets exist. Positioned in front of 23 Church Street, the tourist without a map cannot know if there are a dozen other "23 Church Street" addresses in the city and whether this is the right one. The mapless tourist's best chance is to ask enough people and hope some of them are not trying to mug him. From 177c2e6afefe1c8d0aeb221011d1406ca42aa617 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Mar 2018 14:35:50 -0600 Subject: [PATCH 39/45] 1.158e77 should have been 1.1578e77 #481 --- ch04.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch04.asciidoc b/ch04.asciidoc index 448384b7..01476353 100644 --- a/ch04.asciidoc +++ b/ch04.asciidoc @@ -60,7 +60,7 @@ The bitcoin private key is just a number. You can pick your private keys randoml 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. -More precisely, the private key can be any number between +0+ and +n - 1+ inclusive, 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+. 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 SHA256 hash algorithm, which will conveniently produce a 256-bit number. If the result is less than +n+, we have a suitable private key. Otherwise, we simply try again with another random number. +More precisely, the private key can be any number between +0+ and +n - 1+ inclusive, where n is a constant (n = 1.1578 * 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+. 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 SHA256 hash algorithm, which will conveniently produce a 256-bit number. If the result is less than +n+, we have a suitable private key. Otherwise, we simply try again with another random number. [WARNING] ==== From e06e6fe0607a6cd23a16dbc6044eb84fca92173b Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Mar 2018 14:37:02 -0600 Subject: [PATCH 40/45] septa -> zeta #484 --- ch10.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch10.asciidoc b/ch10.asciidoc index c4e924d1..b39879ad 100644 --- a/ch10.asciidoc +++ b/ch10.asciidoc @@ -596,7 +596,7 @@ At the time of writing, the network is attempting to find a block whose header h 0000000000000000029AB9000000000000000000000000000000000000000000 ---- -As you can see, there are a lot of zeros at the beginning of that target, meaning that the acceptable range of hashes is much smaller, hence it's more difficult to find a valid hash. It will take on average more than 1.8 septa-hashes (thousand billion billion hashes) per second for the network to discover the next block. That seems like an impossible task, but fortunately the network is bringing 3 exa-hashes per second (EH/sec) of processing power to bear, which will be able to find a block in about 10 minutes on average.((("", startref="Cproof10")))((("", startref="proof10"))) +As you can see, there are a lot of zeros at the beginning of that target, meaning that the acceptable range of hashes is much smaller, hence it's more difficult to find a valid hash. It will take on average more than 1.8 zeta-hashes (thousand billion billion hashes) per second for the network to discover the next block. That seems like an impossible task, but fortunately the network is bringing 3 exa-hashes per second (EH/sec) of processing power to bear, which will be able to find a block in about 10 minutes on average.((("", startref="Cproof10")))((("", startref="proof10"))) [[target_bits]] ==== Target Representation From 3cff67296a5db403e46dcf1e9c7e38159ac5bc97 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Mar 2018 14:41:13 -0600 Subject: [PATCH 41/45] include link for current disk size requirements and update GB number #467 #386 --- ch03.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch03.asciidoc b/ch03.asciidoc index 8ebedc52..91d4142a 100644 --- a/ch03.asciidoc +++ b/ch03.asciidoc @@ -222,7 +222,7 @@ $ which bitcoin-cli ((("Bitcoin Core", "running core nodes", id="BCnode03")))((("bitcoin nodes", "running core nodes", id="BNcore03")))Bitcoin's peer-to-peer network is composed of network "nodes," run mostly by volunteers and some of the businesses that build bitcoin applications. Those running bitcoin nodes have a direct and authoritative view of the bitcoin blockchain, with a local copy of all the transactions, independently validated by their own system. By running a node, you don't have to rely on any third party to validate a transaction. Moreover, by running a bitcoin node you contribute to the bitcoin network by making it more robust. -Running a node, however, requires a permanently connected system with enough resources to process all bitcoin transactions. Depending on whether you choose to index all transactions and keep a full copy of the blockchain, you may also need a lot of disk space and RAM. As of late 2016, a full-index node needs 2 GB of RAM and 125 GB of disk space so that it has room to grow. Bitcoin nodes also transmit and receive bitcoin transactions and blocks, consuming internet bandwidth. If your internet connection is limited, has a low data cap, or is metered (charged by the gigabit), you should probably not run a bitcoin node on it, or run it in a way that constrains its bandwidth (see <>). +Running a node, however, requires a permanently connected system with enough resources to process all bitcoin transactions. Depending on whether you choose to index all transactions and keep a full copy of the blockchain, you may also need a lot of disk space and RAM. As of early 2018, a full-index node needs 2 GB of RAM and a minimum of 160 GB of disk space (see https://blockchain.info/charts/blocks-size). Bitcoin nodes also transmit and receive bitcoin transactions and blocks, consuming internet bandwidth. If your internet connection is limited, has a low data cap, or is metered (charged by the gigabit), you should probably not run a bitcoin node on it, or run it in a way that constrains its bandwidth (see <>). [TIP] ==== From 751fc89bcac30095fb7025ed7d228c217cef788f Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Mar 2018 14:45:30 -0600 Subject: [PATCH 42/45] remove second definition of SPV, fix grammer #494 --- glossary.asciidoc | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/glossary.asciidoc b/glossary.asciidoc index 8f5faa4b..8a9dbaee 100644 --- a/glossary.asciidoc +++ b/glossary.asciidoc @@ -219,18 +219,15 @@ Segregated Witness:: SHA:: The Secure Hash Algorithm or SHA is a family of cryptographic hash functions published by the National Institute of Standards and Technology (NIST). -simplified payment verification (SPV):: +Simplified Payment Verification (SPV):: SPV or simplified payment verification is a method for verifying particular transactions were included in a block without downloading the entire block. The method is used by some lightweight Bitcoin clients. soft fork:: soft fork or Soft-Forking Change is a temporary fork in the blockchain which commonly occurs when miners using non-upgraded nodes don't follow a new consensus rule their nodes don’t know about. Not to be confused with fork, hard fork, software fork or Git fork. -SPV (aka Simplified Payment Verification):: - SPV or Simplified Payment Verification is a method for verifying particular transactions were included in a block without downloading the entire block. The method is used by some lightweight Bitcoin clients. - Stale Block:: - Block which were successfully mined but which isn’t included on the current best block chain, likely because some other block at the same height had its chain extended first. Not to be confused with orphan block. + Block which was successfully mined but which isn’t included on the current best block chain, likely because some other block at the same height had its chain extended first. Not to be confused with orphan block. timelocks:: A timelock is a type of encumbrance that restricts the spending of some bitcoin until a specified future time or block height. Timelocks feature prominently in many Bitcoin contracts, including payment channels and hashed timelock contracts. From 5a641364765d78bf85d83e8dc4c9234ae0eed868 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Mar 2018 14:54:30 -0600 Subject: [PATCH 43/45] fixed incorrect amounts in Joe->Alice Tx #508 --- images/mbc2_0204.png | Bin 133933 -> 143848 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/mbc2_0204.png b/images/mbc2_0204.png index 075627d0bb0a6737abd831c6fd31ff4acae8c0ae..797c7342d587f7edf8fd47831cd9e200ca427319 100644 GIT binary patch literal 143848 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⪼|}hD`+5y0z3u!{wv}(mS*DQr@bX&td1Y^fQVH`} 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 uEF>o1ZiYS85MeahH(EHA4hlP&f5#s2_+2HXVz literal 133933 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

JGR;*xzYlEziik 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 From 8ae3c056fb257111bda8883d9d204e8476f9870c Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Mar 2018 15:00:05 -0600 Subject: [PATCH 44/45] Removed all references to blockexplorer.com, as they are trying to push Bitcoin Cash propaganda with a modal window. Confusing for newbies and inappropriate for a textbook. GTFO #511 --- ch02.asciidoc | 3 +-- ch09.asciidoc | 3 --- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index 71014b30..9156e06c 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -18,7 +18,6 @@ image::images/mbc2_0201.png["Bitcoin Overview"] ((("Bitcoin Block Explorer")))((("BlockCypher Explorer")))((("blockchain.info")))((("BitPay Insight")))Popular blockchain explorers include: -* https://blockexplorer.com[Bitcoin Block Explorer] * https://live.blockcypher.com[BlockCypher Explorer] * https://blockchain.info[blockchain.info] * https://insight.bitpay.com[BitPay Insight] @@ -258,7 +257,7 @@ Transactions are added to the new block, prioritized by the highest-fee transact ((("candidate blocks")))((("blocks", "candidate blocks")))Alice's transaction was picked up by the network and included in the pool of unverified transactions. Once validated by the mining software it was included in a new block, called a _candidate block_, generated by Jing's mining pool. All the miners participating in that mining pool immediately start computing Proof-of-Work for the candidate block. Approximately five minutes after the transaction was first transmitted by Alice's wallet, one of Jing's ASIC miners found a solution for the candidate block and announced it to the network. Once other miners validated the winning block they started the race to generate the next block. -Jing's winning block became part of the blockchain as block #277316, containing 419 transactions, including Alice's transaction. The block containing Alice's transaction is counted as one "confirmation" of that transaction. +Jing's winning block became part of the blockchain as block #277316, containing 419 transactions, including Alice's transaction. The block containing Alice's transaction is counted as one "confirmation" of that transaction. [TIP] ==== diff --git a/ch09.asciidoc b/ch09.asciidoc index c134f5a3..aac23390 100644 --- a/ch09.asciidoc +++ b/ch09.asciidoc @@ -84,11 +84,8 @@ You can search for that block hash in any block explorer website, such as _block https://blockchain.info/block/000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f -https://blockexplorer.com/block/000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f - Using the Bitcoin Core reference client on the command line: - ---- $ bitcoin-cli getblock 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f ---- From 6ebc56febd0ef4dbf93edfb261fb28c3a8579fc7 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Sat, 3 Mar 2018 15:00:37 -0600 Subject: [PATCH 45/45] Removed all references to blockexplorer.com, as they are trying to push Bitcoin Cash propaganda with a modal window. Confusing for newbies and inappropriate for a textbook. GTFO #511 --- ch02.asciidoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index 9156e06c..43e4bdff 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -82,10 +82,10 @@ In the following sections, we will examine this transaction in more detail. We'l You can examine Alice's transaction to Bob's Cafe on the blockchain using a block explorer site (<>): [[view_alice_transaction]] -.View Alice's transaction on https://blockexplorer.com/tx/0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2[blockexplorer.com] +.View Alice's transaction on https://blockchain.info/tx/0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2[blockchain.info] ==== ---- -https://blockexplorer.com/tx/0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2 +https://blockchain.info/tx/0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2 ---- ====