1
0
mirror of https://github.com/bitcoinbook/bitcoinbook synced 2024-12-23 07:08:13 +00:00
Commit Graph

4250 Commits

Author SHA1 Message Date
David A. Harding
7576570348 Intro: fix broken links 2023-09-01 13:24:35 +02:00
David A. Harding
3d9b186355 Restore list of github contributors from latest update 2023-09-01 13:24:35 +02:00
David A. Harding
dae7f90976 All: remove bit.ly link redirects 2023-09-01 13:24:35 +02:00
Arthur O'Dwyer
fe8c70871d Spelling nit: s/Berkley/Berkeley/ 2023-09-01 13:24:35 +02:00
David A. Harding
d1a8b0704a Meta: move second edition changes to meta dir 2023-09-01 13:24:35 +02:00
David A. Harding
e2048c4206 Images: move sources to new directory 2023-09-01 13:24:35 +02:00
David A. Harding
61cfeeed13 All: update links from HTTP to HTTPS
(Except the whitepaper)
2023-09-01 13:24:35 +02:00
David A. Harding
064b6a7da7 Remove unused code examples 2023-09-01 13:24:35 +02:00
David A. Harding
727d74d4ba Move files for consistency and easier QA tooling
Drop unused glossary
2023-09-01 13:23:06 +02:00
David A. Harding
02106a1147 All: harding edits for first complete readthrough 2023-09-01 13:23:06 +02:00
David A. Harding
2832a7d0c5 CH14: conclusion: formatting 2023-09-01 13:23:06 +02:00
David A. Harding
0e4c076c0e CH12: conclusion: formatting 2023-09-01 13:23:06 +02:00
David A. Harding
21fbd2cf8e CH14: add conclusion 2023-09-01 13:23:06 +02:00
David A. Harding
b6a0d2f263 Dedication: formatting 2023-09-01 13:23:06 +02:00
harding
5f4acf6a4c Updated atlas.json 2023-09-01 13:23:06 +02:00
David A. Harding
fdf77a87cb Preface: update for third edition 2023-09-01 13:23:06 +02:00
David A. Harding
dcaf97aae7 All: edits for renepickhardt feedback (thanks!) 2023-09-01 13:22:08 +02:00
David A. Harding
ea1ebdfb36 Errata: remove numbers from headings 2023-09-01 13:22:08 +02:00
David A. Harding
75e1277545 All: edits for follow-up feedback from Murchandamus (thanks!) 2023-09-01 13:22:08 +02:00
David A. Harding
0cab0c9d2a Meta: edit notes for the future 2023-09-01 13:22:04 +02:00
David A. Harding
399e004211 CH05: fix script nesting (from Murchandamus feedback, thanks!) 2023-09-01 13:21:39 +02:00
David A. Harding
aba9e2258c CH14: remove introduction (from arufino feedback, thanks!) 2023-09-01 13:21:39 +02:00
David A. Harding
aefffbc5d3 CH12: clarify comment about time between blocks
Comment explained why one 10-minute block doesn't give more security
than ten 1-minute blocks but didn't also warn about the problems with
1-minute blocks.
2023-09-01 13:21:39 +02:00
David A. Harding
43ae026233 CH12: simplify PoW example
Previous example used python to describe how PoW works.  Replace
the first example with a bash one-liner and remove the unnecessary
details.

Inspired by review comments from Jorge Lesmes
2023-09-01 13:21:39 +02:00
David A. Harding
114d7bf25a Auth&Auth: explain differerence between MAST and Merklized Alt Script Trees
Inspired by a comment from Roasbeef about how we shouldn't described
MAST because that's not what taproot implements.
2023-09-01 13:21:39 +02:00
David A. Harding
89b548d5b5 All: update images for reviewer feedback
Special thanks to Murchandamus who provided most of the feedback
2023-09-01 13:21:39 +02:00
David A. Harding
8d6972d719 Libbitcoin bx: remove all mentions of vulnerable tool
- Remove appendix dedicated to `bx`.  They had already been slated for
  deletion, as I wrote to a reviewer on 2023-07-27: "I'm also probably
  going to delete the library/tool focused appendixes as I don't think
  they add anything".  After the disclosure of CVE-2023-39910 on August
  8th, it's clear that this appendix was worse than useless: it was
  harmful.

- Remove other mentions of `bx` in the book.  I had not previously
  intended this because it looked like a pain, but mentions of a tool
  often come across as endorsements to readers and no tool created by
  the team behind Libbitcoin is one I would ever want to endorse.  I
  regret that I didn't remove the mentions earlier in the process of
  updating the book.

- Remove appendix dedicated to pycoin.  I'm now aware of any problems
  with pycoin, but I don't think these sort of short detached tutorials
  add anything.  Programming Bitcoin is an entire book built on pycoin,
  and all of these tools have their own webpages that get updated more
  frequently than the book.
2023-09-01 13:21:39 +02:00
David A. Harding
d9f6cf53c7 CH12-14: edits for Murchandamus feedback
- Describe topological order to help readers understand how that solves
  the double spend problem

