mirror of
https://github.com/bitcoin/bips.git
synced 2025-01-18 21:35:13 +01:00
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).
This commit is contained in:
parent
aa5b0a1009
commit
e538fa8562
@ -718,15 +718,8 @@ sign_non_witness(script_code, i):
|
|||||||
if IsMine(key) and IsAcceptable(sighash_type):
|
if IsMine(key) and IsAcceptable(sighash_type):
|
||||||
sign(non_witness_sighash(script_code, i, input))
|
sign(non_witness_sighash(script_code, i, input))
|
||||||
|
|
||||||
for input,i in enumerate(psbt.inputs):
|
for input, i in enumerate(psbt.inputs):
|
||||||
if non_witness_utxo.exists:
|
if 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:
|
|
||||||
if redeemScript.exists:
|
if redeemScript.exists:
|
||||||
assert(witness_utxo.scriptPubKey == P2SH(redeemScript))
|
assert(witness_utxo.scriptPubKey == P2SH(redeemScript))
|
||||||
script = redeemScript
|
script = redeemScript
|
||||||
@ -737,6 +730,13 @@ for input,i in enumerate(psbt.inputs):
|
|||||||
else if IsP2WSH(script):
|
else if IsP2WSH(script):
|
||||||
assert(script == P2WSH(witnessScript))
|
assert(script == P2WSH(witnessScript))
|
||||||
sign_witness(witnessScript, i)
|
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:
|
else:
|
||||||
assert False
|
assert False
|
||||||
</pre>
|
</pre>
|
||||||
|
Loading…
Reference in New Issue
Block a user