Skip to content

Commit c917abe

Browse files
committed
Merge pull request bitcoin#365 from luke-jr/segwit_gbt_updates_20160330
BIP 141 and 145: GBT updates for SegWit
2 parents 55ecc6f + 8324bc5 commit c917abe

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

bip-0141.mediawiki

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ If all transactions in a block do not have witness data, the commitment is optio
8282
A <code>scriptPubKey</code> (or <code>redeemScript</code> as defined in BIP16/P2SH) that consists of a 1-byte push opcode (for 0 to 16) followed by a data push between 2 and 32 bytes gets a new special meaning. The value of the first push is called the "version byte". The following byte vector pushed is called the "witness program".
8383

8484
There are two cases in which witness validation logic are triggered. Each case determines the location of the witness version byte and program, as well as the form of the scriptSig:
85-
# Triggered by a <code>scriptPubKey</code> that is exactly a push of a version byte, plus a push of a witness program. The scriptSig must be exactly empty or validation fails.
86-
# Triggered when a <code>scriptPubKey</code> is a P2SH script, and the BIP16 <code>redeemScript</code> pushed in the <code>scriptSig</code> is exactly a push of a version byte plus a push of a witness program. The <code>scriptSig</code> must be exactly a push of the BIP16 <code>redeemScript</code> or validation fails.
85+
# Triggered by a <code>scriptPubKey</code> that is exactly a push of a version byte, plus a push of a witness program. The scriptSig must be exactly empty or validation fails. (''"native witness program"'')
86+
# Triggered when a <code>scriptPubKey</code> is a P2SH script, and the BIP16 <code>redeemScript</code> pushed in the <code>scriptSig</code> is exactly a push of a version byte plus a push of a witness program. The <code>scriptSig</code> must be exactly a push of the BIP16 <code>redeemScript</code> or validation fails. (''"P2SH witness program"'')
8787
8888
If the version byte is 0, and the witness program is 20 bytes:
8989
* It is interpreted as a pay-to-witness-public-key-hash (P2WPKH) program.
@@ -120,9 +120,11 @@ The new rule is ''block cost'' ≤ 4,000,000.
120120

121121
Sigops per block is currently limited to 20,000. We change this restriction as follows:
122122

123-
''Sigop cost'' is defined. The cost of a sigop in traditional script is 4, while the cost of a sigop in witness program is 1.
123+
Sigops in the current pubkey script, signature script, and P2SH check script are counted at 4 times their previous value.
124+
The sigop limit is likewise quadrupled to ≤ 80,000.
124125

125-
The new rule is total ''sigop cost'' ≤ 80,000.
126+
In addition, opcodes within the witness program are counted identical to as previously within the P2SH check script.
127+
That is, CHECKSIG in a witness program is counted as only 1 sigop, and CHECKMULTISIG in a witness program is counted as 1 to 20 sigops according to the arguments. This rule applies to both native witness program and P2SH witness program.
126128

127129
== Examples ==
128130

@@ -272,7 +274,7 @@ As a soft fork, older software will continue to operate without modification. N
272274
273275
== Deployment ==
274276

275-
This BIP will be deployed by "version bits" BIP9 using bit 1.
277+
This BIP will be deployed by "version bits" BIP9 with the name "segwit" and using bit 1.
276278

277279
For Bitcoin mainnet, the BIP9 starttime will be midnight TBD UTC (Epoch timestamp TBD) and BIP9 timeout will be midnight TBD UTC (Epoch timestamp TBD).
278280

bip-0145.mediawiki

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,20 @@ This BIP describes modifications to the getblocktemplate JSON-RPC call ([[bip-00
1515

1616
===Block Template===
1717

18-
The template Object is revised to include these keys:
18+
The template Object is revised to include a new key:
1919

2020
{| class="wikitable"
2121
!colspan=4| template
2222
|-
2323
! Key !! Required !! Type !! Description
2424
|-
2525
| costlimit || No || Number || total cost allowed in blocks
26-
|-
27-
| sigoplimit || No || Number || total sigop cost allowed in blocks divided by 4
28-
|-
29-
| version || Yes || Number || block version; clients MUST understand the implications of the version they use (eg, comply with [[bip-0141.mediawiki|BIP 141]] for version 5)
3026
|}
3127

28+
The '!' rule prefix MUST be enabled on the "segwit" rule for templates including transactions with witness data.
29+
In particular, note that even if the client's "rules" list lacks "segwit", server MAY support old miners by producing a witness-free template and omitting the '!' rule prefix for "segwit" in the template's "rules" list.
30+
If the GBT server does not support producing witness-free templates after its activation, it must also use the '!' rule prefix in the "vbavailable" list prior to activation.
31+
3232
====Transactions Object Format====
3333

3434
The Objects listed in the response's "transactions" key is revised to include these keys:
@@ -45,7 +45,11 @@ The Objects listed in the response's "transactions" key is revised to include th
4545
| hash || String || reversed hash of complete transaction (with witness data included) encoded in hexadecimal
4646
|}
4747

48-
Transactions with witness data may only be included if the template's block version is at least 5.
48+
Transactions with witness data may only be included if the template's "rules" list (see [[bip-0009.mediawiki#getblocktemplate_changes|BIP 9]]) includes "segwit".
49+
50+
===Sigops===
51+
52+
For templates with "segwit" enabled as a rule, the "sigoplimit" and "sigops" keys must use the new values as calculated in [[bip-0141.mediawiki#Sigops|BIP 141]].
4953

5054
===Block Assembly with Witness Transactions===
5155

@@ -87,6 +91,7 @@ Why shouldn't the server simply add the commitment upfront in the "coinbasetxn",
8791
* [https://github.com/bitcoin/bitcoin/pull/7404/files Bitcoin Core]
8892
8993
==See Also==
94+
* [[bip-0009.mediawiki|BIP 9: Version bits with timeout and delay]]
9095
* [[bip-0022.mediawiki|BIP 22: getblocktemplate - Fundamentals]]
9196
* [[bip-0023.mediawiki|BIP 23: getblocktemplate - Pooled Mining]]
9297
* [[bip-0141.mediawiki|BIP 141: Segregated Witness (Consensus layer)]]

0 commit comments

Comments
 (0)