summaryrefslogtreecommitdiff
path: root/bip-0174.mediawiki
diff options
context:
space:
mode:
authorSalvatore Ingala <6681844+bigspider@users.noreply.github.com>2023-03-04 11:13:16 +0000
committerSalvatore Ingala <6681844+bigspider@users.noreply.github.com>2023-03-04 11:13:16 +0000
commite538fa8562fe26f814e544836991048383d225af (patch)
tree6845a1dedee01af0bbb1be9022abe20d39bf8eed /bip-0174.mediawiki
parentaa5b0a1009bcb90315ee6bdacc2592749d6d4636 (diff)
downloadbips-e538fa8562fe26f814e544836991048383d225af.tar.xz
Update Simple Signer Algorithm for SegWitv0 inputs
It is no longer expected that SegWitV0 inputs have no witness-utxo field. Reverting the order of checks avoids this assumption (while still relying on the mandatory lack of witness-utxo for legacy inputs).
Diffstat (limited to 'bip-0174.mediawiki')
-rw-r--r--bip-0174.mediawiki18
1 files changed, 9 insertions, 9 deletions
diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki
index 6a5d5e8..f4c0807 100644
--- a/bip-0174.mediawiki
+++ b/bip-0174.mediawiki
@@ -718,15 +718,8 @@ sign_non_witness(script_code, i):
if IsMine(key) and IsAcceptable(sighash_type):
sign(non_witness_sighash(script_code, i, input))
-for input,i in enumerate(psbt.inputs):
- if non_witness_utxo.exists:
- assert(sha256d(non_witness_utxo) == psbt.tx.input[i].prevout.hash)
- if redeemScript.exists:
- assert(non_witness_utxo.vout[psbt.tx.input[i].prevout.n].scriptPubKey == P2SH(redeemScript))
- sign_non_witness(redeemScript, i)
- else:
- sign_non_witness(non_witness_utxo.vout[psbt.tx.input[i].prevout.n].scriptPubKey, i)
- else if witness_utxo.exists:
+for input, i in enumerate(psbt.inputs):
+ if witness_utxo.exists:
if redeemScript.exists:
assert(witness_utxo.scriptPubKey == P2SH(redeemScript))
script = redeemScript
@@ -737,6 +730,13 @@ for input,i in enumerate(psbt.inputs):
else if IsP2WSH(script):
assert(script == P2WSH(witnessScript))
sign_witness(witnessScript, i)
+ else if non_witness_utxo.exists:
+ assert(sha256d(non_witness_utxo) == psbt.tx.input[i].prevout.hash)
+ if redeemScript.exists:
+ assert(non_witness_utxo.vout[psbt.tx.input[i].prevout.n].scriptPubKey == P2SH(redeemScript))
+ sign_non_witness(redeemScript, i)
+ else:
+ sign_non_witness(non_witness_utxo.vout[psbt.tx.input[i].prevout.n].scriptPubKey, i)
else:
assert False
</pre>