txbuilder: apply input.value before prepareInput
This commit is contained in:
parent
c729d322c2
commit
41378f9648
1 changed files with 9 additions and 7 deletions
|
@ -298,6 +298,7 @@ function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScrip
|
||||||
|
|
||||||
expanded = expandOutput(witnessScript, undefined, kpPubKey)
|
expanded = expandOutput(witnessScript, undefined, kpPubKey)
|
||||||
if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
|
if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
|
||||||
|
|
||||||
prevOutType = btemplates.types.P2SH
|
prevOutType = btemplates.types.P2SH
|
||||||
prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
|
prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
|
||||||
p2sh = witness = p2wsh = true
|
p2sh = witness = p2wsh = true
|
||||||
|
@ -347,18 +348,13 @@ function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScrip
|
||||||
} else {
|
} else {
|
||||||
prevOutScript = btemplates.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
|
prevOutScript = btemplates.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
|
||||||
expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
|
expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
|
||||||
|
|
||||||
prevOutType = scriptTypes.P2PKH
|
prevOutType = scriptTypes.P2PKH
|
||||||
witness = false
|
witness = false
|
||||||
signType = prevOutType
|
signType = prevOutType
|
||||||
signScript = prevOutScript
|
signScript = prevOutScript
|
||||||
}
|
}
|
||||||
|
|
||||||
if (witnessValue !== undefined || witness) {
|
|
||||||
typeforce(types.Satoshi, witnessValue)
|
|
||||||
if (input.value !== undefined && input.value !== witnessValue) throw new Error('Input didn\'t match witnessValue')
|
|
||||||
input.value = witnessValue
|
|
||||||
}
|
|
||||||
|
|
||||||
if (signType === scriptTypes.P2WPKH) {
|
if (signType === scriptTypes.P2WPKH) {
|
||||||
signScript = btemplates.pubKeyHash.output.encode(btemplates.witnessPubKeyHash.output.decode(signScript))
|
signScript = btemplates.pubKeyHash.output.encode(btemplates.witnessPubKeyHash.output.decode(signScript))
|
||||||
}
|
}
|
||||||
|
@ -686,7 +682,13 @@ TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashTy
|
||||||
|
|
||||||
var kpPubKey = keyPair.getPublicKeyBuffer()
|
var kpPubKey = keyPair.getPublicKeyBuffer()
|
||||||
if (!canSign(input)) {
|
if (!canSign(input)) {
|
||||||
prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
|
if (witnessValue !== undefined) {
|
||||||
|
if (input.value !== undefined && input.value !== witnessValue) throw new Error('Input didn\'t match witnessValue')
|
||||||
|
typeforce(types.Satoshi, witnessValue)
|
||||||
|
input.value = witnessValue
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!canSign(input)) prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
|
||||||
if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
|
if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue