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 = { |
module.exports = { |
||||
check: p2sh.check, |
check: check, |
||||
decodeStack: p2sh.decodeStack, |
decodeStack: decodeStack, |
||||
encodeStack: p2sh.encodeStack |
encodeStack: encodeStack |
||||
} |
} |
||||
|
Loading…
Reference in new issue