mirror of
https://github.com/bitcoinbook/bitcoinbook
synced 2024-11-15 12:39:01 +00:00
CH12: style: s/BIP-/BIP/
This commit is contained in:
parent
0eb7cacd34
commit
561fe16041
@ -26,7 +26,7 @@ are not yet mature. See the following section for more information.
|
||||
|
||||
To remove the incentive to lie and strengthen the security of timelocks,
|
||||
a BIP was proposed and activated at the same time as the BIPs for
|
||||
relative timelocks. This is BIP-113, which defines a new consensus
|
||||
relative timelocks. This is BIP113, which defines a new consensus
|
||||
measurement of time called _Median-Time-Past_.
|
||||
|
||||
Median-Time-Past is calculated by taking the timestamps of the last 11
|
||||
@ -45,7 +45,7 @@ for it when estimating the desired value to encode in +nLocktime+,
|
||||
+nSequence+, +CLTV+, and +CSV+.
|
||||
|
||||
Median-Time-Past is specified in
|
||||
https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki[BIP-113].
|
||||
https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki[BIP113].
|
||||
|
||||
[[duplicate_transactions]]
|
||||
=== Preventing Duplicate Transactions
|
||||
@ -708,7 +708,7 @@ miners use the coinbase data to include extra nonce values and strings
|
||||
identifying the mining pool.
|
||||
|
||||
The first few bytes of the coinbase used to be arbitrary, but that is no
|
||||
longer the case. As per BIP-34, version-2 blocks (blocks with the
|
||||
longer the case. As per BIP34, version-2 blocks (blocks with the
|
||||
version field set to 2) must contain the block height index as a script
|
||||
"push" operation in the beginning of the coinbase field.
|
||||
|
||||
@ -729,17 +729,17 @@ extra _nonce_ (see <<extra_nonce>>), or random value, used to find a
|
||||
suitable Proof-of-Work solution.
|
||||
|
||||
((("bitcoin improvement proposals", "Pay to Script Hash
|
||||
(BIP-16)")))((("bitcoin improvement proposals", "CHECKHASHVERIFY
|
||||
(BIP-17)")))((("CHECKHASHVERIFY (CHV)")))((("Pay-to-Script-Hash (P2SH)",
|
||||
(BIP16)")))((("bitcoin improvement proposals", "CHECKHASHVERIFY
|
||||
(BIP17)")))((("CHECKHASHVERIFY (CHV)")))((("Pay-to-Script-Hash (P2SH)",
|
||||
"coinbase data")))The final part of the coinbase data (+2f503253482f+)
|
||||
is the ASCII-encoded string pass:[<span
|
||||
class="keep-together"><code>/P2SH/</code></span>], which indicates that
|
||||
the mining node that mined this block supports the P2SH improvement
|
||||
defined in BIP-16. The introduction of the P2SH capability required
|
||||
signaling by miners to endorse either BIP-16 or BIP-17. Those endorsing
|
||||
the BIP-16 implementation were to include +/P2SH/+ in their coinbase
|
||||
data. Those endorsing the BIP-17 implementation of P2SH were to include
|
||||
the string +p2sh/CHV+ in their coinbase data. The BIP-16 was elected as
|
||||
defined in BIP16. The introduction of the P2SH capability required
|
||||
signaling by miners to endorse either BIP16 or BIP17. Those endorsing
|
||||
the BIP16 implementation were to include +/P2SH/+ in their coinbase
|
||||
data. Those endorsing the BIP17 implementation of P2SH were to include
|
||||
the string +p2sh/CHV+ in their coinbase data. The BIP16 was elected as
|
||||
the winner, and many miners continued including the string +/P2SH/+ in
|
||||
their coinbase to indicate support for this feature.
|
||||
|
||||
@ -2379,7 +2379,7 @@ only under near-unanimous consensus.
|
||||
|
||||
Already we have seen the emergence of new methodologies to address the
|
||||
risks of hard forks. In the next section, we will look at soft forks,
|
||||
and the BIP-34 and BIP-9 methods for signaling and activation of
|
||||
and the BIP34 and BIP9 methods for signaling and activation of
|
||||
consensus modifications.
|
||||
|
||||
==== Soft Forks
|
||||
@ -2420,12 +2420,12 @@ script is interpreted as a null-potent operator, meaning they have no
|
||||
effect. Execution continues after the NOP opcode as if it wasn't there.
|
||||
|
||||
A soft fork therefore can modify the semantics of a NOP code to give it
|
||||
new meaning. For example, BIP-65 (+CHECKLOCKTIMEVERIFY+) reinterpreted
|
||||
the NOP2 opcode. Clients implementing BIP-65 interpret NOP2 as
|
||||
new meaning. For example, BIP65 (+CHECKLOCKTIMEVERIFY+) reinterpreted
|
||||
the NOP2 opcode. Clients implementing BIP65 interpret NOP2 as
|
||||
+OP_CHECKLOCKTIMEVERIFY+ and impose an absolute locktime consensus rule
|
||||
on UTXO that contain this opcode in their locking scripts. This change
|
||||
is a soft fork because a transaction that is valid under BIP-65 is also
|
||||
valid on any client that is not implementing (ignorant of) BIP-65. To
|
||||
is a soft fork because a transaction that is valid under BIP65 is also
|
||||
valid on any client that is not implementing (ignorant of) BIP65. To
|
||||
the old clients, the script contains an NOP code, which is ignored.
|
||||
|
||||
===== Other ways to soft fork upgrade
|
||||
@ -2494,33 +2494,33 @@ readiness: a majority of miners must agree that they are ready and
|
||||
willing to enforce the new consensus rules. To coordinate their actions,
|
||||
there is a signaling mechanism that allows them to show their support
|
||||
for a consensus rule change. This mechanism was introduced with the
|
||||
activation of BIP-34 in March 2013 and replaced by the activation of
|
||||
BIP-9 in July 2016.
|
||||
activation of BIP34 in March 2013 and replaced by the activation of
|
||||
BIP9 in July 2016.
|
||||
|
||||
==== BIP-34 Signaling and Activation
|
||||
==== BIP34 Signaling and Activation
|
||||
|
||||
((("bitcoin improvement proposals", "Block v2, Height in Coinbase
|
||||
(BIP-34)")))The first implementation, in BIP-34, used the block version
|
||||
(BIP34)")))The first implementation, in BIP34, used the block version
|
||||
field to allow miners to signal readiness for a specific consensus rule
|
||||
change. Prior to BIP-34, the block version was set to "1" by
|
||||
change. Prior to BIP34, the block version was set to "1" by
|
||||
_convention_ not enforced by _consensus_.
|
||||
|
||||
BIP-34 defined a consensus rule change that required the coinbase field
|
||||
BIP34 defined a consensus rule change that required the coinbase field
|
||||
(input) of the coinbase transaction to contain the block height. Prior
|
||||
to BIP-34, the coinbase could contain any arbitrary data the miners
|
||||
chose to include. After activation of BIP-34, valid blocks had to
|
||||
to BIP34, the coinbase could contain any arbitrary data the miners
|
||||
chose to include. After activation of BIP34, valid blocks had to
|
||||
contain a specific block-height at the beginning of the coinbase and be
|
||||
identified with a version number greater than or equal to "2."
|
||||
|
||||
To signal the change and activation of BIP-34, miners set the block
|
||||
To signal the change and activation of BIP34, miners set the block
|
||||
version to "2," instead of "1." This did not immediately make version
|
||||
"1" blocks invalid. Once activated, version "1" blocks would become
|
||||
invalid and all version "2" blocks would be required to contain the
|
||||
block height in the coinbase to be valid.
|
||||
|
||||
BIP-34 defined a two-step activation mechanism, based on a rolling
|
||||
BIP34 defined a two-step activation mechanism, based on a rolling
|
||||
window of 1000 blocks. A miner would signal his or her individual
|
||||
readiness for BIP-34 by constructing blocks with "2" as the version
|
||||
readiness for BIP34 by constructing blocks with "2" as the version
|
||||
number. Strictly speaking, these blocks did not yet have to comply with
|
||||
the new consensus rule of including the block-height in the coinbase
|
||||
transaction because the consensus rule had not yet been activated. The
|
||||
@ -2539,32 +2539,32 @@ consensus rules activated in two steps:
|
||||
new consensus rules, and all valid blocks must contain block-height in
|
||||
the coinbase transaction.
|
||||
|
||||
After successful signaling and activation under the BIP-34 rules, this
|
||||
After successful signaling and activation under the BIP34 rules, this
|
||||
mechanism was used twice more to activate soft forks:
|
||||
|
||||
- https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki[BIP-66]
|
||||
Strict DER Encoding of Signatures was activated by BIP-34 style
|
||||
- https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki[BIP66]
|
||||
Strict DER Encoding of Signatures was activated by BIP34 style
|
||||
signaling with a block version "3" and invalidating version "2"
|
||||
blocks.
|
||||
|
||||
- https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki[BIP-65]
|
||||
+CHECKLOCKTIMEVERIFY+ was activated by BIP-34 style signaling with a
|
||||
- https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki[BIP65]
|
||||
+CHECKLOCKTIMEVERIFY+ was activated by BIP34 style signaling with a
|
||||
block version "4" and invalidating version "3" blocks.
|
||||
|
||||
After the activation of BIP-65, the signaling and activation mechanism
|
||||
of BIP-34 was retired and replaced with the BIP-9 signaling mechanism
|
||||
After the activation of BIP65, the signaling and activation mechanism
|
||||
of BIP34 was retired and replaced with the BIP9 signaling mechanism
|
||||
described next.
|
||||
|
||||
The standard is defined in
|
||||
https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki[BIP-34
|
||||
https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki[BIP34
|
||||
(Block v2, Height in Coinbase)].
|
||||
|
||||
==== BIP-9 Signaling and Activation
|
||||
==== BIP9 Signaling and Activation
|
||||
|
||||
((("bitcoin improvement proposals", "Version bits with timeout and delay
|
||||
(BIP-9)")))((("bitcoin improvement proposals", "CHECKLOCKTIMEVERIFY
|
||||
(BIP-65)")))((("bitcoin improvement proposals", "Strict DER signatures
|
||||
(BIP-66)")))The mechanism used by BIP-34, BIP-66, and BIP-65 was
|
||||
(BIP9)")))((("bitcoin improvement proposals", "CHECKLOCKTIMEVERIFY
|
||||
(BIP65)")))((("bitcoin improvement proposals", "Strict DER signatures
|
||||
(BIP66)")))The mechanism used by BIP34, BIP66, and BIP65 was
|
||||
successful in activating three soft forks. However, it was replaced
|
||||
because it had several limitations:
|
||||
|
||||
@ -2581,16 +2581,16 @@ because it had several limitations:
|
||||
- Each new change irrevocably reduced the available block versions for
|
||||
future changes.
|
||||
|
||||
BIP-9 was proposed to overcome these challenges and improve the rate and
|
||||
BIP9 was proposed to overcome these challenges and improve the rate and
|
||||
ease of implementing future changes.
|
||||
|
||||
BIP-9 interprets the block version as a bit field instead of an integer.
|
||||
BIP9 interprets the block version as a bit field instead of an integer.
|
||||
Because the block version was originally used as an integer, versions 1
|
||||
through 4, only 29 bits remain available to be used as a bit field. This
|
||||
leaves 29 bits that can be used to independently and simultaneously
|
||||
signal readiness on 29 different proposals.
|
||||
|
||||
BIP-9 also sets a maximum time for signaling and activation. This way
|
||||
BIP9 also sets a maximum time for signaling and activation. This way
|
||||
miners don't need to signal forever. If a proposal is not activated
|
||||
within the +TIMEOUT+ period (defined in the proposal), the proposal is
|
||||
considered rejected. The proposal may be resubmitted for signaling with
|
||||
@ -2605,7 +2605,7 @@ new changes.
|
||||
[NOTE]
|
||||
====
|
||||
While signaling bits can be reused or recycled, as long as the voting
|
||||
period does not overlap, the authors of BIP-9 recommend that bits are
|
||||
period does not overlap, the authors of BIP9 recommend that bits are
|
||||
reused only when necessary; unexpected behavior could occur due to bugs
|
||||
in older software. In short, we should not expect to see reuse until all
|
||||
29 bits have been used once.
|
||||
@ -2627,13 +2627,13 @@ for the proposal.
|
||||
endtime:: The time (based on MTP) after which the change is considered
|
||||
rejected if it has not reached the activation threshold.
|
||||
|
||||
Unlike BIP-34, BIP-9 counts activation signaling in whole intervals
|
||||
Unlike BIP34, BIP9 counts activation signaling in whole intervals
|
||||
based on the difficulty retarget period of 2016 blocks. For every
|
||||
retarget period, if the sum of blocks signaling for a proposal exceeds
|
||||
95% (1916 of 2016), the proposal will be activated one retarget period
|
||||
later.
|
||||
|
||||
BIP-9 offers a proposal state diagram to illustrate the various stages
|
||||
BIP9 offers a proposal state diagram to illustrate the various stages
|
||||
and transitions for a proposal, as shown in <<bip9states>>.
|
||||
|
||||
Proposals start in the +DEFINED+ state, once their parameters are known
|
||||
@ -2648,15 +2648,15 @@ proposal state changes to +FAILED+, indicating a rejected proposal.
|
||||
+FAILED+ proposals remain in that state perpetually.
|
||||
|
||||
[[bip9states]]
|
||||
.BIP-9 state transition diagram
|
||||
image::images/mbc2_1010.png[BIP-9 Proposal State Transition Diagram]
|
||||
.BIP9 state transition diagram
|
||||
image::images/mbc2_1010.png[BIP9 Proposal State Transition Diagram]
|
||||
|
||||
BIP-9 was first implemented for the activation of +CHECKSEQUENCEVERIFY+
|
||||
BIP9 was first implemented for the activation of +CHECKSEQUENCEVERIFY+
|
||||
and associated BIPs (68, 112, 113). The proposal named "csv" was
|
||||
activated successfully in July of 2016.((("", startref="forks10a")))
|
||||
|
||||
The standard is defined in
|
||||
https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki[BIP-9
|
||||
https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki[BIP9
|
||||
(Version bits with timeout and delay)].
|
||||
|
||||
=== Consensus Software Development
|
||||
|
Loading…
Reference in New Issue
Block a user