- Mention that transactions can be safely relayed one block before their
  locktime allows them to be included in a block because they'll be
  valid next block.

- Be a bit clearer about when subsidy becomes zero due to rounding and
  when BIP42 makes it zero unconditionally.

- Describe the creation of the witness merkle root before the block
  header merkle root

- Move up note about the retarget off-by-one bug

- Make "best blockchain" an inherent property and not an alias for a
  current chain.  When a new block arrives that triggers a reorg, we
  don't switch best blockchains---the new chain is the best blockchain
  and we switch to using it.

- Combine two sections about forks that were repetitive

- Mention that pool miners also need to prove they paid the pool's
  preferred coinbase transaction template

- Add a todo to clarify terminology around the 51% attack.  The existing
  text used this in a way that's consistent with how it was used in
  early Bitcoin history, but it's potentially confusing because it
  doesn't actually require a majority of hashrate to make the attack and
  it confuses it with a censorship attack that does require a majority
  (or at least a selfishing mining minority) to maintain.

- Reduce the situations we describe as "double spends". Consensus
  prevents double spending within a valid chain; the other situations
  are about unconfirmed transactions, which might better be described
  using other terms that won't confuse readers into thinking Bitcoin's
  double spend protection doesn't work.

- Add warning about backing up more than your seed when multisig or
  complex contracts are in use.

- Add a todo to fix "millibits" situation, which might involve image
  changes.

- Note that the first commitment transaction (the refund) needs to be
  signed before the funding transaction in LN channels.

- Pluralize "bitcoin" as necessary (somehow missed this before).

- Drop mention of tumblebit and teechan, which nobody is working on
  AFAIK.
2023-08-06 21:45:37 -10:00
David A. Harding
b8933271ff All: mostly replace "SPV client" with "lightweight client"
The description of SPV in the original paper assumed full nodes would
warn SPV clients about invalid blocks.  Such fraud proofs are not used
in production, so lightweight clients are (arguably) not SPV clients.
2023-08-06 21:08:04 -10:00
David A. Harding
672c3fdc07 All: edits for Roasbeef feedback
- Drop soon-to-be-outdated mention of current block reward amount

- Aezeed: mention internal and external version sumbers.  Instead of
  saying "global word list", clarify that both the backup and the
  recovery software need to support the same word list.

- Mention that compact block filters are something that blocks might
  commit to in the future in a consensus-enforced way.

- Add links to both RGB and Taproot Assets documentation.

- Mention that taproot assets can also support native forwarding.

- Minor edits and add some FIXMEs for later changes.
2023-08-06 21:08:04 -10:00
David A. Harding
528a7d3cbb Dedication: update for 3rd ed
- Attribute Andreas's dedication to him

- Add my dedication

Discussed with Andreas.
2023-08-06 21:08:04 -10:00
David A. Harding
54b84c9bdc CH11: small correction to relative size diff between header and block
Thanks Murchandamus
2023-08-02 15:02:37 -10:00
David A. Harding
2355a62a3f Preface: list changes since the previous edition
Suggested by Roasbeef
2023-08-02 12:39:48 -10:00
David A. Harding
9bfea66f45 CH11: edits for Murchandamus feedback
- Remove redundancy in description of the prevBlockHash field in
  creating a chain of blocks.

- Upsize numbers to segwit block limits

- Use "target" instead of "difficulty" when appropriate.

- Drop paragraph that repeats following table about block header fields

- Correct multiple parts of table about block header fields

- The genesis block is not the first block ever created: there were
  almost certainly test blocks created before it

- Use "||" for concatenation.  Left FIXMEs to update images later.

- Add short note about duplicating internal merkle tree nodes before
  hashing when an odd number are present.  Add long quote from Bitcoin
  Core source about why Bitcoin's merkle tree design should not be
  replicated by other projects.

- Drop table for illustrating what log2(N) looks like.  Add FIXME to add
  a plot.

- Drop details about previous testnet resets.

- Mention that testnets use different address prefixes.
2023-08-02 10:06:45 -10:00
David A. Harding
e0932e89f7 CH11-12: remove long & not-very-useful example code
Suggested by Jorge Lesmes
2023-08-02 10:06:45 -10:00
David A. Harding
825d52823c All: remove references to blockchain.info
They changed to blockchain.com and now heavily promote alcoins.

Suggested by Murchandamus and Roasbeef
2023-08-02 10:06:45 -10:00
harding
04b2f143b6 Updated atlas.json 2023-08-01 21:14:42 +00:00
David A. Harding
b387a9c09e Appendixes: add whitepaper errata
Suggested by Murchandamus.
2023-08-01 11:13:43 -10:00
harding
c79515dfe0 Updated atlas.json 2023-08-01 18:04:35 +00:00
David A. Harding
6e14b9637a CH09-10: edits for Murchandamus feedback
- Mention an example of Bitcoin Core sending a BIP151 transacation in
  advance, alas it's the only case implemented.

