Skip to content

Commit

Permalink
Add P2SH-P2WPKH example
Browse files Browse the repository at this point in the history
  • Loading branch information
jl2012 committed Apr 23, 2016
1 parent cd1932a commit 43c34e8
Showing 1 changed file with 22 additions and 4 deletions.
26 changes: 22 additions & 4 deletions bip-0141.mediawiki
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,8 @@ The following example is a version 0 pay-to-witness-public-key-hash (P2WPKH) wit

witness: <signature> <pubkey>
scriptSig: (empty)
scriptPubKey: 0 <20-byte-hash>
(0x0014{20-byte-hash})
scriptPubKey: 0 <20-byte-key-hash>
(0x0014{20-byte-key-hash})
The '0' in scriptPubKey indicates the following push is a version 0 witness program. The length of the witness program indicates that it is a P2WPKH type. The witness must consist of exactly 2 items. The HASH160 of the pubkey in witness must match the witness program.

Expand All @@ -139,6 +139,24 @@ The signature is verified as
Comparing with a traditional P2PKH output, the P2WPKH equivalent occupies 3 less bytes in the scriptPubKey, and moves the signature and public key from scriptSig to witness.

=== P2WPKH nested in BIP16 P2SH ===

The following example is the same P2WPKH witness program, but nested in a BIP16 P2SH output.

witness: <signature> <pubkey>
scriptSig: <0 <20-byte-key-hash>>
(0x160014{20-byte-key-hash})
scriptPubKey: HASH160 <20-byte-script-hash> EQUAL
(0xA914{20-byte-script-hash}87)
The only item in scriptSig is hashed with HASH160, compared against the 20-byte-script-hash in scriptPubKey, and interpreted as:

0 <20-byte-key-hash>
The P2WPKH witness program is then executed as described in the previous example.

Comparing with the previous example, the scriptPubKey is 1 byte bigger and the scriptSig is 23 bytes bigger. Although a nested witness program is less efficient, its payment address is fully transparent and backward compatible for all Bitcoin reference client since version 0.6.0.

=== P2WSH witness program ===

The following example is an 1-of-2 multi-signature version 0 pay-to-witness-script-hash (P2WSH) witness program.
Expand All @@ -160,7 +178,7 @@ A P2WSH witness program allows arbitrarily large script as the 520-byte push lim

The scriptPubKey occupies 34 bytes, as opposed to 23 bytes of BIP16 P2SH. The increased size improves security against possible collision attacks, as 2<sup>80</sup> work is not infeasible anymore (By the end of 2015, 2<sup>84</sup> hashes have been calculated in Bitcoin mining since the creation of Bitcoin). The spending script is same as the one for an equivalent BIP16 P2SH output but is moved to witness.

=== Witness program nested in BIP16 P2SH ===
=== P2WSH nested in BIP16 P2SH ===

The following example is the same 1-of-2 multi-signature P2WSH witness program, but nested in a BIP16 P2SH output.

Expand All @@ -176,7 +194,7 @@ The only item in scriptSig is hashed with HASH160, compared against the 20-byte-
The P2WSH witness program is then executed as described in the previous example.

Comparing with the previous example, the scriptPubKey is 11 bytes smaller (with reduced security) while witness is the same. However, it also requires 35 bytes in scriptSig, which is not prunable in transmission. Although a nested witness program is less efficient in many ways, its payment address is fully transparent and backward compatible for all Bitcoin reference client since version 0.6.0.
Comparing with the previous example, the scriptPubKey is 11 bytes smaller (with reduced security) while witness is the same. However, it also requires 35 bytes in scriptSig.

=== Extensible commitment structure ===

Expand Down

0 comments on commit 43c34e8

Please sign in to comment.