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 secp256k1_1 = require("@bitgo/secp256k1"); 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(secp256k1_1.ecc.isXOnlyPoint); } check.toJSON = () => { return 'taproot n-of-n output'; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RlbXBsYXRlcy90YXByb290bm9mbi9vdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDhEQUE4RDs7QUFPOUQsc0JBYUM7QUFqQkQsOEJBQTJDO0FBQzNDLDhCQUFpQztBQUNqQyxnREFBdUM7QUFFdkMsU0FBZ0IsS0FBSyxDQUFDLE1BQXNCLEVBQUUsZUFBeUI7SUFDckUsTUFBTSxNQUFNLEdBQUcsVUFBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQVUsQ0FBQztJQUVsRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3BDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pELElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssV0FBTyxDQUFDLFdBQVc7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5RCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxXQUFPLENBQUMsaUJBQWlCLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVwRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6QyxJQUFJLGVBQWU7UUFBRSxPQUFPLElBQUksQ0FBQztJQUVqQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQWEsQ0FBQztJQUN0RSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFDRCxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQVcsRUFBRTtJQUMxQixPQUFPLHVCQUF1QixDQUFDO0FBQ2pDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFtwdWJLZXlzWzA6bi0xXSBPUF9DSEVDS1NJR1ZFUklGWV0gcHViS2V5c1tuLTFdIE9QX0NIRUNLU0lHXG5cbmltcG9ydCB7IFN0YWNrIH0gZnJvbSAnLi4vLi4vJztcbmltcG9ydCB7IHNjcmlwdCBhcyBic2NyaXB0IH0gZnJvbSAnLi4vLi4vJztcbmltcG9ydCB7IG9wY29kZXMgfSBmcm9tICcuLi8uLi8nO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvL3NlY3AyNTZrMSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVjayhzY3JpcHQ6IEJ1ZmZlciB8IFN0YWNrLCBhbGxvd0luY29tcGxldGU/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNodW5rcyA9IGJzY3JpcHQuZGVjb21waWxlKHNjcmlwdCkgYXMgU3RhY2s7XG5cbiAgaWYgKGNodW5rcy5sZW5ndGggPCAzKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IG9wcyA9IGNodW5rcy5maWx0ZXIoKF8sIGluZGV4KSA9PiBpbmRleCAlIDIgPT09IDEpO1xuICBpZiAob3BzW29wcy5sZW5ndGggLSAxXSAhPT0gb3Bjb2Rlcy5PUF9DSEVDS1NJRykgcmV0dXJuIGZhbHNlO1xuICBpZiAoIW9wcy5zbGljZSgwLCAtMSkuZXZlcnkoKG9wKSA9PiBvcCA9PT0gb3Bjb2Rlcy5PUF9DSEVDS1NJR1ZFUklGWSkpIHJldHVybiBmYWxzZTtcblxuICBpZiAoY2h1bmtzLmxlbmd0aCAvIDIgPiAxNikgcmV0dXJuIGZhbHNlO1xuICBpZiAoYWxsb3dJbmNvbXBsZXRlKSByZXR1cm4gdHJ1ZTtcblxuICBjb25zdCBrZXlzID0gY2h1bmtzLmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICUgMiA9PT0gMCkgYXMgQnVmZmVyW107XG4gIHJldHVybiBrZXlzLmV2ZXJ5KGVjYy5pc1hPbmx5UG9pbnQpO1xufVxuY2hlY2sudG9KU09OID0gKCk6IHN0cmluZyA9PiB7XG4gIHJldHVybiAndGFwcm9vdCBuLW9mLW4gb3V0cHV0Jztcbn07XG4iXX0=