Browse Source

scriptHash return true for chunks.length=1 so long as its witness

hk-custom-address
Thomas Kerin 8 years ago
committed by Daniel Cousens
parent
commit
793939dc8c
  1. 5
      src/templates/scripthash/input.js
  2. 1
      src/transaction.js
  3. 5
      src/transaction_builder.js
  4. 55
      test/fixtures/transaction_builder.json
  5. 1
      test/templates.js
  6. 1
      test/transaction_builder.js

5
src/templates/scripthash/input.js

@ -22,11 +22,8 @@ function check (script, allowIncomplete) {
var inputType = bscript.classifyInput(scriptSigChunks, allowIncomplete)
var outputType = bscript.classifyOutput(redeemScriptChunks)
if (chunks.length === 1) {
if (outputType === bscript.types.P2WSH || outputType === bscript.types.P2WPKH) {
return true
}
return outputType === bscript.types.P2WSH || outputType === bscript.types.P2WPKH
}
return inputType === outputType
}
check.toJSON = function () { return 'scriptHash input' }

1
src/transaction.js

@ -384,7 +384,6 @@ Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value
writeSlice(hashOutputs)
writeUInt32(this.locktime)
writeUInt32(hashType)
return bcrypto.hash256(tbuffer)
}

5
src/transaction_builder.js

