UNPKG

@bitgo/utxo-lib

Version:

Client-side Bitcoin JavaScript library

37 lines 4.33 kB
"use strict"; // m [pubKeys ...] n OP_CHECKMULTISIG Object.defineProperty(exports, "__esModule", { value: true }); exports.check = check; const __1 = require("../../"); const __2 = require("../../"); const types = require("bitcoinjs-lib/src/types"); const OP_INT_BASE = __2.opcodes.OP_RESERVED; // OP_1 - 1 function check(script, allowIncomplete) { const chunks = __1.script.decompile(script); if (chunks.length < 4) return false; if (chunks[chunks.length - 1] !== __2.opcodes.OP_CHECKMULTISIG) return false; if (!types.Number(chunks[0])) return false; if (!types.Number(chunks[chunks.length - 2])) return false; const m = chunks[0] - OP_INT_BASE; const n = chunks[chunks.length - 2] - OP_INT_BASE; if (m <= 0) return false; if (n > 16) return false; if (m > n) return false; if (n !== chunks.length - 3) return false; if (allowIncomplete) return true; const keys = chunks.slice(1, -2); return keys.every(__1.script.isCanonicalPubKey); } check.toJSON = () => { return 'multi-sig output'; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RlbXBsYXRlcy9tdWx0aXNpZy9vdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFDQUFxQzs7QUFRckMsc0JBa0JDO0FBdkJELDhCQUEyQztBQUMzQyw4QkFBaUM7QUFDakMsaURBQWlEO0FBQ2pELE1BQU0sV0FBVyxHQUFHLFdBQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXO0FBRXBELFNBQWdCLEtBQUssQ0FBQyxNQUFzQixFQUFFLGVBQXlCO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLFVBQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFVLENBQUM7SUFFbEQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNwQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLFdBQU8sQ0FBQyxnQkFBZ0I7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6RSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzNELE1BQU0sQ0FBQyxHQUFJLE1BQU0sQ0FBQyxDQUFDLENBQVksR0FBRyxXQUFXLENBQUM7SUFDOUMsTUFBTSxDQUFDLEdBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFZLEdBQUcsV0FBVyxDQUFDO0lBRTlELElBQUksQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6QixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3hCLElBQUksQ0FBQyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzFDLElBQUksZUFBZTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRWpDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFhLENBQUM7SUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFDRCxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQVcsRUFBRTtJQUMxQixPQUFPLGtCQUFrQixDQUFDO0FBQzVCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG0gW3B1YktleXMgLi4uXSBuIE9QX0NIRUNLTVVMVElTSUdcblxuaW1wb3J0IHsgU3RhY2sgfSBmcm9tICcuLi8uLi8nO1xuaW1wb3J0IHsgc2NyaXB0IGFzIGJzY3JpcHQgfSBmcm9tICcuLi8uLi8nO1xuaW1wb3J0IHsgb3Bjb2RlcyB9IGZyb20gJy4uLy4uLyc7XG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICdiaXRjb2luanMtbGliL3NyYy90eXBlcyc7XG5jb25zdCBPUF9JTlRfQkFTRSA9IG9wY29kZXMuT1BfUkVTRVJWRUQ7IC8vIE9QXzEgLSAxXG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVjayhzY3JpcHQ6IEJ1ZmZlciB8IFN0YWNrLCBhbGxvd0luY29tcGxldGU/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNodW5rcyA9IGJzY3JpcHQuZGVjb21waWxlKHNjcmlwdCkgYXMgU3RhY2s7XG5cbiAgaWYgKGNodW5rcy5sZW5ndGggPCA0KSByZXR1cm4gZmFsc2U7XG4gIGlmIChjaHVua3NbY2h1bmtzLmxlbmd0aCAtIDFdICE9PSBvcGNvZGVzLk9QX0NIRUNLTVVMVElTSUcpIHJldHVybiBmYWxzZTtcbiAgaWYgKCF0eXBlcy5OdW1iZXIoY2h1bmtzWzBdKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIXR5cGVzLk51bWJlcihjaHVua3NbY2h1bmtzLmxlbmd0aCAtIDJdKSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBtID0gKGNodW5rc1swXSBhcyBudW1iZXIpIC0gT1BfSU5UX0JBU0U7XG4gIGNvbnN0IG4gPSAoY2h1bmtzW2NodW5rcy5sZW5ndGggLSAyXSBhcyBudW1iZXIpIC0gT1BfSU5UX0JBU0U7XG5cbiAgaWYgKG0gPD0gMCkgcmV0dXJuIGZhbHNlO1xuICBpZiAobiA+IDE2KSByZXR1cm4gZmFsc2U7XG4gIGlmIChtID4gbikgcmV0dXJuIGZhbHNlO1xuICBpZiAobiAhPT0gY2h1bmtzLmxlbmd0aCAtIDMpIHJldHVybiBmYWxzZTtcbiAgaWYgKGFsbG93SW5jb21wbGV0ZSkgcmV0dXJuIHRydWU7XG5cbiAgY29uc3Qga2V5cyA9IGNodW5rcy5zbGljZSgxLCAtMikgYXMgQnVmZmVyW107XG4gIHJldHVybiBrZXlzLmV2ZXJ5KGJzY3JpcHQuaXNDYW5vbmljYWxQdWJLZXkpO1xufVxuY2hlY2sudG9KU09OID0gKCk6IHN0cmluZyA9PiB7XG4gIHJldHVybiAnbXVsdGktc2lnIG91dHB1dCc7XG59O1xuIl19