Daniel Cousens
7 years ago
1 changed files with 59 additions and 5 deletions
@ -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 = { |
|||
check: p2sh.check, |
|||
decodeStack: p2sh.decodeStack, |
|||
encodeStack: p2sh.encodeStack |
|||
check: check, |
|||
decodeStack: decodeStack, |
|||
encodeStack: encodeStack |
|||
} |
|||
|
Loading…
Reference in new issue