Browse Source

witnessScriptHash: fixed implementation

hk-custom-address
Daniel Cousens 7 years ago
parent
commit
8c217a7ba7
  1. 64
      src/templates/witnessscripthash/input.js

64
src/templates/witnessscripthash/input.js

@ -1,9 +1,63 @@
// {signature} {pubKey} // <scriptSig> {serialized scriptPubKey script}
var p2sh = require('../scripthash/input') var bscript = require('../../script')
var types = require('../../types')
var typeforce = require('typeforce')
var p2ms = require('../multisig/')
var p2pk = require('../pubkey/')
var p2pkh = require('../pubkeyhash/')
function check (chunks, allowIncomplete) {
typeforce(types.Array, chunks)
if (chunks.length < 1) return false
var witnessScript = chunks[chunks.length - 1]
if (!Buffer.isBuffer(witnessScript)) return false
var witnessScriptChunks = bscript.decompile(witnessScript)
// is witnessScript a valid script?
if (witnessScriptChunks.length === 0) return false
var witnessRawScriptSig = bscript.compile(chunks.slice(0, -1))
// match types
if (p2pkh.input.check(witnessRawScriptSig) &&
p2pkh.output.check(witnessScriptChunks)) return true
if (p2ms.input.check(witnessRawScriptSig, allowIncomplete) &&
p2ms.output.check(witnessScriptChunks)) return true
if (p2pk.input.check(witnessRawScriptSig) &&
p2pk.output.check(witnessScriptChunks)) return true
return false
}
check.toJSON = function () { return 'witnessScriptHash input' }
function encodeStack (witnessData, witnessScript) {
typeforce({
witnessData: [types.Buffer],
witnessScript: types.Buffer
}, {
witnessData: witnessData,
witnessScript: witnessScript
})
return [].concat(witnessData, witnessScript)
}
function decodeStack (chunks) {
typeforce(check, chunks)
return {
witnessData: chunks.slice(0, -1),
witnessScript: chunks[chunks.length - 1]
}
}
module.exports = { module.exports = {
check: p2sh.check, check: check,
decodeStack: p2sh.decodeStack, decodeStack: decodeStack,
encodeStack: p2sh.encodeStack encodeStack: encodeStack
} }

Loading…
Cancel
Save