// {serialized scriptPubKey script} import * as bscript from '../../script'; const typeforce = require('typeforce'); import * as p2ms from '../multisig'; import * as p2pk from '../pubkey'; import * as p2pkh from '../pubkeyhash'; export function check( chunks: Array, allowIncomplete?: boolean, ): boolean { typeforce(typeforce.Array, chunks); if (chunks.length < 1) return false; const witnessScript = chunks[chunks.length - 1]; if (!Buffer.isBuffer(witnessScript)) return false; const witnessScriptChunks = bscript.decompile(witnessScript); // is witnessScript a valid script? if (!witnessScriptChunks || witnessScriptChunks.length === 0) return false; const 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'; };