1
0
mirror of https://github.com/bitcoinbook/bitcoinbook synced 2025-02-12 23:52:44 +00:00

All: edits for follow-up feedback from Murchandamus (thanks!)

This commit is contained in:
David A. Harding 2023-08-09 16:46:40 -10:00
parent 0cab0c9d2a
commit 75e1277545
9 changed files with 26 additions and 24 deletions

View File

@ -568,7 +568,7 @@ when the transaction does not in fact exist. The lightweight client establishes
the existence of a transaction in a block by requesting a merkle path 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. proof and by validating the Proof-of-Work in the chain of blocks.
However, a transaction's existence can be "hidden" from a lightweight client. A However, a transaction's existence can be "hidden" from a lightweight client. A
lightweight client can definitely prove that a transaction exists but cannot lightweight client can definitely verify that a transaction exists but cannot
verify that a transaction, such as a double-spend of the same UTXO, 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 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 vulnerability can be used in a denial-of-service attack or for a
@ -1140,7 +1140,7 @@ node downloads all transactions and therefore reveals no information
about whether it is using some address in its wallet. A lightweight client about whether it is using some address in its wallet. A lightweight client
only downloads transactions that are related to its wallet in some way. only downloads transactions that are related to its wallet in some way.
Bloom filters and compact block filters are a way to reduce the loss of privacy. Without them, a Bloom filters and compact block filters are ways to reduce the loss of privacy. Without them, a
lightweight client would have to explicitly list the addresses it was interested lightweight client would have to explicitly list the addresses it was interested
in, creating a serious breach of privacy. However, even with in, creating a serious breach of privacy. However, even with
filters, an adversary monitoring the traffic of a lightweight client or filters, an adversary monitoring the traffic of a lightweight client or

View File

@ -490,7 +490,7 @@ bloom filter, it will send that block using a +merkleblock+ message. The
+merkleblock+ message contains the block header as well as a merkle path +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. that links the transaction of interest to the merkle root in the block.
The lightweight client can use this merkle path to connect the transaction to the The lightweight client can use this merkle path to connect the transaction to the
block and verify that the transaction is included in the block. The lightweight block header and verify that the transaction is included in the block. The lightweight
client also uses the block header to link the block to the rest of the client also uses the block header to link the block to the rest of the
blockchain. The combination of these two links, between the transaction blockchain. The combination of these two links, between the transaction
and block, and between the block and blockchain, proves that the and block, and between the block and blockchain, proves that the

View File

@ -609,7 +609,7 @@ step is to commit to all the transactions using merkle trees. Each
transaction is listed using its witness transaction identifier (_wtxid_) transaction is listed using its witness transaction identifier (_wtxid_)
in topographical order, with 32 0x00 bytes standing in for the wtxid of in topographical order, with 32 0x00 bytes standing in for the wtxid of
the first transaction (the coinbase). As we saw in the <<merkle_trees>> the first transaction (the coinbase). As we saw in the <<merkle_trees>>
the last wtxid is duplicated if there are an odd number of wtxids, the last wtxid is hashed with itslef if there are an odd number of wtxids,
creating nodes that each containing the hash of one transaction. The creating nodes that each containing the hash of one transaction. The
transaction hashes are then combined, in pairs, creating each level of transaction hashes are then combined, in pairs, creating each level of
the tree, until all the transactions are summarized into one node at the the tree, until all the transactions are summarized into one node at the
@ -643,7 +643,7 @@ The final field is the nonce, which is initialized to zero.
With all the other fields filled, the header of the candidate block is now complete and With all the other fields filled, the header of the candidate block is now complete and
the process of mining can begin. The goal is now to find a header the process of mining can begin. The goal is now to find a header
that results in its hash that is less than the target. that results in a hash that is less than the target.
The mining node will need to test billions or trillions of variations of The mining node will need to test billions or trillions of variations of
the header before a version is found that satisfies the requirement. the header before a version is found that satisfies the requirement.
@ -1454,7 +1454,7 @@ consensus mechanism so as to disrupt the security and availability of
the Bitcoin network. the Bitcoin network.
It is important to note that consensus attacks have the greatest effect on future It is important to note that consensus attacks have the greatest effect on future
consensus. Confirmed transactions ont he best blockchain consensus. Confirmed transactions on the best blockchain
become more and more immutable as time passes. While in theory, become more and more immutable as time passes. While in theory,
a fork can be achieved at any depth, in practice, the computing power 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 needed to force a very deep fork is immense, making old blocks

View File

