From 531f6c4dae6fda46c53d57d621f575c94c78b817 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Mon, 25 Oct 2021 23:10:48 +0200 Subject: [PATCH 1/4] Moved text from github contribs to preface, to aid translation efforts --- github_contrib.asciidoc | 8 -------- preface.asciidoc | 7 ++++++- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/github_contrib.asciidoc b/github_contrib.asciidoc index ae8447d6..a920d15f 100644 --- a/github_contrib.asciidoc +++ b/github_contrib.asciidoc @@ -1,10 +1,3 @@ -[[github_contrib]] -==== Early Release Draft (GitHub Contributions) - -Many contributors offered comments, corrections, and additions to the early-release draft on GitHub. Thank you all for your contributions to this book. - -The following is a list of notable GitHub contributors: - * Abdussamad Abdurrazzaq (AbdussamadA) * Adán SDPC (aesedepece) * Akira Chiku (achiku) @@ -193,4 +186,3 @@ The following is a list of notable GitHub contributors: * yurigeorgiev4 * Zheng Jia (zhengjia) * Zhou Liang (zhouguoguo)((("", startref="acknowledge0"))) - diff --git a/preface.asciidoc b/preface.asciidoc index 8fb17cdb..226aa602 100644 --- a/preface.asciidoc +++ b/preface.asciidoc @@ -162,9 +162,14 @@ I owe my love of words and books to my mother, Theresa, who raised me in a house Thank you all for supporting me throughout this journey. +[[github_contrib]] +==== Early Release Draft (GitHub Contributions) + +Many contributors offered comments, corrections, and additions to the early-release draft on GitHub. Thank you all for your contributions to this book. + +The following is a list of notable GitHub contributors: //// Github contributor acknowledgments in a new file... //// - include::github_contrib.asciidoc[] From a3229bbbc0c929dc53ec11365051a6782695cb52 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Mon, 25 Oct 2021 23:51:17 +0200 Subject: [PATCH 2/4] bitcoin/Bitcoin capitalization changed everywhere --- appdx-bips.asciidoc | 2 +- appdx-bitcore.asciidoc | 2 +- ch01.asciidoc | 95 +++++++++++++++--------------- ch02.asciidoc | 48 +++++++-------- ch03.asciidoc | 24 ++++---- ch04.asciidoc | 76 ++++++++++++------------ ch05.asciidoc | 24 ++++---- ch06.asciidoc | 50 ++++++++-------- ch07.asciidoc | 40 ++++++------- ch08.asciidoc | 68 ++++++++++----------- ch09.asciidoc | 14 ++--- ch10.asciidoc | 70 +++++++++++----------- ch11.asciidoc | 6 +- ch12.asciidoc | 28 ++++----- code/key-to-address-ecc-example.py | 4 +- code/pay-to-addr-script.go | 2 +- code/websocket-example.go | 2 +- glossary.asciidoc | 18 +++--- praise.html | 2 +- preface.asciidoc | 6 +- second_edition_changes.asciidoc | 2 +- 21 files changed, 293 insertions(+), 290 deletions(-) diff --git a/appdx-bips.asciidoc b/appdx-bips.asciidoc index 719feedc..c6021c97 100644 --- a/appdx-bips.asciidoc +++ b/appdx-bips.asciidoc @@ -8,7 +8,7 @@ As per BIP-01 _BIP Purpose and Guidelines_, there are three kinds of BIPs: _Standard_ BIP:: Describes any change that affects most or all bitcoin implementations, such as a change to the network protocol, a change in block or transaction validity rules, or any change or addition that affects the interoperability of applications using bitcoin. _Informational_ BIP:: Describes a bitcoin design issue, or provides general guidelines or information to the bitcoin community, but does not propose a new feature. Informational BIPs do not necessarily represent a bitcoin community consensus or recommendation, so users and implementors may ignore informational BIPs or follow their advice. -_Process_ BIP:: Describes a bitcoin process, or proposes a change to (or an event in) a process. Process BIPs are like standard BIPs but apply to areas other than the bitcoin protocol itself. They might propose an implementation, but not to bitcoin's codebase; they often require community consensus; and unlike informational BIPs, they are more than recommendations, and users are typically not free to ignore them. Examples include procedures, guidelines, changes to the decision-making process, and changes to the tools or environment used in bitcoin development. Any meta-BIP is also considered a process BIP. +_Process_ BIP:: Describes a bitcoin process, or proposes a change to (or an event in) a process. Process BIPs are like standard BIPs but apply to areas other than the Bitcoin protocol itself. They might propose an implementation, but not to bitcoin's codebase; they often require community consensus; and unlike informational BIPs, they are more than recommendations, and users are typically not free to ignore them. Examples include procedures, guidelines, changes to the decision-making process, and changes to the tools or environment used in bitcoin development. Any meta-BIP is also considered a process BIP. ((("bitcoin improvement proposals", "repository of")))BIPs are recorded in a versioned repository on GitHub: https://github.com/bitcoin/bips[https://github.com/bitcoin/bips]. <> shows a snapshot of the BIPs in April 2017. Consult the authoritative repository for up-to-date information on existing BIPs and their contents.((("bitcoin improvement proposals", "snapshot of", id="BIPsnap15"))) diff --git a/appdx-bitcore.asciidoc b/appdx-bitcore.asciidoc index 4eee0688..238556be 100644 --- a/appdx-bitcore.asciidoc +++ b/appdx-bitcore.asciidoc @@ -35,7 +35,7 @@ $ npm install -g bitcore-lib bitcore-p2p ==== Wallet Examples using bitcore-lib -Creating a new bitcoin address with associated private key: +Creating a new Bitcoin address with associated private key: ---- > bitcore = require('bitcore-lib') diff --git a/ch01.asciidoc b/ch01.asciidoc index 8289e0f1..e569cb68 100644 --- a/ch01.asciidoc +++ b/ch01.asciidoc @@ -4,26 +4,31 @@ === What Is Bitcoin? -((("bitcoin", "defined", id="GSdefine01")))Bitcoin is a collection of concepts and technologies that form the basis of a digital money ecosystem. Units of currency called bitcoin are used to store and transmit value among participants in the bitcoin network. Bitcoin users communicate with each other using the bitcoin protocol primarily via the internet, although other transport networks can also be used. The bitcoin protocol stack, available as open source software, can be run on a wide range of computing devices, including laptops and smartphones, making the technology easily accessible. +((("bitcoin", "defined", id="GSdefine01")))Bitcoin is a collection of concepts and technologies that form the basis of a digital money ecosystem. Units of currency called bitcoin are used to store and transmit value among participants in the Bitcoin network. Bitcoin users communicate with each other using the Bitcoin protocol primarily via the internet, although other transport networks can also be used. The Bitcoin protocol stack, available as open source software, can be run on a wide range of computing devices, including laptops and smartphones, making the technology easily accessible. + +[TIP] +==== +Notice how the unit of currency is called "bitcoin" with a small _b_, and the system is called "Bitcoin", with a capital _B_. +==== Users can transfer bitcoin over the network to do just about anything that can be done with conventional currencies, including buying and selling goods, sending money to people or organizations, or extending credit. Bitcoin can be purchased, sold, and exchanged for other currencies at specialized currency exchanges. Bitcoin in a sense is the perfect form of money for the internet because it is fast, secure, and borderless. -Unlike traditional currencies, bitcoin is entirely virtual. There are no physical coins or even digital coins per se. The coins are implied in transactions that transfer value from sender to recipient. Users of bitcoin own keys that allow them to prove ownership of bitcoin in the bitcoin network. With these keys, they can sign transactions to unlock the value and spend it by transferring it to a new owner. Keys are often stored in a digital wallet on each user’s computer or smartphone. Possession of the key that can sign a transaction is the only prerequisite to spending bitcoin, putting the control entirely in the hands of each user. +Unlike traditional currencies, bitcoin is entirely virtual. There are no physical coins or even digital coins per se. The coins are implied in transactions that transfer value from sender to recipient. Users of Bitcoin own keys that allow them to prove ownership of bitcoin in the Bitcoin network. With these keys, they can sign transactions to unlock the value and spend it by transferring it to a new owner. Keys are often stored in a digital wallet on each user’s computer or smartphone. Possession of the key that can sign a transaction is the only prerequisite to spending bitcoin, putting the control entirely in the hands of each user. -Bitcoin is a distributed, peer-to-peer system. As such, there is no "central" server or point of control. Bitcoins, i.e. units of bitcoin, are created through a process called "mining," which involves competing to find solutions to a mathematical problem while processing bitcoin transactions. Any participant in the bitcoin network (i.e., anyone using a device running the full bitcoin protocol stack) may operate as a miner, using their computer's processing power to verify and record transactions. Every 10 minutes, on average, a bitcoin miner can validate the transactions of the past 10 minutes and is rewarded with brand new bitcoin. Essentially, bitcoin mining decentralizes the currency-issuance and clearing functions of a central bank and replaces the need for any central bank. +Bitcoin is a distributed, peer-to-peer system. As such, there is no "central" server or point of control. Bitcoins, i.e. units of bitcoin, are created through a process called "mining," which involves competing to find solutions to a mathematical problem while processing Bitcoin transactions. Any participant in the Bitcoin network (i.e., anyone using a device running the full Bitcoin protocol stack) may operate as a miner, using their computer's processing power to verify and record transactions. Every 10 minutes, on average, a Bitcoin miner can validate the transactions of the past 10 minutes and is rewarded with brand new bitcoin. Essentially, Bitcoin mining decentralizes the currency-issuance and clearing functions of a central bank and replaces the need for any central bank. -The bitcoin protocol includes built-in algorithms that regulate the mining function across the network. The difficulty of the processing task that miners must perform is adjusted dynamically so that, on average, someone succeeds every 10 minutes regardless of how many miners (and how much processing) are competing at any moment. The protocol also halves the rate at which new bitcoin is created every 4 years, and limits the total number of bitcoin that will be created to a fixed total just below 21 million coins. The result is that the number of bitcoin in circulation closely follows an easily predictable curve that approaches 21 million by the year 2140. Due to bitcoin's diminishing rate of issuance, over the long term, the bitcoin currency is deflationary. Furthermore, bitcoin cannot be inflated by "printing" new money above and beyond the expected issuance rate. +The Bitcoin protocol includes built-in algorithms that regulate the mining function across the network. The difficulty of the processing task that miners must perform is adjusted dynamically so that, on average, someone succeeds every 10 minutes regardless of how many miners (and how much processing) are competing at any moment. The protocol also halves the rate at which new bitcoin is created every 4 years, and limits the total number of bitcoin that will be created to a fixed total just below 21 million coins. The result is that the number of bitcoin in circulation closely follows an easily predictable curve that approaches 21 million by the year 2140. Due to bitcoin's diminishing rate of issuance, over the long term, the Bitcoin currency is deflationary. Furthermore, bitcoin cannot be inflated by "printing" new money above and beyond the expected issuance rate. -Behind the scenes, bitcoin is also the name of the protocol, a peer-to-peer network, and a distributed computing innovation. The bitcoin currency is really only the first application of this invention. Bitcoin represents the culmination of decades of research in cryptography and distributed systems and includes four key innovations brought together in a unique and powerful combination. Bitcoin consists of: +Behind the scenes, Bitcoin is also the name of the protocol, a peer-to-peer network, and a distributed computing innovation. The bitcoin currency is really only the first application of this invention. Bitcoin represents the culmination of decades of research in cryptography and distributed systems and includes four key innovations brought together in a unique and powerful combination. Bitcoin consists of: -* A decentralized peer-to-peer network (the bitcoin protocol) +* A decentralized peer-to-peer network (the Bitcoin protocol) * A public transaction ledger (the blockchain) * ((("mining and consensus", "consensus rules", "satisfying")))A set of rules for independent transaction validation and currency issuance (consensus rules) * A mechanism for reaching global decentralized consensus on the valid blockchain (Proof-of-Work algorithm) -As a developer, I see bitcoin as akin to the internet of money, a network for propagating value and securing the ownership of digital assets via distributed computation. There's a lot more to bitcoin than first meets the eye. +As a developer, I see Bitcoin as akin to the internet of money, a network for propagating value and securing the ownership of digital assets via distributed computation. There's a lot more to Bitcoin than first meets the eye. -In this chapter we'll get started by explaining some of the main concepts and terms, getting the necessary software, and using bitcoin for simple transactions. In the following chapters, we'll start unwrapping the layers of technology that make bitcoin possible and examine the inner workings of the bitcoin network and protocol.((("", startref="GSdefine01"))) +In this chapter we'll get started by explaining some of the main concepts and terms, getting the necessary software, and using Bitcoin for simple transactions. In the following chapters, we'll start unwrapping the layers of technology that make Bitcoin possible and examine the inner workings of the Bitcoin network and protocol.((("", startref="GSdefine01"))) [role="pagebreak-before less_space"] .Digital Currencies Before Bitcoin @@ -47,9 +52,9 @@ When cryptography started becoming more broadly available and understood in the ((("Nakamoto, Satoshi")))((("distributed computing")))((("bitcoin", "history of")))Bitcoin was invented in 2008 with the publication of a paper titled "Bitcoin: A Peer-to-Peer Electronic Cash System,"footnote:["Bitcoin: A Peer-to-Peer Electronic Cash System," Satoshi Nakamoto (https://bitcoin.org/bitcoin.pdf).] written under the alias of Satoshi Nakamoto (see <>). Nakamoto combined several prior inventions such as b-money and HashCash to create a completely decentralized electronic cash system that does not rely on a central authority for currency issuance or settlement and validation of transactions. ((("Proof-of-Work algorithm")))((("decentralized systems", "consensus in")))((("mining and consensus", "Proof-of-Work algorithm")))The key innovation was to use a distributed computation system (called a "Proof-of-Work" algorithm) to conduct a global "election" every 10 minutes, allowing the decentralized network to arrive at _consensus_ about the state of transactions. ((("double-spend problem")))((("spending bitcoin", "double-spend problem")))This elegantly solves the issue of double-spend where a single currency unit can be spent twice. Previously, the double-spend problem was a weakness of digital currency and was addressed by clearing all transactions through a central clearinghouse. -The bitcoin network started in 2009, based on a reference implementation published by Nakamoto and since revised by many other programmers. The implementation of the Proof-of-Work algorithm (mining) that provides security and resilience for bitcoin has increased in power exponentially, and now exceeds the combined processing power of the world's top supercomputers. Bitcoin's total market value has at times exceeded $1 trillion US dollars, depending on the bitcoin-to-dollar exchange rate. The largest transaction processed so far by the network was $1.1 billion US dollars, transmitted instantly and processed for a fee of only $0.68. +The Bitcoin network started in 2009, based on a reference implementation published by Nakamoto and since revised by many other programmers. The implementation of the Proof-of-Work algorithm (mining) that provides security and resilience for Bitcoin has increased in power exponentially, and now exceeds the combined processing power of the world's top supercomputers. Bitcoin's total market value has at times exceeded $1 trillion US dollars, depending on the bitcoin-to-dollar exchange rate. The largest transaction processed so far by the network was $1.1 billion US dollars, transmitted instantly and processed for a fee of only $0.68. -Satoshi Nakamoto withdrew from the public in April 2011, leaving the responsibility of developing the code and network to a thriving group of volunteers. The identity of the person or people behind bitcoin is still unknown. ((("open source licenses")))However, neither Satoshi Nakamoto nor anyone else exerts individual control over the bitcoin system, which operates based on fully transparent mathematical principles, open source code, and consensus among participants. The invention itself is groundbreaking and has already spawned new science in the fields of distributed computing, economics, and econometrics. +Satoshi Nakamoto withdrew from the public in April 2011, leaving the responsibility of developing the code and network to a thriving group of volunteers. The identity of the person or people behind Bitcoin is still unknown. ((("open source licenses")))However, neither Satoshi Nakamoto nor anyone else exerts individual control over the Bitcoin system, which operates based on fully transparent mathematical principles, open source code, and consensus among participants. The invention itself is groundbreaking and has already spawned new science in the fields of distributed computing, economics, and econometrics. .A Solution to a Distributed Computing Problem @@ -61,73 +66,71 @@ Satoshi Nakamoto withdrew from the public in April 2011, leaving the responsibil [[user-stories]] === Bitcoin Uses, Users, and Their Stories -((("bitcoin", "use cases", id="GSuses01")))Bitcoin is an innovation in the ancient technology of money. At its core, money simply facilitates the exchange of value between people. Therefore, in order to fully understand bitcoin and its uses, we'll examine it from the perspective of people using it. Each of the people and their stories, as listed here, illustrates one or more specific use cases. We'll be seeing them throughout the book: +((("bitcoin", "use cases", id="GSuses01")))Bitcoin is an innovation in the ancient technology of money. At its core, money simply facilitates the exchange of value between people. Therefore, in order to fully understand Bitcoin and its uses, we'll examine it from the perspective of people using it. Each of the people and their stories, as listed here, illustrates one or more specific use cases. We'll be seeing them throughout the book: North American low-value retail:: -((("use cases", "retail sales")))Alice lives in Northern California's Bay Area. She has heard about bitcoin from her techie friends and wants to start using it. We will follow her story as she learns about bitcoin, acquires some, and then spends some of her bitcoin to buy a cup of coffee at Bob's Cafe in Palo Alto. This story will introduce us to the software, the exchanges, and basic transactions from the perspective of a retail consumer. +((("use cases", "retail sales")))Alice lives in Northern California's Bay Area. She has heard about Bitcoin from her techie friends and wants to start using it. We will follow her story as she learns about Bitcoin, acquires some, and then spends some of her bitcoin to buy a cup of coffee at Bob's Cafe in Palo Alto. This story will introduce us to the software, the exchanges, and basic transactions from the perspective of a retail consumer. North American high-value retail:: -Carol is an art gallery owner in San Francisco. She sells expensive paintings for bitcoin. This story will introduce the risks of a "51%" consensus attack for retailers of high-value items. +Carol is an art gallery owner in San Francisco. She sells expensive paintings for Bitcoin. This story will introduce the risks of a "51%" consensus attack for retailers of high-value items. Offshore contract services:: -((("offshore contract services")))((("use cases", "offshore contract services")))Bob, the cafe owner in Palo Alto, is building a new website. He has contracted with an Indian web developer, Gopesh, who lives in Bangalore, India. Gopesh has agreed to be paid in bitcoin. This story will examine the use of bitcoin for outsourcing, contract services, and international wire transfers. +((("offshore contract services")))((("use cases", "offshore contract services")))Bob, the cafe owner in Palo Alto, is building a new website. He has contracted with an Indian web developer, Gopesh, who lives in Bangalore, India. Gopesh has agreed to be paid in bitcoin. This story will examine the use of Bitcoin for outsourcing, contract services, and international wire transfers. Web store:: -((("use cases", "web store")))Gabriel is an enterprising young teenager in Rio de Janeiro, running a small web store that sells bitcoin-branded t-shirts, coffee mugs, and stickers. Gabriel is too young to have a bank account, but his parents are encouraging his entrepreneurial spirit. +((("use cases", "web store")))Gabriel is an enterprising young teenager in Rio de Janeiro, running a small web store that sells Bitcoin-branded t-shirts, coffee mugs, and stickers. Gabriel is too young to have a bank account, but his parents are encouraging his entrepreneurial spirit. Charitable donations:: -((("charitable donations")))((("use cases", "charitable donations")))Eugenia is the director of a children's charity in the Philippines. Recently she has discovered bitcoin and wants to use it to reach a whole new group of foreign and domestic donors to fundraise for her charity. She's also investigating ways to use bitcoin to distribute funds quickly to areas of need. This story will show the use of bitcoin for global fundraising across currencies and borders and the use of an open ledger for transparency in charitable organizations. +((("charitable donations")))((("use cases", "charitable donations")))Eugenia is the director of a children's charity in the Philippines. Recently she has discovered Bitcoin and wants to use it to reach a whole new group of foreign and domestic donors to fundraise for her charity. She's also investigating ways to use Bitcoin to distribute funds quickly to areas of need. This story will show the use of Bitcoin for global fundraising across currencies and borders and the use of an open ledger for transparency in charitable organizations. Import/export:: -((("use cases", "import/export")))Mohammed is an electronics importer in Dubai. He's trying to use bitcoin to buy electronics from the United States and China for import into the UAE to accelerate the process of payments for imports. This story will show how bitcoin can be used for large business-to-business international payments tied to physical goods. +((("use cases", "import/export")))Mohammed is an electronics importer in Dubai. He's trying to use Bitcoin to buy electronics from the United States and China for import into the UAE to accelerate the process of payments for imports. This story will show how Bitcoin can be used for large business-to-business international payments tied to physical goods. Mining for bitcoin:: -((("use cases", "mining for bitcoin")))Jing is a computer engineering student in Shanghai. He has built a "mining" rig to mine for bitcoin using his engineering skills to supplement his income. This story will examine the "industrial" base of bitcoin: the specialized equipment used to secure the bitcoin network and issue new currency. +((("use cases", "mining for bitcoin")))Jing is a computer engineering student in Shanghai. He has built a "mining" rig to mine for bitcoin using his engineering skills to supplement his income. This story will examine the "industrial" base of Bitcoin: the specialized equipment used to secure the Bitcoin network and issue new currency. -Each of these stories is based on the real people and real industries currently using bitcoin to create new markets, new industries, and innovative solutions to global economic issues.((("", startref="GSuses01"))) +Each of these stories is based on the real people and real industries currently using Bitcoin to create new markets, new industries, and innovative solutions to global economic issues.((("", startref="GSuses01"))) === Getting Started -((("getting started", "wallet selection", id="GSwallet01")))((("wallets", "selecting", id="Wselect01")))((("bitcoin", "getting started", id="BCbasic01")))Bitcoin is a protocol that can be accessed using a client application that speaks the protocol. A "bitcoin wallet" is the most common user interface to the bitcoin system, just like a web browser is the most common user interface for the HTTP protocol. There are many implementations and brands of bitcoin wallets, just like there are many brands of web browsers (e.g., Chrome, Safari, Firefox, and Internet Explorer). And just like we all have our favorite browsers (Mozilla Firefox, Yay!) and our villains (Internet Explorer, Yuck!), bitcoin wallets vary in quality, performance, security, privacy, and reliability. There is also a reference implementation of the bitcoin protocol that includes a wallet, known as the "Satoshi Client" or "Bitcoin Core," which is derived from the original implementation written by Satoshi Nakamoto. +((("getting started", "wallet selection", id="GSwallet01")))((("wallets", "selecting", id="Wselect01")))((("bitcoin", "getting started", id="BCbasic01")))Bitcoin is a protocol that can be accessed using a client application that speaks the protocol. A "Bitcoin wallet" is the most common user interface to the Bitcoin system, just like a web browser is the most common user interface for the HTTP protocol. There are many implementations and brands of Bitcoin wallets, just like there are many brands of web browsers (e.g., Chrome, Safari, Firefox, and Internet Explorer). And just like we all have our favorite browsers (Mozilla Firefox, Yay!) and our villains (Internet Explorer, Yuck!), Bitcoin wallets vary in quality, performance, security, privacy, and reliability. There is also a reference implementation of the Bitcoin protocol that includes a wallet, known as the "Satoshi Client" or "Bitcoin Core," which is derived from the original implementation written by Satoshi Nakamoto. ==== Choosing a Bitcoin Wallet -((("security", "wallet selection")))Bitcoin wallets are one of the most actively developed applications in the bitcoin ecosystem. There is intense competition, and while a new wallet is probably being developed right now, several wallets from last year are no longer actively maintained. Many wallets focus on specific platforms or specific uses and some are more suitable for beginners while others are filled with features for advanced users. Choosing a wallet is highly subjective and depends on the use and user expertise. Therefore it would be pointless to recommend a specific brand or wallet. However, we can categorize bitcoin wallets according to their platform and function and provide some clarity about all the different types of wallets that exist. Better yet, moving keys or seeds between bitcoin wallets is relatively easy, so it is worth trying out several different wallets until you find one that fits your needs. +((("security", "wallet selection")))Bitcoin wallets are one of the most actively developed applications in the Bitcoin ecosystem. There is intense competition, and while a new wallet is probably being developed right now, several wallets from last year are no longer actively maintained. Many wallets focus on specific platforms or specific uses and some are more suitable for beginners while others are filled with features for advanced users. Choosing a wallet is highly subjective and depends on the use and user expertise. Therefore it would be pointless to recommend a specific brand or wallet. However, we can categorize Bitcoin wallets according to their platform and function and provide some clarity about all the different types of wallets that exist. Better yet, moving keys or seeds between Bitcoin wallets is relatively easy, so it is worth trying out several different wallets until you find one that fits your needs. [role="pagebreak-before"] Bitcoin wallets can be categorized as follows, according to the platform: -Desktop wallet:: A desktop wallet was the first type of bitcoin wallet created as a reference implementation and many users run desktop wallets for the features, autonomy, and control they offer. Running on general-use operating systems such as Windows and Mac OS has certain security disadvantages, however, as these platforms are often insecure and poorly configured. - -Mobile wallet:: A mobile wallet is the most common type of bitcoin wallet. Running on smart-phone operating systems such as Apple iOS and Android, these wallets are often a great choice for new users. Many are designed for simplicity and ease-of-use, but there are also fully featured mobile wallets for power users. +Desktop wallet:: A desktop wallet was the first type of Bitcoin wallet created as a reference implementation and many users run desktop wallets for the features, autonomy, and control they offer. Running on general-use operating systems such as Windows and Mac OS has certain security disadvantages, however, as these platforms are often insecure and poorly configured. -Web wallet:: Web wallets are accessed through a web browser and store the user's wallet on a server owned by a third party. This is similar to webmail in that it relies entirely on a third-party server. Some of these services operate using client-side code running in the user's browser, which keeps control of the bitcoin keys in the hands of the user. Most, however, present a compromise by taking control of the bitcoin keys from users in exchange for ease-of-use. It is inadvisable to store large amounts of bitcoin on third-party systems. +Mobile wallet:: A mobile wallet is the most common type of Bitcoin wallet. Running on smart-phone operating systems such as Apple iOS and Android, these wallets are often a great choice for new users. Many are designed for simplicity and ease-of-use, but there are also fully featured mobile wallets for power users. -Hardware wallet:: Hardware wallets are devices that operate a secure self-contained bitcoin wallet on special-purpose hardware. They usually connect to a desktop or mobile device via USB cable or near-field-communication (NFC), and are operated with a web browser or accompanying software. By handling all bitcoin-related operations on the specialized hardware, these wallets are considered very secure and suitable for storing large amounts of bitcoin. +Web wallet:: Web wallets are accessed through a web browser and store the user's wallet on a server owned by a third party. This is similar to webmail in that it relies entirely on a third-party server. Some of these services operate using client-side code running in the user's browser, which keeps control of the Bitcoin keys in the hands of the user. Most, however, present a compromise by taking control of the Bitcoin keys from users in exchange for ease-of-use. It is inadvisable to store large amounts of bitcoin on third-party systems. -Paper wallet:: ((("cold storage", seealso="storage")))((("storage", "cold storage")))The keys controlling bitcoin can also be printed for long-term storage. These are known as paper wallets even though other materials (wood, metal, etc.) can be used. Paper wallets offer a low-tech but highly secure means of storing bitcoin long term. Offline storage is also often referred to as _cold storage_. +Hardware wallet:: Hardware wallets are devices that operate a secure self-contained Bitcoin wallet on special-purpose hardware. They usually connect to a desktop or mobile device via USB cable or near-field-communication (NFC), and are operated with a web browser or accompanying software. By handling all Bitcoin-related operations on the specialized hardware, these wallets are considered very secure and suitable for storing large amounts of bitcoin. -Another way to categorize bitcoin wallets is by their degree of autonomy and how they interact with the bitcoin network: +Another way to categorize bitcoin wallets is by their degree of autonomy and how they interact with the Bitcoin network: -Full-node client:: ((("full-node clients")))A full client, or "full node," is a client that stores the entire history of bitcoin transactions (every transaction by every user, ever), manages users' wallets, and can initiate transactions directly on the bitcoin network. A full node handles all aspects of the protocol and can independently validate the entire blockchain and any transaction. A full-node client consumes substantial computer resources (e.g., more than 125 GB of disk, 2 GB of RAM) but offers complete autonomy and independent transaction verification. +Full-node client:: ((("full-node clients")))A full client, or "full node," is a client that stores the entire history of Bitcoin transactions (every transaction by every user, ever), manages users' wallets, and can initiate transactions directly on the Bitcoin network. A full node handles all aspects of the protocol and can independently validate the entire blockchain and any transaction. A full-node client consumes substantial computer resources (e.g., more than 125 GB of disk, 2 GB of RAM) but offers complete autonomy and independent transaction verification. -Lightweight client:: ((("lightweight clients")))((("simplified-payment-verification (SPV)")))A lightweight client, also known as a simplified-payment-verification (SPV) client, connects to bitcoin full nodes (mentioned previously) for access to the bitcoin transaction information, but stores the user wallet locally and independently creates, validates, and transmits transactions. Lightweight clients interact directly with the bitcoin network, without an intermediary. +Lightweight client:: ((("lightweight clients")))((("simplified-payment-verification (SPV)")))A lightweight client, also known as a simplified-payment-verification (SPV) client, connects to Bitcoin full nodes (mentioned previously) for access to the Bitcoin transaction information, but stores the user wallet locally and independently creates, validates, and transmits transactions. Lightweight clients interact directly with the Bitcoin network, without an intermediary. -Third-party API client:: ((("third-party API clients")))A third-party API client is one that interacts with bitcoin through a third-party system of application programming interfaces (APIs), rather than by connecting to the bitcoin network directly. The wallet may be stored by the user or by third-party servers, but all transactions go through a third party. +Third-party API client:: ((("third-party API clients")))A third-party API client is one that interacts with Bitcoin through a third-party system of application programming interfaces (APIs), rather than by connecting to the Bitcoin network directly. The wallet may be stored by the user or by third-party servers, but all transactions go through a third party. -Combining these categorizations, many bitcoin wallets fall into a few groups, with the three most common being desktop full client, mobile lightweight wallet, and web third-party wallet. The lines between different categories are often blurry, as many wallets run on multiple platforms and can interact with the network in different ways. +Combining these categorizations, many Bitcoin wallets fall into a few groups, with the three most common being desktop full client, mobile lightweight wallet, and web third-party wallet. The lines between different categories are often blurry, as many wallets run on multiple platforms and can interact with the network in different ways. -For the purposes of this book, we will be demonstrating the use of a variety of downloadable bitcoin clients, from the reference implementation (Bitcoin Core) to mobile and web wallets. Some of the examples will require the use of Bitcoin Core, which, in addition to being a full client, also exposes APIs to the wallet, network, and transaction services. If you are planning to explore the programmatic interfaces into the bitcoin system, you will need to run Bitcoin Core, or one of the alternative clients.((("", startref="GSwallet01")))((("", startref="Wselect01"))) +For the purposes of this book, we will be demonstrating the use of a variety of downloadable Bitcoin clients, from the reference implementation (Bitcoin Core) to mobile and web wallets. Some of the examples will require the use of Bitcoin Core, which, in addition to being a full client, also exposes APIs to the wallet, network, and transaction services. If you are planning to explore the programmatic interfaces into the Bitcoin system, you will need to run Bitcoin Core, or one of the alternative clients.((("", startref="GSwallet01")))((("", startref="Wselect01"))) ==== Quick Start -((("getting started", "quick start example", id="GSquick01")))((("wallets", "quick start example", id="Wquick01")))((("use cases", "buying coffee", id="aliceone")))Alice, who we introduced in <>, is not a technical user and only recently heard about bitcoin from her friend Joe. While at a party, Joe is once again enthusiastically explaining bitcoin to all around him and is offering a demonstration. Intrigued, Alice asks how she can get started with bitcoin. Joe says that a mobile wallet is best for new users and he recommends a few of his favorite wallets. Alice downloads "Bluewallet" (available for iOS and Android) and installs it on her phone. +((("getting started", "quick start example", id="GSquick01")))((("wallets", "quick start example", id="Wquick01")))((("use cases", "buying coffee", id="aliceone")))Alice, who we introduced in <>, is not a technical user and only recently heard about Bitcoin from her friend Joe. While at a party, Joe is once again enthusiastically explaining Bitcoin to all around him and is offering a demonstration. Intrigued, Alice asks how she can get started with Bitcoin. Joe says that a mobile wallet is best for new users and he recommends a few of his favorite wallets. Alice downloads "Bluewallet" (available for iOS and Android) and installs it on her phone. When Alice runs her wallet application for the first time, she chooses the option to create a new Bitcoin wallet, and takes a moment **away from Joe and all other parties** to write down a secret mnemonic phrase _in order_ on a piece of paper. As explained by the mobile wallet and by Joe earlier, the mnemonic phrase allows Alice to restore her wallet in case she loses her mobile device and grants her access to her funds on another device. After creating her wallet and securing her mnemonic phrase, Alice can tap on her wallet to see her bitcoin amount, transaction history, as well as two buttons that allow her to either _receive_ or _send_ bitcoin, shown in <>. ==== Mnemonic Words -A modern bitcoin wallet will provide a _mnemonic phrase_ (also sometimes called a "seed" or "seed phrase") for Alice to back up. The mnemonic phrase consists of 12-24 English words, selected randomly by the software, and used as the basis for the keys that are generated by the wallet. The mnemonic phrase can be used by Alice to restore all the transactions and funds in her wallet in the case of an event such as a lost mobile device, a software bug, or memory corruption. +A modern Bitcoin wallet will provide a _mnemonic phrase_ (also sometimes called a "seed" or "seed phrase") for Alice to back up. The mnemonic phrase consists of 12-24 English words, selected randomly by the software, and used as the basis for the keys that are generated by the wallet. The mnemonic phrase can be used by Alice to restore all the transactions and funds in her wallet in the case of an event such as a lost mobile device, a software bug, or memory corruption. [TIP] ==== @@ -147,18 +150,18 @@ Never attempt a "DIY" security scheme that deviates in any way from the best pra ==== **** [[bluewallet-welcome]] -.Alice uses the Receive screen on her Bluewallet mobile bitcoin wallet, and displays her address to Bob in a QR code format +.Alice uses the Receive screen on her Bluewallet mobile Bitcoin wallet, and displays her address to Bob in a QR code format image::images/mbc2_0101.png["BluewalletWelcome"] ((("addresses", "bitcoin wallet quick start example")))((("QR codes", "bitcoin wallet quick start example")))((("addresses", see="also keys and addresses"))) The main wallet view displays the bitcoin amount, transaction history, and _Receive_ and _Send_ buttons. In addition, many wallets feature the ability to purchase Bitcoin directly through an exchange or similar service where you can offer fiat money in return for cryptocurrency, which is done by <> and selling to the wallet user at or above this price. The _Buy Bitcoin_ button would allow Alice to purchase Bitcoin in this fashion. -Alice is now ready to start using her new bitcoin wallet. ((("", startref="GSquick01")))((("", startref="Wquick01"))) Her wallet application randomly generated a private key (described in more detail in <>) which will be used to derive bitcoin addresses that direct to her wallet. At this point, her bitcoin addresses are not known to the bitcoin network or "registered" with any part of the bitcoin system. Her bitcoin addresses are simply random numbers that correspond to her private key that she can use to control access to the funds. The addresses are generated independently by her wallet without reference or registration with any service. In fact, in most wallets, there is no association between a bitcoin address and any externally identifiable information including the user's identity. Until the moment an address is referenced as the recipient of value in a transaction posted on the bitcoin ledger, the bitcoin address is simply part of the vast number of possible addresses that are valid in bitcoin. Only once an address has been associated with a transaction does it become part of the known addresses in the network. +Alice is now ready to start using her new bitcoin wallet. ((("", startref="GSquick01")))((("", startref="Wquick01"))) Her wallet application randomly generated a private key (described in more detail in <>) which will be used to derive Bitcoin addresses that direct to her wallet. At this point, her Bitcoin addresses are not known to the Bitcoin network or "registered" with any part of the Bitcoin system. Her Bitcoin addresses are simply random numbers that correspond to her private key that she can use to control access to the funds. The addresses are generated independently by her wallet without reference or registration with any service. In fact, in most wallets, there is no association between a Bitcoin address and any externally identifiable information including the user's identity. Until the moment an address is referenced as the recipient of value in a transaction posted on the bitcoin ledger, the Bitcoin address is simply part of the vast number of possible addresses that are valid in bitcoin. Only once an address has been associated with a transaction does it become part of the known addresses in the network. -Alice uses the _Receive_ button, which displays a QR code along with a bitcoin address. The QR code is the square with a pattern of black and white dots, serving as a form of barcode that contains the same information in a format that can be scanned by Joe's smartphone camera. Next to the wallet's QR code is the bitcoin address it encodes, and Alice may choose to manually send her address to Joe by copying it onto her clipboard with a tap. Of note, when receiving funds to a new mobile wallet for the first time, many wallets will often re-verify that you have indeed secured your mnemonic phrase. This can range from a simple prompt to requiring the user to manually re-enter the phrase. +Alice uses the _Receive_ button, which displays a QR code along with a Bitcoin address. The QR code is the square with a pattern of black and white dots, serving as a form of barcode that contains the same information in a format that can be scanned by Joe's smartphone camera. Next to the wallet's QR code is the Bitcoin address it encodes, and Alice may choose to manually send her address to Joe by copying it onto her clipboard with a tap. Of note, when receiving funds to a new mobile wallet for the first time, many wallets will often re-verify that you have indeed secured your mnemonic phrase. This can range from a simple prompt to requiring the user to manually re-enter the phrase. [TIP] ==== -((("addresses", "security of")))((("security", "bitcoin addresses")))Bitcoin addresses start with 1, 3, or bc1. Like email addresses, they can be shared with other bitcoin users who can use them to send bitcoin directly to your wallet. There is nothing sensitive, from a security perspective, about the bitcoin address. It can be posted anywhere without risking the security of the account. Unlike email addresses, you can create new addresses as often as you like, all of which will direct funds to your wallet. In fact, many modern wallets automatically create a new address for every transaction to maximize privacy. A wallet is simply a collection of addresses and the keys that unlock the funds within. +((("addresses", "security of")))((("security", "Bitcoin addresses")))Bitcoin addresses start with 1, 3, or bc1. Like email addresses, they can be shared with other bitcoin users who can use them to send bitcoin directly to your wallet. There is nothing sensitive, from a security perspective, about the Bitcoin address. It can be posted anywhere without risking the security of the account. Unlike email addresses, you can create new addresses as often as you like, all of which will direct funds to your wallet. In fact, many modern wallets automatically create a new address for every transaction to maximize privacy. A wallet is simply a collection of addresses and the keys that unlock the funds within. ==== @@ -177,7 +180,7 @@ All of these methods have varying degrees of difficulty, and many will involve p [TIP] ==== -((("privacy, maintaining")))((("security", "maintaining privacy")))((("digital currencies", "currency exchanges")))((("currency exchanges")))((("digital currencies", "benefits of bitcoin")))((("bitcoin", "benefits of")))One of the advantages of bitcoin over other payment systems is that, when used correctly, it affords users much more privacy. Acquiring, holding, and spending bitcoin does not require you to divulge sensitive and personally identifiable information to third parties. However, where bitcoin touches traditional systems, such as currency exchanges, national and international regulations often apply. In order to exchange bitcoin for your national currency, you will often be required to provide proof of identity and banking information. Users should be aware that once a bitcoin address is attached to an identity, all associated bitcoin transactions are also easy to identify and track. This is one reason many users choose to maintain dedicated exchange accounts unlinked to their wallets. +((("privacy, maintaining")))((("security", "maintaining privacy")))((("digital currencies", "currency exchanges")))((("currency exchanges")))((("digital currencies", "benefits of bitcoin")))((("bitcoin", "benefits of")))One of the advantages of bitcoin over other payment systems is that, when used correctly, it affords users much more privacy. Acquiring, holding, and spending bitcoin does not require you to divulge sensitive and personally identifiable information to third parties. However, where bitcoin touches traditional systems, such as currency exchanges, national and international regulations often apply. In order to exchange bitcoin for your national currency, you will often be required to provide proof of identity and banking information. Users should be aware that once a Bitcoin address is attached to an identity, all associated bitcoin transactions are also easy to identify and track. This is one reason many users choose to maintain dedicated exchange accounts unlinked to their wallets. ==== Alice was introduced to bitcoin by a friend so she has an easy way to acquire her first bitcoin. Next, we will look at how she buys bitcoin from her friend Joe and how Joe sends the bitcoin to her wallet. @@ -200,18 +203,18 @@ In addition to these various sites and applications, most bitcoin wallets will a [[sending_receiving]] ==== Sending and Receiving Bitcoin -((("getting started", "sending and receiving bitcoin", id="GSsend01")))((("spending bitcoin", "bitcoin wallet quick start example")))((("spending bitcoin", see="also transactions")))Alice has decided to exchange $10 US dollars for bitcoin, so as not to risk too much money on this new technology. She gives Joe $10 in cash, opens her Bluewallet mobile wallet application, and selects Receive. This displays a QR code with Alice's first bitcoin address. +((("getting started", "sending and receiving bitcoin", id="GSsend01")))((("spending bitcoin", "bitcoin wallet quick start example")))((("spending bitcoin", see="also transactions")))Alice has decided to exchange $10 US dollars for bitcoin, so as not to risk too much money on this new technology. She gives Joe $10 in cash, opens her Bluewallet mobile wallet application, and selects Receive. This displays a QR code with Alice's first Bitcoin address. Joe then selects Send on his Bluewallet smartphone wallet and is presented with a screen containing the following inputs: * The amount to send, in bitcoin (BTC) or his local currency (USD) -* A destination bitcoin address +* A destination Bitcoin address * A transaction note (description) * A transaction fee -In the input field for the bitcoin address, there is a small _Scan_ button. This allows Joe to scan the QR code with his smartphone camera so that he doesn't have to type in Alice's bitcoin address, which is quite long and difficult to type. Joe taps the _Scan_ button and it activates the smartphone camera, scanning the QR code displayed on Alice's smartphone. +In the input field for the Bitcoin address, there is a small _Scan_ button. This allows Joe to scan the QR code with his smartphone camera so that he doesn't have to type in Alice's Bitcoin address, which is quite long and difficult to type. Joe taps the _Scan_ button and it activates the smartphone camera, scanning the QR code displayed on Alice's smartphone. -Joe now has Alice's bitcoin address set as the recipient. Joe enters the amount as $10 US dollars and his wallet converts it by accessing the most recent exchange rate from an online service. The exchange rate at the time is $100 US dollars per bitcoin, so $10 US dollars is worth 0.10 bitcoin (BTC), or 100 millibitcoin (mBTC) as shown in the screenshot from Joe's wallet (see <>). +Joe now has Alice's Bitcoin address set as the recipient. Joe enters the amount as $10 US dollars and his wallet converts it by accessing the most recent exchange rate from an online service. The exchange rate at the time is $100 US dollars per bitcoin, so $10 US dollars is worth 0.10 bitcoin (BTC), or 100 millibitcoin (mBTC) as shown in the screenshot from Joe's wallet (see <>). In the transaction note/description input, Joe enters "Alice". He can use this field to add some information regarding his transaction for future reference. This function is for his record keeping only. The transaction note will be stored in his wallet and only Joe will be able to see it. It will not be sent to Alice, nor stored on the blockchain. @@ -227,9 +230,9 @@ The price of bitcoin has changed a lot over time, and an incredible amount since .Bluewallet mobile bitcoin wallet send screen image::images/mbc2_0102.png["bluewallet mobile send screen"] -Using Bluewallet, Joe carefully checks to make sure he has entered the correct amount, because he is about to transmit money and mistakes are irreversible. For simplicity sake, we will assume that Joe does not pay any transaction fees. The purpose and setting of transaction fees are covered in subsequent chapters. After double-checking the address and amount, he presses _Send_ to transmit the transaction. Joe's mobile bitcoin wallet constructs a transaction that assigns 0.10 BTC to the address provided by Alice, sourcing the funds from Joe's wallet and signing the transaction with Joe's private keys. This tells the bitcoin network that Joe has authorized a transfer of value to Alice's new address. As the transaction is transmitted via the peer-to-peer protocol, it quickly propagates across the bitcoin network. In less than a second, most of the well-connected nodes in the network receive the transaction and see Alice's address for the first time. +Using Bluewallet, Joe carefully checks to make sure he has entered the correct amount, because he is about to transmit money and mistakes are irreversible. For simplicity sake, we will assume that Joe does not pay any transaction fees. The purpose and setting of transaction fees are covered in subsequent chapters. After double-checking the address and amount, he presses _Send_ to transmit the transaction. Joe's mobile bitcoin wallet constructs a transaction that assigns 0.10 BTC to the address provided by Alice, sourcing the funds from Joe's wallet and signing the transaction with Joe's private keys. This tells the Bitcoin network that Joe has authorized a transfer of value to Alice's new address. As the transaction is transmitted via the peer-to-peer protocol, it quickly propagates across the Bitcoin network. In less than a second, most of the well-connected nodes in the network receive the transaction and see Alice's address for the first time. -Meanwhile, Alice's wallet is constantly "listening" to published transactions on the bitcoin network, looking for any that match the addresses it contains. A few seconds after Joe's wallet transmits the transaction, Alice's wallet will indicate that it is receiving 0.10 BTC. +Meanwhile, Alice's wallet is constantly "listening" to published transactions on the Bitcoin network, looking for any that match the addresses it contains. A few seconds after Joe's wallet transmits the transaction, Alice's wallet will indicate that it is receiving 0.10 BTC. [TIP] ==== diff --git a/ch02.asciidoc b/ch02.asciidoc index 9080b092..1b14f1d4 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -3,14 +3,14 @@ === 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. +((("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. [[bitcoin-overview]] .Bitcoin overview @@ -23,7 +23,7 @@ image::images/mbc2_0201.png["Bitcoin Overview"] * https://insight.bitpay.com[BitPay Insight] * https://blockstream.info[Blockstream Explorer] -Each of these has a search function that can take a bitcoin address, transaction hash, block number, or block hash and retrieve corresponding information from the bitcoin network. With each transaction or block example, we will provide a URL so you can look it up yourself and study it in detail. +Each of these has a search function that can take a Bitcoin address, transaction hash, block number, or block hash and retrieve corresponding information from the Bitcoin network. With each transaction or block example, we will provide a URL so you can look it up yourself and study it in detail. [[cup_of_coffee]] @@ -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]] @@ -65,7 +65,7 @@ message=Purchase%20at%20Bob%27s%20Cafe Components of the URL -A bitcoin address: "1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQA" +A Bitcoin address: "1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQA" The payment amount: "0.015" A label for the recipient address: "Bob's Cafe" A description for the payment: "Purchase at Bob's Cafe" @@ -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 (<>): @@ -98,7 +98,7 @@ https://www.blockchain.com/btc/tx/0627052b6f28912f2703066a912ea577f2ce4da4caa5a5 ((("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. +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 @@ -106,7 +106,7 @@ image::images/mbc2_0203.png["Transaction Double-Entry"] ==== Transaction Chains -((("chain of transactions")))Alice's payment to Bob's Cafe uses a previous transaction's output as its input. In the previous chapter, Alice received bitcoin from her friend Joe in return for cash. That transaction created a bitcoin value locked by Alice's key. Her new transaction to Bob's Cafe references the previous transaction as an input and creates new outputs to pay for the cup of coffee and receive change. The transactions form a chain, where the inputs from the latest transaction correspond to outputs from previous transactions. Alice's key provides the signature that unlocks those previous transaction outputs, thereby proving to the bitcoin network that she owns the funds. She attaches the payment for coffee to Bob's address, thereby "encumbering" that output with the requirement that Bob produces a signature in order to spend that amount. This represents a transfer of value between Alice and Bob. This chain of transactions, from Joe to Alice to Bob, is illustrated in <>. +((("chain of transactions")))Alice's payment to Bob's Cafe uses a previous transaction's output as its input. In the previous chapter, Alice received bitcoin from her friend Joe in return for cash. That transaction created a bitcoin value locked by Alice's key. Her new transaction to Bob's Cafe references the previous transaction as an input and creates new outputs to pay for the cup of coffee and receive change. The transactions form a chain, where the inputs from the latest transaction correspond to outputs from previous transactions. Alice's key provides the signature that unlocks those previous transaction outputs, thereby proving to the Bitcoin network that she owns the funds. She attaches the payment for coffee to Bob's address, thereby "encumbering" that output with the requirement that Bob produces a signature in order to spend that amount. This represents a transfer of value between Alice and Bob. This chain of transactions, from Joe to Alice to Bob, is illustrated in <>. [[blockchain-mnemonic]] .A chain of transactions, where the output of one transaction is the input of the next transaction @@ -118,7 +118,7 @@ image::images/mbc2_0204.png["Transaction chain"] 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. -((("transactions", "defined")))((("outputs and inputs", "defined")))((("inputs", see="outputs and inputs")))In summary, _transactions_ move value from _transaction inputs_ to _transaction outputs_. An input is a reference to a previous transaction's output, showing where the value is coming from. A transaction usually includes an output that directs a specific value to a new owner's bitcoin address and a change output back to the original owner. Outputs from one transaction can be used as inputs in a new transaction, thus creating a chain of ownership as the value is moved from owner to owner (see <>). +((("transactions", "defined")))((("outputs and inputs", "defined")))((("inputs", see="outputs and inputs")))In summary, _transactions_ move value from _transaction inputs_ to _transaction outputs_. An input is a reference to a previous transaction's output, showing where the value is coming from. A transaction usually includes an output that directs a specific value to a new owner's Bitcoin address and a change output back to the original owner. Outputs from one transaction can be used as inputs in a new transaction, thus creating a chain of ownership as the value is moved from owner to owner (see <>). ==== Common Transaction Forms @@ -142,16 +142,16 @@ image::images/mbc2_0207.png["Distributing Transaction"] === Constructing a Transaction -((("transactions", "constructing", id="Tconstruct02")))((("wallets", "constructing transactions")))Alice's wallet application contains all the logic for selecting appropriate inputs and outputs to build a transaction to Alice's specification. Alice only needs to specify a destination and an amount, and the rest happens in the wallet application without her seeing the details. Importantly, a wallet application can construct transactions even if it is completely offline. Like writing a check at home and later sending it to the bank in an envelope, the transaction does not need to be constructed and signed while connected to the bitcoin network. +((("transactions", "constructing", id="Tconstruct02")))((("wallets", "constructing transactions")))Alice's wallet application contains all the logic for selecting appropriate inputs and outputs to build a transaction to Alice's specification. Alice only needs to specify a destination and an amount, and the rest happens in the wallet application without her seeing the details. Importantly, a wallet application can construct transactions even if it is completely offline. Like writing a check at home and later sending it to the bank in an envelope, the transaction does not need to be constructed and signed while connected to the Bitcoin network. ==== 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. -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. +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 +.Look up all the unspent outputs for Alice's Bitcoin address ==== [source,bash] ---- @@ -213,15 +213,15 @@ View the https://www.blockchain.com/btc/tx/0627052b6f28912f2703066a912ea577f2ce4 ==== Adding the Transaction to the Ledger -The transaction created by Alice's wallet application is 258 bytes long and contains everything necessary to confirm ownership of the funds and assign new owners. Now, the transaction must be transmitted to the bitcoin network where it will become part of the blockchain. In the next section we will see how a transaction becomes part of a new block and how the block is "mined." Finally, we will see how the new block, once added to the blockchain, is increasingly trusted by the network as more blocks are added. +The transaction created by Alice's wallet application is 258 bytes long and contains everything necessary to confirm ownership of the funds and assign new owners. Now, the transaction must be transmitted to the Bitcoin network where it will become part of the blockchain. In the next section we will see how a transaction becomes part of a new block and how the block is "mined." Finally, we will see how the new block, once added to the blockchain, is increasingly trusted by the network as more blocks are added. ===== Transmitting the transaction -((("propagation", "process of")))Because the transaction contains all the information necessary to process, it does not matter how or where it is transmitted to the bitcoin network. The bitcoin network is a peer-to-peer network, with each bitcoin client participating by connecting to several other bitcoin clients. The purpose of the bitcoin network is to propagate transactions and blocks to all participants. +((("propagation", "process of")))Because the transaction contains all the information necessary to process, it does not matter how or where it is transmitted to the Bitcoin network. The Bitcoin network is a peer-to-peer network, with each Bitcoin client participating by connecting to several other Bitcoin clients. The purpose of the Bitcoin network is to propagate transactions and blocks to all participants. ===== How it propagates -((("bitcoin nodes", "defined")))((("nodes", see="bitcoin nodes")))Any system, such as a server, desktop application, or wallet, that participates in the bitcoin network by "speaking" the bitcoin protocol is called a _bitcoin node_. Alice's wallet application can send the new transaction to any bitcoin node it is connected to over any type of connection: wired, WiFi, mobile, etc. Her bitcoin wallet does not have to be connected to Bob's bitcoin wallet directly and she does not have to use the internet connection offered by the cafe, though both those options are possible, too. ((("propagation", "flooding technique")))((("flooding technique")))Any bitcoin node that receives a valid transaction it has not seen before will immediately forward it to all other nodes to which it is connected, a propagation technique known as _flooding_. Thus, the transaction rapidly propagates out across the peer-to-peer network, reaching a large percentage of the nodes within a few seconds. +((("Bitcoin nodes", "defined")))((("nodes", see="Bitcoin nodes")))Any system, such as a server, desktop application, or wallet, that participates in the Bitcoin network by "speaking" the Bitcoin protocol is called a _Bitcoin node_. Alice's wallet application can send the new transaction to any Bitcoin node it is connected to over any type of connection: wired, WiFi, mobile, etc. Her bitcoin wallet does not have to be connected to Bob's bitcoin wallet directly and she does not have to use the internet connection offered by the cafe, though both those options are possible, too. ((("propagation", "flooding technique")))((("flooding technique")))Any Bitcoin node that receives a valid transaction it has not seen before will immediately forward it to all other nodes to which it is connected, a propagation technique known as _flooding_. Thus, the transaction rapidly propagates out across the peer-to-peer network, reaching a large percentage of the nodes within a few seconds. ===== Bob's view @@ -234,9 +234,9 @@ 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: +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: * ((("mining and consensus", "consensus rules", "security provided by")))((("consensus", see="mining and consensus")))Mining nodes validate all transactions by reference to bitcoin's _consensus rules_. Therefore, mining provides security for bitcoin transactions by rejecting invalid or malformed transactions. * Mining creates new bitcoin in each block, almost like a central bank printing new money. The amount of bitcoin created per block is limited and diminishes with time, following a fixed issuance schedule. @@ -246,15 +246,15 @@ Mining achieves a fine balance between cost and reward. Mining uses electricity A good way to describe mining is like a giant competitive game of sudoku that resets every time someone finds a solution and whose difficulty automatically adjusts so that it takes approximately 10 minutes to find a solution. Imagine a giant sudoku puzzle, several thousand rows and columns in size. If I show you a completed puzzle you can verify it quite quickly. However, if the puzzle has a few squares filled and the rest are empty, it takes a lot of work to solve! The difficulty of the sudoku can be adjusted by changing its size (more or fewer rows and columns), but it can still be verified quite easily even if it is very large. The "puzzle" used in bitcoin is based on a cryptographic hash and exhibits similar characteristics: it is asymmetrically hard to solve but easy to verify, and its difficulty can be adjusted. -((("mining and consensus", "mining farms and pools")))In <>, we introduced ((("use cases", "mining for bitcoin")))Jing, an entrepreneur in Shanghai. Jing runs a _mining farm_, which is a business that runs thousands of specialized mining computers, competing for the reward. Every 10 minutes or so, Jing's mining computers compete against thousands of similar systems in a global race to find a solution to a block of transactions. ((("Proof-of-Work algorithm")))((("mining and consensus", "Proof-of-Work algorithm")))Finding such a solution, the so-called _Proof-of-Work_ (PoW), requires quadrillions of hashing operations per second across the entire bitcoin network. The algorithm for Proof-of-Work involves repeatedly hashing the header of the block and a random number with the SHA256 cryptographic algorithm until a solution matching a predetermined pattern emerges. The first miner to find such a solution wins the round of competition and publishes that block into the blockchain. +((("mining and consensus", "mining farms and pools")))In <>, we introduced ((("use cases", "mining for bitcoin")))Jing, an entrepreneur in Shanghai. Jing runs a _mining farm_, which is a business that runs thousands of specialized mining computers, competing for the reward. Every 10 minutes or so, Jing's mining computers compete against thousands of similar systems in a global race to find a solution to a block of transactions. ((("Proof-of-Work algorithm")))((("mining and consensus", "Proof-of-Work algorithm")))Finding such a solution, the so-called _Proof-of-Work_ (PoW), requires quadrillions of hashing operations per second across the entire Bitcoin network. The algorithm for Proof-of-Work involves repeatedly hashing the header of the block and a random number with the SHA256 cryptographic algorithm until a solution matching a predetermined pattern emerges. The first miner to find such a solution wins the round of competition and publishes that block into the blockchain. -Jing started mining in 2010 using a very fast desktop computer to find a suitable Proof-of-Work for new blocks. As more miners started joining the bitcoin network, the difficulty of the problem increased rapidly. Soon, Jing and other miners upgraded to more specialized hardware, with high-end dedicated graphical processing units (GPUs), often used in gaming desktops or consoles. At the time of this writing, the difficulty is so high that it is profitable only to mine with ((("application-specific integrated circuits (ASIC)")))application-specific integrated circuits (ASIC), essentially hundreds of mining algorithms printed in hardware, running in parallel on a single silicon chip. ((("mining pools", "defined")))Jing's company also participates in a _mining pool_, which much like a lottery pool allows several participants to share their efforts and rewards. Jing's company now runs a warehouse containing thousands of ASIC miners to mine for bitcoin 24 hours a day. The company pays its electricity costs by selling the bitcoin it is able to generate from mining, creating some income from the profits. +Jing started mining in 2010 using a very fast desktop computer to find a suitable Proof-of-Work for new blocks. As more miners started joining the Bitcoin network, the difficulty of the problem increased rapidly. Soon, Jing and other miners upgraded to more specialized hardware, with high-end dedicated graphical processing units (GPUs), often used in gaming desktops or consoles. At the time of this writing, the difficulty is so high that it is profitable only to mine with ((("application-specific integrated circuits (ASIC)")))application-specific integrated circuits (ASIC), essentially hundreds of mining algorithms printed in hardware, running in parallel on a single silicon chip. ((("mining pools", "defined")))Jing's company also participates in a _mining pool_, which much like a lottery pool allows several participants to share their efforts and rewards. Jing's company now runs a warehouse containing thousands of ASIC miners to mine for bitcoin 24 hours a day. The company pays its electricity costs by selling the bitcoin it is able to generate from mining, creating some income from the profits. === Mining Transactions in Blocks -((("blocks", "mining transactions in")))New transactions are constantly flowing into the network from user wallets and other applications. As these are seen by the bitcoin network nodes, they get added to a temporary pool of unverified transactions maintained by each node. As miners construct a new block, they add unverified transactions from this pool to the new block and then attempt to prove the validity of that new block, with the mining algorithm (Proof-of-Work). The process of mining is explained in detail in <>. +((("blocks", "mining transactions in")))New transactions are constantly flowing into the network from user wallets and other applications. As these are seen by the Bitcoin network nodes, they get added to a temporary pool of unverified transactions maintained by each node. As miners construct a new block, they add unverified transactions from this pool to the new block and then attempt to prove the validity of that new block, with the mining algorithm (Proof-of-Work). The process of mining is explained in detail in <>. -Transactions are added to the new block, prioritized by the highest-fee transactions first and a few other criteria. Each miner starts the process of mining a new block of transactions as soon as they receive the previous block from the network, knowing they have lost that previous round of competition. They immediately create a new block, fill it with transactions and the fingerprint of the previous block, and start calculating the Proof-of-Work for the new block. Each miner includes a special transaction in their block, one that pays their own bitcoin address the block reward (currently 6.25 newly created bitcoin) plus the sum of transaction fees from all the transactions included in the block. If they find a solution that makes that block valid, they "win" this reward because their successful block is added to the global blockchain and the reward transaction they included becomes spendable. ((("mining pools", "operation of")))Jing, who participates in a mining pool, has set up his software to create new blocks that assign the reward to a pool address. From there, a share of the reward is distributed to Jing and other miners in proportion to the amount of work they contributed in the last round. +Transactions are added to the new block, prioritized by the highest-fee transactions first and a few other criteria. Each miner starts the process of mining a new block of transactions as soon as they receive the previous block from the network, knowing they have lost that previous round of competition. They immediately create a new block, fill it with transactions and the fingerprint of the previous block, and start calculating the Proof-of-Work for the new block. Each miner includes a special transaction in their block, one that pays their own Bitcoin address the block reward (currently 6.25 newly created bitcoin) plus the sum of transaction fees from all the transactions included in the block. If they find a solution that makes that block valid, they "win" this reward because their successful block is added to the global blockchain and the reward transaction they included becomes spendable. ((("mining pools", "operation of")))Jing, who participates in a mining pool, has set up his software to create new blocks that assign the reward to a pool address. From there, a share of the reward is distributed to Jing and other miners in proportion to the amount of work they contributed in the last round. ((("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. @@ -275,7 +275,7 @@ image::images/mbc2_0209.png["Alice's transaction included in a block"] === Spending the Transaction -((("spending bitcoin", "simplified-payment-verification (SPV)")))((("simplified-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. +((("spending bitcoin", "simplified-payment-verification (SPV)")))((("simplified-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 <>. @@ -285,4 +285,4 @@ As Bob spends the payments received from Alice and other customers, he extends t .Alice's transaction as part of a transaction chain from Joe to Gopesh, where the output of one transaction is spent as the input of the next transaction image::images/mbc2_0210.png["Alice's transaction as part of a transaction chain"] -In this chapter, we saw how transactions build a chain that moves value from owner to owner. We also tracked Alice's transaction, from the moment it was created in her wallet, through the bitcoin network and to the miners who recorded it on the blockchain. In the rest of this book, we will examine the specific technologies behind wallets, addresses, signatures, transactions, the network, and finally mining.((("", startref="BCover02")))((("", startref="DCSover02"))) ((("", startref="UCcoffee02"))) +In this chapter, we saw how transactions build a chain that moves value from owner to owner. We also tracked Alice's transaction, from the moment it was created in her wallet, through the Bitcoin network and to the miners who recorded it on the blockchain. In the rest of this book, we will examine the specific technologies behind wallets, addresses, signatures, transactions, the network, and finally mining.((("", startref="BCover02")))((("", startref="DCSover02"))) ((("", startref="UCcoffee02"))) diff --git a/ch03.asciidoc b/ch03.asciidoc index 2f180094..8865b7df 100644 --- a/ch03.asciidoc +++ b/ch03.asciidoc @@ -4,7 +4,7 @@ ((("open source licenses")))((("Nakamoto, Satoshi")))Bitcoin is an _open source_ project and the source code is available under an open (MIT) license, free to download and use for any purpose. Open source means more than simply free to use. It also means that bitcoin is developed by an open community of volunteers. At first, that community consisted of only Satoshi Nakamoto. By 2016, bitcoin's source code had more than 400 contributors with about a dozen developers working on the code almost full-time and several dozen more on a part-time basis. Anyone can contribute to the code—including you! -((("bitcoin whitepaper")))((("Satoshi client")))((("reference implementation", see="Bitcoin Core")))((("Bitcoin Core", "reference implementation")))When bitcoin was created by Satoshi Nakamoto, the software was actually completed before the whitepaper reproduced in <> was written. Satoshi wanted to make sure it worked before writing about it. That first implementation, then simply known as "Bitcoin" or "Satoshi client," has been heavily modified and improved. It has evolved into what is known as _Bitcoin Core_, to differentiate it from other compatible implementations. Bitcoin Core is the _reference implementation_ of the bitcoin system, meaning that it is the authoritative reference on how each part of the technology should be implemented. Bitcoin Core implements all aspects of bitcoin, including wallets, a transaction and block validation engine, and a full network node in the peer-to-peer bitcoin network. +((("bitcoin whitepaper")))((("Satoshi client")))((("reference implementation", see="Bitcoin Core")))((("Bitcoin Core", "reference implementation")))When bitcoin was created by Satoshi Nakamoto, the software was actually completed before the whitepaper reproduced in <> was written. Satoshi wanted to make sure it worked before writing about it. That first implementation, then simply known as "Bitcoin" or "Satoshi client," has been heavily modified and improved. It has evolved into what is known as _Bitcoin Core_, to differentiate it from other compatible implementations. Bitcoin Core is the _reference implementation_ of the Bitcoin system, meaning that it is the authoritative reference on how each part of the technology should be implemented. Bitcoin Core implements all aspects of bitcoin, including wallets, a transaction and block validation engine, and a full network node in the peer-to-peer Bitcoin network. [WARNING] ==== @@ -90,7 +90,7 @@ nothing to commit, working directory clean ==== Configuring the Bitcoin Core Build -((("Bitcoin Core", "compiling from source code", "build configuration")))((("documentation")))((("build documentation", seealso="Bitcoin Core")))The source code includes documentation, which can be found in a number of files. Review the main documentation located in _README.md_ in the _bitcoin_ directory by typing ++**more README.md**++ at the prompt and using the spacebar to progress to the next page. In this chapter, we will build the command-line bitcoin client, also known as +bitcoind+ on Linux. Review the instructions for compiling the +bitcoind+ command-line client on your platform by typing ++**more doc/build-unix.md**++. Alternative instructions for macOS and Windows can be found in the _doc_ directory, as _build-osx.md_ or _build-windows.md_, respectively. +((("Bitcoin Core", "compiling from source code", "build configuration")))((("documentation")))((("build documentation", seealso="Bitcoin Core")))The source code includes documentation, which can be found in a number of files. Review the main documentation located in _README.md_ in the _bitcoin_ directory by typing ++**more README.md**++ at the prompt and using the spacebar to progress to the next page. In this chapter, we will build the command-line Bitcoin client, also known as +bitcoind+ on Linux. Review the instructions for compiling the +bitcoind+ command-line client on your platform by typing ++**more doc/build-unix.md**++. Alternative instructions for macOS and Windows can be found in the _doc_ directory, as _build-osx.md_ or _build-windows.md_, respectively. Carefully review the build prerequisites, which are in the first part of the build documentation. These are libraries that must be present on your system before you can begin to compile bitcoin. If these prerequisites are missing, the build process will fail with an error. If this happens because you missed a prerequisite, you can install it and then resume the build process from where you left off. Assuming the prerequisites are installed, you start the build process by generating a set of build scripts using the _autogen.sh_ script. @@ -220,20 +220,20 @@ $ which bitcoin-cli === Running a Bitcoin Core Node -((("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. +((("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 early 2021, a full-index node needs 2 GB of RAM and a minimum of 360 GB of disk space (see https://www.blockchain.com/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 <>). +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 2021, a full-index node needs 2 GB of RAM and a minimum of 360 GB of disk space (see https://www.blockchain.com/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] ==== -((("warnings and cautions", "core node resource requirements")))((("resource requirements")))Bitcoin Core keeps a full copy of the blockchain by default, with every transaction that has ever occurred on the bitcoin network since its inception in 2009. This dataset is dozens of gigabytes in size and is downloaded incrementally over several days or weeks, depending on the speed of your CPU and internet connection. Bitcoin Core will not be able to process transactions or update account balances until the full blockchain dataset is downloaded. Make sure you have enough disk space, bandwidth, and time to complete the initial synchronization. You can configure Bitcoin Core to reduce the size of the blockchain by discarding old blocks (see <>), but it will still download the entire dataset before discarding data. +((("warnings and cautions", "core node resource requirements")))((("resource requirements")))Bitcoin Core keeps a full copy of the blockchain by default, with every transaction that has ever occurred on the Bitcoin network since its inception in 2009. This dataset is dozens of gigabytes in size and is downloaded incrementally over several days or weeks, depending on the speed of your CPU and internet connection. Bitcoin Core will not be able to process transactions or update account balances until the full blockchain dataset is downloaded. Make sure you have enough disk space, bandwidth, and time to complete the initial synchronization. You can configure Bitcoin Core to reduce the size of the blockchain by discarding old blocks (see <>), but it will still download the entire dataset before discarding data. ==== -Despite these resource requirements, thousands of volunteers run bitcoin nodes. Some are running on systems as simple as a Raspberry Pi (a $35 USD computer the size of a pack of cards). Many volunteers also run bitcoin nodes on rented servers, usually some variant of Linux. A _Virtual Private Server_ (VPS) or _Cloud Computing Server_ instance can be used to run a bitcoin node. Such servers can be rented for $25 to $50 USD per month from a variety of providers. +Despite these resource requirements, thousands of volunteers run Bitcoin nodes. Some are running on systems as simple as a Raspberry Pi (a $35 USD computer the size of a pack of cards). Many volunteers also run Bitcoin nodes on rented servers, usually some variant of Linux. A _Virtual Private Server_ (VPS) or _Cloud Computing Server_ instance can be used to run a Bitcoin node. Such servers can be rented for $25 to $50 USD per month from a variety of providers. Why would you want to run a node? Here are some of the most common reasons: -* If you are developing bitcoin software and need to rely on a bitcoin node for programmable (API) access to the network and blockchain. +* If you are developing bitcoin software and need to rely on a Bitcoin node for programmable (API) access to the network and blockchain. * If you are building applications that must validate transactions according to bitcoin's consensus rules. Typically, bitcoin software companies run several nodes. @@ -385,7 +385,7 @@ You can hit Ctrl-C to interrupt the process once you are satisfied that it is lo To run Bitcoin Core in the background as a process, start it with the +daemon+ option, as +bitcoind -daemon+. -To monitor the progress and runtime status of your bitcoin node, use the command +bitcoin-cli getblockchaininfo+: +To monitor the progress and runtime status of your Bitcoin node, use the command +bitcoin-cli getblockchaininfo+: ---- $ bitcoin-cli getblockchaininfo @@ -467,7 +467,7 @@ In the next sections we will demonstrate some very useful RPC commands and their ((("Bitcoin Core", "Bitcoin Core API", "status information")))Bitcoin Core provides status reports on different modules through the JSON-RPC interface. The most important commands include +getblockchaininfo+, +getmempoolinfo+, +getnetworkinfo+ and +getwalletinfo+. -Bitcoin's +getblockchaininfo+ RPC command was introduced earlier. The +getnetworkinfo+ command displays basic information about the status of the bitcoin network node. Use +bitcoin-cli+ to run it: +Bitcoin's +getblockchaininfo+ RPC command was introduced earlier. The +getnetworkinfo+ command displays basic information about the status of the Bitcoin network node. Use +bitcoin-cli+ to run it: ---- $ bitcoin-cli getnetworkinfo @@ -496,11 +496,11 @@ $ bitcoin-cli getnetworkinfo ---- -The data is returned in JavaScript Object Notation (JSON), a format that can easily be "consumed" by all programming languages but is also quite human-readable. Among this data we see the version numbers for the bitcoin software client (150000) and bitcoin protocol (70015). We see the current number of connections (8) and various information about the bitcoin network and the settings related to this client. +The data is returned in JavaScript Object Notation (JSON), a format that can easily be "consumed" by all programming languages but is also quite human-readable. Among this data we see the version numbers for the bitcoin software client (150000) and Bitcoin protocol (70015). We see the current number of connections (8) and various information about the Bitcoin network and the settings related to this client. [TIP] ==== -It will take some time, perhaps more than a day, for the +bitcoind+ client to "catch up" to the current blockchain height as it downloads blocks from other bitcoin clients. You can check its progress using +getblockchaininfo+ to see the number of known blocks. +It will take some time, perhaps more than a day, for the +bitcoind+ client to "catch up" to the current blockchain height as it downloads blocks from other Bitcoin clients. You can check its progress using +getblockchaininfo+ to see the number of known blocks. ==== [[exploring_and_decoding_transanctions]] @@ -785,7 +785,7 @@ https://github.com/primal100/pybitcointools[pybitcointools]:: An archived fork o https://github.com/sinisterchipmunk/bitcoin-client[bitcoin-client]:: A Ruby library wrapper for the JSON-RPC API ==== Go -https://github.com/btcsuite/btcd[btcd]:: A Go language full-node bitcoin client +https://github.com/btcsuite/btcd[btcd]:: A Go language full-node Bitcoin client ==== Rust https://github.com/rust-bitcoin/rust-bitcoin[rust-bitcoin]:: Rust bitcoin library for serialization, parsing, and API calls diff --git a/ch04.asciidoc b/ch04.asciidoc index 4a2e75ef..ca0d1088 100644 --- a/ch04.asciidoc +++ b/ch04.asciidoc @@ -5,13 +5,13 @@ === 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. -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. +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. First, we will introduce cryptography and explain the mathematics used in bitcoin. Next, we will look at how keys are generated, stored, and managed. We will review the various encoding formats used to represent private and public keys, addresses, and script addresses. Finally, we will look at advanced use of keys and addresses: vanity, multisignature, and script addresses and paper wallets. @@ -25,7 +25,7 @@ In bitcoin, we use public key cryptography to create a key pair that controls ac 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. These signatures can be validated against the public key without revealing the private key. -When spending bitcoin, the current bitcoin owner presents her public key and a signature (different each time, but created from the same private key) in a transaction to spend those bitcoin. Through the presentation of the public key and signature, everyone in the bitcoin network can verify and accept the transaction as valid, confirming that the person transferring the bitcoin owned them at the time of the transfer. +When spending bitcoin, the current bitcoin owner presents her public key and a signature (different each time, but created from the same private key) in a transaction to spend those bitcoin. Through the presentation of the public key and signature, everyone in the Bitcoin network can verify and accept the transaction as valid, confirming that the person transferring the bitcoin owned them at the time of the transfer. [TIP] ==== @@ -35,10 +35,10 @@ When spending bitcoin, the current bitcoin owner presents her public key and a s [[private_public_keys]] ==== Private and Public Keys -((("keys and addresses", "overview of", "private and public key pairs")))((("elliptic curve cryptography")))((("cryptography", "elliptic curve cryptography")))A bitcoin wallet contains a collection of key pairs, each consisting of a private key and a public key. The private key (k) is a number, usually picked at random. From the private key, we use elliptic curve multiplication, a one-way cryptographic function, to generate a public key (K). From the public key (K), we use a one-way cryptographic hash function to generate a bitcoin address (A). In this section, we will start with generating the private key, look at the elliptic curve math that is used to turn that into a public key, and finally, generate a bitcoin address from the public key. The relationship between private key, public key, and bitcoin address is shown in <>. +((("keys and addresses", "overview of", "private and public key pairs")))((("elliptic curve cryptography")))((("cryptography", "elliptic curve cryptography")))A bitcoin wallet contains a collection of key pairs, each consisting of a private key and a public key. The private key (k) is a number, usually picked at random. From the private key, we use elliptic curve multiplication, a one-way cryptographic function, to generate a public key (K). From the public key (K), we use a one-way cryptographic hash function to generate a Bitcoin address (A). In this section, we will start with generating the private key, look at the elliptic curve math that is used to turn that into a public key, and finally, generate a Bitcoin address from the public key. The relationship between private key, public key, and Bitcoin address is shown in <>. [[k_to_K_to_A]] -.Private key, public key, and bitcoin address +.Private key, public key, and Bitcoin address image::images/mbc2_0401.png["privk_to_pubK_to_addressA"] .Why Use Asymmetric Cryptography (Public/Private Keys)? @@ -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] ==== @@ -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] ==== @@ -245,16 +245,16 @@ image::images/mbc2_0404.png["ecc_illustrated"] === Bitcoin Addresses -((("keys and addresses", "bitcoin addresses", id="KAaddress04")))A bitcoin address is a string of digits and characters that can be shared with anyone who wants to send you money. Addresses produced from public keys consist of a string of numbers and letters, beginning with the digit "1". Here's an example of a bitcoin address: +((("keys and addresses", "Bitcoin addresses", id="KAaddress04")))A Bitcoin address is a string of digits and characters that can be shared with anyone who wants to send you money. Addresses produced from public keys consist of a string of numbers and letters, beginning with the digit "1". Here's an example of a Bitcoin address: ---- 1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy ---- -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. +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,24 +265,24 @@ 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. +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]] ==== Base58 and Base58Check Encoding -((("keys and addresses", "bitcoin addresses", "Base58 and Base58check encoding")))((("Base58 and Base58check encoding", id="base5804")))((("addresses", "Base58 and Base58check encoding", id="Abase5804")))In order to represent long numbers in a compact way, using fewer symbols, many computer systems use mixed-alphanumeric representations with a base (or radix) higher than 10. For example, whereas the traditional decimal system uses the 10 numerals 0 through 9, the hexadecimal system uses 16, with the letters A through F as the six additional symbols. A number represented in hexadecimal format is shorter than the equivalent decimal representation. Even more compact, Base64 representation uses 26 lowercase letters, 26 capital letters, 10 numerals, and 2 more characters such as “`+`” and "/" to transmit binary data over text-based media such as email. Base64 is most commonly used to add binary attachments to email. Base58 is a text-based binary-encoding format developed for use in bitcoin and used in many other cryptocurrencies. It offers a balance between compact representation, readability, and error detection and prevention. Base58 is a subset of Base64, using upper- and lowercase letters and numbers, but omitting some characters that are frequently mistaken for one another and can appear identical when displayed in certain fonts. Specifically, Base58 is Base64 without the 0 (number zero), O (capital o), l (lower L), I (capital i), and the symbols “`+`” and "/". Or, more simply, it is a set of lowercase and capital letters and numbers without the four (0, O, l, I) just mentioned. <> shows the full Base58 alphabet. +((("keys and addresses", "Bitcoin addresses", "Base58 and Base58check encoding")))((("Base58 and Base58check encoding", id="base5804")))((("addresses", "Base58 and Base58check encoding", id="Abase5804")))In order to represent long numbers in a compact way, using fewer symbols, many computer systems use mixed-alphanumeric representations with a base (or radix) higher than 10. For example, whereas the traditional decimal system uses the 10 numerals 0 through 9, the hexadecimal system uses 16, with the letters A through F as the six additional symbols. A number represented in hexadecimal format is shorter than the equivalent decimal representation. Even more compact, Base64 representation uses 26 lowercase letters, 26 capital letters, 10 numerals, and 2 more characters such as “`+`” and "/" to transmit binary data over text-based media such as email. Base64 is most commonly used to add binary attachments to email. Base58 is a text-based binary-encoding format developed for use in bitcoin and used in many other cryptocurrencies. It offers a balance between compact representation, readability, and error detection and prevention. Base58 is a subset of Base64, using upper- and lowercase letters and numbers, but omitting some characters that are frequently mistaken for one another and can appear identical when displayed in certain fonts. Specifically, Base58 is Base64 without the 0 (number zero), O (capital o), l (lower L), I (capital i), and the symbols “`+`” and "/". Or, more simply, it is a set of lowercase and capital letters and numbers without the four (0, O, l, I) just mentioned. <> shows the full Base58 alphabet. [[base58alphabet]] .Bitcoin's Base58 alphabet @@ -293,9 +293,9 @@ image::images/mbc2_0405.png["pubkey_to_address"] ==== -To add extra security against typos or transcription errors, Base58Check is a Base58 encoding format, frequently used in bitcoin, which has a built-in error-checking code. The checksum is an additional four bytes added to the end of the data that is being encoded. The checksum is derived from the hash of the encoded data and can therefore be used to detect and prevent transcription and typing errors. When presented with Base58Check code, the decoding software will calculate the checksum of the data and compare it to the checksum included in the code. If the two do not match, an error has been introduced and the Base58Check data is invalid. This prevents a mistyped bitcoin address from being accepted by the wallet software as a valid destination, an error that would otherwise result in loss of funds. +To add extra security against typos or transcription errors, Base58Check is a Base58 encoding format, frequently used in bitcoin, which has a built-in error-checking code. The checksum is an additional four bytes added to the end of the data that is being encoded. The checksum is derived from the hash of the encoded data and can therefore be used to detect and prevent transcription and typing errors. When presented with Base58Check code, the decoding software will calculate the checksum of the data and compare it to the checksum included in the code. If the two do not match, an error has been introduced and the Base58Check data is invalid. This prevents a mistyped Bitcoin address from being accepted by the wallet software as a valid destination, an error that would otherwise result in loss of funds. -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 <>. +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): @@ -311,7 +311,7 @@ The result is composed of three items: a prefix, the data, and a checksum. This .Base58Check encoding: a Base58, versioned, and checksummed format for unambiguously encoding bitcoin data image::images/mbc2_0406.png["Base58CheckEncoding"] -In bitcoin, most of the data presented to the user is Base58Check-encoded to make it compact, easy to read, and easy to detect errors. The version prefix in Base58Check encoding is used to create easily distinguishable formats, which when encoded in Base58 contain specific characters at the beginning of the Base58Check-encoded payload. These characters make it easy for humans to identify the type of data that is encoded and how to use it. This is what differentiates, for example, a Base58Check-encoded bitcoin address that starts with a 1 from a Base58Check-encoded private key WIF that starts with a 5. Some example version prefixes and the resulting Base58 characters are shown in <>. +In bitcoin, most of the data presented to the user is Base58Check-encoded to make it compact, easy to read, and easy to detect errors. The version prefix in Base58Check encoding is used to create easily distinguishable formats, which when encoded in Base58 contain specific characters at the beginning of the Base58Check-encoded payload. These characters make it easy for humans to identify the type of data that is encoded and how to use it. This is what differentiates, for example, a Base58Check-encoded Bitcoin address that starts with a 1 from a Base58Check-encoded private key WIF that starts with a 5. Some example version prefixes and the resulting Base58 characters are shown in <>. [[base58check_versions]] .Base58Check version prefix and encoded result examples @@ -328,7 +328,7 @@ In bitcoin, most of the data presented to the user is Base58Check-encoded to mak ==== 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. +((("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. [[priv_formats]] ===== Private key formats @@ -445,7 +445,7 @@ K = 04F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A↵ [[comp_pub]] ===== Compressed public keys -((("public and private keys", "compressed public keys")))Compressed public keys were introduced to bitcoin to reduce the size of transactions and conserve disk space on nodes that store the bitcoin blockchain database. Most transactions include the public key, which is required to validate the owner's credentials and spend the bitcoin. Each public key requires 520 bits (prefix + x + y), which when multiplied by several hundred transactions per block, or tens of thousands of transactions per day, adds a significant amount of data to the blockchain. +((("public and private keys", "compressed public keys")))Compressed public keys were introduced to bitcoin to reduce the size of transactions and conserve disk space on nodes that store the Bitcoin blockchain database. Most transactions include the public key, which is required to validate the owner's credentials and spend the bitcoin. Each public key requires 520 bits (prefix + x + y), which when multiplied by several hundred transactions per block, or tens of thousands of transactions per day, adds a significant amount of data to the blockchain. 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! @@ -457,16 +457,16 @@ Here's the same public key generated previously, shown as a compressed public ke K = 03F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A ---- -This compressed public key corresponds to the same private key, meaning it is generated from the same private key. However, it looks different from the uncompressed public key. More importantly, if we convert this compressed public key to a bitcoin address using the double-hash function (+RIPEMD160(SHA256(K))+) it will produce a _different_ bitcoin address. This can be confusing, because it means that a single private key can produce a public key expressed in two different formats (compressed and uncompressed) that produce two different bitcoin addresses. However, the private key is identical for both bitcoin addresses. +This compressed public key corresponds to the same private key, meaning it is generated from the same private key. However, it looks different from the uncompressed public key. More importantly, if we convert this compressed public key to a Bitcoin address using the double-hash function (+RIPEMD160(SHA256(K))+) it will produce a _different_ Bitcoin address. This can be confusing, because it means that a single private key can produce a public key expressed in two different formats (compressed and uncompressed) that produce two different Bitcoin addresses. However, the private key is identical for both Bitcoin addresses. [[pubkey_compression]] [role="smallerseventy"] .Public key compression image::images/mbc2_0407.png["pubkey_compression"] -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! +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 @@ -490,20 +490,20 @@ 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] ==== -"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"))) +"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. +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 +.Creating a Base58Check-encoded Bitcoin address from a private key ==== [role="c_less_space"] [source, cpp] @@ -512,7 +512,7 @@ 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"))) +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 @@ -530,7 +530,7 @@ Address: 1PRTTaJesdNovgne6Ehcdu1fpEdX7913CK [TIP] ==== -The code 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...+). +The code 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 @@ -622,11 +622,11 @@ BTC public key: 029ade3effb0a67d5c8609850d797366af428f4a0d5194cb221d807770a15228 [[p2sh_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. +((("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. -((("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 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. +((("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 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: +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)) @@ -655,15 +655,15 @@ We will explore how to create transactions that spend funds from P2SH (and multi ==== 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 Base58 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 Base58 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 of 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 -It's important to realize that a bitcoin address is simply a number represented by symbols in the Base58 alphabet. The search for a pattern like "1Kids" can be seen as searching for an address in the range from +1Kids11111111111111111111111111111+ to +1Kidszzzzzzzzzzzzzzzzzzzzzzzzzzzzz+. There are approximately 58^29^ (approximately 1.4 * 10^51^) addresses in that range, all starting with "1Kids." <> shows the range of addresses that have the prefix 1Kids. +It's important to realize that a Bitcoin address is simply a number represented by symbols in the Base58 alphabet. The search for a pattern like "1Kids" can be seen as searching for an address in the range from +1Kids11111111111111111111111111111+ to +1Kidszzzzzzzzzzzzzzzzzzzzzzzzzzzzz+. There are approximately 58^29^ (approximately 1.4 * 10^51^) addresses in that range, all starting with "1Kids." <> shows the range of addresses that have the prefix 1Kids. [[table_4-11]] .The range of vanity addresses starting with "1Kids" @@ -675,7 +675,7 @@ It's important to realize that a bitcoin address is simply a number represented | *To* | +1Kidszzzzzzzzzzzzzzzzzzzzzzzzzzzzz+ |======= -Let's look at the pattern "1Kids" as a number and see how frequently we might find this pattern in a bitcoin address (see <>). An average desktop computer PC, without any specialized hardware, can search approximately 100,000 keys per second. +Let's look at the pattern "1Kids" as a number and see how frequently we might find this pattern in a Bitcoin address (see <>). An average desktop computer PC, without any specialized hardware, can search approximately 100,000 keys per second. [[table_4-12]] .The frequency of a vanity pattern (1KidsCharity) and average search time on a desktop PC @@ -768,7 +768,7 @@ So does a vanity address increase security? If Eugenia generates the vanity addr [[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. +((("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. [WARNING] ==== @@ -778,7 +778,7 @@ Paper wallets are an OBSOLETE technology and are dangerous for most users. There 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. [[table_4-14]] -.Simplest form of a paper wallet—a printout of the bitcoin address and private key +.Simplest form of a paper wallet—a printout of the Bitcoin address and private key [options="header"] |======================= |Public address|Private key (WIF) diff --git a/ch05.asciidoc b/ch05.asciidoc index c28b4ce7..eda566f5 100644 --- a/ch05.asciidoc +++ b/ch05.asciidoc @@ -13,7 +13,7 @@ In this chapter we will look at the second meaning, where wallets are containers In this section we summarize the various technologies used to construct user-friendly, secure, and flexible bitcoin wallets. -((("wallets", "contents of")))A common misconception about bitcoin is that bitcoin wallets contain bitcoin. In fact, the wallet contains only keys. The "coins" are recorded in the blockchain on the bitcoin network. Users control the coins on the network by signing transactions with the keys in their wallets. ((("keychains")))In a sense, a bitcoin wallet is a _keychain_. +((("wallets", "contents of")))A common misconception about bitcoin is that bitcoin wallets contain bitcoin. In fact, the wallet contains only keys. The "coins" are recorded in the blockchain on the Bitcoin network. Users control the coins on the network by signing transactions with the keys in their wallets. ((("keychains")))In a sense, a bitcoin wallet is a _keychain_. [TIP] ==== @@ -33,7 +33,7 @@ The next few sections introduce each of these technologies at a high level. [[random_wallet]] ==== Nondeterministic (Random) Wallets -((("wallets", "types of", "nondeterministic (random) wallets")))In the first bitcoin wallet (now called Bitcoin Core), wallets were collections of randomly generated private keys. For example, the original Bitcoin Core client pregenerates 100 random private keys when first started and generates more keys as needed, using each key only once. Such wallets are being replaced with deterministic wallets because they are cumbersome to manage, back up, and import. The disadvantage of random keys is that if you generate many of them you must keep copies of all of them, meaning that the wallet must be backed up frequently. Each key must be backed up, or the funds it controls are irrevocably lost if the wallet becomes inaccessible. This conflicts directly with the principle of avoiding address reuse, by using each bitcoin address for only one transaction. Address reuse reduces privacy by associating multiple transactions and addresses with each other. A Type-0 nondeterministic wallet is a poor choice of wallet, especially if you want to avoid address reuse because it means managing many keys, which creates the need for frequent backups. Although the Bitcoin Core client includes a Type-0 wallet, using this wallet is discouraged by developers of Bitcoin Core. <> shows a nondeterministic wallet, containing a loose collection of random keys. +((("wallets", "types of", "nondeterministic (random) wallets")))In the first bitcoin wallet (now called Bitcoin Core), wallets were collections of randomly generated private keys. For example, the original Bitcoin Core client pregenerates 100 random private keys when first started and generates more keys as needed, using each key only once. Such wallets are being replaced with deterministic wallets because they are cumbersome to manage, back up, and import. The disadvantage of random keys is that if you generate many of them you must keep copies of all of them, meaning that the wallet must be backed up frequently. Each key must be backed up, or the funds it controls are irrevocably lost if the wallet becomes inaccessible. This conflicts directly with the principle of avoiding address reuse, by using each Bitcoin address for only one transaction. Address reuse reduces privacy by associating multiple transactions and addresses with each other. A Type-0 nondeterministic wallet is a poor choice of wallet, especially if you want to avoid address reuse because it means managing many keys, which creates the need for frequent backups. Although the Bitcoin Core client includes a Type-0 wallet, using this wallet is discouraged by developers of Bitcoin Core. <> shows a nondeterministic wallet, containing a loose collection of random keys. [TIP] ==== @@ -141,7 +141,7 @@ By writing down this mnemonic, Gabriel created a backup (see <>, for simplicity. In fact, most hardware wallets generate a more secure 24-word mnemonic. The mnemonic is used in exactly the same way, regardless of length. ==== -For the first implementation of his web store, Gabriel uses a single bitcoin address, generated on his Trezor device. This single address is used by all customers for all orders. As we will see, this approach has some drawbacks and can be improved upon with an HD wallet.((("", startref="gabrielfive"))) +For the first implementation of his web store, Gabriel uses a single Bitcoin address, generated on his Trezor device. This single address is used by all customers for all orders. As we will see, this approach has some drawbacks and can be improved upon with an HD wallet.((("", startref="gabrielfive"))) === Wallet Technology Details @@ -344,11 +344,11 @@ Repeating the process one level down the tree, each child can in turn become a p Child private keys are indistinguishable from nondeterministic (random) keys. Because the derivation function is a one-way function, the child key cannot be used to find the parent key. The child key also cannot be used to find any siblings. If you have the n~th~ child, you cannot find its siblings, such as the n–1 child or the n+1 child, or any other children that are part of the sequence. Only the parent key and chain code can derive all the children. Without the child chain code, the child key cannot be used to derive any grandchildren either. You need both the child private key and the child chain code to start a new branch and derive grandchildren. -So what can the child private key be used for on its own? It can be used to make a public key and a bitcoin address. Then, it can be used to sign transactions to spend anything paid to that address. +So what can the child private key be used for on its own? It can be used to make a public key and a Bitcoin address. Then, it can be used to sign transactions to spend anything paid to that address. [TIP] ==== -A child private key, the corresponding public key, and the bitcoin address are all indistinguishable from keys and addresses created randomly. The fact that they are part of a sequence is not visible outside of the HD wallet function that created them. Once created, they operate exactly as "normal" keys. +A child private key, the corresponding public key, and the Bitcoin address are all indistinguishable from keys and addresses created randomly. The fact that they are part of a sequence is not visible outside of the HD wallet function that created them. Once created, they operate exactly as "normal" keys. ==== ===== Extended keys @@ -385,11 +385,11 @@ xpub67xpozcx8pe95XVuZLHXZeG6XWXHpGq6Qv5cmNfi7cS5mtjJ2tgypeQbBs2UAR6KECeeMVKZBPLr An extended public key can be used, therefore, to derive all of the _public_ keys (and only the public keys) in that branch of the HD wallet structure. -This shortcut can be used to create very secure public key–only deployments where a server or application has a copy of an extended public key and no private keys whatsoever. That kind of deployment can produce an infinite number of public keys and bitcoin addresses, but cannot spend any of the money sent to those addresses. Meanwhile, on another, more secure server, the extended private key can derive all the corresponding private keys to sign transactions and spend the money. +This shortcut can be used to create very secure public key–only deployments where a server or application has a copy of an extended public key and no private keys whatsoever. That kind of deployment can produce an infinite number of public keys and Bitcoin addresses, but cannot spend any of the money sent to those addresses. Meanwhile, on another, more secure server, the extended private key can derive all the corresponding private keys to sign transactions and spend the money. -One common application of this solution is to install an extended public key on a web server that serves an ecommerce application. The web server can use the public key derivation function to create a new bitcoin address for every transaction (e.g., for a customer shopping cart). The web server will not have any private keys that would be vulnerable to theft. Without HD wallets, the only way to do this is to generate thousands of bitcoin addresses on a separate secure server and then preload them on the ecommerce server. That approach is cumbersome and requires constant maintenance to ensure that the ecommerce server doesn't "run out" of addresses. +One common application of this solution is to install an extended public key on a web server that serves an ecommerce application. The web server can use the public key derivation function to create a new Bitcoin address for every transaction (e.g., for a customer shopping cart). The web server will not have any private keys that would be vulnerable to theft. Without HD wallets, the only way to do this is to generate thousands of Bitcoin addresses on a separate secure server and then preload them on the ecommerce server. That approach is cumbersome and requires constant maintenance to ensure that the ecommerce server doesn't "run out" of addresses. -((("cold storage")))((("storage", "cold storage")))((("hardware wallets")))Another common application of this solution is for cold-storage or hardware wallets. In that scenario, the extended private key can be stored on a paper wallet or hardware device (such as a Trezor hardware wallet), while the extended public key can be kept online. The user can create "receive" addresses at will, while the private keys are safely stored offline. To spend the funds, the user can use the extended private key on an offline signing bitcoin client or sign transactions on the hardware wallet device (e.g., Trezor). <> illustrates the mechanism for extending a parent public key to derive child public keys. +((("cold storage")))((("storage", "cold storage")))((("hardware wallets")))Another common application of this solution is for cold-storage or hardware wallets. In that scenario, the extended private key can be stored on a paper wallet or hardware device (such as a Trezor hardware wallet), while the extended public key can be kept online. The user can create "receive" addresses at will, while the private keys are safely stored offline. To spend the funds, the user can use the extended private key on an offline signing Bitcoin client or sign transactions on the hardware wallet device (e.g., Trezor). <> illustrates the mechanism for extending a parent public key to derive child public keys. [[CKDpub]] .Extending a parent public key to create a child public key @@ -468,11 +468,11 @@ The third level of the tree is "account," which allows users to subdivide their ((("wallets", "technology of", "using extended public keys on web stores")))Let's see how HD wallets are used by continuing our story with Gabriel's web store.((("use cases", "web store", id="gabrielfivetwo"))) -Gabriel first set up his web store as a hobby, based on a simple hosted Wordpress page. His store was quite basic with only a few pages and an order form with a single bitcoin address. +Gabriel first set up his web store as a hobby, based on a simple hosted Wordpress page. His store was quite basic with only a few pages and an order form with a single Bitcoin address. -Gabriel used the first bitcoin address generated by his Trezor device as the main bitcoin address for his store. This way, all incoming payments would be paid to an address controlled by his Trezor hardware wallet. +Gabriel used the first Bitcoin address generated by his Trezor device as the main Bitcoin address for his store. This way, all incoming payments would be paid to an address controlled by his Trezor hardware wallet. -Customers would submit an order using the form and send payment to Gabriel's published bitcoin address, triggering an email with the order details for Gabriel to process. With just a few orders each week, this system worked well enough. +Customers would submit an order using the form and send payment to Gabriel's published Bitcoin address, triggering an email with the order details for Gabriel to process. With just a few orders each week, this system worked well enough. However, the little web store became quite successful and attracted many orders from the local community. Soon, Gabriel was overwhelmed. With all the orders paying the same address, it became difficult to correctly match orders and transactions, especially when multiple orders for the same amount came in close together. @@ -488,7 +488,7 @@ Gabriel copies the xpub to his web store's bitcoin shop software. He uses _BTCPa ===== Account Discovery and Management -Gabriel's business is flourishing. He has provided his extended public key (xpub) to _BTCPay Server_, which is generating unique addresses for customers to his website. Every time a customer to Gabriel's website clicks on the "Checkout" button with a specified payment modality (in this case, bitcoin), _BTCPay Server_ generates a new address for that customer. More specifically, _BTCPay Server_ iterates on the _address_index_ tree to create a new address to display to the customer, as defined by BIP-44. If the customer decides to switch payment methods or abandon the transaction entirely, this bitcoin address goes unused and will not be used for another customer right away. +Gabriel's business is flourishing. He has provided his extended public key (xpub) to _BTCPay Server_, which is generating unique addresses for customers to his website. Every time a customer to Gabriel's website clicks on the "Checkout" button with a specified payment modality (in this case, bitcoin), _BTCPay Server_ generates a new address for that customer. More specifically, _BTCPay Server_ iterates on the _address_index_ tree to create a new address to display to the customer, as defined by BIP-44. If the customer decides to switch payment methods or abandon the transaction entirely, this Bitcoin address goes unused and will not be used for another customer right away. At a single moment in time, Gabriel's website may have a large volume of outstanding addresses for customers making purchases, some of which may go unused and eventually expire. Once these addresses expire, _BTCPay Server_ will go back to reuse these addresses to fill the gap in _address_index_, but it becomes clear how there can be gaps between the _address_index_ leaves of the hierarchical deterministic tree where the money is actually located. diff --git a/ch06.asciidoc b/ch06.asciidoc index 5ab7718e..f3d82f95 100644 --- a/ch06.asciidoc +++ b/ch06.asciidoc @@ -5,7 +5,7 @@ [[ch06_intro]] === Introduction -((("transactions", "defined")))((("warnings and cautions", see="also security")))Transactions are the most important part of the bitcoin system. Everything else in bitcoin is designed to ensure that transactions can be created, propagated on the network, validated, and finally added to the global ledger of transactions (the blockchain). Transactions are data structures that encode the transfer of value between participants in the bitcoin system. Each transaction is a public entry in bitcoin's blockchain, the global double-entry bookkeeping ledger. +((("transactions", "defined")))((("warnings and cautions", see="also security")))Transactions are the most important part of the Bitcoin system. Everything else in bitcoin is designed to ensure that transactions can be created, propagated on the network, validated, and finally added to the global ledger of transactions (the blockchain). Transactions are data structures that encode the transfer of value between participants in the Bitcoin system. Each transaction is a public entry in bitcoin's blockchain, the global double-entry bookkeeping ledger. In this chapter we will examine all the various forms of transactions, what they contain, how to create them, how they are verified, and how they become part of the permanent record of all transactions. When we use the term "wallet" in this chapter, we are referring to the software that constructs transactions, not just the database of keys. @@ -23,7 +23,7 @@ image::images/mbc2_0208.png["Alice Coffee Transaction"] [[transactions_behind_the_scenes]] ==== Transactions—Behind the Scenes -((("transactions", "behind the scenes details of")))Behind the scenes, an actual transaction looks very different from a transaction provided by a typical block explorer. In fact, most of the high-level constructs we see in the various bitcoin application user interfaces _do not actually exist_ in the bitcoin system. +((("transactions", "behind the scenes details of")))Behind the scenes, an actual transaction looks very different from a transaction provided by a typical block explorer. In fact, most of the high-level constructs we see in the various bitcoin application user interfaces _do not actually exist_ in the Bitcoin system. We can use Bitcoin Core's command-line interface (+getrawtransaction+ and +decoderawtransaction+) to retrieve Alice's "raw" transaction, decode it, and see what it contains. The result looks like this: @@ -96,7 +96,7 @@ What comes first? Inputs or outputs, the chicken or the egg? Strictly speaking, ((("transactions", "outputs and inputs", "output components")))((("outputs and inputs", "output parts")))Every bitcoin transaction creates outputs, which are recorded on the bitcoin ledger. Almost all of these outputs, with one exception (see <>) create spendable chunks of bitcoin called UTXO, which are then recognized by the whole network and available for the owner to spend in a future transaction. -UTXO are tracked by every full-node bitcoin client in the UTXO set. New transactions consume (spend) one or more of these outputs from the UTXO set. +UTXO are tracked by every full-node Bitcoin client in the UTXO set. New transactions consume (spend) one or more of these outputs from the UTXO set. Transaction outputs consist of two parts: @@ -313,7 +313,7 @@ This section examines how transaction fees are included in a typical transaction Transaction fees serve as an incentive to include (mine) a transaction into the next block and also as a disincentive against abuse of the system by imposing a small cost on every transaction. Transaction fees are collected by the miner who mines the block that records the transaction on the blockchain. -Transaction fees are calculated based on the size of the transaction in kilobytes, not the value of the transaction in bitcoin. Overall, transaction fees are set based on market forces within the bitcoin network. Miners prioritize transactions based on many different criteria, including fees, and might even process transactions for free under certain circumstances. Transaction fees affect the processing priority, meaning that a transaction with sufficient fees is likely to be included in the next block mined, whereas a transaction with insufficient or no fees might be delayed, processed on a best-effort basis after a few blocks, or not processed at all. Transaction fees are not mandatory, and transactions without fees might be processed eventually; however, including transaction fees encourages priority processing. +Transaction fees are calculated based on the size of the transaction in kilobytes, not the value of the transaction in bitcoin. Overall, transaction fees are set based on market forces within the Bitcoin network. Miners prioritize transactions based on many different criteria, including fees, and might even process transactions for free under certain circumstances. Transaction fees affect the processing priority, meaning that a transaction with sufficient fees is likely to be included in the next block mined, whereas a transaction with insufficient or no fees might be delayed, processed on a best-effort basis after a few blocks, or not processed at all. Transaction fees are not mandatory, and transactions without fees might be processed eventually; however, including transaction fees encourages priority processing. 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. @@ -327,7 +327,7 @@ Fee estimation algorithms calculate the appropriate fee, based on capacity and t [TIP] ==== -((("static fees")))((("fees", "static fees")))Static fees are no longer viable on the bitcoin network. Wallets that set static fees will produce a poor user experience as transactions will often get "stuck" and remain unconfirmed. Users who don't understand bitcoin transactions and fees are dismayed by "stuck" transactions because they think they've lost their money. +((("static fees")))((("fees", "static fees")))Static fees are no longer viable on the Bitcoin network. Wallets that set static fees will produce a poor user experience as transactions will often get "stuck" and remain unconfirmed. Users who don't understand bitcoin transactions and fees are dismayed by "stuck" transactions because they think they've lost their money. ==== The chart in <> shows the real-time estimate of fees in 10 satoshi/byte increments and the expected confirmation time (in minutes and number of blocks) for transactions with fees in each range. For each fee range (e.g., 61–70 satoshi/byte), two horizontal bars show the number of unconfirmed transactions (1405) and total number of transactions in the past 24 hours (102,975), with fees in that range. Based on the graph, the recommended high-priority fee at this time was 80 satoshi/byte, a fee likely to result in the transaction being mined in the very next block (zero block delay). For perspective, the median transaction size is 226 bytes, so the recommended fee for this transaction size would be 18,080 satoshis (0.00018080 BTC). @@ -382,7 +382,7 @@ Eugenia's wallet application will calculate the appropriate fee by measuring the Script is a very simple language that was designed to be limited in scope and executable on a range of hardware, perhaps as simple as an embedded device. It requires minimal processing and cannot do many of the fancy things modern programming languages can do. For its use in validating programmable money, this is a deliberate security feature. -((("Pay-to-Public-Key-Hash (P2PKH)")))Today, most transactions processed through the bitcoin network have the form "Payment to Bob's bitcoin address" and are based on a script called a Pay-to-Public-Key-Hash script. However, bitcoin transactions are not limited to the "Payment to Bob's bitcoin address" script. In fact, locking scripts can be written to express a vast variety of complex conditions. In order to understand these more complex scripts, we must first understand the basics of transaction scripts and script language. +((("Pay-to-Public-Key-Hash (P2PKH)")))Today, most transactions processed through the Bitcoin network have the form "Payment to Bob's Bitcoin address" and are based on a script called a Pay-to-Public-Key-Hash script. However, bitcoin transactions are not limited to the "Payment to Bob's Bitcoin address" script. In fact, locking scripts can be written to express a vast variety of complex conditions. In order to understand these more complex scripts, we must first understand the basics of transaction scripts and script language. In this section, we will demonstrate the basic components of the bitcoin transaction scripting language and show how it can be used to express simple conditions for spending and how those conditions can be satisfied by unlocking scripts. @@ -394,18 +394,18 @@ In this section, we will demonstrate the basic components of the bitcoin transac ==== Turing Incompleteness -((("Turing incompleteness")))The bitcoin transaction script language contains many operators, but is deliberately limited in one important way--there are no loops or complex flow control capabilities other than conditional flow control. This ensures that the language is not _Turing Complete_, meaning that scripts have limited complexity and predictable execution times. Script is not a general-purpose language. ((("denial-of-service attacks")))((("denial-of-service attacks", see="also security")))((("security", "denial-of-service attacks")))These limitations ensure that the language cannot be used to create an infinite loop or other form of "logic bomb" that could be embedded in a transaction in a way that causes a denial-of-service attack against the bitcoin network. Remember, every transaction is validated by every full node on the bitcoin network. A limited language prevents the transaction validation mechanism from being used as a vulnerability. +((("Turing incompleteness")))The bitcoin transaction script language contains many operators, but is deliberately limited in one important way--there are no loops or complex flow control capabilities other than conditional flow control. This ensures that the language is not _Turing Complete_, meaning that scripts have limited complexity and predictable execution times. Script is not a general-purpose language. ((("denial-of-service attacks")))((("denial-of-service attacks", see="also security")))((("security", "denial-of-service attacks")))These limitations ensure that the language cannot be used to create an infinite loop or other form of "logic bomb" that could be embedded in a transaction in a way that causes a denial-of-service attack against the Bitcoin network. Remember, every transaction is validated by every full node on the Bitcoin network. A limited language prevents the transaction validation mechanism from being used as a vulnerability. ==== Stateless Verification -((("stateless verification")))The bitcoin transaction script language is stateless, in that there is no state prior to execution of the script, or state saved after execution of the script. Therefore, all the information needed to execute a script is contained within the script. A script will predictably execute the same way on any system. If your system verifies a script, you can be sure that every other system in the bitcoin network will also verify the script, meaning that a valid transaction is valid for everyone and everyone knows this. This predictability of outcomes is an essential benefit of the bitcoin system. +((("stateless verification")))The bitcoin transaction script language is stateless, in that there is no state prior to execution of the script, or state saved after execution of the script. Therefore, all the information needed to execute a script is contained within the script. A script will predictably execute the same way on any system. If your system verifies a script, you can be sure that every other system in the Bitcoin network will also verify the script, meaning that a valid transaction is valid for everyone and everyone knows this. This predictability of outcomes is an essential benefit of the Bitcoin system. [[tx_lock_unlock]] ==== Script Construction (Lock + Unlock) Bitcoin's transaction validation engine relies on two types of scripts to validate transactions: a locking script and an unlocking script. -((("locking scripts")))((("unlocking scripts")))((("scripting", "locking scripts")))A locking script is a spending condition placed on an output: it specifies the conditions that must be met to spend the output in the future. ((("scriptPubKey")))Historically, the locking script was called a _scriptPubKey_, because it usually contained a public key or bitcoin address (public key hash). In this book we refer to it as a "locking script" to acknowledge the much broader range of possibilities of this scripting technology. In most bitcoin applications, what we refer to as a locking script will appear in the source code as +scriptPubKey+. ((("witnesses")))((("cryptographic puzzles")))You will also see the locking script referred to as a _witness script_ (see <>) or more generally as a _cryptographic puzzle_. These terms all mean the same thing, at different levels of abstraction. +((("locking scripts")))((("unlocking scripts")))((("scripting", "locking scripts")))A locking script is a spending condition placed on an output: it specifies the conditions that must be met to spend the output in the future. ((("scriptPubKey")))Historically, the locking script was called a _scriptPubKey_, because it usually contained a public key or Bitcoin address (public key hash). In this book we refer to it as a "locking script" to acknowledge the much broader range of possibilities of this scripting technology. In most bitcoin applications, what we refer to as a locking script will appear in the source code as +scriptPubKey+. ((("witnesses")))((("cryptographic puzzles")))You will also see the locking script referred to as a _witness script_ (see <>) or more generally as a _cryptographic puzzle_. These terms all mean the same thing, at different levels of abstraction. An unlocking script is a script that "solves," or satisfies, the conditions placed on an output by a locking script and allows the output to be spent. Unlocking scripts are part of every transaction input. Most of the time they contain a digital signature produced by the user's wallet from his or her private key. ((("scriptSig")))Historically, the unlocking script was called _scriptSig_, because it usually contained a digital signature. In most bitcoin applications, the source code refers to the unlocking script as +scriptSig+. You will also see the unlocking script referred to as a _witness_ (see <>). In this book, we refer to it as an "unlocking script" to acknowledge the much broader range of locking script requirements, because not all unlocking scripts must contain signatures. @@ -433,7 +433,7 @@ Now let's apply what we've learned about scripts and stacks to some simple examp In <>, the script +2 3 OP_ADD 5 OP_EQUAL+ demonstrates the arithmetic addition operator +OP_ADD+, adding two numbers and putting the result on the stack, followed by the conditional operator +OP_EQUAL+, which checks that the resulting sum is equal to +5+. For brevity, the +OP_+ prefix is omitted in the step-by-step example. For more details on the available script operators and functions, see <>. -Although most locking scripts refer to a public key hash (essentially, a bitcoin address), thereby requiring proof of ownership to spend the funds, the script does not have to be that complex. Any combination of locking and unlocking scripts that results in a TRUE value is valid. The simple arithmetic we used as an example of the scripting language is also a valid locking script that can be used to lock a transaction output. +Although most locking scripts refer to a public key hash (essentially, a Bitcoin address), thereby requiring proof of ownership to spend the funds, the script does not have to be that complex. Any combination of locking and unlocking scripts that results in a TRUE value is valid. The simple arithmetic we used as an example of the scripting language is also a valid locking script that can be used to lock a transaction output. Use part of the arithmetic example script as the locking script: @@ -476,7 +476,7 @@ Try validating the preceding script yourself using pencil and paper. When the sc [[script_exec]] ===== Separate execution of unlocking and locking scripts -((("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. +((("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" pointers 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. @@ -484,15 +484,15 @@ First, the unlocking script is executed, using the stack execution engine. If th [[p2pkh]] ==== Pay-to-Public-Key-Hash (P2PKH) -((("Pay-to-Public-Key-Hash (P2PKH)")))The vast majority of transactions processed on the bitcoin network spend outputs locked with a Pay-to-Public-Key-Hash or "P2PKH" script. These outputs contain a locking script that locks the output to a public key hash, more commonly known as a bitcoin address. An output locked by a P2PKH script can be unlocked (spent) by presenting a public key and a digital signature created by the corresponding private key (see <>). +((("Pay-to-Public-Key-Hash (P2PKH)")))The vast majority of transactions processed on the Bitcoin network spend outputs locked with a Pay-to-Public-Key-Hash or "P2PKH" script. These outputs contain a locking script that locks the output to a public key hash, more commonly known as a Bitcoin address. An output locked by a P2PKH script can be unlocked (spent) by presenting a public key and a digital signature created by the corresponding private key (see <>). -((("use cases", "buying coffee")))For example, let's look at Alice's payment to Bob's Cafe again. Alice made a payment of 0.015 bitcoin to the cafe's bitcoin address. That transaction output would have a locking script of the form: +((("use cases", "buying coffee")))For example, let's look at Alice's payment to Bob's Cafe again. Alice made a payment of 0.015 bitcoin to the cafe's Bitcoin address. That transaction output would have a locking script of the form: ---- OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG ---- -The +Cafe Public Key Hash+ is equivalent to the bitcoin address of the cafe, without the Base58Check encoding. Most applications would show the _public key hash_ in hexadecimal encoding and not the familiar bitcoin address Base58Check format that begins with a "1." +The +Cafe Public Key Hash+ is equivalent to the Bitcoin address of the cafe, without the Base58Check encoding. Most applications would show the _public key hash_ in hexadecimal encoding and not the familiar Bitcoin address Base58Check format that begins with a "1." The preceding locking script can be satisfied with an unlocking script of the form: @@ -607,7 +607,7 @@ The signature verification algorithm takes the message (a hash of the transactio ((("SIGHASH flags")))Bitcoin signatures have a way of indicating which part of a transaction's data is included in the hash signed by the private key using a +SIGHASH+ flag. The +SIGHASH+ flag is a single byte that is appended to the signature. Every signature has a +SIGHASH+ flag and the flag can be different from input to input. A transaction with three signed inputs may have three signatures with different +SIGHASH+ flags, each signature signing (committing) different parts of the transaction. -Remember, each input may contain a signature in its unlocking script. As a result, a transaction that contains several inputs may have signatures with different +SIGHASH+ flags that commit different parts of the transaction in each of the inputs. Note also that bitcoin transactions may contain inputs from different "owners," who may sign only one input in a partially constructed (and invalid) transaction, collaborating with others to gather all the necessary signatures to make a valid transaction. Many of the +SIGHASH+ flag types only make sense if you think of multiple participants collaborating outside the bitcoin network and updating a partially signed transaction. +Remember, each input may contain a signature in its unlocking script. As a result, a transaction that contains several inputs may have signatures with different +SIGHASH+ flags that commit different parts of the transaction in each of the inputs. Note also that bitcoin transactions may contain inputs from different "owners," who may sign only one input in a partially constructed (and invalid) transaction, collaborating with others to gather all the necessary signatures to make a valid transaction. Many of the +SIGHASH+ flag types only make sense if you think of multiple participants collaborating outside the Bitcoin network and updating a partially signed transaction. [role="pagebreak-before"] There are three +SIGHASH+ flags: +ALL+, +NONE+, and +SINGLE+, as shown in <>. @@ -653,7 +653,7 @@ Let's look at some of the other +SIGHASH+ types and how they can be used in prac +ALL|ANYONECANPAY+ :: ((("charitable donations")))((("use cases", "charitable donations")))This construction can be used to make a "crowdfunding”-style transaction. Someone attempting to raise funds can construct a transaction with a single output. The single output pays the "goal" amount to the fundraiser. Such a transaction is obviously not valid, as it has no inputs. However, others can now amend it by adding an input of their own, as a donation. They sign their own input with +ALL|ANYONECANPAY+. Unless enough inputs are gathered to reach the value of the output, the transaction is invalid. Each donation is a "pledge," which cannot be collected by the fundraiser until the entire goal amount is raised. -+NONE+ :: This construction can be used to create a "bearer check" or "blank check" of a specific amount. It commits to the input, but allows the output locking script to be changed. Anyone can write their own bitcoin address into the output locking script and redeem the transaction. However, the output value itself is locked by the signature. ++NONE+ :: This construction can be used to create a "bearer check" or "blank check" of a specific amount. It commits to the input, but allows the output locking script to be changed. Anyone can write their own Bitcoin address into the output locking script and redeem the transaction. However, the output value itself is locked by the signature. +NONE|ANYONECANPAY+ :: This construction can be used to build a "dust collector." Users who have tiny UTXO in their wallets can't spend these because the cost in fees exceeds the value of the dust. With this type of signature, the dust UTXO can be donated for anyone to aggregate and spend whenever they want. @@ -722,7 +722,7 @@ If you are implementing an algorithm to sign transactions in bitcoin, you _must_ === Bitcoin Addresses, Balances, and Other Abstractions -((("transactions", "higher-level abstractions", id="Thigher06")))We began this chapter with the discovery that transactions look very different "behind the scenes" than how they are presented in wallets, blockchain explorers, and other user-facing applications. Many of the simplistic and familiar concepts from the earlier chapters, such as bitcoin addresses and balances, seem to be absent from the transaction structure. We saw that transactions don't contain bitcoin addresses, per se, but instead operate through scripts that lock and unlock discrete values of bitcoin. Balances are not present anywhere in this system and yet every wallet application prominently displays the balance of the user's wallet. +((("transactions", "higher-level abstractions", id="Thigher06")))We began this chapter with the discovery that transactions look very different "behind the scenes" than how they are presented in wallets, blockchain explorers, and other user-facing applications. Many of the simplistic and familiar concepts from the earlier chapters, such as Bitcoin addresses and balances, seem to be absent from the transaction structure. We saw that transactions don't contain Bitcoin addresses, per se, but instead operate through scripts that lock and unlock discrete values of bitcoin. Balances are not present anywhere in this system and yet every wallet application prominently displays the balance of the user's wallet. Now that we have explored what is actually included in a bitcoin transaction, we can examine how the higher-level abstractions are derived from the seemingly primitive components of the transaction. @@ -732,21 +732,21 @@ Let's look again at how Alice's transaction was presented on a popular block exp .Alice's transaction to Bob's Cafe image::images/mbc2_0208.png["Alice Coffee Transaction"] -On the left side of the transaction, the blockchain explorer shows Alice's bitcoin address as the "sender." In fact, this information is not in the transaction itself. When the blockchain explorer references the transaction it also references the previous transaction associated with the input and extracts the first output from that older transaction. Within that output is a locking script that locks the UTXO to Alice's public key hash (a P2PKH script). The blockchain explorer extracted the public key hash and encoded it using Base58Check encoding to produce and display the bitcoin address that represents that public key. +On the left side of the transaction, the blockchain explorer shows Alice's Bitcoin address as the "sender." In fact, this information is not in the transaction itself. When the blockchain explorer references the transaction it also references the previous transaction associated with the input and extracts the first output from that older transaction. Within that output is a locking script that locks the UTXO to Alice's public key hash (a P2PKH script). The blockchain explorer extracted the public key hash and encoded it using Base58Check encoding to produce and display the Bitcoin address that represents that public key. -Similarly, on the right side, the blockchain explorer shows the two outputs; the first to Bob's bitcoin address and the second to Alice's bitcoin address (as change). Once again, to create these bitcoin addresses, the blockchain explorer extracted the locking script from each output, recognized it as a P2PKH script, and extracted the public-key-hash from within. Finally, the blockchain explorer reencoded each public key hash with Base58Check to produce and display the bitcoin addresses. +Similarly, on the right side, the blockchain explorer shows the two outputs; the first to Bob's Bitcoin address and the second to Alice's Bitcoin address (as change). Once again, to create these Bitcoin addresses, the blockchain explorer extracted the locking script from each output, recognized it as a P2PKH script, and extracted the public-key-hash from within. Finally, the blockchain explorer reencoded each public key hash with Base58Check to produce and display the Bitcoin addresses. -If you were to click on Bob's bitcoin address, the blockchain explorer would show you the view in <>. +If you were to click on Bob's Bitcoin address, the blockchain explorer would show you the view in <>. [[the_balance_of_bobs_bitcoin_address]] -.The balance of Bob's bitcoin address -image::images/mbc2_0608.png["The balance of Bob's bitcoin address"] +.The balance of Bob's Bitcoin address +image::images/mbc2_0608.png["The balance of Bob's Bitcoin address"] -The blockchain explorer displays the balance of Bob's bitcoin address. But nowhere in the bitcoin system is there a concept of a "balance." Rather, the values displayed here are constructed by the blockchain explorer as follows. +The blockchain explorer displays the balance of Bob's Bitcoin address. But nowhere in the Bitcoin system is there a concept of a "balance." Rather, the values displayed here are constructed by the blockchain explorer as follows. -To construct the "Total Received" amount, the blockchain explorer first will decode the Base58Check encoding of the bitcoin address to retrieve the 160-bit hash of Bob's public key that is encoded within the address. Then, the blockchain explorer will search through the database of transactions, looking for outputs with P2PKH locking scripts that contain Bob's public key hash. By summing up the value of all the outputs, the blockchain explorer can produce the total value received. +To construct the "Total Received" amount, the blockchain explorer first will decode the Base58Check encoding of the Bitcoin address to retrieve the 160-bit hash of Bob's public key that is encoded within the address. Then, the blockchain explorer will search through the database of transactions, looking for outputs with P2PKH locking scripts that contain Bob's public key hash. By summing up the value of all the outputs, the blockchain explorer can produce the total value received. -Constructing the current balance (displayed as "Final Balance") requires a bit more work. The blockchain explorer keeps a separate database of the outputs that are currently unspent, the UTXO set. To maintain this database, the blockchain explorer must monitor the bitcoin network, add newly created UTXO, and remove spent UTXO, in real time, as they appear in unconfirmed transactions. This is a complicated process that depends on keeping track of transactions as they propagate, as well as maintaining consensus with the bitcoin network to ensure that the correct chain is followed. Sometimes, the blockchain explorer goes out of sync and its perspective of the UTXO set is incomplete or incorrect. +Constructing the current balance (displayed as "Final Balance") requires a bit more work. The blockchain explorer keeps a separate database of the outputs that are currently unspent, the UTXO set. To maintain this database, the blockchain explorer must monitor the Bitcoin network, add newly created UTXO, and remove spent UTXO, in real time, as they appear in unconfirmed transactions. This is a complicated process that depends on keeping track of transactions as they propagate, as well as maintaining consensus with the Bitcoin network to ensure that the correct chain is followed. Sometimes, the blockchain explorer goes out of sync and its perspective of the UTXO set is incomplete or incorrect. From the UTXO set, the blockchain explorer sums up the value of all unspent outputs referencing Bob's public key hash and produces the "Final Balance" number shown to the user. diff --git a/ch07.asciidoc b/ch07.asciidoc index cbe6ec76..543034c6 100644 --- a/ch07.asciidoc +++ b/ch07.asciidoc @@ -92,7 +92,7 @@ The resulting script is quite long and looks like this: Although multisignature scripts are a powerful feature, they are cumbersome to use. Given the preceding script, Mohammed would have to communicate this script to every customer prior to payment. Each customer would have to use special bitcoin wallet software with the ability to create custom transaction scripts, and each customer would have to understand how to create a transaction using custom scripts. Furthermore, the resulting transaction would be about five times larger than a simple payment transaction, because this script contains very long public keys. The burden of that extra-large transaction would be borne by the customer in the form of fees. Finally, a large transaction script like this would be carried in the UTXO set in RAM in every full node, until it was spent. All of these issues make using complex locking scripts difficult in practice. -P2SH was developed to resolve these practical difficulties and to make the use of complex scripts as easy as a payment to a bitcoin address. With P2SH payments, the complex locking script is replaced with its digital fingerprint, a cryptographic hash. When a transaction attempting to spend the UTXO is presented later, it must contain the script that matches the hash, in addition to the unlocking script. In simple terms, P2SH means "pay to a script matching this hash, a script that will be presented later when this output is spent." +P2SH was developed to resolve these practical difficulties and to make the use of complex scripts as easy as a payment to a Bitcoin address. With P2SH payments, the complex locking script is replaced with its digital fingerprint, a cryptographic hash. When a transaction attempting to spend the UTXO is presented later, it must contain the script that matches the hash, in addition to the unlocking script. In simple terms, P2SH means "pay to a script matching this hash, a script that will be presented later when this output is spent." ((("redeem scripts")))((("scripting", "redeem scripts")))In P2SH transactions, the locking script that is replaced by a hash is referred to as the _redeem script_ because it is presented to the system at redemption time rather than as a locking script. <> shows the script without P2SH and <> shows the same script encoded with P2SH. @@ -185,7 +185,7 @@ Remember, because of policy set forth by the +IsStandard()+ function at the time ==== P2SH Addresses -((("scripting", "Pay-to-Script-Hash", "addresses")))((("Pay-to-Script-Hash (P2SH)", "addresses")))((("bitcoin improvement proposals", "Address Format for P2SH (BIP-13)")))Another important part of the P2SH feature is the ability to encode a script hash as an address, as defined in BIP-13. P2SH addresses are Base58Check encodings of the 20-byte hash of a script, just like bitcoin addresses are Base58Check encodings of the 20-byte hash of a public key. P2SH addresses use the version prefix "5," which results in Base58Check-encoded addresses that start with a "3." +((("scripting", "Pay-to-Script-Hash", "addresses")))((("Pay-to-Script-Hash (P2SH)", "addresses")))((("bitcoin improvement proposals", "Address Format for P2SH (BIP-13)")))Another important part of the P2SH feature is the ability to encode a script hash as an address, as defined in BIP-13. P2SH addresses are Base58Check encodings of the 20-byte hash of a script, just like Bitcoin addresses are Base58Check encodings of the 20-byte hash of a public key. P2SH addresses use the version prefix "5," which results in Base58Check-encoded addresses that start with a "3." For example, Mohammed's complex script, hashed and Base58Check-encoded as a P2SH address, becomes +39RF6JqABiHdYHkfChV6USGMe6Nsr66Gzw+. We can confirm that with the +bx+ command: @@ -197,7 +197,7 @@ echo \ ---- -Now, Mohammed can give this "address" to his customers and they can use almost any bitcoin wallet to make a simple payment, as if it were a bitcoin address. The 3 prefix gives them a hint that this is a special type of address, one corresponding to a script instead of a public key, but otherwise it works in exactly the same way as a payment to a bitcoin address. +Now, Mohammed can give this "address" to his customers and they can use almost any bitcoin wallet to make a simple payment, as if it were a Bitcoin address. The 3 prefix gives them a hint that this is a special type of address, one corresponding to a script instead of a public key, but otherwise it works in exactly the same way as a payment to a Bitcoin address. P2SH addresses hide all of the complexity, so that the person making a payment does not see the script. @@ -234,7 +234,7 @@ Note that because the redeem script is not presented to the network until you at ((("transactions", "advanced", "data recording output")))((("scripting", "data recording output")))((("RETURN operator")))((("data recording (nonpayment data)")))((("nonpayment data")))((("blockchain (the)", "nonpayment data recording")))((("digital notary services")))Bitcoin's distributed and timestamped ledger, the blockchain, has potential uses far beyond payments. Many developers have tried to use the transaction scripting language to take advantage of the security and resilience of the system for applications such as digital notary services, stock certificates, and smart contracts. Early attempts to use bitcoin's script language for these purposes involved creating transaction outputs that recorded data on the blockchain; for example, to record a digital fingerprint of a file in such a way that anyone could establish proof-of-existence of that file on a specific date by reference to that transaction. -((("blockchain bloat")))((("bloat")))((("unspent transaction outputs (UTXO)")))((("UTXO sets")))The use of bitcoin's blockchain to store data unrelated to bitcoin payments is a controversial subject. Many developers consider such use abusive and want to discourage it. Others view it as a demonstration of the powerful capabilities of blockchain technology and want to encourage such experimentation. Those who object to the inclusion of nonpayment data argue that it causes "blockchain bloat," burdening those running full bitcoin nodes with carrying the cost of disk storage for data that the blockchain was not intended to carry. Moreover, such transactions create UTXO that cannot be spent, using the destination bitcoin address as a freeform 20-byte field. Because the address is used for data, it doesn't correspond to a private key and the resulting UTXO can _never_ be spent; it's a fake payment. These transactions that can never be spent are therefore never removed from the UTXO set and cause the size of the UTXO database to forever increase, or "bloat." +((("blockchain bloat")))((("bloat")))((("unspent transaction outputs (UTXO)")))((("UTXO sets")))The use of bitcoin's blockchain to store data unrelated to bitcoin payments is a controversial subject. Many developers consider such use abusive and want to discourage it. Others view it as a demonstration of the powerful capabilities of blockchain technology and want to encourage such experimentation. Those who object to the inclusion of nonpayment data argue that it causes "blockchain bloat," burdening those running full Bitcoin nodes with carrying the cost of disk storage for data that the blockchain was not intended to carry. Moreover, such transactions create UTXO that cannot be spent, using the destination Bitcoin address as a freeform 20-byte field. Because the address is used for data, it doesn't correspond to a private key and the resulting UTXO can _never_ be spent; it's a fake payment. These transactions that can never be spent are therefore never removed from the UTXO set and cause the size of the UTXO database to forever increase, or "bloat." In version 0.9 of the Bitcoin Core client, a compromise was reached with the introduction of the +RETURN+ operator. +RETURN+ allows developers to add 80 bytes of nonpayment data to a transaction output. However, unlike the use of "fake" UTXO, the +RETURN+ operator creates an explicitly _provably unspendable_ output, which does not need to be stored in the UTXO set. +RETURN+ outputs are recorded on the blockchain, so they consume disk space and contribute to the increase in the blockchain's size, but they are not stored in the UTXO set and therefore do not bloat the UTXO memory pool and burden full nodes with the cost of more expensive RAM. @@ -266,7 +266,7 @@ Timelocks are useful for postdating transactions and locking funds to a date in [[transaction_locktime_nlocktime]] ==== Transaction Locktime (nLocktime) -((("scripting", "timelocks", "nLocktime")))((("timelocks", "nLocktime")))From the beginning, bitcoin has had a transaction-level timelock feature. Transaction locktime is a transaction-level setting (a field in the transaction data structure) that defines the earliest time that a transaction is valid and can be relayed on the network or added to the blockchain. Locktime is also known as +nLocktime+ from the variable name used in the Bitcoin Core codebase. It is set to zero in most transactions to indicate immediate propagation and execution. If +nLocktime+ is nonzero and below 500 million, it is interpreted as a block height, meaning the transaction is not valid and is not relayed or included in the blockchain prior to the specified block height. If it is greater than or equal to 500 million, it is interpreted as a Unix Epoch timestamp (seconds since Jan-1-1970) and the transaction is not valid prior to the specified time. Transactions with +nLocktime+ specifying a future block or time must be held by the originating system and transmitted to the bitcoin network only after they become valid. If a transaction is transmitted to the network before the specified +nLocktime+, the transaction will be rejected by the first node as invalid and will not be relayed to other nodes. The use of +nLocktime+ is equivalent to postdating a paper check. +((("scripting", "timelocks", "nLocktime")))((("timelocks", "nLocktime")))From the beginning, bitcoin has had a transaction-level timelock feature. Transaction locktime is a transaction-level setting (a field in the transaction data structure) that defines the earliest time that a transaction is valid and can be relayed on the network or added to the blockchain. Locktime is also known as +nLocktime+ from the variable name used in the Bitcoin Core codebase. It is set to zero in most transactions to indicate immediate propagation and execution. If +nLocktime+ is nonzero and below 500 million, it is interpreted as a block height, meaning the transaction is not valid and is not relayed or included in the blockchain prior to the specified block height. If it is greater than or equal to 500 million, it is interpreted as a Unix Epoch timestamp (seconds since Jan-1-1970) and the transaction is not valid prior to the specified time. Transactions with +nLocktime+ specifying a future block or time must be held by the originating system and transmitted to the Bitcoin network only after they become valid. If a transaction is transmitted to the network before the specified +nLocktime+, the transaction will be rejected by the first node as invalid and will not be relayed to other nodes. The use of +nLocktime+ is equivalent to postdating a paper check. [[locktime_limitations]] ===== Transaction locktime limitations @@ -314,7 +314,7 @@ To lock it to a time, say 3 months from now, the transaction would be a P2SH tra where ++ is a block height or time value estimated 3 months from the time the transaction is mined: current block height {plus} 12,960 (blocks) or current Unix epoch time {plus} 7,760,000 (seconds). For now, don't worry about the +DROP+ opcode that follows +CHECKLOCKTIMEVERIFY+; it will be explained shortly. -When Bob tries to spend this UTXO, he constructs a transaction that references the UTXO as an input. He uses his signature and public key in the unlocking script of that input and sets the transaction +nLocktime+ to be equal to or greater than the timelock in the +CHECKLOCKTIMEVERIFY+ Alice set. Bob then broadcasts the transaction on the bitcoin network. +When Bob tries to spend this UTXO, he constructs a transaction that references the UTXO as an input. He uses his signature and public key in the unlocking script of that input and sets the transaction +nLocktime+ to be equal to or greater than the timelock in the +CHECKLOCKTIMEVERIFY+ Alice set. Bob then broadcasts the transaction on the Bitcoin network. Bob's transaction is evaluated as follows. If the +CHECKLOCKTIMEVERIFY+ parameter Alice set is less than or equal to the spending transaction's +nLocktime+, script execution continues (acts as if a “no operation” or NOP opcode was executed). Otherwise, script execution halts and the transaction is deemed invalid. @@ -689,7 +689,7 @@ When a transaction spends an UTXO, it must provide a witness. In a traditional U ==== Soft Fork (Backward Compatibility) -Segregated Witness is a significant change to the way outputs and transactions are architected. Such a change would normally require a simultaneous change in every bitcoin node and wallet to change the consensus rules—what is known as a hard fork. Instead, segregated witness is introduced with a much less disruptive change, which is backward compatible, known as a soft fork. This type of upgrade allows non-upgraded software to ignore the changes and continue to operate without any disruption. +Segregated Witness is a significant change to the way outputs and transactions are architected. Such a change would normally require a simultaneous change in every Bitcoin node and wallet to change the consensus rules—what is known as a hard fork. Instead, segregated witness is introduced with a much less disruptive change, which is backward compatible, known as a soft fork. This type of upgrade allows non-upgraded software to ignore the changes and continue to operate without any disruption. Segregated Witness outputs are constructed so that older systems that are not segwit-aware can still validate them. To an old wallet or node, a Segregated Witness output looks like an output that _anyone can spend_. Such outputs can be spent with an empty signature, therefore the fact that there is no signature inside the transaction (it is segregated) does not invalidate the transaction. Newer wallets and mining nodes, however, see the Segregated Witness output and expect to find a valid witness for it in the transaction’s witness data. @@ -714,7 +714,7 @@ With Segregated Witness, Alice would create a Pay-to-Witness-Public-Key-Hash (P2 0 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 ---- -As you can see, a Segregated Witness output’s locking script is much simpler than a traditional output. It consists of two values that are pushed on to the script evaluation stack. To an old (nonsegwit-aware) bitcoin client, the two pushes would look like an output that anyone can spend and does not require a signature (or rather, can be spent with an empty signature). To a newer, segwit-aware client, the first number (0) is interpreted as a version number (the _witness version_) and the second part (20 bytes) is the equivalent of a locking script known as a _witness program_. The 20-byte witness program is simply the hash of the public key, as in a P2PKH script. +As you can see, a Segregated Witness output’s locking script is much simpler than a traditional output. It consists of two values that are pushed on to the script evaluation stack. To an old (nonsegwit-aware) Bitcoin client, the two pushes would look like an output that anyone can spend and does not require a signature (or rather, can be spent with an empty signature). To a newer, segwit-aware client, the first number (0) is interpreted as a version number (the _witness version_) and the second part (20 bytes) is the equivalent of a locking script known as a _witness program_. The 20-byte witness program is simply the hash of the public key, as in a P2PKH script. Now, let’s look at the corresponding transaction that Bob uses to spend this output. For the original script (nonsegwit), Bob’s transaction would have to include a signature within the transaction input: @@ -752,7 +752,7 @@ Additionally, P2WPKH outputs must be constructed from the hash of a _compressed_ [WARNING] ==== -P2WPKH should be constructed by the payee (recipient) by converting a compressed public key to a P2WPKH hash. You should never transform a P2PKH script, bitcoin address, or uncompressed public key to a P2WPKH witness script. +P2WPKH should be constructed by the payee (recipient) by converting a compressed public key to a P2WPKH hash. You should never transform a P2PKH script, Bitcoin address, or uncompressed public key to a P2WPKH witness script. ==== [[p2wsh]] @@ -843,7 +843,7 @@ Both forms of witness scripts, P2WPKH and P2WSH, can be embedded in a P2SH addre The first form of witness script we will examine is P2SH(P2WPKH). This is a Pay-to-Witness-Public-Key-Hash witness program, embedded inside a Pay-to-Script-Hash script, so that it can be used by a wallet that is not aware of segwit. -Bob's wallet constructs a P2WPKH witness program with Bob's public key. This witness program is then hashed and the resulting hash is encoded as a P2SH script. The P2SH script is converted to a bitcoin address, one that starts with a "3," as we saw in the <> section. +Bob's wallet constructs a P2WPKH witness program with Bob's public key. This witness program is then hashed and the resulting hash is encoded as a P2SH script. The P2SH script is converted to a Bitcoin address, one that starts with a "3," as we saw in the <> section. Bob's wallet starts with the P2WPKH witness program we saw earlier: @@ -867,7 +867,7 @@ echo \ ---- -Next, the redeem script hash is converted to a bitcoin address. Let's use +bx+ on the command-line again: +Next, the redeem script hash is converted to a Bitcoin address. Let's use +bx+ on the command-line again: .P2SH address ---- @@ -877,7 +877,7 @@ echo \ 37Lx99uaGn5avKBxiW26HjedQE3LrDCZru ---- -Now, Bob can display this address for customers to pay for their coffee. Alice's wallet can make a payment to +37Lx99uaGn5avKBxiW26HjedQE3LrDCZru+, just as it would to any other bitcoin address. +Now, Bob can display this address for customers to pay for their coffee. Alice's wallet can make a payment to +37Lx99uaGn5avKBxiW26HjedQE3LrDCZru+, just as it would to any other Bitcoin address. To pay Bob, Alice's wallet would lock the output with a P2SH script: ---- @@ -923,9 +923,9 @@ Then, the witness program itself is hashed with SHA256 and RIPEMD160, producing 86762607e8fe87c0c37740cddee880988b9455b2 ---- -Next, the wallet constructs a P2SH bitcoin address from this hash. Again, we use +bx+ to calculate on the command-line: +Next, the wallet constructs a P2SH Bitcoin address from this hash. Again, we use +bx+ to calculate on the command-line: -.P2SH bitcoin address +.P2SH Bitcoin address ---- echo \ '86762607e8fe87c0c37740cddee880988b9455b2'\ @@ -952,7 +952,7 @@ The native segwit address format is defined in BIP-173: https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki[BIP-173]:: Base32 address format for native v0-16 witness outputs -BIP-173 only encodes witness (P2WPKH and P2WSH) scripts. It is not compatible with non-segwit P2PKH or P2SH scripts. BIP-173 is a checksummed Base32 encoding, as compared to the Base58 encoding of a "traditional" bitcoin address. BIP-173 addresses are also called _bech32_ addresses, pronounced "beh-ch thirty two", alluding to the use of a "BCH" error detection algorithm and 32-character encoding set. +BIP-173 only encodes witness (P2WPKH and P2WSH) scripts. It is not compatible with non-segwit P2PKH or P2SH scripts. BIP-173 is a checksummed Base32 encoding, as compared to the Base58 encoding of a "traditional" Bitcoin address. BIP-173 addresses are also called _bech32_ addresses, pronounced "beh-ch thirty two", alluding to the use of a "BCH" error detection algorithm and 32-character encoding set. BIP-173 addresses use 32 lower-case-only alphanumeric character set, carefully selected to reduce errors from misreading or mistyping. By choosing a lower-case-only character set, bech32 is easier to read, speak, and 45% more efficient to encode in QR codes. @@ -1017,7 +1017,7 @@ Segregated Witness modifies the semantics of the four signature verification fun Signatures in bitcoin transactions are applied on a _commitment hash_, which is calculated from the transaction data, locking specific parts of the data indicating the signer's commitment to those values. For example, in a simple +SIGHASH_ALL+ type signature, the commitment hash includes all inputs and outputs. -Unfortunately, the way the commitment hash was calculated introduced the possibility that a node verifying the signature can be forced to perform a significant number of hash computations. Specifically, the hash operations increase in O(n^2^) with respect to the number of signature operations in the transaction. An attacker could therefore create a transaction with a very large number of signature operations, causing the entire bitcoin network to have to perform hundreds or thousands of hash operations to verify the transaction. +Unfortunately, the way the commitment hash was calculated introduced the possibility that a node verifying the signature can be forced to perform a significant number of hash computations. Specifically, the hash operations increase in O(n^2^) with respect to the number of signature operations in the transaction. An attacker could therefore create a transaction with a very large number of signature operations, causing the entire Bitcoin network to have to perform hundreds or thousands of hash operations to verify the transaction. Segwit represented an opportunity to address this problem by changing the way the commitment hash is calculated. For segwit version 0 witness programs, signature verification occurs using an improved commitment hash algorithm as specified in BIP-143. @@ -1025,11 +1025,11 @@ The new algorithm achieves two important goals. Firstly, the number of hash oper ==== Economic Incentives for Segregated Witness -Bitcoin mining nodes and full nodes incur costs for the resources used to support the bitcoin network and the blockchain. As the volume of bitcoin transactions increases, so does the cost of resources (CPU, network bandwidth, disk space, memory). Miners are compensated for these costs through fees that are proportional to the size (in bytes) of each transaction. Nonmining full nodes are not compensated, so they incur these costs because they have a need to run an authoritative fully validating full-index node, perhaps because they use the node to operate a bitcoin business. +Bitcoin mining nodes and full nodes incur costs for the resources used to support the Bitcoin network and the blockchain. As the volume of bitcoin transactions increases, so does the cost of resources (CPU, network bandwidth, disk space, memory). Miners are compensated for these costs through fees that are proportional to the size (in bytes) of each transaction. Nonmining full nodes are not compensated, so they incur these costs because they have a need to run an authoritative fully validating full-index node, perhaps because they use the node to operate a bitcoin business. Without transaction fees, the growth in bitcoin data would arguably increase dramatically. Fees are intended to align the needs of bitcoin users with the burden their transactions impose on the network, through a market-based price discovery mechanism. -The calculation of fees based on transaction size treats all the data in the transaction as equal in cost. But from the perspective of full nodes and miners, some parts of a transaction carry much higher costs. Every transaction added to the bitcoin network affects the consumption of four resources on nodes: +The calculation of fees based on transaction size treats all the data in the transaction as equal in cost. But from the perspective of full nodes and miners, some parts of a transaction carry much higher costs. Every transaction added to the Bitcoin network affects the consumption of four resources on nodes: Disk Space :: Every transaction is stored in the blockchain, adding to the total size of the blockchain. The blockchain is stored on disk, but the storage can be optimized by “pruning” (deleting) older transactions. @@ -1045,7 +1045,7 @@ The incentives created by fees matter because they affect the behavior of wallet Transactions consume UTXO in their inputs and create new UTXO with their outputs. A transaction, therefore, that has more inputs than outputs will result in a decrease in the UTXO set, whereas a transaction that has more outputs than inputs will result in an increase in the UTXO set. Let’s consider the _difference_ between inputs and outputs and call that the “Net-new-UTXO.” That’s an important metric, as it tells us what impact a transaction will have on the most expensive network-wide resource, the in-memory UTXO set. A transaction with positive Net-new-UTXO adds to that burden. A transaction with a negative Net-new-UTXO reduces the burden. We would therefore want to encourage transactions that are either negative Net-new-UTXO or neutral with zero Net-new-UTXO. -Let’s look at an example of what incentives are created by the transaction fee calculation, with and without Segregated Witness. We will look at two different transactions. Transaction A is a 3-input, 2-output transaction, which has a Net-new-UTXO metric of –1, meaning it consumes one more UTXO than it creates, reducing the UTXO set by one. Transaction B is a 2-input, 3-output transaction, which has a Net-new-UTXO metric of 1, meaning it adds one UTXO to the UTXO set, imposing additional cost on the entire bitcoin network. Both transactions use multisignature (2-of-3) scripts to demonstrate how complex scripts increase the impact of segregated witness on fees. Let’s assume a transaction feerate of 30 satoshi per byte and a 75% fee discount on witness data: +Let’s look at an example of what incentives are created by the transaction fee calculation, with and without Segregated Witness. We will look at two different transactions. Transaction A is a 3-input, 2-output transaction, which has a Net-new-UTXO metric of –1, meaning it consumes one more UTXO than it creates, reducing the UTXO set by one. Transaction B is a 2-input, 3-output transaction, which has a Net-new-UTXO metric of 1, meaning it adds one UTXO to the UTXO set, imposing additional cost on the entire Bitcoin network. Both transactions use multisignature (2-of-3) scripts to demonstrate how complex scripts increase the impact of segregated witness on fees. Let’s assume a transaction feerate of 30 satoshi per byte and a 75% fee discount on witness data: ++++
@@ -1066,4 +1066,4 @@ Let’s look at an example of what incentives are created by the transaction fee Both transactions are less expensive when segregated witness is implemented. Comparing the costs between the two transactions, we see that before Segregated Witness, the transaction with the positive Net-new-UTXO has significant cost-savings. With Segregated Witness, the cost difference shrinks significantly in absolute as well as relative terms. While it would require inputs to become cheaper than outputs to incentivize UTXO set consolidation, this discount reduces the incentive to create new UTXO in order to avoid using more inputs. -Segregated Witness therefore has two main effects on the fees paid by bitcoin users. Firstly, segwit reduces the overall cost of transactions by discounting witness data and increasing the capacity of the bitcoin blockchain. Secondly, segwit’s discount on witness data partially mitigates a misalignment of incentives that may have inadvertently created more bloat in the UTXO set.((("", startref="Tadv07")))((("", startref="Ssegwit07"))) +Segregated Witness therefore has two main effects on the fees paid by bitcoin users. Firstly, segwit reduces the overall cost of transactions by discounting witness data and increasing the capacity of the Bitcoin blockchain. Secondly, segwit’s discount on witness data partially mitigates a misalignment of incentives that may have inadvertently created more bloat in the UTXO set.((("", startref="Tadv07")))((("", startref="Ssegwit07"))) diff --git a/ch08.asciidoc b/ch08.asciidoc index 32cbf5da..41f00d82 100644 --- a/ch08.asciidoc +++ b/ch08.asciidoc @@ -3,52 +3,52 @@ === Peer-to-Peer Network Architecture -((("bitcoin network", "peer-to-peer architecture")))((("peer-to-peer (P2P)")))Bitcoin is structured as a peer-to-peer network architecture on top of the internet. The term peer-to-peer, or P2P, means that the computers that participate in the network are peers to each other, that they are all equal, that there are no "special" nodes, and that all nodes share the burden of providing network services. The network nodes interconnect in a mesh network with a "flat" topology. There is no server, no centralized service, and no hierarchy within the network. Nodes in a P2P network both provide and consume services at the same time with reciprocity acting as the incentive for participation. P2P networks are inherently resilient, decentralized, and open. A preeminent example of a P2P network architecture was the early internet itself, where nodes on the IP network were equal. Today's internet architecture is more hierarchical, but the Internet Protocol still retains its flat-topology essence. Beyond bitcoin, the largest and most successful application of P2P technologies is file sharing, with Napster as the pioneer and BitTorrent as the most recent evolution of the architecture. +((("Bitcoin network", "peer-to-peer architecture")))((("peer-to-peer (P2P)")))Bitcoin is structured as a peer-to-peer network architecture on top of the internet. The term peer-to-peer, or P2P, means that the computers that participate in the network are peers to each other, that they are all equal, that there are no "special" nodes, and that all nodes share the burden of providing network services. The network nodes interconnect in a mesh network with a "flat" topology. There is no server, no centralized service, and no hierarchy within the network. Nodes in a P2P network both provide and consume services at the same time with reciprocity acting as the incentive for participation. P2P networks are inherently resilient, decentralized, and open. A preeminent example of a P2P network architecture was the early internet itself, where nodes on the IP network were equal. Today's internet architecture is more hierarchical, but the Internet Protocol still retains its flat-topology essence. Beyond bitcoin, the largest and most successful application of P2P technologies is file sharing, with Napster as the pioneer and BitTorrent as the most recent evolution of the architecture. Bitcoin's P2P network architecture is much more than a topology choice. Bitcoin is a P2P digital cash system by design, and the network architecture is both a reflection and a foundation of that core characteristic. Decentralization of control is a core design principle that can only be achieved and maintained by a flat, decentralized P2P consensus network. -((("bitcoin network", "defined")))The term "bitcoin network" refers to the collection of nodes running the bitcoin P2P protocol. In addition to the bitcoin P2P protocol, there are other protocols such as Stratum that are used for mining and lightweight or mobile wallets. These additional protocols are provided by gateway routing servers that access the bitcoin network using the bitcoin P2P protocol and then extend that network to nodes running other protocols. For example, Stratum servers connect Stratum mining nodes via the Stratum protocol to the main bitcoin network and bridge the Stratum protocol to the bitcoin P2P protocol. We use the term "extended bitcoin network" to refer to the overall network that includes the bitcoin P2P protocol, pool-mining protocols, the Stratum protocol, and any other related protocols connecting the components of the bitcoin system. +((("Bitcoin network", "defined")))The term "Bitcoin network" refers to the collection of nodes running the bitcoin P2P protocol. In addition to the bitcoin P2P protocol, there are other protocols such as Stratum that are used for mining and lightweight or mobile wallets. These additional protocols are provided by gateway routing servers that access the Bitcoin network using the bitcoin P2P protocol and then extend that network to nodes running other protocols. For example, Stratum servers connect Stratum mining nodes via the Stratum protocol to the main Bitcoin network and bridge the Stratum protocol to the bitcoin P2P protocol. We use the term "extended Bitcoin network" to refer to the overall network that includes the bitcoin P2P protocol, pool-mining protocols, the Stratum protocol, and any other related protocols connecting the components of the Bitcoin system. === Node Types and Roles -((("bitcoin network", "node types and roles", id="BNnode08")))((("bitcoin nodes", "types and roles", id="BNtype08")))Although nodes in the bitcoin P2P network are equal, they may take on different roles depending on the functionality they are supporting. A bitcoin node is a collection of functions: routing, the blockchain database, mining, and wallet services. A full node with all four of these functions is shown in <>. +((("Bitcoin network", "node types and roles", id="BNnode08")))((("Bitcoin nodes", "types and roles", id="BNtype08")))Although nodes in the bitcoin P2P network are equal, they may take on different roles depending on the functionality they are supporting. A Bitcoin node is a collection of functions: routing, the blockchain database, mining, and wallet services. A full node with all four of these functions is shown in <>. [[full_node_reference]] [role="smallerfifty"] -.A bitcoin network node with all four functions: wallet, miner, full blockchain database, and network routing +.A Bitcoin network node with all four functions: wallet, miner, full blockchain database, and network routing 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 a 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. ((("simplified-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 circle called "Miner" or the letter "M." +((("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 circle called "Miner" or the letter "M." -User wallets might be part of a full node, as is usually the case with desktop bitcoin clients. Increasingly, many user wallets, especially those running on resource-constrained devices such as smartphones, are SPV nodes. The wallet function is shown in <> as a circle called "Wallet" or the letter "W." +User wallets might be part of a full node, as is usually the case with desktop Bitcoin clients. Increasingly, many user wallets, especially those running on resource-constrained devices such as smartphones, are SPV nodes. The wallet function is shown in <> as a circle called "Wallet" or the letter "W." In addition to the main node types on the bitcoin P2P protocol, there are servers and nodes running other protocols, such as specialized mining pool protocols and lightweight client-access protocols. -<> shows the most common node types on the extended bitcoin network. +<> shows the most common node types on the extended Bitcoin network. === The Extended Bitcoin Network -((("", startref="BNnode08")))((("", startref="BNtype08")))((("bitcoin network", "extended network activities")))The main bitcoin network, running the bitcoin P2P protocol, consists of between 5,000 and 8,000 listening nodes running various versions of the bitcoin reference client (Bitcoin Core) and a few hundred nodes running various other implementations of the bitcoin P2P protocol, such as Bitcoin Classic, Bitcoin Unlimited, BitcoinJ, Libbitcoin, btcd, and bcoin. A small percentage of the nodes on the bitcoin P2P network are also mining nodes, competing in the mining process, validating transactions, and creating new blocks. Various large companies interface with the bitcoin network by running full-node clients based on the Bitcoin Core client, with full copies of the blockchain and a network node, but without mining or wallet functions. These nodes act as network edge routers, allowing various other services (exchanges, wallets, block explorers, merchant payment processing) to be built on top. +((("", startref="BNnode08")))((("", startref="BNtype08")))((("Bitcoin network", "extended network activities")))The main Bitcoin network, running the bitcoin P2P protocol, consists of between 5,000 and 8,000 listening nodes running various versions of the bitcoin reference client (Bitcoin Core) and a few hundred nodes running various other implementations of the bitcoin P2P protocol, such as Bitcoin Classic, Bitcoin Unlimited, BitcoinJ, Libbitcoin, btcd, and bcoin. A small percentage of the nodes on the bitcoin P2P network are also mining nodes, competing in the mining process, validating transactions, and creating new blocks. Various large companies interface with the Bitcoin network by running full-node clients based on the Bitcoin Core client, with full copies of the blockchain and a network node, but without mining or wallet functions. These nodes act as network edge routers, allowing various other services (exchanges, wallets, block explorers, merchant payment processing) to be built on top. -The extended bitcoin network includes the network running the bitcoin P2P protocol, described earlier, as well as nodes running specialized protocols. Attached to the main bitcoin P2P network are a number of pool servers and protocol gateways that connect nodes running other protocols. These other protocol nodes are mostly pool mining nodes (see <>) and lightweight wallet clients, which do not carry a full copy of the blockchain. +The extended Bitcoin network includes the network running the bitcoin P2P protocol, described earlier, as well as nodes running specialized protocols. Attached to the main bitcoin P2P network are a number of pool servers and protocol gateways that connect nodes running other protocols. These other protocol nodes are mostly pool mining nodes (see <>) and lightweight wallet clients, which do not carry a full copy of the blockchain. -<> shows the extended bitcoin network with the various types of nodes, gateway servers, edge routers, and wallet clients and the various protocols they use to connect to each other. +<> shows the extended Bitcoin network with the various types of nodes, gateway servers, edge routers, and wallet clients and the various protocols they use to connect to each other. [[node_type_ledgend]] -.Different types of nodes on the extended bitcoin network +.Different types of nodes on the extended Bitcoin network image::images/mbc2_0802.png["BitcoinNodeTypes"] [[bitcoin_network]] -.The extended bitcoin network showing various node types, gateways, and protocols +.The extended Bitcoin network showing various node types, gateways, and protocols image::images/mbc2_0803.png["BitcoinNetwork"] === Bitcoin Relay Networks -((("bitcoin network", "Bitcoin Relay Networks")))((("relay networks")))While the bitcoin P2P network serves the general needs of a broad variety of node types, it exhibits too high network latency for the specialized needs of bitcoin mining nodes. +((("Bitcoin network", "Bitcoin Relay Networks")))((("relay networks")))While the bitcoin P2P network serves the general needs of a broad variety of node types, it exhibits too high network latency for the specialized needs of bitcoin mining nodes. ((("propagation", "relay networks and")))Bitcoin miners are engaged in a time-sensitive competition to solve the Proof-of-Work problem and extend the blockchain (see <>). While participating in this competition, bitcoin miners must minimize the time between the propagation of a winning block and the beginning of the next round of competition. In mining, network latency is directly related to profit margins. @@ -60,7 +60,7 @@ Relay networks are not replacements for bitcoin's P2P network. Instead they are === Network Discovery -((("bitcoin network", "extended network discovery", id="BNextend08")))((("bitcoin nodes", "network discovery", id="BNodiscover08")))When a new node boots up, it must discover other bitcoin nodes on the network in order to participate. To start this process, a new node must discover at least one existing node on the network and connect to it. The geographic location of other nodes is irrelevant; the bitcoin network topology is not geographically defined. Therefore, any existing bitcoin nodes can be selected at random. +((("Bitcoin network", "extended network discovery", id="BNextend08")))((("Bitcoin nodes", "network discovery", id="BNodiscover08")))When a new node boots up, it must discover other Bitcoin nodes on the network in order to participate. To start this process, a new node must discover at least one existing node on the network and connect to it. The geographic location of other nodes is irrelevant; the Bitcoin network topology is not geographically defined. Therefore, any existing Bitcoin nodes can be selected at random. To connect to a known peer, nodes establish a TCP connection, usually to port 8333 (the port generally known as the one used by bitcoin), or an alternative port if one is provided. Upon establishing a connection, the node will start a "handshake" (see <>) by transmitting a +version+ message, which contains basic identifying information, including: @@ -76,9 +76,9 @@ To connect to a known peer, nodes establish a TCP connection, usually to port 83 The +version+ message is always the first message sent by any peer to another peer. The local peer receiving a +version+ message will examine the remote peer's reported +nVersion+ and decide if the remote peer is compatible. If the remote peer is compatible, the local peer will acknowledge the +version+ message and establish a connection by sending a +verack+ message. -How does a new node find peers? The first method is to query DNS using a number of "DNS seeds," which are DNS servers that provide a list of IP addresses of bitcoin nodes. Some of those DNS seeds provide a static list of IP addresses of stable bitcoin listening nodes. Some of the DNS seeds are custom implementations of BIND (Berkeley Internet Name Daemon) that return a random subset from a list of bitcoin node addresses collected by a crawler or a long-running bitcoin node. The Bitcoin Core client contains the names of nine different DNS seeds. The diversity of ownership and diversity of implementation of the different DNS seeds offers a high level of reliability for the initial bootstrapping process. In the Bitcoin Core client, the option to use the DNS seeds is controlled by the option switch +-dnsseed+ (set to 1 by default, to use the DNS seed). +How does a new node find peers? The first method is to query DNS using a number of "DNS seeds," which are DNS servers that provide a list of IP addresses of Bitcoin nodes. Some of those DNS seeds provide a static list of IP addresses of stable bitcoin listening nodes. Some of the DNS seeds are custom implementations of BIND (Berkeley Internet Name Daemon) that return a random subset from a list of Bitcoin node addresses collected by a crawler or a long-running Bitcoin node. The Bitcoin Core client contains the names of nine different DNS seeds. The diversity of ownership and diversity of implementation of the different DNS seeds offers a high level of reliability for the initial bootstrapping process. In the Bitcoin Core client, the option to use the DNS seeds is controlled by the option switch +-dnsseed+ (set to 1 by default, to use the DNS seed). -Alternatively, a bootstrapping node that knows nothing of the network must be given the IP address of at least one bitcoin node, after which it can establish connections through further introductions. The command-line argument +-seednode+ can be used to connect to one node just for introductions using it as a seed. After the initial seed node is used to form introductions, the client will disconnect from it and use the newly discovered peers. +Alternatively, a bootstrapping node that knows nothing of the network must be given the IP address of at least one Bitcoin node, after which it can establish connections through further introductions. The command-line argument +-seednode+ can be used to connect to one node just for introductions using it as a seed. After the initial seed node is used to form introductions, the client will disconnect from it and use the newly discovered peers. [[network_handshake]] .The initial handshake between peers @@ -91,7 +91,7 @@ Once one or more connections are established, the new node will send an +addr+ m .Address propagation and discovery image::images/mbc2_0805.png["AddressPropagation"] -A node must connect to a few different peers in order to establish diverse paths into the bitcoin network. Paths are not persistent—nodes come and go—and so the node must continue to discover new nodes as it loses old connections as well as assist other nodes when they bootstrap. Only one connection is needed to bootstrap, because the first node can offer introductions to its peer nodes and those peers can offer further introductions. It's also unnecessary and wasteful of network resources to connect to more than a handful of nodes. After bootstrapping, a node will remember its most recent successful peer connections, so that if it is rebooted it can quickly reestablish connections with its former peer network. If none of the former peers respond to its connection request, the node can use the seed nodes to bootstrap again. +A node must connect to a few different peers in order to establish diverse paths into the Bitcoin network. Paths are not persistent—nodes come and go—and so the node must continue to discover new nodes as it loses old connections as well as assist other nodes when they bootstrap. Only one connection is needed to bootstrap, because the first node can offer introductions to its peer nodes and those peers can offer further introductions. It's also unnecessary and wasteful of network resources to connect to more than a handful of nodes. After bootstrapping, a node will remember its most recent successful peer connections, so that if it is rebooted it can quickly reestablish connections with its former peer network. If none of the former peers respond to its connection request, the node can use the seed nodes to bootstrap again. On a node running the Bitcoin Core client, you can list the peer connections with the command +getpeerinfo+: @@ -143,17 +143,17 @@ If there is no traffic on a connection, nodes will periodically send a message t === Full Nodes -((("bitcoin network", "full nodes")))((("full-node clients")))((("blockchain (the)", "full blockchain nodes")))Full nodes are nodes that maintain a full blockchain with all transactions. More accurately, they probably should be called "full blockchain nodes." In the early years of bitcoin, all nodes were full nodes and currently the Bitcoin Core client is a full blockchain node. In the past two years, however, new forms of bitcoin clients have been introduced that do not maintain a full blockchain but run as lightweight clients. We'll examine these in more detail in the next section. +((("Bitcoin network", "full nodes")))((("full-node clients")))((("blockchain (the)", "full blockchain nodes")))Full nodes are nodes that maintain a full blockchain with all transactions. More accurately, they probably should be called "full blockchain nodes." In the early years of bitcoin, all nodes were full nodes and currently the Bitcoin Core client is a full blockchain node. In the past two years, however, new forms of Bitcoin clients have been introduced that do not maintain a full blockchain but run as lightweight clients. We'll examine these in more detail in the next section. -((("blocks", "genesis block")))((("genesis block")))((("blockchain (the)", "genesis block")))Full blockchain nodes maintain a complete and up-to-date copy of the bitcoin blockchain with all the transactions, which they independently build and verify, starting with the very first block (genesis block) and building up to the latest known block in the network. A full blockchain node can independently and authoritatively verify any transaction without recourse or reliance on any other node or source of information. The full blockchain node relies on the network to receive updates about new blocks of transactions, which it then verifies and incorporates into its local copy of the blockchain. +((("blocks", "genesis block")))((("genesis block")))((("blockchain (the)", "genesis block")))Full blockchain nodes maintain a complete and up-to-date copy of the Bitcoin blockchain with all the transactions, which they independently build and verify, starting with the very first block (genesis block) and building up to the latest known block in the network. A full blockchain node can independently and authoritatively verify any transaction without recourse or reliance on any other node or source of information. The full blockchain node relies on the network to receive updates about new blocks of transactions, which it then verifies and incorporates into its local copy of the blockchain. -((("bitcoin nodes", "full nodes")))Running a full blockchain node gives you the pure bitcoin experience: independent verification of all transactions without the need to rely on, or trust, any other systems. It's easy to tell if you're running a full node because it requires more than one hundred gigabytes of persistent storage (disk space) to store the full blockchain. If you need a lot of disk and it takes two to three days to sync to the network, you are running a full node. That is the price of complete independence and freedom from central authority. +((("Bitcoin nodes", "full nodes")))Running a full blockchain node gives you the pure bitcoin experience: independent verification of all transactions without the need to rely on, or trust, any other systems. It's easy to tell if you're running a full node because it requires more than one hundred gigabytes of persistent storage (disk space) to store the full blockchain. If you need a lot of disk and it takes two to three days to sync to the network, you are running a full node. That is the price of complete independence and freedom from central authority. -((("Satoshi client")))There are a few alternative implementations of full blockchain bitcoin clients, built using different programming languages and software architectures. However, the most common implementation is the reference client Bitcoin Core, also known as the Satoshi client. More than 75% of the nodes on the bitcoin network run various versions of Bitcoin Core. It is identified as "Satoshi" in the sub-version string sent in the +version+ message and shown by the command +getpeerinfo+ as we saw earlier; for example, +/Satoshi:0.8.6/+. +((("Satoshi client")))There are a few alternative implementations of full blockchain Bitcoin clients, built using different programming languages and software architectures. However, the most common implementation is the reference client Bitcoin Core, also known as the Satoshi client. More than 75% of the nodes on the Bitcoin network run various versions of Bitcoin Core. It is identified as "Satoshi" in the sub-version string sent in the +version+ message and shown by the command +getpeerinfo+ as we saw earlier; for example, +/Satoshi:0.8.6/+. === Exchanging "Inventory" -((("bitcoin network", "syncing the blockchain")))The first thing a full node will do once it connects to peers is try to construct a complete blockchain. If it is a brand-new node and has no blockchain at all, it only knows one block, the genesis block, which is statically embedded in the client software. Starting with block #0 (the genesis block), the new node will have to download hundreds of thousands of blocks to synchronize with the network and reestablish the full blockchain. +((("Bitcoin network", "syncing the blockchain")))The first thing a full node will do once it connects to peers is try to construct a complete blockchain. If it is a brand-new node and has no blockchain at all, it only knows one block, the genesis block, which is statically embedded in the client software. Starting with block #0 (the genesis block), the new node will have to download hundreds of thousands of blocks to synchronize with the network and reestablish the full blockchain. ((("blockchain (the)", "syncing the blockchain")))((("syncing")))The process of syncing the blockchain starts with the +version+ message, because that contains +BestHeight+, a node's current blockchain height (number of blocks). A node will see the +version+ messages from its peers, know how many blocks they each have, and be able to compare to how many blocks it has in its own blockchain. Peered nodes will exchange a +getblocks+ message that contains the hash (fingerprint) of the top block on their local blockchain. One of the peers will be able to identify the received hash as belonging to a block that is not at the top, but rather belongs to an older block, thus deducing that its own local blockchain is longer than its peer's. @@ -171,7 +171,7 @@ image::images/mbc2_0806.png["InventorySynchronization"] [[spv_nodes]] === Simplified Payment Verification (SPV) Nodes -((("bitcoin network", "SPV nodes", id="BNspvnodes08")))((("bitcoin nodes", "SPV nodes", id="BNospv08")))((("simplified-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. +((("Bitcoin network", "SPV nodes", id="BNspvnodes08")))((("Bitcoin nodes", "SPV nodes", id="BNospv08")))((("simplified-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 method that relies on peers to provide partial views of relevant parts of the blockchain on demand. @@ -181,7 +181,7 @@ SPV verifies transactions by reference to their _depth_ in the blockchain instea For example, when examining a transaction in block 300,000, a full node links all 300,000 blocks down to the genesis block and builds a full database of UTXO, establishing the validity of the transaction by confirming that the UTXO remains unspent. An SPV node cannot validate whether the UTXO is unspent. Instead, the SPV node will establish a link between the transaction and the block that contains it, using a _merkle path_ (see <>). Then, the SPV node waits until it sees the six blocks 300,001 through 300,006 piled on top of the block containing the transaction and verifies it by establishing its depth under blocks 300,006 to 300,001. The fact that other nodes on the network accepted block 300,000 and then did the necessary work to produce six more blocks on top of it is proof, by proxy, that the transaction was not a double-spend. -An SPV node cannot be persuaded that a transaction exists in a block when the transaction does not in fact exist. The SPV node establishes the existence of a transaction in a block by requesting a merkle path proof and by validating the Proof-of-Work in the chain of blocks. However, a transaction's existence can be "hidden" from an SPV node. An SPV node can definitely prove that a transaction exists but cannot verify that a transaction, such as a double-spend of the same UTXO, doesn't exist because it doesn't have a record of all transactions. This vulnerability can be used in a denial-of-service attack or for a double-spending attack against SPV nodes. To defend against this, an SPV node needs to connect randomly to several nodes, to increase the probability that it is in contact with at least one honest node. This need to randomly connect means that SPV nodes also are vulnerable to network partitioning attacks or Sybil attacks, where they are connected to fake nodes or fake networks and do not have access to honest nodes or the real bitcoin network. +An SPV node cannot be persuaded that a transaction exists in a block when the transaction does not in fact exist. The SPV node establishes the existence of a transaction in a block by requesting a merkle path proof and by validating the Proof-of-Work in the chain of blocks. However, a transaction's existence can be "hidden" from an SPV node. An SPV node can definitely prove that a transaction exists but cannot verify that a transaction, such as a double-spend of the same UTXO, doesn't exist because it doesn't have a record of all transactions. This vulnerability can be used in a denial-of-service attack or for a double-spending attack against SPV nodes. To defend against this, an SPV node needs to connect randomly to several nodes, to increase the probability that it is in contact with at least one honest node. This need to randomly connect means that SPV nodes also are vulnerable to network partitioning attacks or Sybil attacks, where they are connected to fake nodes or fake networks and do not have access to honest nodes or the real Bitcoin network. For most practical purposes, well-connected SPV nodes are secure enough, striking a balance between resource needs, practicality, and security. For infallible security, however, nothing beats running a full blockchain node. @@ -192,7 +192,7 @@ A full blockchain node verifies a transaction by checking the entire chain of th To get the block headers, SPV nodes use a +getheaders+ message instead of +getblocks+. The responding peer will send up to 2,000 block headers using a single +headers+ message. The process is otherwise the same as that used by a full node to retrieve full blocks. SPV nodes also set a filter on the connection to peers, to filter the stream of future blocks and transactions sent by the peers. Any transactions of interest are retrieved using a +getdata+ request. The peer generates a +tx+ message containing the transactions, in response. <> shows the synchronization of block headers. -Because SPV nodes need to retrieve specific transactions in order to selectively verify them, they also create a privacy risk. Unlike full blockchain nodes, which collect all transactions within each block, the SPV node's requests for specific data can inadvertently reveal the addresses in their wallet. For example, a third party monitoring a network could keep track of all the transactions requested by a wallet on an SPV node and use those to associate bitcoin addresses with the user of that wallet, destroying the user's privacy. +Because SPV nodes need to retrieve specific transactions in order to selectively verify them, they also create a privacy risk. Unlike full blockchain nodes, which collect all transactions within each block, the SPV node's requests for specific data can inadvertently reveal the addresses in their wallet. For example, a third party monitoring a network could keep track of all the transactions requested by a wallet on an SPV node and use those to associate Bitcoin addresses with the user of that wallet, destroying the user's privacy. [[spv_synchronization]] .SPV node synchronizing the block headers @@ -203,7 +203,7 @@ Shortly after the introduction of SPV/lightweight nodes, bitcoin developers adde [[bloom_filters]] === Bloom Filters -((("bitcoin network", "bloom filters", id="BNebloom08")))((("bloom filters", id="bloom08")))((("privacy, maintaining", id="privacy08")))((("security", "maintaining privacy", id="Sprivacy08")))A bloom filter is a probabilistic search filter that offers an efficient way to express a search pattern while protecting privacy. They are used by SPV nodes to ask their peers for transactions matching a specific pattern, without revealing exactly which addresses, keys, or transactions they are searching for. +((("Bitcoin network", "bloom filters", id="BNebloom08")))((("bloom filters", id="bloom08")))((("privacy, maintaining", id="privacy08")))((("security", "maintaining privacy", id="Sprivacy08")))A bloom filter is a probabilistic search filter that offers an efficient way to express a search pattern while protecting privacy. They are used by SPV nodes to ask their peers for transactions matching a specific pattern, without revealing exactly which addresses, keys, or transactions they are searching for. In our previous analogy, a tourist without a map is asking for directions to a specific address, "23 Church St." If she asks strangers for directions to this street, she inadvertently reveals her destination. A bloom filter is like asking, "Are there any streets in this neighborhood whose name ends in R-C-H?" A question like that reveals slightly less about the desired destination than asking for "23 Church St." Using this technique, a tourist could specify the desired address in more detail such as "ending in U-R-C-H" or less detail as "ending in H." By varying the precision of the search, the tourist reveals more or less information, at the expense of getting more or less specific results. If she asks a less specific pattern, she gets a lot more possible addresses and better privacy, but many of the results are irrelevant. If she asks for a very specific pattern, she gets fewer results but loses privacy. @@ -259,7 +259,7 @@ Bloom filters are used to filter the transactions (and blocks containing them) t ((("transaction IDs (txid)")))An SPV node will initialize a bloom filter as "empty"; in that state the bloom filter will not match any patterns. The SPV node will then make a list of all the addresses, keys, and hashes that it is interested in. It will do this by extracting the public key hash and script hash and transaction IDs from any UTXO controlled by its wallet. The SPV node then adds each of these to the bloom filter, so that the bloom filter will "match" if these patterns are present in a transaction, without revealing the patterns themselves. -((("bitcoin nodes", "full nodes")))The SPV node will then send a +filterload+ message to the peer, containing the bloom filter to use on the connection. On the peer, bloom filters are checked against each incoming transaction. The full node checks several parts of the transaction against the bloom filter, looking for a match including: +((("Bitcoin nodes", "full nodes")))The SPV node will then send a +filterload+ message to the peer, containing the bloom filter to use on the connection. On the peer, bloom filters are checked against each incoming transaction. The full node checks several parts of the transaction against the bloom filter, looking for a match including: * The transaction ID * The data components from the locking scripts of each of the transaction outputs (every key and hash in the script) @@ -287,7 +287,7 @@ Bloom filters are a way to reduce the loss of privacy. Without them, an SPV node === Encrypted and Authenticated Connections -((("bitcoin network", "encrypted connections")))((("encryption")))((("authentication")))Most new users of bitcoin assume that the network communications of a bitcoin node are encrypted. In fact, the original implementation of bitcoin communicates entirely in the clear. While this is not a major privacy concern for full nodes, it is a big problem for SPV nodes. +((("Bitcoin network", "encrypted connections")))((("encryption")))((("authentication")))Most new users of bitcoin assume that the network communications of a Bitcoin node are encrypted. In fact, the original implementation of bitcoin communicates entirely in the clear. While this is not a major privacy concern for full nodes, it is a big problem for SPV nodes. As a way to increase the privacy and security of the bitcoin P2P network, there are two solutions that provide encryption of the communications: _Tor Transport_ and _P2P Authentication and Encryption_ with BIP-150/151. @@ -295,7 +295,7 @@ As a way to increase the privacy and security of the bitcoin P2P network, there ((("Tor network")))((("The Onion Routing network (Tor)")))Tor, which stands for _The Onion Routing network_, is a software project and network that offers encryption and encapsulation of data through randomized network paths that offer anonymity, untraceability and privacy. -Bitcoin Core offers several configuration options that allow you to run a bitcoin node with its traffic transported over the Tor network. In addition, Bitcoin Core can also offer a Tor hidden service allowing other Tor nodes to connect to your node directly over Tor. +Bitcoin Core offers several configuration options that allow you to run a Bitcoin node with its traffic transported over the Tor network. In addition, Bitcoin Core can also offer a Tor hidden service allowing other Tor nodes to connect to your node directly over Tor. As of Bitcoin Core version 0.12, a node will offer a hidden Tor service automatically if it is able to connect to a local Tor service. If you have Tor installed and the Bitcoin Core process runs as a user with adequate permissions to access the Tor authentication cookie, it should work automatically. Use the +debug+ flag to turn on Bitcoin Core's debugging for the Tor service like this: @@ -309,19 +309,19 @@ You can find more instructions on running Bitcoin Core as a Tor hidden service i ==== Peer-to-Peer Authentication and Encryption -((("Peer-to-Peer authentication and encryption")))((("bitcoin improvement proposals", "Peer Authentication (BIP-150)")))((("bitcoin improvement proposals", "Peer-to-Peer Communication Encryption (BIP-151)")))Two Bitcoin Improvement Proposals, BIP-150 and BIP-151, add support for P2P authentication and encryption in the bitcoin P2P network. These two BIPs define optional services that may be offered by compatible bitcoin nodes. BIP-151 enables negotiated encryption for all communications between two nodes that support BIP-151. BIP-150 offers optional peer authentication that allows nodes to authenticate each other's identity using ECDSA and private keys. BIP-150 requires that prior to authentication the two nodes have established encrypted communications as per BIP-151. +((("Peer-to-Peer authentication and encryption")))((("bitcoin improvement proposals", "Peer Authentication (BIP-150)")))((("bitcoin improvement proposals", "Peer-to-Peer Communication Encryption (BIP-151)")))Two Bitcoin Improvement Proposals, BIP-150 and BIP-151, add support for P2P authentication and encryption in the bitcoin P2P network. These two BIPs define optional services that may be offered by compatible Bitcoin nodes. BIP-151 enables negotiated encryption for all communications between two nodes that support BIP-151. BIP-150 offers optional peer authentication that allows nodes to authenticate each other's identity using ECDSA and private keys. BIP-150 requires that prior to authentication the two nodes have established encrypted communications as per BIP-151. -As of February 2021, BIP-150 and BIP-151 are not implemented in Bitcoin Core. However, the two proposals have been implemented by at least one alternative bitcoin client named bcoin. +As of February 2021, BIP-150 and BIP-151 are not implemented in Bitcoin Core. However, the two proposals have been implemented by at least one alternative Bitcoin client named bcoin. BIP-150 and BIP-151 allow users to run SPV clients that connect to a trusted full node, using encryption and authentication to protect the privacy of the SPV client. -Additionally, authentication can be used to create networks of trusted bitcoin nodes and prevent Man-in-the-Middle attacks. Finally, P2P encryption, if deployed broadly, would strengthen the resistance of bitcoin to traffic analysis and privacy-eroding surveillance, especially in totalitarian countries where internet use is heavily controlled and monitored. +Additionally, authentication can be used to create networks of trusted Bitcoin nodes and prevent Man-in-the-Middle attacks. Finally, P2P encryption, if deployed broadly, would strengthen the resistance of bitcoin to traffic analysis and privacy-eroding surveillance, especially in totalitarian countries where internet use is heavily controlled and monitored. ((("", startref="BNospv08")))((("", startref="privacy08")))((("", startref="Sprivacy08")))The standard is defined in https://github.com/bitcoin/bips/blob/master/bip-0150.mediawiki[BIP-150 (Peer Authentication)] and https://github.com/bitcoin/bips/blob/master/bip-0151.mediawiki[BIP-151 (Peer-to-Peer Communication Encryption)]. === Transaction Pools -((("bitcoin network", "transaction pools")))((("transaction pools")))((("memory pools (mempools)")))Almost every node on the bitcoin network maintains a temporary list of unconfirmed transactions called the _memory pool_, _mempool_, or _transaction pool_. Nodes use this pool to keep track of transactions that are known to the network but are not yet included in the blockchain. For example, a wallet node will use the transaction pool to track incoming payments to the user's wallet that have been received on the network but are not yet confirmed. +((("Bitcoin network", "transaction pools")))((("transaction pools")))((("memory pools (mempools)")))Almost every node on the Bitcoin network maintains a temporary list of unconfirmed transactions called the _memory pool_, _mempool_, or _transaction pool_. Nodes use this pool to keep track of transactions that are known to the network but are not yet included in the blockchain. For example, a wallet node will use the transaction pool to track incoming payments to the user's wallet that have been received on the network but are not yet confirmed. As transactions are received and verified, they are added to the transaction pool and relayed to the neighboring nodes to propagate on the network. @@ -331,6 +331,6 @@ When a transaction is added to the transaction pool, the orphan pool is checked Both the transaction pool and orphan pool (where implemented) are stored in local memory and are not saved on persistent storage; rather, they are dynamically populated from incoming network messages. When a node starts, both pools are empty and are gradually populated with new transactions received on the network. -Some implementations of the bitcoin client also maintain an UTXO database or pool, which is the set of all unspent outputs on the blockchain. Bitcoin Core users will find it in the +chainstate/+ folder of their client's data directory. Although the name "UTXO pool" sounds similar to the transaction pool, it represents a different set of data. Unlike the transaction and orphan pools, the UTXO pool is not initialized empty but instead contains millions of entries of unspent transaction outputs, everything that is unspent from all the way back to the genesis block. The UTXO pool may be housed in local memory or as an indexed database table on persistent storage. +Some implementations of the Bitcoin client also maintain an UTXO database or pool, which is the set of all unspent outputs on the blockchain. Bitcoin Core users will find it in the +chainstate/+ folder of their client's data directory. Although the name "UTXO pool" sounds similar to the transaction pool, it represents a different set of data. Unlike the transaction and orphan pools, the UTXO pool is not initialized empty but instead contains millions of entries of unspent transaction outputs, everything that is unspent from all the way back to the genesis block. The UTXO pool may be housed in local memory or as an indexed database table on persistent storage. Whereas the transaction and orphan pools represent a single node's local perspective and might vary significantly from node to node depending upon when the node was started or restarted, the UTXO pool represents the emergent consensus of the network and therefore will vary little between nodes. Furthermore, the transaction and orphan pools only contain unconfirmed transactions, while the UTXO pool only contains confirmed outputs. diff --git a/ch09.asciidoc b/ch09.asciidoc index cf55cce4..7a92bbed 100644 --- a/ch09.asciidoc +++ b/ch09.asciidoc @@ -61,7 +61,7 @@ A second way to identify a block is by its position in the blockchain, called th In addition, the term _current block height_ indicates the size of the blockchain in blocks at any given time. For example, the current block height on March 1, 2021 was approximately 672,722, meaning there were 672,722 blocks stacked on top of the first block created in January 2009. -Unlike the block hash, the block height is not a unique identifier. Although a single block will always have a specific and invariant block height, the reverse is not true—the block height does not always identify a single block. Two or more blocks might have the same block height, competing for the same position in the blockchain. This scenario is discussed in detail in the section <>. The block height is also not a part of the block's data structure; it is not stored within the block. Each node dynamically identifies a block's position (height) in the blockchain when it is received from the bitcoin network. The block height might also be stored as metadata in an indexed database table for faster retrieval. +Unlike the block hash, the block height is not a unique identifier. Although a single block will always have a specific and invariant block height, the reverse is not true—the block height does not always identify a single block. Two or more blocks might have the same block height, competing for the same position in the blockchain. This scenario is discussed in detail in the section <>. The block height is also not a part of the block's data structure; it is not stored within the block. Each node dynamically identifies a block's position (height) in the blockchain when it is received from the Bitcoin network. The block height might also be stored as metadata in an indexed database table for faster retrieval. [TIP] ==== @@ -72,7 +72,7 @@ A block's _block hash_ always identifies a single block uniquely. A block also a ((("blocks", "genesis block")))((("blockchain (the)", "genesis block")))The first block in the blockchain is called the genesis block and was created in 2009. It is the common ancestor of all the blocks in the blockchain, meaning that if you start at any block and follow the chain backward in time, you will eventually arrive at the genesis block. -Every node always starts with a blockchain of at least one block because the genesis block is statically encoded within the bitcoin client software, such that it cannot be altered. Every node always "knows" the genesis block's hash and structure, the fixed time it was created, and even the single transaction within. Thus, every node has the starting point for the blockchain, a secure "root" from which to build a trusted blockchain. +Every node always starts with a blockchain of at least one block because the genesis block is statically encoded within the Bitcoin client software, such that it cannot be altered. Every node always "knows" the genesis block's hash and structure, the fixed time it was created, and even the single transaction within. Thus, every node has the starting point for the blockchain, a secure "root" from which to build a trusted blockchain. See the statically encoded genesis block inside the Bitcoin Core client, in https://bit.ly/1x6rcwP[_chainparams.cpp_]. @@ -123,7 +123,7 @@ Let's assume, for example, that a node has 277,314 blocks in the local copy of t 00000000000000027e7ba6fe7bad39faf3b5a83daed765f05f7d1b71a1632249 ---- -The bitcoin node then receives a new block from the network, which it parses as follows: +The Bitcoin node then receives a new block from the network, which it parses as follows: [source,json] ---- @@ -153,7 +153,7 @@ Looking at this new block, the node finds the +previousblockhash+ field, which c [[merkle_trees]] === Merkle Trees -((("merkle trees", id="merkle09")))((("blockchain (the)", "merkle trees", id="BCTmerkle09")))Each block in the bitcoin blockchain contains a summary of all the transactions in the block using a _merkle tree_. +((("merkle trees", id="merkle09")))((("blockchain (the)", "merkle trees", id="BCTmerkle09")))Each block in the Bitcoin blockchain contains a summary of all the transactions in the block using a _merkle tree_. ((("binary hash trees", see="merkle trees")))A _merkle tree_, also known as a _binary hash tree_, is a data structure used for efficiently summarizing and verifying the integrity of large sets of data. Merkle trees are binary trees containing cryptographic hashes. The term "tree" is used in computer science to describe a branching data structure, but these trees are usually displayed upside down with the "root" at the top and the "leaves" at the bottom of a diagram, as you will see in the examples that follow. @@ -196,7 +196,7 @@ image::images/mbc2_0903.png["merkle_tree_odd"] The same method for constructing a tree from four transactions can be generalized to construct trees of any size. In bitcoin it is common to have several hundred to more than a thousand transactions in a single block, which are summarized in exactly the same way, producing just 32 bytes of data as the single merkle root. In <>, you will see a tree built from 16 transactions. Note that although the root looks bigger than the leaf nodes in the diagram, it is the exact same size, just 32 bytes. Whether there is one transaction or a hundred thousand transactions in the block, the merkle root always summarizes them into 32 bytes. -((("authentication paths")))To prove that a specific transaction is included in a block, a node only needs to produce +log~2~(N)+ 32-byte hashes, constituting an _authentication path_ or _merkle path_ connecting the specific transaction to the root of the tree. This is especially important as the number of transactions increases, because the base-2 logarithm of the number of transactions increases much more slowly. This allows bitcoin nodes to efficiently produce paths of 10 or 12 hashes (320–384 bytes), which can provide proof of a single transaction out of more than a thousand transactions in a megabyte-sized block. +((("authentication paths")))To prove that a specific transaction is included in a block, a node only needs to produce +log~2~(N)+ 32-byte hashes, constituting an _authentication path_ or _merkle path_ connecting the specific transaction to the root of the tree. This is especially important as the number of transactions increases, because the base-2 logarithm of the number of transactions increases much more slowly. This allows Bitcoin nodes to efficiently produce paths of 10 or 12 hashes (320–384 bytes), which can provide proof of a single transaction out of more than a thousand transactions in a megabyte-sized block. [[merkle_tree_large]] .A merkle tree summarizing many data elements @@ -261,13 +261,13 @@ As you can see from the table, while the block size increases rapidly, from 4 KB === Merkle Trees and Simplified Payment Verification (SPV) -((("simplified-payment-verification (SPV)")))((("bitcoin nodes", "SPV nodes")))Merkle trees are used extensively by SPV nodes. SPV nodes don't have all transactions and do not download full blocks, just block headers. In order to verify that a transaction is included in a block, without having to download all the transactions in the block, they use an authentication path, or merkle path. +((("simplified-payment-verification (SPV)")))((("Bitcoin nodes", "SPV nodes")))Merkle trees are used extensively by SPV nodes. SPV nodes don't have all transactions and do not download full blocks, just block headers. In order to verify that a transaction is included in a block, without having to download all the transactions in the block, they use an authentication path, or merkle path. Consider, for example, an SPV node that is interested in incoming payments to an address contained in its wallet. The SPV node will establish a bloom filter (see <>) on its connections to peers to limit the transactions received to only those containing addresses of interest. When a peer sees a transaction that matches the bloom filter, it will send that block using a +merkleblock+ message. The +merkleblock+ message contains the block header as well as a merkle path that links the transaction of interest to the merkle root in the block. The SPV node can use this merkle path to connect the transaction to the block and verify that the transaction is included in the block. The SPV node also uses the block header to link the block to the rest of the blockchain. The combination of these two links, between the transaction and block, and between the block and blockchain, proves that the transaction is recorded in the blockchain. All in all, the SPV node will have received less than a kilobyte of data for the block header and merkle path, an amount of data that is more than a thousand times less than a full block (about 1 megabyte currently).((("", startref="BCTmerkle09")))((("", startref="merkle09"))) === Bitcoin's Test Blockchains -((("blockchain (the)", "test blockchains", id="BCTtest09")))((("mainnet", seealso="blockchain (the)")))You might be surprised to learn that there is more than one bitcoin blockchain. The "main" bitcoin blockchain, the one created by Satoshi Nakamoto on January 3rd, 2009, the one with the genesis block we studied in this chapter, is called _mainnet_. There are other bitcoin blockchains that are used for testing purposes: at this time _testnet_, _segnet_, and _regtest_. Let's look at each in turn.((("testnet", id="testnet09"))) +((("blockchain (the)", "test blockchains", id="BCTtest09")))((("mainnet", seealso="blockchain (the)")))You might be surprised to learn that there is more than one Bitcoin blockchain. The "main" Bitcoin blockchain, the one created by Satoshi Nakamoto on January 3rd, 2009, the one with the genesis block we studied in this chapter, is called _mainnet_. There are other Bitcoin blockchains that are used for testing purposes: at this time _testnet_, _segnet_, and _regtest_. Let's look at each in turn.((("testnet", id="testnet09"))) ==== Testnet—Bitcoin's Testing Playground diff --git a/ch10.asciidoc b/ch10.asciidoc index 6af7a68a..8d4a1450 100644 --- a/ch10.asciidoc +++ b/ch10.asciidoc @@ -6,7 +6,7 @@ ((("mining and consensus", "purpose of")))The word "mining" is somewhat misleading. By evoking the extraction of precious metals, it focuses our attention on the reward for mining, the new bitcoin created in each block. Although mining is incentivized by this reward, the primary purpose of mining is not the reward or the generation of new coins. If you view mining only as the process by which coins are created, you are mistaking the means (incentives) as the goal of the process. Mining is the mechanism that underpins the decentralized clearinghouse, by which transactions are validated and cleared. Mining is the invention that makes bitcoin special, a decentralized security mechanism that is the basis for P2P digital cash. -((("mining and consensus", "decentralized consensus")))((("central trusted authority")))Mining _secures the bitcoin system_ and enables the emergence of network-wide _consensus without a central authority_. ((("fees", "transaction fees")))The reward of newly minted coins and transaction fees is an incentive scheme that aligns the actions of miners with the security of the network, while simultaneously implementing the monetary supply. +((("mining and consensus", "decentralized consensus")))((("central trusted authority")))Mining _secures the Bitcoin system_ and enables the emergence of network-wide _consensus without a central authority_. ((("fees", "transaction fees")))The reward of newly minted coins and transaction fees is an incentive scheme that aligns the actions of miners with the security of the network, while simultaneously implementing the monetary supply. [TIP] ==== @@ -23,7 +23,7 @@ Bitcoin miners also earn fees from transactions. Every transaction usually inclu In this chapter, we will first examine mining as a monetary supply mechanism and then look at the most important function of mining: the decentralized consensus mechanism that underpins bitcoin's security. -To understand mining and consensus, we will follow Alice's transaction as it is received and added to a block by Jing's mining equipment. Then we will follow the block as it is mined, added to the blockchain, and accepted by the bitcoin network through the process of emergent consensus. +To understand mining and consensus, we will follow Alice's transaction as it is received and added to a block by Jing's mining equipment. Then we will follow the block as it is mined, added to the blockchain, and accepted by the Bitcoin network through the process of emergent consensus. ==== Bitcoin Economics and Currency Creation @@ -80,9 +80,9 @@ It remains to be seen whether the deflationary aspect of the currency is a probl === Decentralized Consensus -((("mining and consensus", "decentralized consensus")))((("decentralized systems", "consensus in")))In the previous chapter we looked at the blockchain, the global public ledger (list) of all transactions, which everyone in the bitcoin network accepts as the authoritative record of ownership. +((("mining and consensus", "decentralized consensus")))((("decentralized systems", "consensus in")))In the previous chapter we looked at the blockchain, the global public ledger (list) of all transactions, which everyone in the Bitcoin network accepts as the authoritative record of ownership. -But how can everyone in the network agree on a single universal "truth" about who owns what, without having to trust anyone? All traditional payment systems depend on a trust model that has a central authority providing a clearinghouse service, basically verifying and clearing all transactions. Bitcoin has no central authority, yet somehow every full node has a complete copy of a public ledger that it can trust as the authoritative record. The blockchain is not created by a central authority, but is assembled independently by every node in the network. Somehow, every node in the network, acting on information transmitted across insecure network connections, can arrive at the same conclusion and assemble a copy of the same public ledger as everyone else. This chapter examines the process by which the bitcoin network achieves global consensus without central authority. +But how can everyone in the network agree on a single universal "truth" about who owns what, without having to trust anyone? All traditional payment systems depend on a trust model that has a central authority providing a clearinghouse service, basically verifying and clearing all transactions. Bitcoin has no central authority, yet somehow every full node has a complete copy of a public ledger that it can trust as the authoritative record. The blockchain is not created by a central authority, but is assembled independently by every node in the network. Somehow, every node in the network, acting on information transmitted across insecure network connections, can arrive at the same conclusion and assemble a copy of the same public ledger as everyone else. This chapter examines the process by which the Bitcoin network achieves global consensus without central authority. ((("emergent consensus")))((("mining and consensus", "emergent consensus")))Satoshi Nakamoto's main invention is the decentralized mechanism for _emergent consensus_. Emergent, because consensus is not achieved explicitly—there is no election or fixed moment when consensus occurs. Instead, consensus is an emergent artifact of the asynchronous interaction of thousands of independent nodes, all following simple rules. All the properties of bitcoin, including currency, transactions, payments, and the security model that does not depend on central authority or trust, derive from this invention. @@ -94,14 +94,14 @@ Bitcoin's decentralized consensus emerges from the interplay of four processes t * Independent verification of the new blocks by every node and assembly into a chain * Independent selection, by every node, of the chain with the most cumulative computation demonstrated through Proof-of-Work -In the next few sections we will examine these processes and how they interact to create the emergent property of network-wide consensus that allows any bitcoin node to assemble its own copy of the authoritative, trusted, public, global ledger. +In the next few sections we will examine these processes and how they interact to create the emergent property of network-wide consensus that allows any Bitcoin node to assemble its own copy of the authoritative, trusted, public, global ledger. [[tx_verification]] === Independent Verification of Transactions -((("mining and consensus", "independent transaction verification")))((("transactions", "independent verification of")))In <>, we saw how wallet software creates transactions by collecting UTXO, providing the appropriate unlocking scripts, and then constructing new outputs assigned to a new owner. The resulting transaction is then sent to the neighboring nodes in the bitcoin network so that it can be propagated across the entire bitcoin network. +((("mining and consensus", "independent transaction verification")))((("transactions", "independent verification of")))In <>, we saw how wallet software creates transactions by collecting UTXO, providing the appropriate unlocking scripts, and then constructing new outputs assigned to a new owner. The resulting transaction is then sent to the neighboring nodes in the Bitcoin network so that it can be propagated across the entire Bitcoin network. -However, before forwarding transactions to its neighbors, every bitcoin node that receives a transaction will first verify the transaction. This ensures that only valid transactions are propagated across the network, while invalid transactions are discarded at the first node that encounters them. +However, before forwarding transactions to its neighbors, every Bitcoin node that receives a transaction will first verify the transaction. This ensures that only valid transactions are propagated across the network, while invalid transactions are discarded at the first node that encounters them. Each node verifies every transaction against a long checklist of criteria: @@ -130,17 +130,17 @@ By independently verifying each transaction as it is received and before propaga === Mining Nodes -((("mining and consensus", "mining nodes")))((("bitcoin nodes", "mining nodes")))Some of the nodes on the bitcoin network are specialized nodes called _miners_. In <> we introduced ((("use cases", "mining for bitcoin", id="jingten")))Jing, a computer engineering student in Shanghai, China, who is a bitcoin miner. Jing earns bitcoin by running a "mining rig," which is a specialized computer-hardware system designed to mine bitcoin. Jing's specialized mining hardware is connected to a server running a full bitcoin node. Unlike Jing, some miners mine without a full node, as we will see in <>. Like every other full node, Jing's node receives and propagates unconfirmed transactions on the bitcoin network. Jing's node, however, also aggregates these transactions into new blocks. +((("mining and consensus", "mining nodes")))((("Bitcoin nodes", "mining nodes")))Some of the nodes on the Bitcoin network are specialized nodes called _miners_. In <> we introduced ((("use cases", "mining for bitcoin", id="jingten")))Jing, a computer engineering student in Shanghai, China, who is a bitcoin miner. Jing earns bitcoin by running a "mining rig," which is a specialized computer-hardware system designed to mine bitcoin. Jing's specialized mining hardware is connected to a server running a full Bitcoin node. Unlike Jing, some miners mine without a full node, as we will see in <>. Like every other full node, Jing's node receives and propagates unconfirmed transactions on the Bitcoin network. Jing's node, however, also aggregates these transactions into new blocks. -Jing's node is listening for new blocks, propagated on the bitcoin network, as do all nodes. However, the arrival of a new block has special significance for a mining node. The competition among miners effectively ends with the propagation of a new block that acts as an announcement of a winner. To miners, receiving a valid new block means someone else won the competition and they lost. However, the end of one round of a competition is also the beginning of the next round. The new block is not just a checkered flag, marking the end of the race; it is also the starting pistol in the race for the next block. +Jing's node is listening for new blocks, propagated on the Bitcoin network, as do all nodes. However, the arrival of a new block has special significance for a mining node. The competition among miners effectively ends with the propagation of a new block that acts as an announcement of a winner. To miners, receiving a valid new block means someone else won the competition and they lost. However, the end of one round of a competition is also the beginning of the next round. The new block is not just a checkered flag, marking the end of the race; it is also the starting pistol in the race for the next block. === Aggregating Transactions into Blocks -((("mining and consensus", "aggregating transactions into blocks", id="MACaggreg10")))((("transactions", "aggregating into blocks", id="Taggreg10")))((("blocks", "aggregating transactions into", id="Baggreg10")))((("blocks", "candidate blocks")))((("candidate blocks")))((("transaction pools")))((("memory pools (mempools)")))After validating transactions, a bitcoin node will add them to the _memory pool_, or _transaction pool_, where transactions await until they can be included (mined) into a block. Jing's node collects, validates, and relays new transactions just like any other node. Unlike other nodes, however, Jing's node will then aggregate these transactions into a _candidate block_. +((("mining and consensus", "aggregating transactions into blocks", id="MACaggreg10")))((("transactions", "aggregating into blocks", id="Taggreg10")))((("blocks", "aggregating transactions into", id="Baggreg10")))((("blocks", "candidate blocks")))((("candidate blocks")))((("transaction pools")))((("memory pools (mempools)")))After validating transactions, a Bitcoin node will add them to the _memory pool_, or _transaction pool_, where transactions await until they can be included (mined) into a block. Jing's node collects, validates, and relays new transactions just like any other node. Unlike other nodes, however, Jing's node will then aggregate these transactions into a _candidate block_. Let's follow the blocks that were created during the time Alice bought a cup of coffee from Bob's Cafe (see <>). Alice's transaction was included in block 277,316. For the purpose of demonstrating the concepts in this chapter, let's assume that block was mined by Jing's mining system and follow Alice's transaction as it becomes part of this new block. -Jing's mining node maintains a local copy of the blockchain. By the time ((("use cases", "buying coffee")))Alice buys the cup of coffee, Jing's node has assembled a chain up to block 277,314. Jing's node is listening for transactions, trying to mine a new block and also listening for blocks discovered by other nodes. As Jing's node is mining, it receives block 277,315 through the bitcoin network. The arrival of this block signifies the end of the competition for block 277,315 and the beginning of the competition to create block 277,316. +Jing's mining node maintains a local copy of the blockchain. By the time ((("use cases", "buying coffee")))Alice buys the cup of coffee, Jing's node has assembled a chain up to block 277,314. Jing's node is listening for transactions, trying to mine a new block and also listening for blocks discovered by other nodes. As Jing's node is mining, it receives block 277,315 through the Bitcoin network. The arrival of this block signifies the end of the competition for block 277,315 and the beginning of the competition to create block 277,316. During the previous 10 minutes, while Jing's node was searching for a solution to block 277,315, it was also collecting transactions in preparation for the next block. By now it has collected a few hundred transactions in the memory pool. Upon receiving block 277,315 and validating it, Jing's node will also compare it against all the transactions in the memory pool and remove any that were included in block 277,315. Whatever transactions remain in the memory pool are unconfirmed and are waiting to be recorded in a new block. @@ -240,7 +240,7 @@ $ bitcoin-cli getrawtransaction d5ada064c6417ca25c4308bd158c34b77e1c0eca2a73cda1 ---- ==== -Unlike regular transactions, the coinbase transaction does not consume (spend) UTXO as inputs. Instead, it has only one input, called the _coinbase_, which creates bitcoin from nothing. The coinbase transaction has one output, payable to the miner's own bitcoin address. The output of the coinbase transaction sends the value of 25.09094928 bitcoin to the miner's bitcoin address; in this case it is +1MxTkeEP2PmHSMze5tUZ1hAV3YTKu2Gh1N+. +Unlike regular transactions, the coinbase transaction does not consume (spend) UTXO as inputs. Instead, it has only one input, called the _coinbase_, which creates bitcoin from nothing. The coinbase transaction has one output, payable to the miner's own Bitcoin address. The output of the coinbase transaction sends the value of 25.09094928 bitcoin to the miner's Bitcoin address; in this case it is +1MxTkeEP2PmHSMze5tUZ1hAV3YTKu2Gh1N+. ==== Coinbase Reward and Fees @@ -412,7 +412,7 @@ With all the other fields filled, the block header is now complete and the proce === Mining the Block -((("mining and consensus", "mining the block", id="MACmining10")))Now that a candidate block has been constructed by Jing's node, it is time for Jing's hardware mining rig to "mine" the block, to find a solution to the Proof-of-Work algorithm that makes the block valid. Throughout this book we have studied cryptographic hash functions as used in various aspects of the bitcoin system. The hash function SHA256 is the function used in bitcoin's mining process.((("", startref="jingten"))) +((("mining and consensus", "mining the block", id="MACmining10")))Now that a candidate block has been constructed by Jing's node, it is time for Jing's hardware mining rig to "mine" the block, to find a solution to the Proof-of-Work algorithm that makes the block valid. Throughout this book we have studied cryptographic hash functions as used in various aspects of the Bitcoin system. The hash function SHA256 is the function used in bitcoin's mining process.((("", startref="jingten"))) ((("mining and consensus", "defined")))In the simplest terms, mining is the process of hashing the block header repeatedly, changing one parameter, until the resulting hash matches a specific target. The hash function's result cannot be determined in advance, nor can a pattern be created that will produce a specific hash value. This feature of hash functions means that the only way to produce a hash result matching a specific target is to try again and again, randomly modifying the input until the desired hash result appears by chance. @@ -509,7 +509,7 @@ The Proof-of-Work must produce a hash that is _equal to or less than_ the target ==== -((("targets")))Bitcoin's Proof-of-Work is very similar to the challenge shown in <>. The miner constructs a candidate block filled with transactions. Next, the miner calculates the hash of this block's header and sees if it is equal to or smaller than the current _target_. If the hash is greater than the target, the miner will modify the nonce (usually just incrementing it by one) and try again. At the current difficulty in the bitcoin network, miners have to try quadrillions of times before finding a nonce that results in a low enough block header hash. +((("targets")))Bitcoin's Proof-of-Work is very similar to the challenge shown in <>. The miner constructs a candidate block filled with transactions. Next, the miner calculates the hash of this block's header and sees if it is equal to or smaller than the current _target_. If the hash is greater than the target, the miner will modify the nonce (usually just incrementing it by one) and try again. At the current difficulty in the Bitcoin network, miners have to try quadrillions of times before finding a nonce that results in a low enough block header hash. A very simplified Proof-of-Work algorithm is implemented in Python in <>. @@ -763,14 +763,14 @@ In the next section we will look at how discrepancies between competing chains ( [[forks]] ==== Blockchain Forks -((("mining and consensus", "assembling and selecting chains of blocks", "blockchain forks")))((("blockchain (the)", "blockchain forks", id="BCTfork10")))((("forks", "blockchain fork events", id="forks10")))Because the blockchain is a decentralized data structure, different copies of it are not always consistent. Blocks might arrive at different nodes at different times, causing the nodes to have different perspectives of the blockchain. To resolve this, each node always selects and attempts to extend the chain of blocks that represents the most Proof-of-Work, also known as the longest chain or greatest cumulative work chain. By summing the work recorded in each block in a chain, a node can calculate the total amount of work that has been expended to create that chain. As long as all nodes select the greatest-cumulative-work chain, the global bitcoin network eventually converges to a consistent state. Forks occur as temporary inconsistencies between versions of the blockchain, which are resolved by eventual reconvergence as more blocks are added to one of the forks. +((("mining and consensus", "assembling and selecting chains of blocks", "blockchain forks")))((("blockchain (the)", "blockchain forks", id="BCTfork10")))((("forks", "blockchain fork events", id="forks10")))Because the blockchain is a decentralized data structure, different copies of it are not always consistent. Blocks might arrive at different nodes at different times, causing the nodes to have different perspectives of the blockchain. To resolve this, each node always selects and attempts to extend the chain of blocks that represents the most Proof-of-Work, also known as the longest chain or greatest cumulative work chain. By summing the work recorded in each block in a chain, a node can calculate the total amount of work that has been expended to create that chain. As long as all nodes select the greatest-cumulative-work chain, the global Bitcoin network eventually converges to a consistent state. Forks occur as temporary inconsistencies between versions of the blockchain, which are resolved by eventual reconvergence as more blocks are added to one of the forks. [TIP] ==== The blockchain forks described in this section occur naturally (accidentally) as a result of transmission delays in the global network. Later in this chapter, we will also look at deliberately induced forks (hard forks and soft forks), which are used to modify the consensus rules. ==== -In the next few diagrams, we follow the progress of a "fork" event across the network. The diagram is a simplified representation of the bitcoin network. For illustration purposes, different blocks are shown as different shapes (star, triangle, upside-down triangle, rhombus), spreading across the network. Each node in the network is represented as a circle. +In the next few diagrams, we follow the progress of a "fork" event across the network. The diagram is a simplified representation of the Bitcoin network. For illustration purposes, different blocks are shown as different shapes (star, triangle, upside-down triangle, rhombus), spreading across the network. Each node in the network is represented as a circle. Each node has its own perspective of the global blockchain. As each node receives blocks from its neighbors, it updates its own copy of the blockchain, selecting the greatest-cumulative-work chain. For illustration purposes, each node contains a shape that represents the block that it believes is currently the tip of the main chain. So, if you see a star shape in the node, that means that the star block is the tip of the main chain, as far as that node is concerned. @@ -829,9 +829,9 @@ Bitcoin's block interval of 10 minutes is a design compromise between fast confi === Mining and the Hashing Race -((("mining and consensus", "hashing power race", id="MAChash10")))Bitcoin mining is an extremely competitive industry. The hashing power has increased exponentially every year of bitcoin's existence. Some years the growth has reflected a complete change of technology, such as in 2010 and 2011 when many miners switched from using CPU mining to GPU mining and field programmable gate array (FPGA) mining. In 2013 the introduction of ASIC mining lead to another giant leap in mining power, by placing the SHA256 function directly on silicon chips specialized for the purpose of mining. The first such chips could deliver more mining power in a single box than the entire bitcoin network in 2010. +((("mining and consensus", "hashing power race", id="MAChash10")))Bitcoin mining is an extremely competitive industry. The hashing power has increased exponentially every year of bitcoin's existence. Some years the growth has reflected a complete change of technology, such as in 2010 and 2011 when many miners switched from using CPU mining to GPU mining and field programmable gate array (FPGA) mining. In 2013 the introduction of ASIC mining lead to another giant leap in mining power, by placing the SHA256 function directly on silicon chips specialized for the purpose of mining. The first such chips could deliver more mining power in a single box than the entire Bitcoin network in 2010. -The following list shows the total hashing power of the bitcoin network in terahashes/sec (TH/sec), since its inception in 2009 (source: Blockchain.com): +The following list shows the total hashing power of the Bitcoin network in terahashes/sec (TH/sec), since its inception in 2009 (source: Blockchain.com): 2009:: 0.000004 – 0.00001 TH/sec (2.40× growth) 2010:: 0.00001 – 0.14 TH/sec (14,247× growth) @@ -846,7 +846,7 @@ The following list shows the total hashing power of the bitcoin network in terah 2019:: 41,801,528 – 109,757,127 TH/sec (2.62× growth) 2020:: 109,757,127 – 149,064,869 TH/sec (1.35× 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). +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). [[network_hashing_power]] .Total hashing power, terahashes per second (TH/sec) (chart on a linear scale) @@ -882,33 +882,33 @@ Let's look at a specific example. Assume a miner has purchased mining hardware w If the miner does find a single block in that timeframe, the payout of 6.25 bitcoin, at approximately $1,000 per bitcoin, will result in a single payout of $6,250, which will produce a net profit of about $750. However, the chance of finding a block in a 4-year period depends on the miner's luck. He might find two blocks in 4 years and make a larger profit. Or he might not find a block for 5 years and suffer a big financial loss. Even worse, the difficulty of the bitcoin Proof-of-Work algorithm is likely to go up significantly over that period, at the current rate of growth of hashing power, meaning the miner has, at most, one year to break even before the hardware is effectively obsolete and must be replaced by more powerful mining hardware. Financially this only makes sense at very low electricity cost (less than 1 cent per kW-hour) and only at very large scale. -Mining pools coordinate many hundreds or thousands of miners, over specialized pool-mining protocols. The individual miners configure their mining equipment to connect to a pool server, and specify a bitcoin address, which will receive their share of the rewards. Their mining hardware remains connected to the pool server while mining, synchronizing their efforts with the other miners. Thus, the pool miners share the effort to mine a block and then share in the rewards. +Mining pools coordinate many hundreds or thousands of miners, over specialized pool-mining protocols. The individual miners configure their mining equipment to connect to a pool server, and specify a Bitcoin address, which will receive their share of the rewards. Their mining hardware remains connected to the pool server while mining, synchronizing their efforts with the other miners. Thus, the pool miners share the effort to mine a block and then share in the rewards. -Successful blocks pay the reward to a pool bitcoin address, rather than individual miners. The pool server will periodically make payments to the miners' bitcoin addresses, once their share of the rewards has reached a certain threshold. Typically, the pool server charges a percentage fee of the rewards for providing the pool-mining service. +Successful blocks pay the reward to a pool Bitcoin address, rather than individual miners. The pool server will periodically make payments to the miners' Bitcoin addresses, once their share of the rewards has reached a certain threshold. Typically, the pool server charges a percentage fee of the rewards for providing the pool-mining service. -((("mining pools", "operation of")))Miners participating in a pool split the work of searching for a solution to a candidate block, earning "shares" for their mining contribution. The mining pool sets a higher target (lower difficulty) for earning a share, typically more than 1,000 times easier than the bitcoin network's target. When someone in the pool successfully mines a block, the reward is earned by the pool and then shared with all miners in proportion to the number of shares they contributed to the effort. +((("mining pools", "operation of")))Miners participating in a pool split the work of searching for a solution to a candidate block, earning "shares" for their mining contribution. The mining pool sets a higher target (lower difficulty) for earning a share, typically more than 1,000 times easier than the Bitcoin network's target. When someone in the pool successfully mines a block, the reward is earned by the pool and then shared with all miners in proportion to the number of shares they contributed to the effort. -Pools are open to any miner, big or small, professional or amateur. A pool will therefore have some participants with a single small mining machine, and others with a garage full of high-end mining hardware. Some will be mining with a few tens of a kilowatt of electricity, others will be running a data center consuming a megawatt of power. How does a mining pool measure the individual contributions, so as to fairly distribute the rewards, without the possibility of cheating? The answer is to use bitcoin's Proof-of-Work algorithm to measure each pool miner's contribution, but set at a lower difficulty so that even the smallest pool miners win a share frequently enough to make it worthwhile to contribute to the pool. By setting a lower difficulty for earning shares, the pool measures the amount of work done by each miner. Each time a pool miner finds a block header hash that is equal to or less than the pool target, she proves she has done the hashing work to find that result. More importantly, the work to find shares contributes, in a statistically measurable way, to the overall effort to find a hash equal to or lower than the bitcoin network's target. Thousands of miners trying to find low-value hashes will eventually find one low enough to satisfy the bitcoin network target. +Pools are open to any miner, big or small, professional or amateur. A pool will therefore have some participants with a single small mining machine, and others with a garage full of high-end mining hardware. Some will be mining with a few tens of a kilowatt of electricity, others will be running a data center consuming a megawatt of power. How does a mining pool measure the individual contributions, so as to fairly distribute the rewards, without the possibility of cheating? The answer is to use bitcoin's Proof-of-Work algorithm to measure each pool miner's contribution, but set at a lower difficulty so that even the smallest pool miners win a share frequently enough to make it worthwhile to contribute to the pool. By setting a lower difficulty for earning shares, the pool measures the amount of work done by each miner. Each time a pool miner finds a block header hash that is equal to or less than the pool target, she proves she has done the hashing work to find that result. More importantly, the work to find shares contributes, in a statistically measurable way, to the overall effort to find a hash equal to or lower than the Bitcoin network's target. Thousands of miners trying to find low-value hashes will eventually find one low enough to satisfy the Bitcoin network target. Let's return to the analogy of a dice game. If the dice players are throwing dice with a goal of throwing equal to or less than four (the overall network difficulty), a pool would set an easier target, counting how many times the pool players managed to throw equal to or less than eight. When pool players throw equal to or less than eight (the pool share target) but higher than four (higher than the overall network difficulty), they earn shares, but neither they nor the pool win the game because they don't achieve the game target (equal to or less than four). The pool players will achieve the easier pool target much more often, earning them shares very regularly, even when they don't achieve the harder target of winning the game. Every now and then, one of the pool players will throw a combined dice throw of equal to or less than four, the pool player wins a share and the whole pool wins the game. Then, the earnings can be distributed to the pool players based on the amount of shares each one has earned. Even though the target of eight-or-less wasn't winning, it was a fair way to measure dice throws for the players, and it occasionally produces a four-or-less throw. -Similarly, a mining pool will set a (higher and easier) pool target that will ensure that an individual pool miner can find block header hashes that are equal to or less than the pool target often, earning shares. Every now and then, one of these attempts will produce a block header hash that is equal to or less than the bitcoin network target, making it a valid block and the whole pool wins. +Similarly, a mining pool will set a (higher and easier) pool target that will ensure that an individual pool miner can find block header hashes that are equal to or less than the pool target often, earning shares. Every now and then, one of these attempts will produce a block header hash that is equal to or less than the Bitcoin network target, making it a valid block and the whole pool wins. ===== Managed pools ((("mining pools", "managed pools")))((("pool operators", seealso="mining pools")))Most mining pools are "managed," meaning that there is a company or individual running a pool server. The owner of the pool server is called the _pool operator_, and he charges pool miners a percentage fee of the earnings. -The pool server runs specialized software and a pool-mining protocol that coordinate the activities of the pool miners. The pool server is also connected to one or more full bitcoin nodes and has direct access to a full copy of the blockchain database. This allows the pool server to validate blocks and transactions on behalf of the pool miners, relieving them of the burden of running a full node. For pool miners, this is an important consideration, because a full node requires a dedicated computer with at least 300 to 350 GB of persistent storage (disk) and at least 2 to 4 GB of memory (RAM). Furthermore, the bitcoin software running on the full node needs to be monitored, maintained, and upgraded frequently. Any downtime caused by a lack of maintenance or lack of resources will hurt the miner's profitability. For many miners, the ability to mine without running a full node is another big benefit of joining a managed pool. +The pool server runs specialized software and a pool-mining protocol that coordinate the activities of the pool miners. The pool server is also connected to one or more full Bitcoin nodes and has direct access to a full copy of the blockchain database. This allows the pool server to validate blocks and transactions on behalf of the pool miners, relieving them of the burden of running a full node. For pool miners, this is an important consideration, because a full node requires a dedicated computer with at least 300 to 350 GB of persistent storage (disk) and at least 2 to 4 GB of memory (RAM). Furthermore, the bitcoin software running on the full node needs to be monitored, maintained, and upgraded frequently. Any downtime caused by a lack of maintenance or lack of resources will hurt the miner's profitability. For many miners, the ability to mine without running a full node is another big benefit of joining a managed pool. -Pool miners connect to the pool server using a mining protocol such as Stratum (STM) or GetBlockTemplate (GBT). An older standard called GetWork (GWK) has been mostly obsolete since late 2012, because it does not easily support mining at hash rates above 4 GH/s. Both the STM and GBT protocols create block _templates_ that contain a template of a candidate block header. The pool server constructs a candidate block by aggregating transactions, adding a coinbase transaction (with extra nonce space), calculating the merkle root, and linking to the previous block hash. The header of the candidate block is then sent to each of the pool miners as a template. Each pool miner then mines using the block template, at a higher (easier) target than the bitcoin network target, and sends any successful results back to the pool server to earn shares. +Pool miners connect to the pool server using a mining protocol such as Stratum (STM) or GetBlockTemplate (GBT). An older standard called GetWork (GWK) has been mostly obsolete since late 2012, because it does not easily support mining at hash rates above 4 GH/s. Both the STM and GBT protocols create block _templates_ that contain a template of a candidate block header. The pool server constructs a candidate block by aggregating transactions, adding a coinbase transaction (with extra nonce space), calculating the merkle root, and linking to the previous block hash. The header of the candidate block is then sent to each of the pool miners as a template. Each pool miner then mines using the block template, at a higher (easier) target than the Bitcoin network target, and sends any successful results back to the pool server to earn shares. ===== Peer-to-peer mining pool (P2Pool) ((("mining pools", "peer-to-peer pools (P2Pool)")))((("peer-to-peer pools (P2Pool)")))Managed pools create the possibility of cheating by the pool operator, who might direct the pool effort to double-spend transactions or invalidate blocks (see <>). Furthermore, centralized pool servers represent a single-point-of-failure. If the pool server is down or is slowed by a denial-of-service attack, the pool miners cannot mine. In 2011, to resolve these issues of centralization, a new pool mining method was proposed and implemented: P2Pool, a peer-to-peer mining pool without a central operator. -P2Pool works by decentralizing the functions of the pool server, implementing a parallel blockchain-like system called a _share chain_. A share chain is a blockchain running at a lower difficulty than the bitcoin blockchain. The share chain allows pool miners to collaborate in a decentralized pool by mining shares on the share chain at a rate of one share block every 30 seconds. Each of the blocks on the share chain records a proportionate share reward for the pool miners who contribute work, carrying the shares forward from the previous share block. When one of the share blocks also achieves the bitcoin network target, it is propagated and included on the bitcoin blockchain, rewarding all the pool miners who contributed to all the shares that preceded the winning share block. Essentially, instead of a pool server keeping track of pool miner shares and rewards, the share chain allows all pool miners to keep track of all shares using a decentralized consensus mechanism like bitcoin's blockchain consensus mechanism. +P2Pool works by decentralizing the functions of the pool server, implementing a parallel blockchain-like system called a _share chain_. A share chain is a blockchain running at a lower difficulty than the Bitcoin blockchain. The share chain allows pool miners to collaborate in a decentralized pool by mining shares on the share chain at a rate of one share block every 30 seconds. Each of the blocks on the share chain records a proportionate share reward for the pool miners who contribute work, carrying the shares forward from the previous share block. When one of the share blocks also achieves the Bitcoin network target, it is propagated and included on the Bitcoin blockchain, rewarding all the pool miners who contributed to all the shares that preceded the winning share block. Essentially, instead of a pool server keeping track of pool miner shares and rewards, the share chain allows all pool miners to keep track of all shares using a decentralized consensus mechanism like bitcoin's blockchain consensus mechanism. -P2Pool mining is more complex than pool mining because it requires that the pool miners run a dedicated computer with enough disk space, memory, and internet bandwidth to support a full bitcoin node and the P2Pool node software. P2Pool miners connect their mining hardware to their local P2Pool node, which simulates the functions of a pool server by sending block templates to the mining hardware. On P2Pool, individual pool miners construct their own candidate blocks, aggregating transactions much like solo miners, but then mine collaboratively on the share chain. P2Pool is a hybrid approach that has the advantage of much more granular payouts than solo mining, but without giving too much control to a pool operator like managed pools. +P2Pool mining is more complex than pool mining because it requires that the pool miners run a dedicated computer with enough disk space, memory, and internet bandwidth to support a full Bitcoin node and the P2Pool node software. P2Pool miners connect their mining hardware to their local P2Pool node, which simulates the functions of a pool server by sending block templates to the mining hardware. On P2Pool, individual pool miners construct their own candidate blocks, aggregating transactions much like solo miners, but then mine collaboratively on the share chain. P2Pool is a hybrid approach that has the advantage of much more granular payouts than solo mining, but without giving too much control to a pool operator like managed pools. Even though P2Pool reduces the concentration of power by mining pool operators, it is conceivably vulnerable to 51% attacks against the share chain itself. A much broader adoption of P2Pool does not solve the 51% attack problem for bitcoin itself. Rather, P2Pool makes bitcoin more robust overall, as part of a diversified mining ecosystem.((("", startref="MAChash10")))((("", startref="MACoverpool10"))) @@ -916,7 +916,7 @@ Even though P2Pool reduces the concentration of power by mining pool operators, [[consensus_attacks]] === Consensus Attacks -((("mining and consensus", "consensus attacks", id="Cattack10")))((("security", "consensus attacks", id="Sconsens10")))Bitcoin's consensus mechanism is, at least theoretically, vulnerable to attack by miners (or pools) that attempt to use their hashing power to dishonest or destructive ends. As we saw, the consensus mechanism depends on having a majority of the miners acting honestly out of self-interest. However, if a miner or group of miners can achieve a significant share of the mining power, they can attack the consensus mechanism so as to disrupt the security and availability of the bitcoin network. +((("mining and consensus", "consensus attacks", id="Cattack10")))((("security", "consensus attacks", id="Sconsens10")))Bitcoin's consensus mechanism is, at least theoretically, vulnerable to attack by miners (or pools) that attempt to use their hashing power to dishonest or destructive ends. As we saw, the consensus mechanism depends on having a majority of the miners acting honestly out of self-interest. However, if a miner or group of miners can achieve a significant share of the mining power, they can attack the consensus mechanism so as to disrupt the security and availability of the Bitcoin network. It is important to note that consensus attacks can only affect future consensus, or at best, the most recent past (tens of blocks). Bitcoin's ledger becomes more and more immutable as time passes. While in theory, a fork can be achieved at any depth, in practice, the computing power needed to force a very deep fork is immense, making old blocks practically immutable. Consensus attacks also do not affect the security of the private keys and signing algorithm (ECDSA). A consensus attack cannot steal bitcoin, spend bitcoin without signatures, redirect bitcoin, or otherwise change past transactions or ownership records. ((("denial-of-service attacks")))((("security", "denial-of-service attacks")))Consensus attacks can only affect the most recent blocks and cause denial-of-service disruptions on the creation of future blocks. @@ -928,27 +928,27 @@ In our example, malicious attacker Mallory goes to ((("use cases", "retail sales ((("confirmations", "of large-value transactions", secondary-sortas="large-value transactions")))To protect against this kind of attack, a merchant selling large-value items must wait at least six confirmations before giving the product to the buyer. Alternatively, the merchant should use an escrow multisignature account, again waiting for several confirmations after the escrow account is funded. The more confirmations elapse, the harder it becomes to invalidate a transaction with a 51% attack. For high-value items, payment by bitcoin will still be convenient and efficient even if the buyer has to wait 24 hours for delivery, which would correspond to approximately 144 confirmations. -In addition to a double-spend attack, the other scenario for a consensus attack is to deny service to specific bitcoin participants (specific bitcoin addresses). An attacker with a majority of the mining power can simply ignore specific transactions. If they are included in a block mined by another miner, the attacker can deliberately fork and remine that block, again excluding the specific transactions. This type of attack can result in a sustained denial-of-service against a specific address or set of addresses for as long as the attacker controls the majority of the mining power. +In addition to a double-spend attack, the other scenario for a consensus attack is to deny service to specific bitcoin participants (specific Bitcoin addresses). An attacker with a majority of the mining power can simply ignore specific transactions. If they are included in a block mined by another miner, the attacker can deliberately fork and remine that block, again excluding the specific transactions. This type of attack can result in a sustained denial-of-service against a specific address or set of addresses for as long as the attacker controls the majority of the mining power. Despite its name, the 51% attack scenario doesn't actually require 51% of the hashing power. In fact, such an attack can be attempted with a smaller percentage of the hashing power. The 51% threshold is simply the level at which such an attack is almost guaranteed to succeed. A consensus attack is essentially a tug-of-war for the next block and the "stronger" group is more likely to win. With less hashing power, the probability of success is reduced, because other miners control the generation of some blocks with their "honest" mining power. One way to look at it is that the more hashing power an attacker has, the longer the fork he can deliberately create, the more blocks in the recent past he can invalidate, or the more blocks in the future he can control. Security research groups have used statistical modeling to claim that various types of consensus attacks are possible with as little as 30% of the hashing power. The massive increase of total hashing power has arguably made bitcoin impervious to attacks by a single miner. There is no possible way for a solo miner to control more than a small percentage of the total mining power. However, the centralization of control caused by mining pools has introduced the risk of for-profit attacks by a mining pool operator. The pool operator in a managed pool controls the construction of candidate blocks and also controls which transactions are included. This gives the pool operator the power to exclude transactions or introduce double-spend transactions. If such abuse of power is done in a limited and subtle way, a pool operator could conceivably profit from a consensus attack without being noticed. -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. +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 more robust.((("", 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 -((("mining and consensus", "consensus rules", "changing", id="Crule10")))The rules of consensus determine the validity of transactions and blocks. These rules are the basis for collaboration between all bitcoin nodes and are responsible for the convergence of all local perspectives into a single consistent blockchain across the entire network. +((("mining and consensus", "consensus rules", "changing", id="Crule10")))The rules of consensus determine the validity of transactions and blocks. These rules are the basis for collaboration between all Bitcoin nodes and are responsible for the convergence of all local perspectives into a single consistent blockchain across the entire network. -While the consensus rules are invariable in the short term and must be consistent across all nodes, they are not invariable in the long term. In order to evolve and develop the bitcoin system, the rules have to change from time to time to accommodate new features, improvements, or bug fixes. Unlike traditional software development, however, upgrades to a consensus system are much more difficult and require coordination between all the participants. +While the consensus rules are invariable in the short term and must be consistent across all nodes, they are not invariable in the long term. In order to evolve and develop the Bitcoin system, the rules have to change from time to time to accommodate new features, improvements, or bug fixes. Unlike traditional software development, however, upgrades to a consensus system are much more difficult and require coordination between all the participants. [[hard_forks]] ==== Hard Forks -((("forks", "changing consensus rules", id="forks10a")))((("forks", "changing consensus rules", "hard forks")))In <> we looked at how the bitcoin network may briefly diverge, with two parts of the network following two different branches of the blockchain for a short time. We saw how this process occurs naturally, as part of the normal operation of the network and how the network reconverges on a common blockchain after one or more blocks are mined. +((("forks", "changing consensus rules", id="forks10a")))((("forks", "changing consensus rules", "hard forks")))In <> we looked at how the Bitcoin network may briefly diverge, with two parts of the network following two different branches of the blockchain for a short time. We saw how this process occurs naturally, as part of the normal operation of the network and how the network reconverges on a common blockchain after one or more blocks are mined. There is another scenario in which the network may diverge into following two chains: a change in the consensus rules. This type of fork is called a _hard fork_, because after the fork the network does not reconverge onto a single chain. Instead, the two chains evolve independently. Hard forks occur when part of the network is operating under a different set of consensus rules than the rest of the network. This may occur because of a bug or because of a deliberate change in the implementation of the consensus rules. diff --git a/ch11.asciidoc b/ch11.asciidoc index b4105344..6c18b824 100644 --- a/ch11.asciidoc +++ b/ch11.asciidoc @@ -24,7 +24,7 @@ Bitcoin's security relies on decentralized control over keys and on independent For example, many early bitcoin exchanges concentrated all user funds in a single "hot" wallet with keys stored on a single server. Such a design removes control from users and centralizes control over keys in a single system. Many such systems have been hacked, with disastrous consequences for their customers. -((("transactions", "off blockchain")))((("off-blockchain transactions")))Another common mistake is to take transactions "off blockchain" in a misguided effort to reduce transaction fees or accelerate transaction processing. An "off blockchain" system will record transactions on an internal, centralized ledger and only occasionally synchronize them to the bitcoin blockchain. This practice, again, substitutes decentralized bitcoin security with a proprietary and centralized approach. When transactions are off blockchain, improperly secured centralized ledgers can be falsified, diverting funds and depleting reserves, unnoticed. +((("transactions", "off blockchain")))((("off-blockchain transactions")))Another common mistake is to take transactions "off blockchain" in a misguided effort to reduce transaction fees or accelerate transaction processing. An "off blockchain" system will record transactions on an internal, centralized ledger and only occasionally synchronize them to the Bitcoin blockchain. This practice, again, substitutes decentralized bitcoin security with a proprietary and centralized approach. When transactions are off blockchain, improperly secured centralized ledgers can be falsified, diverting funds and depleting reserves, unnoticed. Unless you are prepared to invest heavily in operational security, multiple layers of access control, and audits (as the traditional banks do) you should think very carefully before taking funds outside of bitcoin's decentralized security context. Even if you have the funds and discipline to implement a robust security model, such a design merely replicates the fragile model of traditional financial networks, plagued by identity theft, corruption, and embezzlement. To take advantage of bitcoin's unique decentralized security model, you have to avoid the temptation of centralized architectures that might feel familiar but ultimately subvert bitcoin's security. @@ -34,7 +34,7 @@ Unless you are prepared to invest heavily in operational security, multiple laye ((("mining and consensus", "security and consensus")))Bitcoin security architecture is different. In bitcoin, the consensus system creates a trusted public ledger that is completely decentralized. A correctly validated blockchain uses the genesis block as the root of trust, building a chain of trust up to the current block. Bitcoin systems can and should use the blockchain as their root of trust. When designing a complex bitcoin application that consists of services on many different systems, you should carefully examine the security architecture in order to ascertain where trust is being placed. Ultimately, the only thing that should be explicitly trusted is a fully validated blockchain. If your application explicitly or implicitly vests trust in anything but the blockchain, that should be a source of concern because it introduces vulnerability. A good method to evaluate the security architecture of your application is to consider each individual component and evaluate a hypothetical scenario where that component is completely compromised and under the control of a malicious actor. Take each component of your application, in turn, and assess the impacts on the overall security if that component is compromised. If your application is no longer secure when components are compromised, that shows you have misplaced trust in those components. A bitcoin application without vulnerabilities should be vulnerable only to a compromise of the bitcoin consensus mechanism, meaning that its root of trust is based on the strongest part of the bitcoin security architecture. -The numerous examples of hacked bitcoin exchanges serve to underscore this point because their security architecture and design fails even under the most casual scrutiny. These centralized implementations had invested trust explicitly in numerous components outside the bitcoin blockchain, such as hot wallets, centralized ledger databases, vulnerable encryption keys, and similar schemes.((("", startref="Sprinc11"))) +The numerous examples of hacked bitcoin exchanges serve to underscore this point because their security architecture and design fails even under the most casual scrutiny. These centralized implementations had invested trust explicitly in numerous components outside the Bitcoin blockchain, such as hot wallets, centralized ledger databases, vulnerable encryption keys, and similar schemes.((("", startref="Sprinc11"))) === User Security Best Practices @@ -65,7 +65,7 @@ Would you carry your entire net worth in cash in your wallet? Most people would ==== Multisig and Governance -((("multisig addresses")))((("addresses", "multisig addresses")))Whenever a company or individual stores large amounts of bitcoin, they should consider using a multisignature bitcoin address. Multisignature addresses secure funds by requiring a minimum number of signatures to make a payment. The signing keys should be stored in a number of different locations and under the control of different people. In a corporate environment, for example, the keys should be generated independently and held by several company executives, to ensure no single person can compromise the funds. Multisignature addresses can also offer redundancy, where a single person holds several keys that are stored in different locations. +((("multisig addresses")))((("addresses", "multisig addresses")))Whenever a company or individual stores large amounts of bitcoin, they should consider using a multisignature Bitcoin address. Multisignature addresses secure funds by requiring a minimum number of signatures to make a payment. The signing keys should be stored in a number of different locations and under the control of different people. In a corporate environment, for example, the keys should be generated independently and held by several company executives, to ensure no single person can compromise the funds. Multisignature addresses can also offer redundancy, where a single person holds several keys that are stored in different locations. ==== Survivability diff --git a/ch12.asciidoc b/ch12.asciidoc index b5104d53..81aff669 100644 --- a/ch12.asciidoc +++ b/ch12.asciidoc @@ -3,21 +3,21 @@ Let's now build on our understanding of bitcoin by looking at it as an _application platform_. Nowadays, many people use the term "blockchain" to refer to any application platform that shares the design principles of bitcoin. The term is often misused and applied to many things that fail to deliver the primary features that bitcoin's blockchain delivers. -In this chapter we will look at the features offered by the bitcoin blockchain, as an application platform. We will consider the application building _primitives_, which form the building blocks of any blockchain application. We will look at several important applications that use these primitives, such as payment (state) channels and routed payment channels (Lightning Network). +In this chapter we will look at the features offered by the Bitcoin blockchain, as an application platform. We will consider the application building _primitives_, which form the building blocks of any blockchain application. We will look at several important applications that use these primitives, such as payment (state) channels and routed payment channels (Lightning Network). === 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 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. +((("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) -((("blockchain applications", "building blocks for (primitives)")))((("primitives")))When operating correctly and over the long term, the bitcoin system offers certain guarantees, which can be used as building blocks to create applications. These include: +((("blockchain applications", "building blocks for (primitives)")))((("primitives")))When operating correctly and over the long term, the Bitcoin system offers certain guarantees, which can be used as building blocks to create applications. These include: No Double-Spend:: The most fundamental guarantee of bitcoin's decentralized consensus algorithm ensures that no UTXO can be spent twice. 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 any time. +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. @@ -74,7 +74,7 @@ More details about Counterparty can be found at https://counterparty.io. The ope [[state_channels]] === Payment Channels and State Channels -_Payment channels_ ((("blockchain applications", "payment (state) channels", id="BCApayment12")))((("payment (state) channels", "defined")))are a trustless mechanism for exchanging bitcoin transactions between two parties, outside of the bitcoin blockchain. These transactions, which would be valid if settled on the bitcoin blockchain, are held off-chain instead, acting as _promissory notes_ for eventual batch settlement. Because the transactions are not settled, they can be exchanged without the usual settlement latency, allowing extremely high transaction throughput, low (submillisecond) latency, and fine (satoshi-level) granularity. +_Payment channels_ ((("blockchain applications", "payment (state) channels", id="BCApayment12")))((("payment (state) channels", "defined")))are a trustless mechanism for exchanging bitcoin transactions between two parties, outside of the Bitcoin blockchain. These transactions, which would be valid if settled on the Bitcoin blockchain, are held off-chain instead, acting as _promissory notes_ for eventual batch settlement. Because the transactions are not settled, they can be exchanged without the usual settlement latency, allowing extremely high transaction throughput, low (submillisecond) latency, and fine (satoshi-level) granularity. Actually, the term _channel_ is a metaphor. State channels are virtual constructs represented by the exchange of state between two parties, outside of the blockchain. There are no "channels" per se and the underlying data transport mechanism is not the channel. We use the term channel to represent the relationship and shared state between two parties, outside of the blockchain. @@ -162,7 +162,7 @@ For example, if commitment transaction #1 is timelocked to 4320 blocks in the fu .Each commitment sets a shorter timelock, allowing it to be spent before the previous commitments become valid image::images/mbc2_1204.png["Each commitment sets a shorter timelock, allowing it to be spent before the previous commitments become valid"] -Each subsequent commitment transaction must have a shorter timelock so that it may be broadcast before its predecessors and before the refund transaction. The ability to broadcast a commitment earlier ensures it will be able to spend the funding output and preclude any other commitment transaction from being redeemed by spending the output. The guarantees offered by the bitcoin blockchain, preventing double-spends and enforcing timelocks, effectively allow each commitment transaction to invalidate its predecessors. +Each subsequent commitment transaction must have a shorter timelock so that it may be broadcast before its predecessors and before the refund transaction. The ability to broadcast a commitment earlier ensures it will be able to spend the funding output and preclude any other commitment transaction from being redeemed by spending the output. The guarantees offered by the Bitcoin blockchain, preventing double-spends and enforcing timelocks, effectively allow each commitment transaction to invalidate its predecessors. State channels use timelocks to enforce smart contracts across a time dimension. In this example we saw how the time dimension guarantees that the most recent commitment transaction becomes valid before any earlier commitments. Thus, the most recent commitment transaction can be transmitted, spending the inputs and invalidating prior commitment transactions. The enforcement of smart contracts with absolute timelocks protects against cheating by one of the parties. This implementation needs nothing more than absolute transaction-level timelocks (+nLocktime+). Next, we will see how script-level timelocks, +CHECKLOCKTIMEVERIFY+ and +CHECKSEQUENCEVERIFY+, can be used to construct more flexible, useful, and sophisticated state channels. @@ -180,7 +180,7 @@ Now that we understand how timelocks can be used to invalidate prior commitments Even though a transaction cannot be canceled, it can be constructed in such a way as to make it undesirable to use. The way we do that is by giving each party a _revocation key_ that can be used to punish the other party if they try to cheat. This mechanism for revoking prior commitment transactions was first proposed as part of the Lightning Network. -To explain revocation keys, we will construct a more complex payment channel between two exchanges run by Hitesh and Irene. Hitesh and Irene run bitcoin exchanges in India and the USA, respectively. Customers of Hitesh's Indian exchange often send payments to customers of Irene's USA exchange and vice versa. Currently, these transactions occur on the bitcoin blockchain, but this means paying fees and waiting several blocks for confirmations. Setting up a payment channel between the exchanges will significantly reduce the cost and accelerate the transaction flow. +To explain revocation keys, we will construct a more complex payment channel between two exchanges run by Hitesh and Irene. Hitesh and Irene run bitcoin exchanges in India and the USA, respectively. Customers of Hitesh's Indian exchange often send payments to customers of Irene's USA exchange and vice versa. Currently, these transactions occur on the Bitcoin blockchain, but this means paying fees and waiting several blocks for confirmations. Setting up a payment channel between the exchanges will significantly reduce the cost and accelerate the transaction flow. Hitesh and Irene start the channel by collaboratively constructing a funding transaction, each funding the channel with 5 bitcoin. The initial balance is 5 bitcoin for Hitesh and 5 bitcoin for Irene. The funding transaction locks the channel state in a 2-of-2 multisig, just like in the example of a simple channel. @@ -326,7 +326,7 @@ In this example, we have five participants: Alice, Bob, Carol, Diana, and Eric. .A series of bidirectional payment channels linked to form a Lightning Network that can route a payment from Alice to Eric image::images/mbc2_1206.png["A series of bi-directional payment channels linked to form a Lightning Network"] -Alice wants to pay Eric 1 bitcoin. However, Alice is not connected to Eric by a payment channel. Creating a payment channel requires a funding transaction, which must be committed to the bitcoin blockchain. Alice does not want to open a new payment channel and commit more of her funds. Is there a way to pay Eric, indirectly? +Alice wants to pay Eric 1 bitcoin. However, Alice is not connected to Eric by a payment channel. Creating a payment channel requires a funding transaction, which must be committed to the Bitcoin blockchain. Alice does not want to open a new payment channel and commit more of her funds. Is there a way to pay Eric, indirectly? <> shows the step-by-step process of routing a payment from Alice to Eric, through a series of HTLC commitments on the payment channels connecting the participants. @@ -376,7 +376,7 @@ The Lightning Network implements an onion-routed protocol based on a scheme call * Each part of the path is encrypted in such a way that a network-level attacker cannot associate the packets from different parts of the path to each other. -* Unlike Tor (an onion-routed anonymization protocol on the internet), there are no "exit nodes" that can be placed under surveillance. The payments do not need to be transmitted to the bitcoin blockchain; the nodes just update channel balances. +* Unlike Tor (an onion-routed anonymization protocol on the internet), there are no "exit nodes" that can be placed under surveillance. The payments do not need to be transmitted to the Bitcoin blockchain; the nodes just update channel balances. Using this onion-routed protocol, Alice wraps each element of the path in a layer of encryption, starting with the end and working backward. She encrypts a message to Eric with Eric's public key. This message is wrapped in a message encrypted to Diana, identifying Eric as the next recipient. The message to Diana is wrapped in a message encrypted to Carol's public key and identifying Diana as the next recipient. The message to Carol is encrypted to Bob's key. Thus, Alice has constructed this encrypted multilayer "onion" of messages. She sends this to Bob, who can only decrypt and unwrap the outer layer. Inside, Bob finds a message addressed to Carol that he can forward to Carol but cannot decipher himself. Following the path, the messages get forwarded, decrypted, forwarded, etc., all the way to Eric. Each participant knows only the previous and next node in each hop.((("", startref="alicetwelve"))) @@ -388,9 +388,9 @@ At this point, you might be wondering how it is possible that the nodes do not k ((("Lightning Network", "benefits of")))A Lightning Network is a second-layer routing technology. It can be applied to any blockchain that supports some basic capabilities, such as multisignature transactions, timelocks, and basic smart contracts. -If a Lightning Network is layered on top of the bitcoin network, the bitcoin network can gain a significant increase in capacity, privacy, granularity, and speed, without sacrificing the principles of trustless operation without intermediaries: +If a Lightning Network is layered on top of the Bitcoin network, the Bitcoin network can gain a significant increase in capacity, privacy, granularity, and speed, without sacrificing the principles of trustless operation without intermediaries: -Privacy:: Lightning Network payments are much more private than payments on the bitcoin blockchain, as they are not public. While participants in a route can see payments propagated across their channels, they do not know the sender or recipient. +Privacy:: Lightning Network payments are much more private than payments on the Bitcoin blockchain, as they are not public. While participants in a route can see payments propagated across their channels, they do not know the sender or recipient. Fungibility:: A Lightning Network makes it much more difficult to apply surveillance and blacklists on bitcoin, increasing the fungibility of the currency. @@ -398,12 +398,12 @@ Speed:: Bitcoin transactions using Lightning Network are settled in milliseconds Granularity:: A Lightning Network can enable payments at least as small as the bitcoin "dust" limit, perhaps even smaller. Some proposals allow for subsatoshi increments. -Capacity:: A Lightning Network increases the capacity of the bitcoin system by several orders of magnitude. There is no practical upper bound to the number of payments per second that can be routed over a Lightning Network, as it depends only on the capacity and speed of each node. +Capacity:: A Lightning Network increases the capacity of the Bitcoin system by several orders of magnitude. There is no practical upper bound to the number of payments per second that can be routed over a Lightning Network, as it depends only on the capacity and speed of each node. -Trustless Operation:: A Lightning Network uses bitcoin transactions between nodes that operate as peers without trusting each other. Thus, a Lightning Network preserves the principles of the bitcoin system, while expanding its operating parameters significantly. +Trustless Operation:: A Lightning Network uses bitcoin transactions between nodes that operate as peers without trusting each other. Thus, a Lightning Network preserves the principles of the Bitcoin system, while expanding its operating parameters significantly. Of course, as mentioned previously, the Lightning Network protocol is not the only way to implement routed payment channels. Other proposed systems include Tumblebit and Teechan. At this time, however, the Lightning Network has already been deployed on testnet. Several different teams have developed competing implementations of LN and are working toward a common interoperability standard (called BOLT). It is likely that Lightning Network will be the first routed payment channel network to be deployed in production.((("", startref="BCAlightning12"))) === Conclusion -We have examined just a few of the emerging applications that can be built using the bitcoin blockchain as a trust platform. These applications expand the scope of bitcoin beyond payments and beyond financial instruments, to encompass many other applications where trust is critical. By decentralizing the basis of trust, the bitcoin blockchain is a platform that will spawn many revolutionary applications in a wide variety of industries. +We have examined just a few of the emerging applications that can be built using the Bitcoin blockchain as a trust platform. These applications expand the scope of bitcoin beyond payments and beyond financial instruments, to encompass many other applications where trust is critical. By decentralizing the basis of trust, the Bitcoin blockchain is a platform that will spawn many revolutionary applications in a wide variety of industries. diff --git a/code/key-to-address-ecc-example.py b/code/key-to-address-ecc-example.py index e49f51e8..e09cc0d8 100644 --- a/code/key-to-address-ecc-example.py +++ b/code/key-to-address-ecc-example.py @@ -38,9 +38,9 @@ compressed_prefix = '02' if (public_key_y % 2) == 0 else '03' hex_compressed_public_key = compressed_prefix + (cryptos.encode(public_key_x, 16).zfill(64)) print("Compressed Public Key (hex) is:", hex_compressed_public_key) -# Generate bitcoin address from public key +# Generate Bitcoin address from public key print("Bitcoin Address (b58check) is:", cryptos.pubkey_to_address(public_key)) -# Generate compressed bitcoin address from compressed public key +# Generate compressed Bitcoin address from compressed public key print("Compressed Bitcoin Address (b58check) is:", cryptos.pubkey_to_address(hex_compressed_public_key)) diff --git a/code/pay-to-addr-script.go b/code/pay-to-addr-script.go index b8949544..2654ed0f 100644 --- a/code/pay-to-addr-script.go +++ b/code/pay-to-addr-script.go @@ -9,7 +9,7 @@ import ( "github.com/conformal/btcutil" ) -// This example demonstrates creating a script which pays to a bitcoin address. +// This example demonstrates creating a script which pays to a Bitcoin address. // It also prints the created script hex and uses the DisasmString function to // display the disassembled script. diff --git a/code/websocket-example.go b/code/websocket-example.go index 8780b1ab..a776ca4e 100644 --- a/code/websocket-example.go +++ b/code/websocket-example.go @@ -11,7 +11,7 @@ import ( "github.com/conformal/btcwire" ) -// This example demonstrates a connection to the bitcoin network +// This example demonstrates a connection to the Bitcoin network // by using websockets via btcd, use of notifications and an rpc // call to getblockcount. // diff --git a/glossary.asciidoc b/glossary.asciidoc index 06eec361..942c43f9 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 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. + 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. @@ -117,7 +117,7 @@ Locktime:: Locktime, or more technically nLockTime, is the part of a transaction which indicates the earliest time or earliest block when that transaction may be added to the block chain. mempool:: - The bitcoin Mempool (memory pool) is a collection of all transaction data in a block that have been verified by bitcoin nodes, but are not yet confirmed. + The bitcoin Mempool (memory pool) is a collection of all transaction data in a block that have been verified by Bitcoin nodes, but are not yet confirmed. merkle root:: The root node of a merkle tree, a descendant of all the hashed pairs in the tree. Block headers must include a valid merkle root descended from all transactions in that block. @@ -135,7 +135,7 @@ multisignature:: Multisignature (multisig) refers to requiring a minimum number (M) of keys (N) to authorize an M-of-N transaction. network:: - A peer-to-peer network that propagates transactions and blocks to every bitcoin node on the network. + A peer-to-peer network that propagates transactions and blocks to every Bitcoin node on the network. nonce:: The "nonce" in a bitcoin block is a 32-bit (4-byte) field whose value is set so that the hash of the block will contain a run of leading zeros. The rest of the fields may not be changed, as they have a defined meaning. @@ -147,7 +147,7 @@ opcode:: Operation codes from the bitcoin Script language which push data or perform functions within a pubkey script or signature script. Open Assets protocol:: - The Open Assets Protocol is a simple and powerful protocol built on top of the bitcoin blockchain. It allows issuance and transfer of user-created assets. + The Open Assets Protocol is a simple and powerful protocol built on top of the Bitcoin blockchain. It allows issuance and transfer of user-created assets. OP_RETURN:: An opcode used in one of the outputs in an OP_RETURN transaction. Not to be confused with OP_RETURN transaction. @@ -165,7 +165,7 @@ output:: Output, transaction output, or TxOut is an output in a transaction which contains two fields: a value field for transferring zero or more satoshis and a pubkey script for indicating what conditions must be fulfilled for those satoshis to be further spent. P2PKH:: - Transactions that pay a bitcoin address contain P2PKH or Pay To PubKey Hash scripts. An output locked by a P2PKH script can be unlocked (spent) by presenting a public key and a digital signature created by the corresponding private key. + Transactions that pay a Bitcoin address contain P2PKH or Pay To PubKey Hash scripts. An output locked by a P2PKH script can be unlocked (spent) by presenting a public key and a digital signature created by the corresponding private key. P2SH:: P2SH or Pay-to-Script-Hash is a powerful new type of transaction that greatly simplifies the use of complex transaction scripts. With P2SH the complex script that details the conditions for spending the output (redeem script) is not presented in the locking script. Instead, only a hash of it is in the locking script. @@ -186,7 +186,7 @@ passphrase:: A passphrase is an optional string created by the user that serves as an additional security factor protecting the seed, even when the seed is compromised by a thief. It can also be used as a form of plausible deniability, where a chosen passphrase leads to a wallet with a small amount of funds used to distract an attacker from the “real” wallet that contains the majority of funds. payment channels:: - A micropayment channel or payment channel is a class of techniques designed to allow users to make multiple bitcoin transactions without committing all of the transactions to the bitcoin blockchain. In a typical payment channel, only two transactions are added to the block chain but an unlimited or nearly unlimited number of payments can be made between the participants. + A micropayment channel or payment channel is a class of techniques designed to allow users to make multiple bitcoin transactions without committing all of the transactions to the Bitcoin blockchain. In a typical payment channel, only two transactions are added to the block chain but an unlimited or nearly unlimited number of payments can be made between the participants. pooled mining:: Pooled mining is a mining approach where multiple generating clients contribute to the generation of a block, and then split the block reward according the contributed processing power. @@ -229,7 +229,7 @@ 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 that particular transactions were included in a block, without downloading the entire block. This method of verification is often used by lightweight bitcoin clients. + SPV or simplified payment verification is a method for verifying that particular transactions were included in a block, without downloading the entire block. This method of verification is often used by 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. @@ -243,7 +243,7 @@ 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. transaction:: - In simple terms, a transfer of bitcoin from one address to another. More precisely, a transaction is a signed data structure expressing a transfer of value. Transactions are transmitted over the bitcoin network, collected by miners, and included into blocks, made permanent on the blockchain. + In simple terms, a transfer of bitcoin from one address to another. More precisely, a transaction is a signed data structure expressing a transfer of value. Transactions are transmitted over the Bitcoin network, collected by miners, and included into blocks, made permanent on the blockchain. transaction pool:: An unordered collection of transactions that are not in blocks in the main chain, but for which we have input transactions. @@ -255,7 +255,7 @@ unspent transaction output (UTXO):: UTXO is an unspent transaction output that can be spent as an input in a new transaction. wallet:: - Software that holds all your bitcoin addresses and secret keys. Use it to send, receive, and store your bitcoin. + Software that holds all your Bitcoin addresses and secret keys. Use it to send, receive, and store your bitcoin. 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. diff --git a/praise.html b/praise.html index 5939c4d4..2ceede2d 100644 --- a/praise.html +++ b/praise.html @@ -9,7 +9,7 @@