- Mention that FIBRE is software (since Matt's main network for it was
  shut down)

- Add fRelay to the node announcement message.  We've only had it for 11
  years.

- Clarify descriptions mention the genesis block as part of the block
  chain

- Mention that BIP157/8 is not able to relay unconfirmed transactions

- Update assertion that the mempool is only stored in memory (on Bitcoin
  Core, it is now written to disk on shutdown; on libbitcoin, it's
  always written to disk)

- HUGE FIX: correct inverted enumerator and denominator on feerates.  So
  embarrasing!
2023-08-01 07:53:41 -10:00
David A. Harding
4a6344a4d0 CH09: remove sections about fee market theory
These were absurdly hard to write and, as often happens when something
is that hard to write, they don't appear to be helpful, as judged by
Murch.  The last time I tried to explain the theory[1], it also sucked,
so maybe this isn't what I'm meant to do.  :-)

The removed text introduces the term "mempool" for this chapter, so a
small edit is made later on to compensate.

[1] https://en.bitcoin.it/wiki/Miner_fees#The_market_for_block_space
2023-08-01 07:53:21 -10:00
David A. Harding
baae9293cf Multi: switch from k-of-n/n-of-n to t-of-k/k-of-k
Suggested by Murchandamus
2023-08-01 07:52:54 -10:00
David A. Harding
644867fd92 CH08: edits for feedback from Murch
- Drop box with Wikipedia definition of digital signatures.  It didn't
  add anything and its accuracy was debatable.

- Use "commitment hash" earlier and more often.

- Fix some variable-name errors in the math

- Correct info about worst-case signature verification cost
2023-08-01 07:52:54 -10:00
David A. Harding
4165d6e113 Appendix Script Ops: remove (replace with link)
During his review, Mark "Murch" Erhardt discovered that the appendix
contained several errors and many entries that were confusing.  When I
looked at the upstream source on the wiki, I discover that it had extra
information that eliminated those problems.  Since we only reference the
appendix twice, don't really go into detail about writing your own
scripts, and since all the information is easily accessible online for
free, we drop the appendix and replace references to it with a link to
the wiki.
2023-08-01 07:52:54 -10:00
David A. Harding
27337e415f CH07 edits for Murch feedback
- Describe OP_CMS pubkey limits for consensus, relay policy, and P2SH.

- Mention that OP_CLTV and OP_CSV leave elements on the stack, unlike
  other VERIFY opcodes.
2023-08-01 07:52:54 -10:00
David A. Harding
491891fdaa CH05-06: edits for Murchandamus feedback
- Explicitly describe what BIPs are before we start dropping references
  to them.

- Mention that addresses don't encode a message, so using a unique
  address that the receiver has privately associated with a spender is
  the only guaranteed way to identify payments from that spender.

- Correct how many blocks need to elapse before an output can be spent
  by an input with a relative lock time.

- Many other small edits.
2023-08-01 07:34:58 -10:00
David A. Harding
5b1a5bff0a CH03-04: edits for Murchandamus feedback
- Mention the reason for the long validation time is the verification of
  transactions.  We previously implied it was download time, but some
  people have really fast internet.

- Better describe bitcoind cookie authentication and provide an example
  to make it even more clear.

- Add a link to bitcoin-s

- Make the long sidebar on collision attacks even longer by descripting
  a pre-image attack in addition to the previous descriptions of second
  pre-image and collision.  That way we don't conflate pre-image and
  second pre-image.

- Remove redundant tip box about an oddity in language about compressed
  and uncompressed private keys.

- Link to information about vanity address "mining" (brute forcing)
2023-08-01 07:13:47 -10:00
David A. Harding
67fd4677d1 Images: scale down send/receive 2023-08-01 07:13:05 -10:00
David A. Harding
f770347bd7 CH01-02: edits for Murchandamus feedback
- Fix bitcoin-overview image (P2PKH address was used as "private key")

- Use receiving and sending images from Bitcoin Design Guide
  (https://bitcoin.design) under CC-BY license
  (https://github.com/BitcoinDesign/Guide/blob/master/LICENSE)

- Mention changeless outputs, especially as used in transaction-chain
  image

- Include brief mention of best blockchain in paragraph about the cost
  to miners for confirming conflicting transactions
2023-08-01 07:11:27 -10:00
David A. Harding
71cf4bc97a CH02: edits for Mark (Xekyo) Erhardt feedback (thanks!)
- Drop unnecessary mentions of people from CH01

- FIXMEs: add notes for image corrections and best blockchain change

- Drop unnecessary mention of debits and credits

- Remove mention about asking block explorer for UTXOs to construct a
  transaction.  This is unnecessary detail and it can never entirely
  work for our example if we later use it to spend the output (because
  then the output won't be unspent)

- Instead of "new block" use "candidate block"

- Drop unnecessary mention of payment consolidation.  We already
  adequetely introduce this concept earlier in the chapter.
2023-08-01 07:11:27 -10:00