From 734a859b278270e0080005269c2f55ac465fe64d Mon Sep 17 00:00:00 2001 From: Matthew Zipkin Date: Sun, 15 Dec 2019 10:32:33 -0500 Subject: bip-taproot: example from diagram --- bip-taproot.mediawiki | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/bip-taproot.mediawiki b/bip-taproot.mediawiki index 0fa4194..dedc5ab 100644 --- a/bip-taproot.mediawiki +++ b/bip-taproot.mediawiki @@ -236,6 +236,20 @@ def taproot_output_script(internal_pubkey, script_tree): [[File:bip-taproot/tree.png|frame|This diagram shows the hashing structure to obtain the tweak from an internal key ''P'' and a Merkle tree consisting of 5 script leaves. ''A'', ''B'', ''C'' and ''E'' are ''TapLeaf'' hashes similar to ''D'' and ''AB'' is a ''TapBranch'' hash. Note that when ''CDE'' is computed ''E'' is hashed first because ''E'' is less than ''CD''.]] +To spend this output using script ''D'', the control block would contain the following data in this order: + + + +The TapTweak would then be computed as described in [[#script-validation-rules]] like so: + + +D = tagged_hash("TapLeaf", bytes([leaf_version]) + ser_script(script)) +CD = tagged_hash("TapBranch", C + D) +CDE = tagged_hash("TapBranch", E + CD) +ABCDE = tagged_hash("TapBranch", AB + CDE) +TapTweak = tagged_hash("TapTweak", p + ABCDE) + + '''Spending using the key path''' A Taproot output can be spent with the secret key corresponding to the internal_pubkey. To do so, a witness stack consists of a single element: a bip-schnorr signature on the signature hash as defined above, with the secret key tweaked by the same h as in the above snippet. See the code below: -- cgit v1.2.3