@ -216,7 +216,7 @@ stick.
((("hardware ((("hardware
signing devices")))In the long term, Bitcoin security may increasingly take the signing devices")))In the long term, Bitcoin security may increasingly take the
form of tamper-proof hardware signing devices. Unlike a smartphone or desktop form of tamper-proof hardware signing devices. Unlike a smartphone or desktop
computer, a Bitcoin hardware signing device only needs hold keys and computer, a Bitcoin hardware signing device only needs to hold keys and
use them to generate signatures. Without general-purpose software to use them to generate signatures. Without general-purpose software to
compromise and compromise and
with limited interfaces, hardware signing devices can deliver an almost with limited interfaces, hardware signing devices can deliver an almost

View File

@ -63,7 +63,7 @@ Nonexpiration:: A valid transaction does not expire. If it is valid
today, it will be valid in the near future, as long as the inputs remain today, it will be valid in the near future, as long as the inputs remain
unspent and the consensus rules do not change. unspent and the consensus rules do not change.
Integrity:: A Bitcoin transaction signed with +SIGHASH_ALL+ or parts of Integrity:: The outputs of Bitcoin transaction signed with +SIGHASH_ALL+ or parts of
a transaction signed by another +SIGHASH+ type cannot be modified a transaction signed by another +SIGHASH+ type cannot be modified
without invalidating the signature, thus invalidating the transaction without invalidating the signature, thus invalidating the transaction
itself. itself.
@ -710,7 +710,7 @@ id="PSCaymetric12")))Another way to handle the prior commitment states
is to explicitly revoke them. However, this is not easy to achieve. A is to explicitly revoke them. However, this is not easy to achieve. A
key characteristic of Bitcoin is that once a transaction is valid, it key characteristic of Bitcoin is that once a transaction is valid, it
remains valid and does not expire. The only way to cancel a transaction remains valid and does not expire. The only way to cancel a transaction
is to get a conflicting transactionn confirmed. is to get a conflicting transaction confirmed.
That's why we used timelocks in the simple payment channel That's why we used timelocks in the simple payment channel
example above to ensure that more recent commitments could be spent example above to ensure that more recent commitments could be spent
before older commitments were valid. However, sequencing commitments in before older commitments were valid. However, sequencing commitments in

View File

@ -324,9 +324,8 @@ scripts")))((("transactions", "advanced", id="Tadv07")))((("scripting",
"multisignature scripts", id="Smulti07")))((("multisignature "multisignature scripts", id="Smulti07")))((("multisignature
scripts")))Multisignature scripts set a condition where _k_ public keys scripts")))Multisignature scripts set a condition where _k_ public keys
are recorded in the script and at least _t_ of those must provide are recorded in the script and at least _t_ of those must provide
signatures to spend the funds. This is also known as a "M-of-N" scheme, signatures to spend the funds, called t-of-k.
where M is the total number of keys and N is the threshold of signatures For example, a 2-of-3 multisignature is one
required for validation. For example, a 2-of-3 multisignature is one
where three public keys are listed as potential signers and at least two where three public keys are listed as potential signers and at least two
of those must be used to create signatures for a valid transaction to of those must be used to create signatures for a valid transaction to
spend the funds. spend the funds.
@ -1233,7 +1232,7 @@ number prefixed as XX):
03 2 03 2
04 OP_ELSE 04 OP_ELSE
05 <30 days> OP_CHECKSEQUENCEVERIFY OP_DROP 05 <30 days> OP_CHECKSEQUENCEVERIFY OP_DROP
06 <Abdul the Lawyer's Pubkey> OP_CHECKSIG 06 <Abdul the Lawyer's Pubkey> OP_CHECKSIGVERIFY
07 1 07 1
08 OP_ENDIF 08 OP_ENDIF
09 <Mohammed's Pubkey> <Saeed's Pubkey> <Zaira's Pubkey> 3 OP_CHECKMULTISIG 09 <Mohammed's Pubkey> <Saeed's Pubkey> <Zaira's Pubkey> 3 OP_CHECKMULTISIG

View File