Naval Ravikant, Co-founder AngelList

-

Mastering Bitcoin is the best technical reference available on bitcoin today. And bitcoin is likely to be seen in retrospect as the most important technology of this decade. As such, this book is an absolute must-have for any developer, especially those interested in building applications with the bitcoin protocol. Highly recommended.

+

Mastering Bitcoin is the best technical reference available on bitcoin today. And bitcoin is likely to be seen in retrospect as the most important technology of this decade. As such, this book is an absolute must-have for any developer, especially those interested in building applications with the Bitcoin protocol. Highly recommended.

Balaji S. Srinivasan (@balajis), General Partner, Andreessen Horowitz

diff --git a/preface.asciidoc b/preface.asciidoc index 226aa602..b22357de 100644 --- a/preface.asciidoc +++ b/preface.asciidoc @@ -19,7 +19,7 @@ Although ants form a caste-based society and have a queen for producing offsprin Nature demonstrates that decentralized systems can be resilient and can produce emergent complexity and incredible sophistication without the need for a central authority, hierarchy, or complex parts. -((("decentralized systems", "benefits of")))Bitcoin is a highly sophisticated decentralized trust network that can support myriad financial processes. Yet, each node in the bitcoin network follows a few simple mathematical rules. The interaction between many nodes is what leads to the emergence of the sophisticated behavior, not any inherent complexity or trust in any single node. Like an ant colony, the bitcoin network is a resilient network of simple nodes following simple rules that together can do amazing things without any central coordination.((("", startref="BCbasicbenefits0"))) +((("decentralized systems", "benefits of")))Bitcoin is a highly sophisticated decentralized trust network that can support myriad financial processes. Yet, each node in the Bitcoin network follows a few simple mathematical rules. The interaction between many nodes is what leads to the emergence of the sophisticated behavior, not any inherent complexity or trust in any single node. Like an ant colony, the Bitcoin network is a resilient network of simple nodes following simple rules that together can do amazing things without any central coordination.((("", startref="BCbasicbenefits0"))) === Conventions Used in This Book @@ -57,7 +57,7 @@ All the code snippets can be replicated on most operating systems with a minimal Some of the code snippets and code output have been reformatted for print. In all such cases, the lines have been split by a backslash (\) character, followed by a newline character. When transcribing the examples, remove those two characters and join the lines again and you should see identical results as shown in the example. -All the code snippets use real values and calculations where possible, so that you can build from example to example and see the same results in any code you write to calculate the same values. For example, the private keys and corresponding public keys and addresses are all real. The sample transactions, blocks, and blockchain references have all been introduced in the actual bitcoin blockchain and are part of the public ledger, so you can review them on any bitcoin system. +All the code snippets use real values and calculations where possible, so that you can build from example to example and see the same results in any code you write to calculate the same values. For example, the private keys and corresponding public keys and addresses are all real. The sample transactions, blocks, and blockchain references have all been introduced in the actual Bitcoin blockchain and are part of the public ledger, so you can review them on any Bitcoin system. === Using Code Examples @@ -71,7 +71,7 @@ If you feel your use of code examples falls outside fair use or the permission g === Bitcoin Addresses and Transactions in This Book -((("getting started", "warnings and cautions")))((("warnings and cautions", "avoid sending money to addresses appearing in book")))((("keys and addresses", "warnings and cautions")))((("transactions", "warnings and cautions")))((("blockchain applications", "warnings and cautions")))((("QR codes", "warnings and cautions")))The bitcoin addresses, transactions, keys, QR codes, and blockchain data used in this book are, for the most part, real. That means you can browse the blockchain, look at the transactions offered as examples, retrieve them with your own scripts or programs, etc. +((("getting started", "warnings and cautions")))((("warnings and cautions", "avoid sending money to addresses appearing in book")))((("keys and addresses", "warnings and cautions")))((("transactions", "warnings and cautions")))((("blockchain applications", "warnings and cautions")))((("QR codes", "warnings and cautions")))The Bitcoin addresses, transactions, keys, QR codes, and blockchain data used in this book are, for the most part, real. That means you can browse the blockchain, look at the transactions offered as examples, retrieve them with your own scripts or programs, etc. However, note that the private keys used to construct addresses are either printed in this book, or have been "burned." That means that if you send money to any of these addresses, the money will either be lost forever, or in some cases everyone who can read the book can take it using the private keys printed in here. diff --git a/second_edition_changes.asciidoc b/second_edition_changes.asciidoc index b79b37f7..2aab9ee6 100644 --- a/second_edition_changes.asciidoc +++ b/second_edition_changes.asciidoc @@ -10,7 +10,7 @@ == Chapter 3 - Bitcoin Core * Improved and updated examples and code * Configuration options and examples -* Running a bitcoin node +* Running a Bitcoin node * Updated libraries == Chapter 4 - Keys and Addresses From 33bb09029134e518b0ab838e00032dc0a3e98890 Mon Sep 17 00:00:00 2001 From: "Andreas M. Antonopoulos" Date: Tue, 7 Dec 2021 13:57:06 +0100 Subject: [PATCH 3/4] ch1 edits complete ch1 edits --- ch01.asciidoc | 86 +++++++++++++++++++++--------- images/mbc2_0101.png | Bin 54765 -> 1704885 bytes images/mbc2_0102.png | Bin 16059 -> 473992 bytes images/mnemonic_phrase_sample.png | Bin 0 -> 28266998 bytes 4 files changed, 60 insertions(+), 26 deletions(-) create mode 100644 images/mnemonic_phrase_sample.png diff --git a/ch01.asciidoc b/ch01.asciidoc index e569cb68..134755c8 100644 --- a/ch01.asciidoc +++ b/ch01.asciidoc @@ -19,7 +19,7 @@ Bitcoin is a distributed, peer-to-peer system. As such, there is no "central" se The Bitcoin protocol includes built-in algorithms that regulate the mining function across the network. The difficulty of the processing task that miners must perform is adjusted dynamically so that, on average, someone succeeds every 10 minutes regardless of how many miners (and how much processing) are competing at any moment. The protocol also halves the rate at which new bitcoin is created every 4 years, and limits the total number of bitcoin that will be created to a fixed total just below 21 million coins. The result is that the number of bitcoin in circulation closely follows an easily predictable curve that approaches 21 million by the year 2140. Due to bitcoin's diminishing rate of issuance, over the long term, the Bitcoin currency is deflationary. Furthermore, bitcoin cannot be inflated by "printing" new money above and beyond the expected issuance rate. -Behind the scenes, Bitcoin is also the name of the protocol, a peer-to-peer network, and a distributed computing innovation. The bitcoin currency is really only the first application of this invention. Bitcoin represents the culmination of decades of research in cryptography and distributed systems and includes four key innovations brought together in a unique and powerful combination. Bitcoin consists of: +Behind the scenes, Bitcoin is also the name of the protocol, a peer-to-peer network, and a distributed computing innovation. Bitcoin represents the culmination of decades of research in cryptography and distributed systems and includes four key innovations brought together in a unique and powerful combination. Bitcoin consists of: * A decentralized peer-to-peer network (the Bitcoin protocol) * A public transaction ledger (the blockchain) @@ -68,8 +68,8 @@ Satoshi Nakamoto withdrew from the public in April 2011, leaving the responsibil ((("bitcoin", "use cases", id="GSuses01")))Bitcoin is an innovation in the ancient technology of money. At its core, money simply facilitates the exchange of value between people. Therefore, in order to fully understand Bitcoin and its uses, we'll examine it from the perspective of people using it. Each of the people and their stories, as listed here, illustrates one or more specific use cases. We'll be seeing them throughout the book: -North American low-value retail:: -((("use cases", "retail sales")))Alice lives in Northern California's Bay Area. She has heard about Bitcoin from her techie friends and wants to start using it. We will follow her story as she learns about Bitcoin, acquires some, and then spends some of her bitcoin to buy a cup of coffee at Bob's Cafe in Palo Alto. This story will introduce us to the software, the exchanges, and basic transactions from the perspective of a retail consumer. +North American e-commerce retails:: +((("use cases", "retail sales")))Alice lives in Northern California's Bay Area. She has heard about Bitcoin from her techie friends and wants to start using it. We will follow her story as she learns about Bitcoin, acquires some, and then spends her bitcoin to buy a laptop from Bob's online store. This story will introduce us to the software, the exchanges, and basic transactions from the perspective of a retail consumer. North American high-value retail:: Carol is an art gallery owner in San Francisco. She sells expensive paintings for Bitcoin. This story will introduce the risks of a "51%" consensus attack for retailers of high-value items. @@ -100,6 +100,7 @@ Each of these stories is based on the real people and real industries currently ((("security", "wallet selection")))Bitcoin wallets are one of the most actively developed applications in the Bitcoin ecosystem. There is intense competition, and while a new wallet is probably being developed right now, several wallets from last year are no longer actively maintained. Many wallets focus on specific platforms or specific uses and some are more suitable for beginners while others are filled with features for advanced users. Choosing a wallet is highly subjective and depends on the use and user expertise. Therefore it would be pointless to recommend a specific brand or wallet. However, we can categorize Bitcoin wallets according to their platform and function and provide some clarity about all the different types of wallets that exist. Better yet, moving keys or seeds between Bitcoin wallets is relatively easy, so it is worth trying out several different wallets until you find one that fits your needs. [role="pagebreak-before"] +===== Types of Bitcoin wallets Bitcoin wallets can be categorized as follows, according to the platform: Desktop wallet:: A desktop wallet was the first type of Bitcoin wallet created as a reference implementation and many users run desktop wallets for the features, autonomy, and control they offer. Running on general-use operating systems such as Windows and Mac OS has certain security disadvantages, however, as these platforms are often insecure and poorly configured. @@ -110,6 +111,7 @@ Web wallet:: Web wallets are accessed through a web browser and store the user's Hardware wallet:: Hardware wallets are devices that operate a secure self-contained Bitcoin wallet on special-purpose hardware. They usually connect to a desktop or mobile device via USB cable or near-field-communication (NFC), and are operated with a web browser or accompanying software. By handling all Bitcoin-related operations on the specialized hardware, these wallets are considered very secure and suitable for storing large amounts of bitcoin. +===== Full-node vs. Lightweight Another way to categorize bitcoin wallets is by their degree of autonomy and how they interact with the Bitcoin network: Full-node client:: ((("full-node clients")))A full client, or "full node," is a client that stores the entire history of Bitcoin transactions (every transaction by every user, ever), manages users' wallets, and can initiate transactions directly on the Bitcoin network. A full node handles all aspects of the protocol and can independently validate the entire blockchain and any transaction. A full-node client consumes substantial computer resources (e.g., more than 125 GB of disk, 2 GB of RAM) but offers complete autonomy and independent transaction verification. @@ -118,25 +120,43 @@ Lightweight client:: ((("lightweight clients")))((("simplified-payment-verificat Third-party API client:: ((("third-party API clients")))A third-party API client is one that interacts with Bitcoin through a third-party system of application programming interfaces (APIs), rather than by connecting to the Bitcoin network directly. The wallet may be stored by the user or by third-party servers, but all transactions go through a third party. -Combining these categorizations, many Bitcoin wallets fall into a few groups, with the three most common being desktop full client, mobile lightweight wallet, and web third-party wallet. The lines between different categories are often blurry, as many wallets run on multiple platforms and can interact with the network in different ways. +===== Custodial vs. Non-Custodial +A very important additional consideration is _who controls the keys_. As we will see in subsequent chapters, access to bitcoin (funds) is controlled by "private keys", which are like very long PIN numbers. If you are the only one to have *custody* and *control* over these private keys, you are in control of your bitcoin. Conversely, if you do not have custody, then your bitcoin is managed by a third-party custodian, who ultimately controls your funds on your behalf. Wallets fall into two important categories based on custody: _non-custodial_ wallets where you control the keys and the funds and _custodial_ wallets where some third-party controls the keys. To emphasize this point, the author of this book coined the phrase: + + _Your keys, your coins. Not your keys, not your coins_. + +Combining these categorizations, many Bitcoin wallets fall into a few groups, with the three most common being desktop full client (non-custodial), mobile lightweight wallet (non-custodial), and web third-party wallet (custodial). The lines between different categories are often blurry, as many wallets run on multiple platforms and can interact with the network in different ways. For the purposes of this book, we will be demonstrating the use of a variety of downloadable Bitcoin clients, from the reference implementation (Bitcoin Core) to mobile and web wallets. Some of the examples will require the use of Bitcoin Core, which, in addition to being a full client, also exposes APIs to the wallet, network, and transaction services. If you are planning to explore the programmatic interfaces into the Bitcoin system, you will need to run Bitcoin Core, or one of the alternative clients.((("", startref="GSwallet01")))((("", startref="Wselect01"))) ==== Quick Start -((("getting started", "quick start example", id="GSquick01")))((("wallets", "quick start example", id="Wquick01")))((("use cases", "buying coffee", id="aliceone")))Alice, who we introduced in <>, is not a technical user and only recently heard about Bitcoin from her friend Joe. While at a party, Joe is once again enthusiastically explaining Bitcoin to all around him and is offering a demonstration. Intrigued, Alice asks how she can get started with Bitcoin. Joe says that a mobile wallet is best for new users and he recommends a few of his favorite wallets. Alice downloads "Bluewallet" (available for iOS and Android) and installs it on her phone. +((("getting started", "quick start example", id="GSquick01")))((("wallets", "quick start example", id="Wquick01")))Alice, who we introduced in <>, is not a technical user and only recently heard about Bitcoin from her friend Joe. While at a party, Joe is once again enthusiastically explaining Bitcoin to all around him and is offering a demonstration. Intrigued, Alice asks how she can get started with Bitcoin. Joe says that a mobile wallet is best for new users and he recommends a few of his favorite wallets. Alice downloads "Bluewallet" (available for iOS and Android) and installs it on her phone. + +When Alice runs her wallet application for the first time, she chooses the option to create a new Bitcoin wallet. Because the wallet she has chosen is a non-custodial wallet, Alice (and only Alice) will be in control of her keys. Therefore, she bears responsibility for backing them up, since losing the keys means she loses access to the bitcoin. To facilitate this, her wallet produces a _mnemonic phrase_ (explained more in <>), in the form of 12 English words that can be used to restore her wallet on any of the hundreds of compatible software or hardware wallets. + +Alice takes a moment **away from Joe and all other parties** to write down the mnemonic phrase on a piece of paper. After creating her wallet and securing her mnemonic phrase, Alice can tap on her wallet to see her bitcoin amount, transaction history, as well as two buttons that allow her to either _receive_ or _send_ bitcoin, shown in <>. -When Alice runs her wallet application for the first time, she chooses the option to create a new Bitcoin wallet, and takes a moment **away from Joe and all other parties** to write down a secret mnemonic phrase _in order_ on a piece of paper. As explained by the mobile wallet and by Joe earlier, the mnemonic phrase allows Alice to restore her wallet in case she loses her mobile device and grants her access to her funds on another device. After creating her wallet and securing her mnemonic phrase, Alice can tap on her wallet to see her bitcoin amount, transaction history, as well as two buttons that allow her to either _receive_ or _send_ bitcoin, shown in <>. +Let's elaborate a bit on the mnemonic phrase, next. -==== Mnemonic Words +[[mnemonic_phrase_intro]] +==== Mnemonic Phrase -A modern Bitcoin wallet will provide a _mnemonic phrase_ (also sometimes called a "seed" or "seed phrase") for Alice to back up. The mnemonic phrase consists of 12-24 English words, selected randomly by the software, and used as the basis for the keys that are generated by the wallet. The mnemonic phrase can be used by Alice to restore all the transactions and funds in her wallet in the case of an event such as a lost mobile device, a software bug, or memory corruption. +Most modern non-custodial Bitcoin wallets will provide a _mnemonic phrase_ (also sometimes called a "seed" or "seed phrase") for their user to back up. The mnemonic phrase usually consists of 12 English words, selected randomly by the software, and used as the basis for the keys that are generated by the wallet. A sample mnemonic phrase is shown in <>. + +[[mnemonic_phrase_sample]] +.Alice is shown a 12-word mnemonic phrase that she must backup (offline on paper) +image::images/mnemonic_phrase_sample.png[".Alice is shown a 12-word mnemonic phrase that she must backup (offline on paper)"] + +This mnemonic phrase can be used by Alice to restore *all* the transactions and funds in her wallet in the case of an event such as a lost mobile device, a software bug, or memory corruption. The mnemonic phrase is based on a common standard and therefore can be restored on any compatible software or hardware wallet. This allows Alice to try different wallets and also removes any dependency on the software or hardware maker of the wallet. [TIP] ==== The correct term for these backup words is "mnemonic phrase". We avoid the use of the term "seed" to refer to a mnemonic phrase, because even though its use is common it is incorrect. ==== +Of note, when receiving funds to a new mobile wallet for the first time, many wallets will often re-verify that you have securely backed-up your mnemonic phrase. This can range from a simple prompt to requiring the user to manually re-enter the phrase. + [[mnemonic-storage]] ==== Storing the Mnemonic Safely @@ -148,22 +168,36 @@ Once Alice has recorded the mnemonic phrase, she should plan to store each copy ==== Never attempt a "DIY" security scheme that deviates in any way from the best practice recommendation in <>. Do not cut your mnemonic in half, make screenshots, store on USB drives, email or cloud drives, encrypt it, or try any other non-standard method. You will tip the balance in such a way as to risk permanent loss or theft. Many people have lost funds, not from theft but because they tried a non-standard solution without having the expertise to balance the risks involved. The best practice recommendation is carefully balanced by experts and suitable for the vast majority of users. ==== -**** -[[bluewallet-welcome]] -.Alice uses the Receive screen on her Bluewallet mobile Bitcoin wallet, and displays her address to Bob in a QR code format -image::images/mbc2_0101.png["BluewalletWelcome"] + +==== Running the wallet application ((("addresses", "bitcoin wallet quick start example")))((("QR codes", "bitcoin wallet quick start example")))((("addresses", see="also keys and addresses"))) The main wallet view displays the bitcoin amount, transaction history, and _Receive_ and _Send_ buttons. In addition, many wallets feature the ability to purchase Bitcoin directly through an exchange or similar service where you can offer fiat money in return for cryptocurrency, which is done by <> and selling to the wallet user at or above this price. The _Buy Bitcoin_ button would allow Alice to purchase Bitcoin in this fashion. -Alice is now ready to start using her new bitcoin wallet. ((("", startref="GSquick01")))((("", startref="Wquick01"))) Her wallet application randomly generated a private key (described in more detail in <>) which will be used to derive Bitcoin addresses that direct to her wallet. At this point, her Bitcoin addresses are not known to the Bitcoin network or "registered" with any part of the Bitcoin system. Her Bitcoin addresses are simply random numbers that correspond to her private key that she can use to control access to the funds. The addresses are generated independently by her wallet without reference or registration with any service. In fact, in most wallets, there is no association between a Bitcoin address and any externally identifiable information including the user's identity. Until the moment an address is referenced as the recipient of value in a transaction posted on the bitcoin ledger, the Bitcoin address is simply part of the vast number of possible addresses that are valid in bitcoin. Only once an address has been associated with a transaction does it become part of the known addresses in the network. +==== Bitcoin addresses -Alice uses the _Receive_ button, which displays a QR code along with a Bitcoin address. The QR code is the square with a pattern of black and white dots, serving as a form of barcode that contains the same information in a format that can be scanned by Joe's smartphone camera. Next to the wallet's QR code is the Bitcoin address it encodes, and Alice may choose to manually send her address to Joe by copying it onto her clipboard with a tap. Of note, when receiving funds to a new mobile wallet for the first time, many wallets will often re-verify that you have indeed secured your mnemonic phrase. This can range from a simple prompt to requiring the user to manually re-enter the phrase. +Alice is now ready to start using her new bitcoin wallet. ((("", startref="GSquick01")))((("", startref="Wquick01"))) Her wallet application randomly generated a private key (described in more detail in <>) which will be used to derive Bitcoin addresses that direct to her wallet. At this point, her Bitcoin addresses are not known to the Bitcoin network or "registered" with any part of the Bitcoin system. Her Bitcoin addresses are simply random numbers that correspond to her private key that she can use to control access to the funds. The addresses are generated independently by her wallet without reference or registration with any service. [TIP] ==== ((("addresses", "security of")))((("security", "Bitcoin addresses")))Bitcoin addresses start with 1, 3, or bc1. Like email addresses, they can be shared with other bitcoin users who can use them to send bitcoin directly to your wallet. There is nothing sensitive, from a security perspective, about the Bitcoin address. It can be posted anywhere without risking the security of the account. Unlike email addresses, you can create new addresses as often as you like, all of which will direct funds to your wallet. In fact, many modern wallets automatically create a new address for every transaction to maximize privacy. A wallet is simply a collection of addresses and the keys that unlock the funds within. ==== +In most wallets, there is no association between a Bitcoin address and any externally identifiable information including the user's identity. Until the moment an address is referenced as the recipient of value in a transaction posted on the bitcoin ledger, the Bitcoin address is simply part of the vast number of possible addresses that are valid in bitcoin. Only once an address has been associated with a transaction does it become part of the known addresses in the network. + +==== Receiving bitcoin + +Alice uses the _Receive_ button, which displays a QR code along with a Bitcoin address, shown in <>. + +[[bluewallet_receive]] +.Alice uses the Receive screen on her Bluewallet mobile Bitcoin wallet, and displays her address to Bob in a QR code format +image::images/mbc2_0101.png["BluewalletWelcome"] + +The QR code is the square with a pattern of black and white dots, serving as a form of barcode that contains the same information in a format that can be scanned by Joe's smartphone camera. Next to the wallet's QR code is the Bitcoin address it encodes, and Alice may choose to manually send her address to Joe by copying it onto her clipboard with a tap. + +[WARNING] +==== +Do not send money to the addresses in this book, it will be lost. Despite this warning people try to scan and send money, so the QR codes and addresses are blurred in the wallet screenshots. +==== [[getting_first_bitcoin]] ==== Getting Her First Bitcoin @@ -203,7 +237,7 @@ In addition to these various sites and applications, most bitcoin wallets will a [[sending_receiving]] ==== Sending and Receiving Bitcoin -((("getting started", "sending and receiving bitcoin", id="GSsend01")))((("spending bitcoin", "bitcoin wallet quick start example")))((("spending bitcoin", see="also transactions")))Alice has decided to exchange $10 US dollars for bitcoin, so as not to risk too much money on this new technology. She gives Joe $10 in cash, opens her Bluewallet mobile wallet application, and selects Receive. This displays a QR code with Alice's first Bitcoin address. +((("getting started", "sending and receiving bitcoin", id="GSsend01")))((("spending bitcoin", "bitcoin wallet quick start example")))((("spending bitcoin", see="also transactions")))Alice has decided to exchange $100 US dollars for bitcoin. She gives Joe $100 in cash, opens her Bluewallet mobile wallet application, and selects Receive. This displays a QR code with Alice's first Bitcoin address. Joe then selects Send on his Bluewallet smartphone wallet and is presented with a screen containing the following inputs: @@ -212,27 +246,27 @@ Joe then selects Send on his Bluewallet smartphone wallet and is presented with * A transaction note (description) * A transaction fee +[[bluewallet-mobile-send]] +[role="smallereighty"] +.Bluewallet mobile bitcoin wallet send screen +image::images/mbc2_0102.png["bluewallet mobile send screen"] + In the input field for the Bitcoin address, there is a small _Scan_ button. This allows Joe to scan the QR code with his smartphone camera so that he doesn't have to type in Alice's Bitcoin address, which is quite long and difficult to type. Joe taps the _Scan_ button and it activates the smartphone camera, scanning the QR code displayed on Alice's smartphone. -Joe now has Alice's Bitcoin address set as the recipient. Joe enters the amount as $10 US dollars and his wallet converts it by accessing the most recent exchange rate from an online service. The exchange rate at the time is $100 US dollars per bitcoin, so $10 US dollars is worth 0.10 bitcoin (BTC), or 100 millibitcoin (mBTC) as shown in the screenshot from Joe's wallet (see <>). +Joe now has Alice's Bitcoin address set as the recipient. Joe enters the amount as $100 US dollars and his wallet converts it by accessing the most recent exchange rate from an online service. The exchange rate at the time is approximately $50,000 US dollars per bitcoin, so $100 US dollars is worth 0.00194401 bitcoin (BTC) as shown in the screenshot from Joe's wallet (see <>). In the transaction note/description input, Joe enters "Alice". He can use this field to add some information regarding his transaction for future reference. This function is for his record keeping only. The transaction note will be stored in his wallet and only Joe will be able to see it. It will not be sent to Alice, nor stored on the blockchain. -He also selects a transaction fee for his transaction. The higher the transaction fee, the faster his transaction will be confirmed (included in a block by a miner). He selects the minimum transaction fee possible at that time (0 satoshis/byte). +He also selects a transaction fee for his transaction. The higher the transaction fee, the faster his transaction will be confirmed (included in a block by a miner). He selects the minimum transaction fee possible at that time (1 satoshi/vbyte). [TIP] ==== -The price of bitcoin has changed a lot over time, and an incredible amount since the first edition of this book was written. As of March 2021, a person would need approximately $54,000 USD to purchase one whole bitcoin. Many examples in this book reference real-life past transactions, when the price of bitcoin was much lower and transactions with zero fees were still possible. Think about how generous of a friend Joe would have been if he had made the same agreement with Alice today! +The price of bitcoin has changed a lot over time, and an incredible amount since the first edition of this book was written. As of October 2021, a person would need approximately $67,000 USD to purchase one whole bitcoin. When the first edition of this book was written, a bitcoin was worth less than $500 USD. ==== -[[bluewallet-mobile-send]] -[role="smallereighty"] -.Bluewallet mobile bitcoin wallet send screen -image::images/mbc2_0102.png["bluewallet mobile send screen"] - -Using Bluewallet, Joe carefully checks to make sure he has entered the correct amount, because he is about to transmit money and mistakes are irreversible. For simplicity sake, we will assume that Joe does not pay any transaction fees. The purpose and setting of transaction fees are covered in subsequent chapters. After double-checking the address and amount, he presses _Send_ to transmit the transaction. Joe's mobile bitcoin wallet constructs a transaction that assigns 0.10 BTC to the address provided by Alice, sourcing the funds from Joe's wallet and signing the transaction with Joe's private keys. This tells the Bitcoin network that Joe has authorized a transfer of value to Alice's new address. As the transaction is transmitted via the peer-to-peer protocol, it quickly propagates across the Bitcoin network. In less than a second, most of the well-connected nodes in the network receive the transaction and see Alice's address for the first time. +Using Bluewallet, Joe carefully checks to make sure he has entered the correct amount, because he is about to transmit money and mistakes are irreversible. For simplicity sake, we will assume that Joe does not pay any transaction fees. The purpose and setting of transaction fees are covered in subsequent chapters. After double-checking the address and amount, he presses _Send_ to transmit the transaction. Joe's mobile bitcoin wallet constructs a transaction that assigns 0.00194401 BTC to the address provided by Alice, sourcing the funds from Joe's wallet and signing the transaction with Joe's private keys. This tells the Bitcoin network that Joe has authorized a transfer of value to Alice's new address. As the transaction is transmitted via the peer-to-peer protocol, it quickly propagates across the Bitcoin network. In less than a second, most of the well-connected nodes in the network receive the transaction and see Alice's address for the first time. -Meanwhile, Alice's wallet is constantly "listening" to published transactions on the Bitcoin network, looking for any that match the addresses it contains. A few seconds after Joe's wallet transmits the transaction, Alice's wallet will indicate that it is receiving 0.10 BTC. +Meanwhile, Alice's wallet is constantly "listening" to published transactions on the Bitcoin network, looking for any that match the addresses it contains. A few seconds after Joe's wallet transmits the transaction, Alice's wallet will indicate that it is receiving 0.00194401 BTC. [TIP] ==== @@ -243,4 +277,4 @@ Each bitcoin can be subdivided into 100 million units, each called a "satoshi" ( .Confirmations ((("getting started", "confirmations")))((("confirmations", "bitcoin wallet quick start example")))((("confirmations", see="also mining and consensus; transactions")))((("clearing", seealso="confirmations")))At first, Alice's wallet will show the transaction from Joe as "Unconfirmed." This means that the transaction has been propagated to the network but has not yet been recorded in the bitcoin transaction ledger, known as the blockchain. To be confirmed, a transaction must be included in a block and added to the blockchain, which happens every 10 minutes, on average. In traditional financial terms this is known as _clearing_. This book will cover in detail the propagation, validation, and clearing (or confirmation) of bitcoin transactions. -Alice is now the proud owner of 0.10 BTC that she can spend. In the next chapter we will look at her first purchase with bitcoin, and examine the underlying transaction and propagation technologies in more detail.((("", startref="BCbasic01")))((("use cases", "buying coffee", startref="aliceone"))) +Alice is now the proud owner of 0.002 BTC that she can spend. Over the next few days, Alice buys more bitcoin using an ATM and an exchange. In the next chapter we will look at her first purchase with bitcoin, and examine the underlying transaction and propagation technologies in more detail.((("", startref="BCbasic01"))) diff --git a/images/mbc2_0101.png b/images/mbc2_0101.png index 7d82ae6fd62e6a8d7ae528a25e4ae24388987e8c..c13a0941cb9f3b0cc789c664f19fb198050469aa 100755 GIT binary patch literal 1704885 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 upIxc_s$=G@c7}Cn%$>Gn*q^@ z_^$!{2XAzoq*WFmd(FWJ_`k)~HnyFBFD~3Zz~E#DD5FPAs&a66FEIzi4IMiTEi&>Yd))VT@21z_>Mdxh;qm{`mA%kJb8raygu#Bu0=Ql& zBpWQp1KUUEpvmT5&3UjFPoTUX3IE&(POu>|{0Fa}*j7UlwXKH3|6bC0K=993E}$D? z4{3}#&PVp%325W_Fs$@1;U7Xl{0kX_pQwQ56+rx}ltnNK2!{T^aL()GL7aPrasGh&=vHZ{HZdNLoks4{wvVy6+pRA%k{^8yIy%Y5$2h zItRYuyMYNzkL~&B99LrBb7DK`W({+n-5P%H^3Zh$^e)`^?7=puEy(fDwaZH@Ldfy| z)^NwkQ8zT#e{^p9^7x1D>xTgv>A@Okm-_63@_q-`4ZI!kAC@Qh1uBpk1(x33 z^LHy83xK9Tr7RQX12`^k+eQ{k3tkz&PaE$Yhu)q5qK?A=9^&?#Jb4J}3DCsOxq;6< zbV;V5`{wTRP}CwAXLzf>8L*GI9&EfM`xOvC2ngG{EAJG&z z&ew1wIElT9VhU`>_nz28;xXCocbxmsbm&IMedyID=^0;E3^XFjRtnFmS@IkN&rr_i8D~Dh_|M-BbddoeARQ`muAv7m0zme(c6EuGS&oAI5S* zFS2}XIC)LrV9joBDCgTZ_cGnU@`fNV4juPN|A1rPu@2}F2;3aMu?J3V=Z88jlKB8k zO#ntao#e~|++$#e_&0FoX3wJ`{#D9r7}m)%`g{$yG$_ojI(Gb>{qLR}8oviP-E(Dp z`1=0$_C4OajSQN6cX<59`ThGZ-RvM^C>_`LlKBAO-oCMI_b?s8-+NOG;34hQH*)S~&9fo?Rm$q?9b7vMg#OXZand$p+JABT-l5?kSkVCn>cF5*Sp4VMa81Y1 zanh3GzI38v+p%N2JBBY$kj~?A7=S~Z?f&>U%n#!nSv`mZu=}yR&j5yjj&l>SNc$2U zxxSk9Bkm z(Fw!c_s0B#_%~+0X4z9A{#DBGgBK~~A^2}^Ug6q#4qd)-;>44imjX1(w~xc=t%v;f zz3#W}-#BsN#)Egb9)U|&9?&wi>7AQb=+bfEsrT~5TMz)VWsL3om3!RHw$uE9>+%)O zrkFlEe(?#c0^vG+y@xkt?M83iyET04@&5ArBnsk*yD50@3b9s@?u(B(vJV`5 z_~gWiE7v)z1*y0W>ArD2cT2n+B_zG3lw zF&yY`efzx+B_CWU;4#2|QFY3DNy zru*&v(CKU%;MV#VJc&#H+r-Bi_;CLoX;T3=BpS{jW_UtKHGNLUK!9)m@BSz#JushM zqkW($Fj|gg<@2B^$jWTThfY!f#D9_kqIWGQfcV!!E?^q;rU2q!Z#jnPji3PHKY}Ru z6)F%z0mOd{f$*{(6hQpzA(t?XT2lb=ueBV(^sGPu#QzFJLoZpcfDZ8g56}K$Mi>iV zp#19p`2zzzjn*Co?Sa;E1k8g0P(NQe8E&DqyXYSA-V8oRDe?e@sBTp#ufO* zfAd$9iHrq6Q=st-#pG#H0W<}g%oa>kVhSMs6VnUtMg@ohh<|(!44?qw-vF72kC1i+ z5dUeH93xD<0*L?AYl3{8PC@-fSw0!=}dzX167D^dXQzarVtleQE<{A(*eFg5y60P(Mn ze8N;lRRHlHRUW*E3Pe-@@gGqZ{8C>EApZ50Uzl2LD1i9aMm}IFl2QQipOk#)IZGAL z7yh^Ww(2i&EI^jNs_{NHnu2(h!uwDGNdbMC0x8{igbK(MK>W+Zz(Z6ZP6ZJEaSDaE zX;}fpzm{_c)23Ag5dT`u8BA9K3LyRy5DRZb1$YGz|M)5xKmo+R0WuLEA?*qv{?jfw zMwpxe|J#)HdbF_sdNu|9KYx&%IOrP{NJas)2g#_1el?3oczKFXq`m@(fAuxS7*tmP@vpkX7=Zy5K>QmpQ?u`p5dYbi=lI0QD}eYGzEIhHB57+ z70@aE9q!fFuATkvyY(A3H#e`se<@JlaP#I38`gh!_UyIQn{;Oa5dWD53C6ES1@wr2 z$EMY1zuVBfYR%d;=u)h}+BK`1H+*;Yn$9c$;$M&O!8B)D0sZ0Mz548(W)XU;(4|lT zQP#uj^<@DN|Ct5}#;->O^oIXU*S_1#K`MpN!=M-iIDx?etk%sNjriA1R$)Rlq=3Hg z@4oh3GimYxT)qAM{M*p33h2oIApRr&yzyI9AesU?!vE^Cn`tE=BCPPs)GM%N&DvGpUDLymAjE&P zA30t_1tKe;8~i)2t;dpo>Iok!#5HR+>!AfmfA}X8SkR#Y$t&PaqI{+o{BJtj4C52g zrCkBAx!-BOJ6Kovhe6EO&cXzi@7AM31(H?ZyJV*A=mh_(zgx97?c~D4B%e9f*OG?Oo8JYXaqtq zXG(!JYn#um;MEe@oQ4Cv;2+q({;=?C&s2V5yhc($e493Wm-r-3UEu%P25bb%DrxD zIE*dhud;CyKw1+wBsPar2lz+&Yv7GtyGqmLf9>NRCa@sv~Z z&S%uhE1VtafU-uM4L};l|FveE3Z|J?cFh{i_6KVj|C_J~qnTGYTM`oQJbrEC9~%C% zCByXaoNJr4+WfC!{BQaWE3kTaxs8>^HEY(#(*dk${5#IZ)nt07^gn`DX{)K~SHEm9 zRwiosX*Amuq+L_s#(IF3-)O_8ZOxiHao7S)n}Tbbu@gX3@26&)f;5YN?8ws83!FuX zfwrL7-F8~Wzxz8JIH$4qb?t^YiWDpF&0Voi&Eg+=fHjtdn4Bz80QetsEU1?8f9){- zbTsy=YPI;URs4Um0bgN_y~5d(oHd8f#wt%~82?!K*WjDFMw`Wdjp83>uxKz3F-cjX z0L%r8!G8_o9|wSH@GaG7@!ytr_v6j~P8bW|jPcT^{<6I|R+!icpux8}i;}cvZLF>U z?V17y&I8uso2t#KfHrFaIE+DyZ*Uf+X-%vZ9kq-9)!2lp#TPZ^8x^Zatjcvw;vZWw zwfF*ORhnWA+t4olk5 z!-uo@B~m>4+GY)|2&YB-Z~6{L04d%aJW0O-F^d11#lN=Neh#l+zajm3r(TSkH*aoU zVd$D{{m~-+vGBjbH*DqJ-u_?z{XY=K0<1g~qxy_d70|3HSm_-4!;#DEn>TQ7g#>Iq z{Pl0nY}R09pn1c3a2pcFdh-f}Ait7$W*Nq4w@LYB4VnTs4hA(UQ}y&*(W?Sl#eYI$ zfPjHKnhz5kZiv8X;2m{vJ>lGI-u%NCU;XY(TI&Lb4>!wQghyJn3hF1T&V2s)=W8~s zPsji?ul>{S|M2zUg#1XNX>lBo2Jw$WfTULjk20nJRNSK!wzP`>P3zs1LCmN%^V@#Bxb|KUzV1~YM`=(HKE*oO7+ zkNoBSgh$@I{>%@*`|*n}zWC#x&a7vjIa)f_fBxH#-~avQ6`Hd(8r&L8d-#VX4WnfN zUK11mnM9?US6Ctu!otsR1)^5gwTl01o7aXvNyKjsZ}|Lozy0wy8wme4fBw6#ejQ#; zZ(jeKuReMI(@(&?|NU=&_qkA4h!|dkFE_0E<0l_~^_x2pE~)etv^M=9cYpff^JbR+ zhu44o$6tT)F}P2@hv!e=mqYOX>B{l1!L0$bhkxt@j_0Sb=J1B2r;Z-w>+6S)o=T(? z6Hf$q&)UsVrUYvh|7Q=2MS|!#czE-fKYstor(Y2MH*fgi*B^iK@vnbi+Cl*TzyA1B z&VBOnC!hY9DE|*{{`!w!{9$eSUd`sszxm?VO84XEOq^`CzMPxJj(UwscBzx_G^ zo0eqhKaM4)qSQB4xuiY(W7|*k-z~j*^wb7uy*zXD6lsxdKJy>`!`G3!?&1jx?}?~D z)Yc!3;y=#a0N{ByAO6FyKLN56{x@&qK1XA>-VTgVr z=EVxWgsR7<-LGXnDDjVIhHMhY1JOYy&MF=<)`nz&l!aEo541`|LLzI*?^DV|HGZ58#ZkI z;kTcB^3~VSu(M(P+RwlK`t!p)8lhj6J73EW|J=O(@EN$wpRNVBX3d#1XV!8Ve3(Dv z!)O-qnxgFAu=YptP%`)F`@e5i;-72M`Qr0a>(}2o^CQ%ONMlv=`erWC8@P6UE|Ke- z;VI8F)5-#u-p^N^I+ILiz$y)P25S!g4xAAX^S5yL=;wcbV(;E<+d8(NIDY2n;ZuJ% zJbwJ>3cILc#+J1=L>mmGQT)SFM@b&M%`06V-UAqAW<^1sD7r#4m`1fCY@q02L zXmj(Qe*EH(pM${=!l1m3Gs&@U+py-3pU^6RU;#e;{tvXfTkw1sIyj(1_s*Tehd12$ z&5vLF_?yj##YF#UE#Q9hncsc!;}2*4@WofZ{o)U2NHt}{DoF2dzxdtfN#eg*bGrj* z4*$5fsqmsM|9SMxgKZtd7au&hc&wx5@7EkX`gbSx68tOo1^oZpyTZ^`y0jdF=wC(U z`?HJQ6}cmfqQmg9_fO^1UG$^l3a$FX%Z}1rS6upQL0pt@FS}6@Z0nDukW#fm@1j4( z&o8DGuBA&ZG2zm(#tJvaerd0CH|y zbkrz5$=QSXVtdRrR!?H|tyCboB@kpoZ|X)C<*yy&{}VV{pE@TFP4}!@g&$ z-t>3QYMR&O%o&cOvkw1*{(DFNHvMm1sus2ZWV5Q6ml%4jCyJT_U_O_9gCHMxn)c{H9f1JUSCYA#n{;#;wzYb@=W}Tmb{;S66+3HsP z^0F)#T{8`(ky+g;mr7V4z&KmiYIPWb(q%mZo>Z#lsi6NNR+=;CU|X$HUfnvc>UbvO zlu@sZu@vi}D;jE3ELWU2%D432JNi#+`O^Bz$-uEX--oBC0v4!|Z31w!DSOK`zZH{(n%$VdOT;f)^Doyc2q>6gn-u8LrBtJqrG zI7t@;{aeL!K5tl#_tLO(7}%H=76x#b2FM>CO)MAVf|6G?=e9(m=e^N*J=jp^zpV5> zPA*WJ|AqfQQ@S|X62AYwbO&PncQtcuSy<4`Uv90ID@F0eMIo!yO6%*F`KktH$8xf& z;vAPP^>Tf^-c+)M#u>comI04ZsbYa}#S*Kj!Gwr1U=8dtu$kjBhg4({IfFt9(RhWW3v-RTO zWxHv@AC!h`X!{k;T394djQn2vN^QM*iX{U*ceVH8;MMk(;TVaLbtUl2-k7SfE~efqCaSVx-MrL`W;Jn9$AI+ z1o1&)jDM*jj>bsWn$5g^4xX>62v=5N7fSi6P5)J!V4GSM4)(Ka46G4T+AZVk+~1V| zk?uh(O^9iLm<+r<6Tl7XdFd!4Jp0%bR;k+albRxghKH(DC<^+&RH}-WgZSlwaDg2) zs|aWnYavt31W5ldZEmA~1_6zrBrNA@dV6v4RV8OxmX57q@bX+8F6=&ee$qZz*?7{- zX~y2l#_JdDljlnh+u0oGf9c8Q+S7w=wb**Hy!NvF;&2&3ql_9F1+}UT4cm~F{>O0y z!EJA8=jCqH02Z#A$^YA4x2nw>@ls{r};guUCqyFU2vkUYu8l~tu7Cp*X#fA~6V5fk+jzRjLc5*`cAKY`jeha#PzOnec-MWI`AKo1V zfgUc;zbaUkvOT}tHm&@@!~LtOWmUv1!O9i(mmWTCs%ZtEHg;Q@mAl%<1-gGm0UmGq zHxL7(ns;301D!wXSg^ggEN=;Sh>itQjH{hpR`}njVqLczWREOt&c1@1%Qy6IF90C= zr?Itup;#iz#BCX;c*@7)4*Op=L^_N9C?K)j3wBR4)IzO+W@WCm2IdJjLSvnxpZ?*j zsu#pYv1zw}xu%$!mQ^QuUN+|s^Fes{Ef~4h{=mBRz!-8bO;Io#N<6g90VRs{-H zzV*Qs@*(Km5U5!= zzrfMBxCxjUNdIv0WU+l1AwZ|5rVIKnHBKAOQ4{eqna=1Rl&XncxaEuP<#W~X{Ufdt z_Z`)g5_~_JJ%cE9N@z4{lV;Z(*fFzqP^xhHY?Uf@HlsoGuOsva`QoZ#=i7S2Jk8t{ zI$!Olf6NZ*V)NV7qkl#L2^-}$`X~Jl?ACo>8oA2${@VP~^3vwZrdZE?vfS2kijp&5 zEk3VU=^Pfaa)xHLHs=NX?=GL{7OrMrF7M}y$nIM-50(z{xqja40Z$wZ-3Peib0Y$1k1qjqgjZ%(S#dPw_WCHRY_;F*gUI> zU>mHPV)L+$%ZRvl96@P4d$GQCj^$Qt4zR=RPqixU(X67sp=ro?rnb+$G65cHA8Ad!sRYbNFR>2=#V zUN7%ftbwK=(YW?DK7#b`^`#mZGK1voVchg-H8+tyVFefKUy2b*|6WFTuxai~>6 z);9h3?gucC2x+z4w5pn3g-;5pKC1{_!s;}HwuI1%$Q^fg9l+ksfK?0)F;AJPqJRwP z-VrIABZ&0h%Rs}70L8HLu<#pPFddq03k2BDcB3Hr}f+OJpUSLWyE7dP#hz*5`D zAy}xgzxZ&)KIZ4eeWd?k@H*c|kNy!w;Z3P_g3Q~Izc2yo1M|U&ja-JkhYBkJ$0Gh8 zJ7jeukL6=A9T0Ib7s$R`5YeEOA|ia&>opK=t#o$QFglJP+k?J-RNg}JQS83DhF7V9 zR}!F%jKBNA4D3I%7a2+jIYqwHL8E_>?sOf|{;HaqDaoCUWBY@Q`fu&nO^wMzXIOmSrf|!;Z;wWgk1kKI|le z=+J+$@N(hd>w{MxwO`$g{%!ildhp>%`$QZcwf73XuD^K@J94+E!&5g(x(?tyH7GVg zIpIAb?Z16sOgtbRs6+qYY$OszAiN0f%#=<~u_a*jGOr!c3qeoj=?IF!I-s zH46y0Hn0OsNms4*!e*bjKlRM(ivditc3JN|PV>DvGm$_*vu?83{8*+9^{j+@7Oz=|}{M%SZJK@$!M}b-jFH&p7q`B~ppjL|CP; zA3e|b*^l&W^YWr%Z!t5}>rx%*Nc-#?suvkQu~*>i2vDWJpSE!Y0d0e^9_7~_;eub|H8#xn5J!4*=5#32_{@vKWLYM`P=4(WN_N)Wg zrU1?%%PJ!5|IRu9){a}7OYLkCk5yjm@7cR}M%0z)%MnZlks2c{sQpfOL~(YHJ};0^ zeHI&g3wgT}Ae}!xt8n8Rc$sk1NvVS?opZch*vaZ(XewUPSSzIMeE;G-Mx7yt_?UJ^ zA12ljoHG2+PiPpb(n)WWg|RCrxAx6$hiH|q=WEyJr{@sb5x~%t3f_=hP;8+^OYKHy zohFO@V`70AnT@(vxa#OgtdOx9_kYfPK7$qo+JiCoVw+Vflel(m8_0No(r~ z^%&lScLJ#r%_HlH(zCYn>>~j&dn~FrAYr>1h^k;bkEA>@_YN64;L05 zZtm}?NcL9QU$b8bshitR4hq;G(0;Nqzq#LPK0jbe?{FKgNlX9tJTC+!Te*R^UPjlye53!=4qsR`vTKU`ZY^x_+HQgCvvAQ~T@?hI zXVZnND4ZnBz7;yNN;iV<;ipz%JR7zg@ zM=($Vl_h+eb#uJ%aw1qvMj1XRN{jjzn~cP{mXq?8N36iTcd=I zpwxZO`3*xq5E`r5WY7m3j0p0_hkD zBvYq#4Jhl5#KZV6fklMFE(9izT&wqol0Dkq_k>iRm<^WEea+-n^6NLKJ_gKyZ2)J$p zwtqO1n}YjH2{D1%XY`1aX&|Jge?NyZGg2yxjV%HmhHH}3KbF$C6d+0e9JQnr-q?Rc zZnzl<=AH}4sT9K(-=?yXbOVYJ5d;tcH1x&5-JgW)^e^VmTnd(|A^3k>K+DAiPNGa4HgqgiC2KdAV%)dKVpHNX$%IEq&vr63`I3|Mn-?y zznZ9w{xN~(04kh*i)okFp+u)kh4D{n=Z^qHj9(bc5Kb5Fuk|N>{m*`~8w=2XEmr4> zYA*mke)Gul@GTnNApD@jh>9+uz`HAg%RG-Q!Y~A#I;FP7_nX?zSR;S&!-*FC+Xetr zXwIQ$+o{o;6!SPT1(*z;?o-aFLNT<7de)sz7VO7}%mf@z?%#X1vvYi`X*v%g zFf9U_b__Fc@4-0k|C=9Y^h^One*kNs8Ci~|{2EEzDMy)jRB_X%Lii9V`nU0UFgJIP z2N9SWfw{TKnBVS&k)(e}4v%VQ1ZD8>2?1T#s#A<4LSX%yDx*jLH=^?c5eN-|sM5a; z*nN(mrXD=>6fie;f1){LXx+D4G3mdH1pgBO?+8Si{=GMocg7n5(to`5%ht^X0n-0$ zaAm21A}|5{fA8MhMUp%m`Q(8zce~n1ZRrBmGYeAqxl@ z0n&fS3SjkqAVB)}14WjRGz3WhNz-^N+e`Y7rCQmj86!aYpE1BJJ_rOz|3RS4I^u=^ z=|657O=NpW|A|!l)Q$eT!n^kp7{t|N24e&l495@c7N6i1pQR#HBqL2QA)91RMlt57-l8fB@+~21;ZT z0!M)KA2{T!(0>F-|Ndjj6622m=|BEDPCyGu{|Qhso9H_Nq<`NbWr4vXK>80JbJiGr z1W5nU*CAVwnvVW|?(?sIb-GvpW`<@bj5-1|1yR=^hi@8=sN~0n)!b zx}YQzBS89}7&<$}SEP8K#0Zf7 zB~}halNJHef3Ir(_>&($O>`_kFC0-kqbZ1@)+lq>2+$OStpV2W0|KOfA3$Ugi9>+& zpE#ArvB9MOIBJz`nl%EX|5+o<@&iDC^dA7otRi*@kp5$*(j+#B^q)knv(3{YK>D8+ zK|U`50{+tfmm6RI+<377aY+jO_{}2;v`G;{LxA=mH0W8ee+c+%54_107aQQMwY)2i z2$25csMW-^iS(a1m9xPkhOAp~d&BBU&eDh&dpe`!=f zK_*9l^glUvd@{KRkp7da`xv#H^dBQ-vMGTfK>801YF0Em1W5n0!9$)dtSU}p6HiQjB~!$T|plR}53dDiO}0yG7FA<1$=L||s7z@<&3e;06gDG~^f z{v)9#3h9mj>E9h6UL^v95Fq^zLWSQ&3<1)A#1uwxr9go6FNGQ?#B>Od{-?u_PbU)r z(tk4b9z@I%kWgM}YJ{J%%hHbOcEMp{sxbL=XYee*~3Ak^2!K{r4lnb0RPr z0n-0yjChCi2$24zR}lr25CPJ^7p45~?|$Zs@s9=YfMz#@Yy%RVgZ;LI(VJ4Mt>2YDexChmKF*EL70O6hLQgJ z5#f2%5Fq_WO=FaI00N}{0if_JA}|60(*Fp6csU9Pkp82fCCVrp0;GT0G(veMK!Ef= z0cdyQm{K7? z`j<)_6lO96NdJ@J#;1~v0O>#3`j1KLN&hiXB%2W^0;K;y;bvvCL4fo>8(djxyb&P% z$6LP%X&vc5A&O=*eMNxuKM9=QDxGREjRo)w$KyATJl`AqjkE{BW6m0*j{xmK^mWJ< zq)7kl1Vmtb1W5nmW5y?>LxA)zok}QB1P~zoM?gswaTEfi|4|6>IuUpq0n-25nDCp( zAwc?%oXRM$1PGA+B~SuIm==M6>A&z#e^l#<1z=|AX*I~_!$yFnAZ!h=ejgAB*c8|j zlm2~B9E%7Q0n&e{@UwD%5Fq{ggCk2x76PRIWa&GmttI`(RIzNylN@NoPM}YJ{CFK9{{>T0#PO$(}!Xd%qGzAhUfg(f>0h)rysf+@@ zjR5KYZA|zL5g3I4>380Ha#rX+0wL4?fBy29|CO--sqgrkUoigKf90~o;1Hla2o7u3G&2N3 zwg)q77Yil=vqXUOKTC93c0dS_{sRJ<)x-(`(toVfnbgLR{*$VCwtE@`NdMEI$7dx$ zfb=hkA}B_r5Fq_WN?jCoFao6i!MO0-KoIzW-T!_P`B(s&fzXuMU5CKmJ zkp4Zv#GB+sfb=i7ekh%s2nhQBlANMNPO5i*>f(7S^*w+4{-@si#mEUCBY{8uqk%W( zN4^$#m8_5m_=>=nU<$tQ4i6#_X#{@b4@02;Ux_qi6rKpY^99g94VDZPA|MK4Ni%G@%pZ?6J{_3ZH?JNHeQ1Sfa literal 54765 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 diff --git a/images/mbc2_0102.png b/images/mbc2_0102.png index 9d2583a1d114d6027363d2b370176f58c52fa7e1..51620cdde0ba10348a6b50332df8cf1782b147e3 100755 GIT binary patch literal 473992 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

#Q*)^ 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

{S$<>K?)FxWC~9POWe`somlVSMYYx5CFC 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

L!x<{009C72oNCfuz$fB*pk1PBlyKp+Z%G)tn0 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

ZUK!5;&!v#M3M{9Q&3vjrT5(Eek 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 WlQ%u Date: Tue, 7 Dec 2021 13:57:43 +0100 Subject: [PATCH 4/4] ch2 edits part 1 --- ch02.asciidoc | 64 +++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/ch02.asciidoc b/ch02.asciidoc index 1b14f1d4..c1371cce 100644 --- a/ch02.asciidoc +++ b/ch02.asciidoc @@ -3,13 +3,12 @@ === 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. - ((("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. [[bitcoin-overview]] @@ -26,26 +25,28 @@ image::images/mbc2_0201.png["Bitcoin Overview"] Each of these has a search function that can take a Bitcoin address, transaction hash, block number, or block hash and retrieve corresponding information from the Bitcoin network. With each transaction or block example, we will provide a URL so you can look it up yourself and study it in detail. -[[cup_of_coffee]] -==== Buying a Cup of Coffee +[[bitcoin_e_commerce]] +==== Buying from an Online Store + +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 laptop from Bob's online store. -((("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. +Bob's web store recently started accepting bitcoin payments by adding a bitcoin option to its website. The prices at Bob's store are listed in the local currency (US dollars), but at checkout, customers have the option of paying in either dollars or bitcoin. -((("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: +Alice shops for a laptop and proceeds to the checkout page. At checkout, Alice is offered the option to pay with bitcoin, in addition to the usual options. The checkout cart displays the price in US dollars and also in bitcoin (BTC), at Bitcoin's prevailing exchange rate. ---- Total: -$1.50 USD -0.015 BTC +$750 USD +0.01577764 BTC ---- +((("payment requests")))((("QR codes", "payment requests")))Bob's e-commerce system will automatically create a QR code containing a _payment request_ (see <>). -((("millibits")))Bob says, "That's one-dollar-fifty, or fifteen millibits." - -((("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 Store - Order 512". 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. +//// +TODO: Replace QR code with test-BTC address +//// [[payment-request-QR]] .Payment request QR code @@ -58,20 +59,19 @@ image::images/mbc2_0202.png["payment-request"] [[payment-request-URL]] .The payment request QR code encodes the following URL, defined in BIP-21: ---- -bitcoin:1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQA? -amount=0.015& -label=Bob%27s%20Cafe& -message=Purchase%20at%20Bob%27s%20Cafe +bitcoin:bc1qk2g6u8p4qm2s2lh3gts5cpt2mrv5skcuu7u3e4?amount=0.01577764& +label=Bob%27s%20Store& +message=Purchase%20at%20Bob%27s%20Store Components of the URL -A Bitcoin address: "1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQA" -The payment amount: "0.015" -A label for the recipient address: "Bob's Cafe" -A description for the payment: "Purchase at Bob's Cafe" +A Bitcoin address: "bc1qk2g6u8p4qm2s2lh3gts5cpt2mrv5skcuu7u3e4" +The payment amount: "0.01577764" +A label for the recipient address: "Bob's Store" +A description for the payment: "Purchase at Bob's Store" ---- -Alice uses her smartphone to scan the barcode on display. Her smartphone shows a payment of +0.0150 BTC+ to +Bob's Cafe+ and she selects Send to authorize the payment. Within a few seconds (about the same amount of time as a credit card authorization), Bob sees the transaction on the register, completing the transaction. +Alice uses her smartphone to scan the barcode on display. Her smartphone shows a payment of +0.01 BTC+ to +Bob's Store+ and she selects Send to authorize the payment. Within a few seconds (about the same amount of time as a credit card authorization), Bob sees the transaction on the register, completing the transaction. In the following sections, we will examine this transaction in more detail. We'll see how Alice's wallet constructed it, how it was propagated across the network, how it was verified, and finally, how Bob can spend that amount in subsequent transactions. @@ -80,13 +80,13 @@ In the following sections, we will examine this transaction in more detail. We'l ((("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 (<>): +You can examine Alice's transaction to Bob's Store on the blockchain using a block explorer site (<>): [[view_alice_transaction]] -.View Alice's transaction on https://www.blockchain.com/btc/tx/0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2[blockchain.com] +.View Alice's transaction on https://blockstream.info/tx/674616f1fbc6cc748213648754724eebff0fc04506f2c81efb1349d1ebc8a2ef[Blockstream Explorer] ==== ---- -https://www.blockchain.com/btc/tx/0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2 +https://blockstream.info/tx/674616f1fbc6cc748213648754724eebff0fc04506f2c81efb1349d1ebc8a2ef ---- ==== @@ -106,7 +106,7 @@ image::images/mbc2_0203.png["Transaction Double-Entry"] ==== Transaction Chains -((("chain of transactions")))Alice's payment to Bob's Cafe uses a previous transaction's output as its input. In the previous chapter, Alice received bitcoin from her friend Joe in return for cash. That transaction created a bitcoin value locked by Alice's key. Her new transaction to Bob's Cafe references the previous transaction as an input and creates new outputs to pay for the cup of coffee and receive change. The transactions form a chain, where the inputs from the latest transaction correspond to outputs from previous transactions. Alice's key provides the signature that unlocks those previous transaction outputs, thereby proving to the Bitcoin network that she owns the funds. She attaches the payment for coffee to Bob's address, thereby "encumbering" that output with the requirement that Bob produces a signature in order to spend that amount. This represents a transfer of value between Alice and Bob. This chain of transactions, from Joe to Alice to Bob, is illustrated in <>. +((("chain of transactions")))Alice's payment to Bob's Store uses a previous transaction's output as its input. In the previous chapter, Alice received bitcoin from her friend Joe in return for cash. That transaction created a bitcoin value locked by Alice's key. Her new transaction to Bob's Store references the previous transaction as an input and creates new outputs to pay for the laptop and receive change. The transactions form a chain, where the inputs from the latest transaction correspond to outputs from previous transactions. Alice's key provides the signature that unlocks those previous transaction outputs, thereby proving to the Bitcoin network that she owns the funds. She attaches the payment for the laptop to Bob's address, thereby "encumbering" that output with the requirement that Bob produces a signature in order to spend that amount. This represents a transfer of value between Alice and Bob. This chain of transactions, from Joe to Alice to Bob, is illustrated in <>. [[blockchain-mnemonic]] .A chain of transactions, where the output of one transaction is the input of the next transaction @@ -187,14 +187,14 @@ The response in <> shows one unspent output (one that has not been View the https://www.blockchain.com/btc/tx/7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18[transaction from Joe to Alice]. ==== -As you can see, Alice's wallet contains enough bitcoin in a single unspent output to pay for the cup of coffee. Had this not been the case, Alice's wallet application might have to "rummage" through a pile of smaller unspent outputs, like picking coins from a purse until it could find enough to pay for the coffee. In both cases, there might be a need to get some change back, which we will see in the next section, as the wallet application creates the transaction outputs (payments). +As you can see, Alice's wallet contains enough bitcoin in a single unspent output to pay for the laptop. Had this not been the case, Alice's wallet application might have to "rummage" through a pile of smaller unspent outputs, like picking coins from a purse until it could find enough to pay for the laptop. In both cases, there might be a need to get some change back, which we will see in the next section, as the wallet application creates the transaction outputs (payments). ==== 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 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. +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 laptop. 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. Finally, for the transaction to be processed by the network in a timely fashion, Alice's wallet application will add a small fee. This is not explicit in the transaction; it is implied by the difference between inputs and outputs. If instead of taking 0.085 in change, Alice creates only 0.0845 as the second output, there will be 0.0005 BTC (half a millibitcoin) left over. The input's 0.10 BTC is not fully spent with the two outputs, because they will add up to less than 0.10. The resulting difference is the _transaction fee_ that is collected by the miner as a fee for validating and including the transaction in a block to be recorded on the blockchain. @@ -202,13 +202,13 @@ The resulting transaction can be seen using a blockchain explorer web applicatio [[transaction-alice]] [role="smallerseventyfive"] -.Alice's transaction to Bob's Cafe +.Alice's transaction to Bob's Store image::images/mbc2_0208.png["Alice Coffee Transaction"] [[transaction-alice-url]] [TIP] ==== -View the https://www.blockchain.com/btc/tx/0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2[transaction from Alice to Bob's Cafe]. +View the https://www.blockchain.com/btc/tx/0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2[transaction from Alice to Bob's Store]. ==== ==== Adding the Transaction to the Ledger @@ -277,7 +277,7 @@ image::images/mbc2_0209.png["Alice's transaction included in a block"] ((("spending bitcoin", "simplified-payment-verification (SPV)")))((("simplified-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 <>. +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 laptop 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 web page. Now the chain of transactions will look like <>. @@ -285,4 +285,4 @@ As Bob spends the payments received from Alice and other customers, he extends t .Alice's transaction as part of a transaction chain from Joe to Gopesh, where the output of one transaction is spent as the input of the next transaction image::images/mbc2_0210.png["Alice's transaction as part of a transaction chain"] -In this chapter, we saw how transactions build a chain that moves value from owner to owner. We also tracked Alice's transaction, from the moment it was created in her wallet, through the Bitcoin network and to the miners who recorded it on the blockchain. In the rest of this book, we will examine the specific technologies behind wallets, addresses, signatures, transactions, the network, and finally mining.((("", startref="BCover02")))((("", startref="DCSover02"))) ((("", startref="UCcoffee02"))) +In this chapter, we saw how transactions build a chain that moves value from owner to owner. We also tracked Alice's transaction, from the moment it was created in her wallet, through the Bitcoin network and to the miners who recorded it on the blockchain. In the rest of this book, we will examine the specific technologies behind wallets, addresses, signatures, transactions, the network, and finally mining.