summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke-Jr <luke_github1@dashjr.org>2016-06-01 17:57:05 +0000
committerLuke-Jr <luke_github1@dashjr.org>2016-06-01 17:57:05 +0000
commitc917abe394753b5111f069fd7be86ca77c032acb (patch)
treee83c82655a659358c7786bb2fef2cd7c77c2ad50
parent55ecc6fd38c8e90100463fb4df767be8896f716b (diff)
parent8324bc512e835f4ff16000ab1dbe7f55e8d110ee (diff)
downloadbips-c917abe394753b5111f069fd7be86ca77c032acb.tar.xz
Merge pull request #365 from luke-jr/segwit_gbt_updates_20160330
BIP 141 and 145: GBT updates for SegWit
-rw-r--r--bip-0141.mediawiki12
-rw-r--r--bip-0145.mediawiki17
2 files changed, 18 insertions, 11 deletions
diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index 07e6a7f..b8f686c 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -82,8 +82,8 @@ If all transactions in a block do not have witness data, the commitment is optio
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".
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:
-# 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.
-# 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.
+# 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"'')
+# 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"'')
If the version byte is 0, and the witness program is 20 bytes:
* 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.
Sigops per block is currently limited to 20,000. We change this restriction as follows:
-''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.
+Sigops in the current pubkey script, signature script, and P2SH check script are counted at 4 times their previous value.
+The sigop limit is likewise quadrupled to ≤ 80,000.
-The new rule is total ''sigop cost'' ≤ 80,000.
+In addition, opcodes within the witness program are counted identical to as previously within the P2SH check script.
+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.
== Examples ==
@@ -272,7 +274,7 @@ As a soft fork, older software will continue to operate without modification. N
== Deployment ==
-This BIP will be deployed by "version bits" BIP9 using bit 1.
+This BIP will be deployed by "version bits" BIP9 with the name "segwit" and using bit 1.
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).
diff --git a/bip-0145.mediawiki b/bip-0145.mediawiki
index a4528c5..b04c9e6 100644
--- a/bip-0145.mediawiki
+++ b/bip-0145.mediawiki
@@ -15,7 +15,7 @@ This BIP describes modifications to the getblocktemplate JSON-RPC call ([[bip-00
===Block Template===
-The template Object is revised to include these keys:
+The template Object is revised to include a new key:
{| class="wikitable"
!colspan=4| template
@@ -23,12 +23,12 @@ The template Object is revised to include these keys:
! Key !! Required !! Type !! Description
|-
| costlimit || No || Number || total cost allowed in blocks
-|-
-| sigoplimit || No || Number || total sigop cost allowed in blocks divided by 4
-|-
-| 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)
|}
+The '!' rule prefix MUST be enabled on the "segwit" rule for templates including transactions with witness data.
+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.
+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.
+
====Transactions Object Format====
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
| hash || String || reversed hash of complete transaction (with witness data included) encoded in hexadecimal
|}
-Transactions with witness data may only be included if the template's block version is at least 5.
+Transactions with witness data may only be included if the template's "rules" list (see [[bip-0009.mediawiki#getblocktemplate_changes|BIP 9]]) includes "segwit".
+
+===Sigops===
+
+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]].
===Block Assembly with Witness Transactions===
@@ -87,6 +91,7 @@ Why shouldn't the server simply add the commitment upfront in the "coinbasetxn",
* [https://github.com/bitcoin/bitcoin/pull/7404/files Bitcoin Core]
==See Also==
+* [[bip-0009.mediawiki|BIP 9: Version bits with timeout and delay]]
* [[bip-0022.mediawiki|BIP 22: getblocktemplate - Fundamentals]]
* [[bip-0023.mediawiki|BIP 23: getblocktemplate - Pooled Mining]]
* [[bip-0141.mediawiki|BIP 141: Segregated Witness (Consensus layer)]]