@ -1,3 +1,4 @@
[appendix]
== Errata to the Bitcoin Whitepaper == Errata to the Bitcoin Whitepaper
A description of known problems in Satoshi Nakamotos paper, "Bitcoin: A description of known problems in Satoshi Nakamotos paper, "Bitcoin:
@ -6,8 +7,8 @@ changes and how Bitcoin's implementation differs from that described in
the paper. the paper.
This document was originally published by a co-author of this book in This document was originally published by a co-author of this book in
2016; it is reproduced here with updates. The numbers and names of 2016; it is reproduced here with updates. The names of
sections in this errata correspond to the numbers and names of the sections in this errata correspond to the names of the
sections in Nakamoto's original paper. sections in Nakamoto's original paper.
=== Abstract === Abstract
@ -23,7 +24,7 @@ longest chain would be the one backed by the largest pool of
computational power. However, Bitcoin was implemented in such a way that computational power. However, Bitcoin was implemented in such a way that
the amount of POW can vary between blocks, so it became important not to the amount of POW can vary between blocks, so it became important not to
check for the "the longest chain" but rather "the chain demonstrating check for the "the longest chain" but rather "the chain demonstrating
the most POW"; this is often shortened to "strongest chain". the most POW"; this is often shortened to "most-work chain".
+ +
The The
https://github.com/bitcoin/bitcoin/commit/40cd0369419323f8d7385950e20342e998c994e1#diff-623e3fd6da1a45222eeec71496747b31R420[change] https://github.com/bitcoin/bitcoin/commit/40cd0369419323f8d7385950e20342e998c994e1#diff-623e3fd6da1a45222eeec71496747b31R420[change]
@ -68,7 +69,8 @@ paper which refer to "network nodes" is mainly about what nodes can do
even if they arent mining. even if they arent mining.
* *Post-publication discovery:* When a new block is produced, the miner * *Post-publication discovery:* When a new block is produced, the miner
who produces that block can begin working on its sequel immediately but who produces that block can begin working on its sequel immediately but
all other miners must wait for that new block to propagate across the all other miners are unaware of the new block and cannot begin working
on it until it has propagated across the
network to them. This gives miners who produce many blocks an edge over network to them. This gives miners who produce many blocks an edge over
miners who produce fewer blocks, and this can be exploited in whats miners who produce fewer blocks, and this can be exploited in whats
known as the _selfish mining attack_ to allow an attacker with around known as the _selfish mining attack_ to allow an attacker with around
@ -186,8 +188,9 @@ Some linking is still unavoidable with multi-input transactions, which
necessarily reveal that their inputs were owned by the same owner necessarily reveal that their inputs were owned by the same owner
____ ____
* *Post-publication invention:* the revelation of a common owner for * *Post-publication invention:* it isn't clear that different inputs
different inputs isnt necessary if owners often mix their inputs with in the same transaction have the same owner if if owners often mix their
inputs with
inputs belonging to other owners. For example, theres no public inputs belonging to other owners. For example, theres no public
difference between Alice and Bob each contributing one of their inputs difference between Alice and Bob each contributing one of their inputs
towards paying Charlie and Dan than there is between just Alice towards paying Charlie and Dan than there is between just Alice

View File

@ -113,10 +113,10 @@ different units:
- BTC/Bytes (a legacy unit rarely used anymore) - BTC/Bytes (a legacy unit rarely used anymore)
- BTC/Kilobytes (a legacy unit rarely used anymore) - BTC/Kilobytes (a legacy unit rarely used anymore)
- BTC/vbytes (rarely used) - BTC/Vbytes (rarely used)
- BTC/Kilo-vbyte (used mainly in Bitcoin Core) - BTC/Kilo-vbyte (used mainly in Bitcoin Core)
- Satoshi/vbyte (most commonly used today) - Satoshi/Vbyte (most commonly used today)
- Satoshi/weight (also commonly used today) - Satoshi/Weight (also commonly used today)
We recommend either the sat/vbyte or sat/weight units for displaying We recommend either the sat/vbyte or sat/weight units for displaying
fee rates. fee rates.
@ -560,7 +560,7 @@ uses her output to attach either 25 child transactions or any smaller
number of child transactions equaling 100,000 vbytes in size. Without number of child transactions equaling 100,000 vbytes in size. Without
carve-out, Bob would be unable to attach another child transaction to carve-out, Bob would be unable to attach another child transaction to
his output for CPFP fee bumping. With carve-out, he can spend one of his output for CPFP fee bumping. With carve-out, he can spend one of
the two outputs in the transaction, the one that belongs to me, as long the two outputs in the transaction, the one that belongs to him, as long
as his child transaction is less than 1,000 vbytes in size (which should as his child transaction is less than 1,000 vbytes in size (which should
be more than enough space). be more than enough space).

View File

@ -664,7 +664,7 @@ Everyone with a partial public key that becomes part of the aggregated
public key must contribute a partial signature and partial nonce to the public key must contribute a partial signature and partial nonce to the
final signature. Sometimes, though, the participants want to allow a final signature. Sometimes, though, the participants want to allow a
subset of them to sign, such as t-of-k where a threshold (t) number of participants can sign for subset of them to sign, such as t-of-k where a threshold (t) number of participants can sign for
a key constructed by n participants. That type of signature is called a a key constructed by k participants. That type of signature is called a
_threshold signature_. _threshold signature_.
We saw script-based threshold signatures in We saw script-based threshold signatures in