diff --git a/09_5_Scripting_a_P2WPKH.md b/09_5_Scripting_a_P2WPKH.md index 2afb181..fb3ced1 100644 --- a/09_5_Scripting_a_P2WPKH.md +++ b/09_5_Scripting_a_P2WPKH.md @@ -63,7 +63,7 @@ Here's a comparison of our two examples: | Type | PubKeyHash | PubKey | Signature | |----------------|----------|-------------|---------| | SegWit | 92a0db923b3a13eb576a40c4b35515aa30206cba | 03839e6035b33e37597908c83a2f992ec835b093d65790f43218cb49ffe5538903 | 3044022064f633ccfc4e937ef9e3edcaa9835ea9a98d31fbea1622c1d8a38d4e7f8f6cb602204bffef45a094de1306f99da055bd5a603a15c277a59a48f40a615aa4f7e5038001 | -| SegWit | 06b5c6ba5330cdf738a2ce91152bfd0e71f9ec39 | 0315a0aeb37634a71ede72d903acae4c6efa77f3423dcbcd6de3e13d9fd989438b | 04402201cc39005b076cb06534cd084fcc522e7bf937c4c9654c1c9dfba68b92cbab7d1022066f273178febc7a37568e2e9f4dec980a2e9a95441abe838c7ef64c39d85849c | +| non-SegWit | 06b5c6ba5330cdf738a2ce91152bfd0e71f9ec39 | 0315a0aeb37634a71ede72d903acae4c6efa77f3423dcbcd6de3e13d9fd989438b | 04402201cc39005b076cb06534cd084fcc522e7bf937c4c9654c1c9dfba68b92cbab7d1022066f273178febc7a37568e2e9f4dec980a2e9a95441abe838c7ef64c39d85849c | So how does this work? It depends on old code interpreting this as a valid transaction and new code knowing to check the new "witness" information diff --git a/10_1_Understanding_the_Foundation_of_P2SH.md b/10_1_Understanding_the_Foundation_of_P2SH.md index ff76003..d3b5c49 100644 --- a/10_1_Understanding_the_Foundation_of_P2SH.md +++ b/10_1_Understanding_the_Foundation_of_P2SH.md @@ -8,8 +8,8 @@ Here's the gotcha for using Bitcoin Scripts: for security reasons, most Bitcoin * __Pay to Public Key (P2PK)__ — An older, deprecated transaction (` OP_CHECKSIG`) that has been replaced by the better security of P2PKH. * __Pay to Public Key Hash (P2PKH)__ — A standard transaction (`OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG`) that pays to the hash of a public key. -* __Pay to Witness Public Key hash (P2WPKH)__ — The newest sort of public-key transaction. It's just (`OP_0 `) because it depends on miner consensus to work, as described in [§9.5](09_5_Scripting_a_P2WPKH.md). +* __Multisig__ — A transaction for a group of keys, as explained more fully in [§10.4](10_4_Scripting_a_Multisig.md). * __Null Data__ — An unspendable transaction (`OP_RETURN Data`). * __Pay to Script Hash (P2SH)__ — A transaction that pays out to a specific script, as explained more fully here. @@ -19,7 +19,7 @@ So how do you write a more complex Bitcoin Script? The answer is in that last so ## Understand the P2SH Script -You already saw a P2SH transaction when you created a multisig in [§6.1: Sending a Transaction to a Multisig](06_1_Sending_a_Transaction_to_a_Multisig.md). Though multisig is one of the standard transaction types, `bitcoin-cli` simplifies the usage of its multisigs by embedding them into P2SH transactions, as described more fully in [§8.4: Scripting a Multisig](08_4_Scripting_a_Multisig.md). +You already saw a P2SH transaction when you created a multisig in [§6.1: Sending a Transaction to a Multisig](06_1_Sending_a_Transaction_to_a_Multisig.md). Though multisig is one of the standard transaction types, `bitcoin-cli` simplifies the usage of its multisigs by embedding them into P2SH transactions, as described more fully in [§10.4: Scripting a Multisig](10_4_Scripting_a_Multisig.md). So, let's look one more time at the `scriptPubKey` of that P2SH multisig: ``` diff --git a/10_2_Building_the_Structure_of_P2SH.md b/10_2_Building_the_Structure_of_P2SH.md index 5beb23c..c66b0d9 100644 --- a/10_2_Building_the_Structure_of_P2SH.md +++ b/10_2_Building_the_Structure_of_P2SH.md @@ -171,7 +171,7 @@ Depending on your API, you might be able to enter this as an `asm`-style `script Note that the `hex scriptPubKey` for P2SH Script transaction will _always_ start with an `a914`, which is the `OP_HASH160` followed by an `OP_PUSHDATA` of 20 bytes (hex: `0x14`); and it will _always_ end with a `87`, which is an `OP_EQUAL`. So all you have to do is put your hashed redeem script in between those numbers. -## Summary: Understanding the Foundation of P2SH +## Summary: Building the Structure of P2SH Actually creating the P2SH locking script dives further into the guts of Bitcoin than you've ever gone before. Though it's helpful to know how all of this works at a very low level, it's most likely that you'll have an API taking care of all of the heavy-lifting for you. Your task will simply be to create the Bitcoin Script to do the locking ... which is the main topic of chapters 9 and 11-12. diff --git a/10_5_Scripting_a_Segwit_Script.md b/10_5_Scripting_a_Segwit_Script.md index e9f3fb2..21e4cac 100644 --- a/10_5_Scripting_a_Segwit_Script.md +++ b/10_5_Scripting_a_Segwit_Script.md @@ -114,7 +114,7 @@ This works just like a P2WPKH address, the only difference being that instead of There is also one more variant, a P2WSH script embedded in a P2SH script, which works much like the P2SH-Segwit described above, but for nested P2WSH scripts. (Whew!) -## Summary: Scripting a Pay to Witness Public Key Hash +## Summary: Scripting a Segwit Script There are two sorts of P2SH scripts that relate to Segwit. diff --git a/10_6_Spending_a_P2SH_Transaction.md b/10_6_Spending_a_P2SH_Transaction.md index 444bcb9..b7722e9 100644 --- a/10_6_Spending_a_P2SH_Transaction.md +++ b/10_6_Spending_a_P2SH_Transaction.md @@ -4,11 +4,11 @@ Before we close out this overview of P2SH transactions, we're going to touch upo ## Use the Redeem Script -As we saw in [§6.2: Spending a Transaction to a Multisig](06_2_Spending_a_Transaction_to_a_Multisig.md), spending a P2SH transaction is all about having that serialized version of the locking script, the so-called _redeemScript_. So, the first step in being able to spend a P2SH transaction is making sure that you save the _redeemScript_ before you give out the P2SH address to everyone. +As we saw in [§6.2: Spending a Transaction with a Multisig](06_2_Spending_a_Transaction_to_a_Multisig.md), spending a P2SH transaction is all about having that serialized version of the locking script, the so-called _redeemScript_. So, the first step in being able to spend a P2SH transaction is making sure that you save the _redeemScript_ before you give out the P2SH address to everyone. ### Collect Your Variables -Because P2SH addresses other than the special multisig and nested Segwit addresses aren't integrated into `bitcoin-cli` there will be no short-cuts for P2SH spending like you saw in [§6.3: Sending an Automated Multisig](6_3_Sending_an_Automated_Multisig.md). You're going to need to collect all the more complex variables on your own! +Because P2SH addresses other than the special multisig and nested Segwit addresses aren't integrated into `bitcoin-cli` there will be no short-cuts for P2SH spending like you saw in [§6.3: Sending & Spending an Automated Multisig](6_3_Sending_an_Automated_Multisig.md). You're going to need to collect all the more complex variables on your own! This means that you need to collect: @@ -33,7 +33,7 @@ $ bitcoin-cli -named signrawtransactionwithkey hexstring=$rawtxhex prevtxs='''[ ``` With any other sort of P2SH you're going to be including a different `redeemscript`, but otherwise the practice is exactly the same. The only difference is that after two chapters of work on Scripts you now understand what the `scriptPubKey` is and what the `redeemScript` is, so hopefully what were mysterious elements four chapters ago are now old hat. -## Summary: Spending a Transaction with a Bitcoin Script +## Summary: Spending a P2SH Transaction You already spent a P2SH back in Chapter 6, when you resent a multsig transaction the hard way, which required lining up the `scriptPubKey` and `redeemScript` information. Now you know that the `scriptPubKey` is a standardized P2SH locking script, while the `redeemScript` matches a hash in that locking script and that you need to be able to run it with the proper variables to receive a `True` result. But other than knowing more, there's nothing new in spending a P2SH transaction, because you already did it! diff --git a/15_1_i2p_service.md b/15_1_i2p_service.md index 33dacf5..76b2ac2 100644 --- a/15_1_i2p_service.md +++ b/15_1_i2p_service.md @@ -76,10 +76,10 @@ Follow the below steps to run Bitcoin Core i2p service: ## Summary: Bitcoin Core as an I2P (Invisible Internet Project) service -It is always good to have alternatives for privacy and not depend only on Tor to run Bitcoin Core as hidden service. Since i2p was recently added in Bitcoin Core, less people use it, experiment with it and report bugs if you find any issues. +It is always good to have alternatives for privacy and not depend only on Tor to run Bitcoin Core as hidden service. Since i2p was recently added in Bitcoin Core, not many people use it. Experiment with it and report bugs if you find any issues. > :information_source: **NOTE:** _i2pd_ (C++) is different from _i2prouter_ (Java), you will need `i2pd` for Bitcoin Core. Move on to "Programming with RPC" with [Chapter Sixteen: Talking to Bitcoind with C](16_0_Talking_to_Bitcoind.md). -Or, if you're not a programmer, you can skip to [Chapter Nineteen: Understanding Your Lightning Seutp](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/master/19_0_Understanding_Your_Lightning_Setup.md) to continue your command-line education with the Lightning Network. \ No newline at end of file +Or, if you're not a programmer, you can skip to [Chapter Nineteen: Understanding Your Lightning Seutp](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/master/19_0_Understanding_Your_Lightning_Setup.md) to continue your command-line education with the Lightning Network.