11 KiB
Todo List for v3.0 of Learning Bitcoin
The following TODO items are intended for a 3.0 version of Learning Bitcoin from the Command Line
Medium-Scale Updates
The following updates involve updates or the creation of new chapters, but their additions are generally bounded and known.
- General Update: Consider replacing testnet with signet
- Big changes to defaults
- Signet
- SEGWIT
- Talk about address types: https://www.unchained.com/blog/bitcoin-address-types-compared
- Descriptor Wallets
- New Interlude: Creating QR Codes (after 3.3)
- New Subsection: Creating a QR
- New Subsection: Creating a Quick Connect QR
- Revise Section: Understanding the Descriptor (3.5)
- New Content: Descriptor Wallets
- Possibly also remove legacy wallets (3.3) and replace them entire with descriptors
- New Content: Complex Descriptors
- Consider: Breaking into Two Sections
- New Interlude: Creating Animated QR Codes (after 7.1)
- New Subsection: Understanding Uniform Resources
- New Subsection: Creating an Animated QR
- New Subsection: Creating an Animated QR of a PSBT
- New Chapter: Using Other Command-Line Tools (between 8+9)
- 9.1: Using seedtool
- 9.2: Using keytool
- 9.3: Using bytewords-cli
- Revise Section: Understanding Timelock Options (11.1)
- Explanation: Better distinguish differences
- Reference: consider chart at in https://prestwi.ch/bitcoin-time-locks/
- New Chapter: Using Miniscript Command-Line Tools (between 13+14)
- 15.1: Using miniscript
- 15.2: Using Bitcoin Dev Kit (BDK)
- 15.3: Planning for the Future
- New Content: Expand the PSBT Libwally Content (17.4) into Two Sections
- 17.4: Signing PSBTs in Libwally
- Explanation: Contains the current info on importing a PSBT, and shows how to sign it
- 17.5: Creating PSBTs in Libwally
- Explanation: Contains the current info on creating a PSBT, and shows how to export it
- 17.4: Signing PSBTs in Libwally
- New Chapter: Talking to Bitcoind with Swift (between 17+18)
- 19.1: Accessing Bitcoind with Swift (existing section)
- 19.2: Using Swift with Bitcoin Lib [Wolf's library]
- 19.3: Using Swift with Libwally [Wolf's shim]
Large-Scale Updates
The following updates involve the large-scale work done on Schnorr and Taproot in Bitcoin Core 0.21 and 22. This represents a first cut at how to layout the work, but revision and expansion will likely be needed as everyone's understanding of these new technologies matures.
Chapter X: Expanding Bitcoin Transactions with Schnorr (probably between chapters 6+7)
- New Section X.1: Understanding Schnorr Signatures
- New Subsection: Understanding the Math of Schnorr
- Explanation: Add + subtract for one signature
- New Subsection: Supporting MuSig
- New Subsection: Understanding the Use of Adapter Signatures
- New Subsection: Knowing the Advantages of Schnorr
- Explanation: size, 64 bytes vs 72, better for multisigs
- Explanation: speed, linear, validate a million-sig multisig in 2 minutes
- Explanation: privacy, no difference between MuSig and sig, no detection of Lightning
- Explanation: also better security, non-malleability
- Reference: https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki
- New Subsection: Understanding the Math of Schnorr
- New Section X.2: Using Schnorr Signatures
- New Subsection: Signing with Schnorr
- New Subsection: Adding a Schnorr Signature
- New Subsection: Reading a Schnorr Signature
- New Subsection: Using Schnorr with Taproot
- Update Chapter 6 (Multisigs) to Integrate with Schnorr
Chapter Y: Improving Bitcoin Scripts with Taproot (probably between chapters 13+14, possibly expanding to two chapters)
- New Section Y.1: Understanding MAST
- New Subsection: Improving Privacy with MAST
- New Subsection: Laying out a Script in MAST
- New Subsection: Knowing the Advantages of MAST
- Explanation: larger scripts
- Explanation: hidden branches of scripts
- Explanation: fungibility
- https://github.com/bitcoin/bips/blob/master/bip-0114.mediawiki
- New Section Y.2: Understanding Taproot
- New Subsection: Integrating MAST with Taproot
- Explanation: Expanding Segwit
- Explanation: Integrating Schnorr Signatures
- New Subsection: KNowing the Advantages of Taproot
- Explanation: even more privacy; scripts and other addresses are indistinbuishable
- Reference: https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki
- Reference: https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki
- New Subsection: Integrating MAST with Taproot
- New Subsection Y.3: Creating a Taproot Script
- New Subsection: Defining a Taproot Script
- Explanation: Segwit v1, 32-byte program, not P2SH wrapped, leaf version is 0xc0
- New Codes: OP_CHECKSIGADD and OP_SUCCESS
- Cut Codes: OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY
- Reference: https://twitter.com/pwuille/status/1459778730369368067
- New Subsection: Defining a Taproot Script
- New Subsection Y.4: Importing a tr Desciptor
- New Subsection Y.5: Using Taproot in Practice
- New Subsection: Making a Taproot Payment
- New Subsection: Validating a Taproot Script
- Update Chapter 9 to Integrate with Taproot
- Mention Taproot in 9.1 or 9.2
- Add New Section 9.6: Scripting a P2TR (mostly a pointer to Chapter Y)
Further Updates
The following updates could be part of v3.0 or could be further future, depending on interest and funding.
- New Graphics: Animated GIFs for key demos.
- Reference: https://github.com/faressoft/terminalizer
- New Chapter: Talking to Lightningd with C (after chapter 20)
- 22.1: Creating a Lightning Channel with C
- 22.2: Creating a Payment Request with C
- 22.3: Paying an Invoice with C
- 22.4: Closing a Lightning Channel with C
- Alternatives: Consider Swift instead of C, depending on Lightning support
- Reference: https://diyhpl.us/wiki/transcripts/blockstream-webinars/2019-07-31-rusty-russell-getting-started-with-c-lightning/
- Reference: https://twitter.com/roasbeef/status/1389649064753471488_
--
Listing of Updates
Legacy Updates
- Segwit
- Segwit is now old enough that we should teach it as the default. That means that sections 3.1-4.5 should be rewritten to use Segwit as the default and 4.6 should be removed (with perhaps a bit of the information about the different types of addresses being preserved).
- It's possible that the same should occur with 10.5, but it should first be reviewed to see if it's a meaningful building block in the scripting process (or not).
- Signet
- Descriptor Wallets
- Fees
- There was some question of if
mintxfeeis still current, or ifpaytxfeeshould be used. I haven't seen any evidence of obsolence, but it'd be good to check this and make sure we're still on the best practices. - This is discussed in 4.1
- There was some question of if
27.0 Updates
- v2 transport becomes default
26.0 Updates
- v2 transport update
25.0 Updates
See Bitcoin Mag and release notes
argsparameter for RPC
24.0 Updates
See Bitcoin Mag and release notes
- Miniscript
sendallRPC- RBF is now default
23.0 Updates
See also #575 and of course the Bitcoin Core 23.0 release notes.
- Schnorr & Taproot
- Obviously, the biggest update. We'll need to teach the basics of both and why they're exciting. The main question here is: what commands actually take advantage of Schnorr & Taproot, and how can we show this off.
- If there's just a little bit of functionality right now, it can go into chapter 8, probably in two new sections: 8.3 & 8.4, on Schnorr and Taproot. If there's already a lot of functionality, it should go into its own chapter, and 8 (and everything beyond it) should be shifted back.
- Descriptor Wallets
- Descriptor wallets are now the default. There's some unfortunate lack of integration with multisigs, but we should otherwise give them more attention. What can we do new about inputting and outputting descriptor wallets? Are there any other functions of note?
- This will likely go in 3.5, though it's possible it go split into two chapters: Understanding the Descriptor and Understanding the Descriptor Wallet. See the 0.21 release notes at the bottom for everything about Descriptor Wallets. But note that we explicitly turn them off in 3.2, so any discussions explicitly about descriptor wallets will require creating a new wallet for that purpose
- Freezing Coins
- This is an interesting new ability that allows you to prevent UTXOs from being automatically selected when transactions are created.
- This would probably fit well into 4.5 as a final header-section.
- CJDNS Network
- I'm not familiar with CJDNS, but it sounds like a privacy option that would fit in with Tor and i2p
- If that's correctly, this would be a good 15.2, with the 15.0 chapter renamed "Using Other Privacy Options" or something like that
- RPC Changes
- The following RPC commands have had changes to their output and any examples should be rerun. If they are part of a sequence of commands (e.g., building out a transaction), then the whole sequence should be rerun.
createmultisig,addmultisigaddress,listunspent,getblockchaininfo- Updated RPCs may or may not exist in the text. The best way to find out is to search.
22.0 Updates
See release notes.
- New External Signer Commands
- There are some new external signer commands:
enumeratesignersanddisplayaddress. Are they relevant to what we're teaching? If so, should we add info on them. - See https://github.com/bitcoin/bitcoin/blob/22.x/doc/external-signer.md
- Any updates would go in 7.3.
- There are some new external signer commands:
- RPC Changes
- Again, these commands should be reoutput.
getpeerinfo,gettxout,getrawtransaction,decoderawtransaction,decodescript,getnodeaddresses
0.21.0 Updates
See release notes.
- Signet
- Signet is considered more controlled and reliable than testnet, and so should be used as our test network, along with an explanation of what it is and how it differs from other networks.
- The setup and explanation of networks appears in 3.1. That should be changed, and with the change of the alias there, we should mostly be used Signet. Then the rest of the course can be searched for any references to testnet.
- RPC Changes
- As usual, these may or may not be used, but if they are, outputs should be redone.
getnetworkinfo