@bitgo/utxo-lib
Version:
Client-side Bitcoin JavaScript library
27 lines • 3.62 kB
JavaScript
;
// [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=