UNPKG

@bitgo/utxo-lib

Version:

Client-side Bitcoin JavaScript library

27 lines 3.62 kB
"use strict"; // [pubKeys[0:n-1] OP_CHECKSIGVERIFY] pubKeys[n-1] OP_CHECKSIG Object.defineProperty(exports, "__esModule", { value: true }); exports.check = check; const __1 = require("../../"); const __2 = require("../../"); const noble_ecc_1 = require("../../noble_ecc"); function check(script, allowIncomplete) { const chunks = __1.script.decompile(script); if (chunks.length < 3) return false; const ops = chunks.filter((_, index) => index % 2 === 1); if (ops[ops.length - 1] !== __2.opcodes.OP_CHECKSIG) return false; if (!ops.slice(0, -1).every((op) => op === __2.opcodes.OP_CHECKSIGVERIFY)) return false; if (chunks.length / 2 > 16) return false; if (allowIncomplete) return true; const keys = chunks.filter((_, index) => index % 2 === 0); return keys.every(noble_ecc_1.ecc.isXOnlyPoint); } check.toJSON = () => { return 'taproot n-of-n output'; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RlbXBsYXRlcy90YXByb290bm9mbi9vdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDhEQUE4RDs7QUFPOUQsc0JBYUM7QUFqQkQsOEJBQTJDO0FBQzNDLDhCQUFpQztBQUNqQywrQ0FBc0M7QUFFdEMsU0FBZ0IsS0FBSyxDQUFDLE1BQXNCLEVBQUUsZUFBeUI7SUFDckUsTUFBTSxNQUFNLEdBQUcsVUFBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQVUsQ0FBQztJQUVsRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3BDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pELElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssV0FBTyxDQUFDLFdBQVc7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5RCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxXQUFPLENBQUMsaUJBQWlCLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVwRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6QyxJQUFJLGVBQWU7UUFBRSxPQUFPLElBQUksQ0FBQztJQUVqQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQWEsQ0FBQztJQUN0RSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFDRCxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQVcsRUFBRTtJQUMxQixPQUFPLHVCQUF1QixDQUFDO0FBQ2pDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFtwdWJLZXlzWzA6bi0xXSBPUF9DSEVDS1NJR1ZFUklGWV0gcHViS2V5c1tuLTFdIE9QX0NIRUNLU0lHXG5cbmltcG9ydCB7IFN0YWNrIH0gZnJvbSAnLi4vLi4vJztcbmltcG9ydCB7IHNjcmlwdCBhcyBic2NyaXB0IH0gZnJvbSAnLi4vLi4vJztcbmltcG9ydCB7IG9wY29kZXMgfSBmcm9tICcuLi8uLi8nO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnLi4vLi4vbm9ibGVfZWNjJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrKHNjcmlwdDogQnVmZmVyIHwgU3RhY2ssIGFsbG93SW5jb21wbGV0ZT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgY29uc3QgY2h1bmtzID0gYnNjcmlwdC5kZWNvbXBpbGUoc2NyaXB0KSBhcyBTdGFjaztcblxuICBpZiAoY2h1bmtzLmxlbmd0aCA8IDMpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgb3BzID0gY2h1bmtzLmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICUgMiA9PT0gMSk7XG4gIGlmIChvcHNbb3BzLmxlbmd0aCAtIDFdICE9PSBvcGNvZGVzLk9QX0NIRUNLU0lHKSByZXR1cm4gZmFsc2U7XG4gIGlmICghb3BzLnNsaWNlKDAsIC0xKS5ldmVyeSgob3ApID0+IG9wID09PSBvcGNvZGVzLk9QX0NIRUNLU0lHVkVSSUZZKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChjaHVua3MubGVuZ3RoIC8gMiA+IDE2KSByZXR1cm4gZmFsc2U7XG4gIGlmIChhbGxvd0luY29tcGxldGUpIHJldHVybiB0cnVlO1xuXG4gIGNvbnN0IGtleXMgPSBjaHVua3MuZmlsdGVyKChfLCBpbmRleCkgPT4gaW5kZXggJSAyID09PSAwKSBhcyBCdWZmZXJbXTtcbiAgcmV0dXJuIGtleXMuZXZlcnkoZWNjLmlzWE9ubHlQb2ludCk7XG59XG5jaGVjay50b0pTT04gPSAoKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuICd0YXByb290IG4tb2YtbiBvdXRwdXQnO1xufTtcbiJdfQ==