@ -302,7 +302,7 @@ function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScrip
p2sh = true
signType = p2shType = expanded.scriptType
signScript = redeemScript
witness = signType === bscript.types.P2WPKH
} else if (witnessScript) {
witnessScriptHash = bcrypto.sha256(witnessScript)
checkP2WSHInput(input, witnessScriptHash)
@ -315,7 +315,6 @@ function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScrip
witness = p2wsh = true
signType = witnessType = expanded.scriptType
signScript = witnessScript
} else if (input.prevOutType) {
// embedded scripts are not possible without a redeemScript
if (input.prevOutType === scriptTypes.P2SH ||
@ -657,14 +656,12 @@ TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashTy
}
// ready to sign
var signatureHash
if (input.witness) {
signatureHash = this.tx.hashForWitnessV0(vin, input.signScript, witnessValue, hashType)
} else {
signatureHash = this.tx.hashForSignature(vin, input.signScript, hashType)
}
// enforce in order signing of public keys
var signed = input.pubKeys.some(function (pubKey, i) {
if (!kpPubKey.equals(pubKey)) return false

55
test/fixtures/transaction_builder.json

@ -633,61 +633,6 @@
}
]
},
{
"description": "Sighash: SINGLE where inputToSign >= count(outputs)",
"txHex": "01000000037db7f0b2a345ded6ddf28da3211a7d7a95a2943e9a879493d6481b7d69613f04010000006b483045022100e822f152bb15a1d623b91913cd0fb915e9f85a8dc6c26d51948208bbc0218e800220255f78549d9614c88eac9551429bc00224f22cdcb41a3af70d52138f7e98d333032102f1c7eac9200f8dee7e34e59318ff2076c8b3e3ac7f43121e57569a1aec1803d4ffffffff652c491e5a781a6a3c547fa8d980741acbe4623ae52907278f10e1f064f67e05000000006a47304402206f37f79adeb86e0e2da679f79ff5c3ba206c6d35cd9a21433f0de34ee83ddbc00220118cabbac5d83b3aa4c2dc01b061e4b2fe83750d85a72ae6a1752300ee5d9aff032102f1c7eac9200f8dee7e34e59318ff2076c8b3e3ac7f43121e57569a1aec1803d4ffffffffb9fa270fa3e4dd8c79f9cbfe5f1953cba071ed081f7c277a49c33466c695db35000000006a473044022019a2a3322dcdb0e0c25df9f03f264f2c88f43b3b648fec7a28cb85620393a9750220135ff3a6668c6d6c05f32069e47a1feda10979935af2470c97fcb388f96f9738032102f1c7eac9200f8dee7e34e59318ff2076c8b3e3ac7f43121e57569a1aec1803d4ffffffff02204e0000000000001976a9149ed1f577c60e4be1dbf35318ec12f51d25e8577388ac30750000000000001976a914fb407e88c48921d5547d899e18a7c0a36919f54d88ac00000000",
"inputs": [
{
"txId": "043f61697d1b48d69394879a3e94a2957a7d1a21a38df2ddd6de45a3b2f0b77d",
"vout": 1,
"signs": [
{
"keyPair": "KzRGFiqhXB7SyX6idHQkt77B8mX7adnujdg3VG47jdVK2x4wbUYg",
"hashType": 3,
"value": 40000
}
],
"sequence": 4294967295,
"prevTxScript": "OP_DUP OP_HASH160 0de1f9b92d2ab6d8ead83f9a0ff5cf518dcb03b8 OP_EQUALVERIFY OP_CHECKSIG"
},
{
"txId": "057ef664f0e1108f270729e53a62e4cb1a7480d9a87f543c6a1a785a1e492c65",
"vout": 0,
"signs": [
{
"keyPair": "KzRGFiqhXB7SyX6idHQkt77B8mX7adnujdg3VG47jdVK2x4wbUYg",
"hashType": 3,
"value": 40000
}
],
"sequence": 4294967295,
"prevTxScript": "OP_DUP OP_HASH160 0de1f9b92d2ab6d8ead83f9a0ff5cf518dcb03b8 OP_EQUALVERIFY OP_CHECKSIG"
},
{
"txId": "35db95c66634c3497a277c1f08ed71a0cb53195ffecbf9798cdde4a30f27fab9",
"vout": 0,
"signs": [
{
"keyPair": "KzRGFiqhXB7SyX6idHQkt77B8mX7adnujdg3VG47jdVK2x4wbUYg",
"hashType": 3,
"value": 40000
}
],
"sequence": 4294967295,
"prevTxScript": "OP_DUP OP_HASH160 0de1f9b92d2ab6d8ead83f9a0ff5cf518dcb03b8 OP_EQUALVERIFY OP_CHECKSIG"
}
],
"outputs": [
{
"value": 20000,
"script": "OP_DUP OP_HASH160 9ed1f577c60e4be1dbf35318ec12f51d25e85773 OP_EQUALVERIFY OP_CHECKSIG"
},
{
"value": 30000,
"script": "OP_DUP OP_HASH160 fb407e88c48921d5547d899e18a7c0a36919f54d OP_EQUALVERIFY OP_CHECKSIG"
}
]
},
{
"description": "Sighash: SINGLE|ANYONECANPAY",
"txHex": "01000000037db7f0b2a345ded6ddf28da3211a7d7a95a2943e9a879493d6481b7d69613f04010000006b483045022100d05a3b6cf2f0301000b0e45c09054f2c61570ce8798ebf571eef72da3b1c94a1022016d7ef3c133fa703bae2c75158ea08d335ac698506f99b3c369c37a9e8fc4beb832102f1c7eac9200f8dee7e34e59318ff2076c8b3e3ac7f43121e57569a1aec1803d4ffffffff652c491e5a781a6a3c547fa8d980741acbe4623ae52907278f10e1f064f67e05000000006b483045022100ee6bf07b051001dcbfa062692a40adddd070303286b714825b3fb4693dd8fcdb022056610885e5053e5d47f2be3433051305abe7978ead8f7cf2d0368947aff6b307832102f1c7eac9200f8dee7e34e59318ff2076c8b3e3ac7f43121e57569a1aec1803d4ffffffffb9fa270fa3e4dd8c79f9cbfe5f1953cba071ed081f7c277a49c33466c695db35000000006b483045022100cfc930d5b5272d0220d9da98fabec97b9e66306f735efa837f43f6adc675cad902202f9dff76b8b9ec8f613d46094f17f64d875804292d8804aa59fd295b6fc1416b832102f1c7eac9200f8dee7e34e59318ff2076c8b3e3ac7f43121e57569a1aec1803d4ffffffff03204e0000000000001976a9149ed1f577c60e4be1dbf35318ec12f51d25e8577388ac30750000000000001976a914fb407e88c48921d5547d899e18a7c0a36919f54d88ac50c30000000000001976a91404ccb4eed8cfa9f6e394e945178960f5ccddb38788ac00000000",

1
test/templates.js

@ -61,7 +61,6 @@ describe('script-templates', function () {
describe(name + '.input.check', function () {
fixtures.valid.forEach(function (f) {
// Temporary - while we don't have witnessKeyHash.input, etc.
if (name.toLowerCase() === bscript.types.P2WPKH) return
if (name.toLowerCase() === bscript.types.P2WSH) return
var expected = name.toLowerCase() === f.type.toLowerCase()

1
test/transaction_builder.js

@ -306,7 +306,6 @@ describe('TransactionBuilder', function () {
it('builds "' + f.description + '"', function () {
var txb = construct(f)
var tx = txb.build()
assert.strictEqual(tx.toHex(), f.txHex)
})
})

Loading…
Cancel
Save