PHP WebShell

Текущая директория: /opt/BitGoJS/modules/utxo-core/dist/src/descriptor/psbt

Просмотр файла: assertSatisfiable.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FINAL_SEQUENCE = void 0;
exports.getRequiredLocktime = getRequiredLocktime;
exports.assertSatisfiable = assertSatisfiable;
/**
 * These are some helpers for testing satisfiability of descriptors in PSBTs.
 *
 * They are mostly a debugging aid - if an input cannot be satisified, the `finalizePsbt()` method will fail, but
 * the error message is pretty vague.
 *
 * The methods here have the goal of catching certain cases earlier and with a better error message.
 *
 * The goal is not an exhaustive check, but to catch common mistakes.
 */
const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
exports.FINAL_SEQUENCE = 0xffffffff;
/**
 * Get the required locktime for a descriptor.
 * @param descriptor
 */
function getRequiredLocktime(descriptor) {
    if (descriptor instanceof wasm_miniscript_1.Descriptor) {
        return getRequiredLocktime(descriptor.node());
    }
    if (typeof descriptor !== 'object' || descriptor === null) {
        return undefined;
    }
    if ('Wsh' in descriptor) {
        return getRequiredLocktime(descriptor.Wsh);
    }
    if ('Sh' in descriptor) {
        return getRequiredLocktime(descriptor.Sh);
    }
    if ('Ms' in descriptor) {
        return getRequiredLocktime(descriptor.Ms);
    }
    if ('AndV' in descriptor) {
        if (!Array.isArray(descriptor.AndV)) {
            throw new Error('Expected an array');
        }
        if (descriptor.AndV.length !== 2) {
            throw new Error('Expected exactly two elements');
        }
        const [a, b] = descriptor.AndV;
        return getRequiredLocktime(a) ?? getRequiredLocktime(b);
    }
    if ('Drop' in descriptor) {
        return getRequiredLocktime(descriptor.Drop);
    }
    if ('Verify' in descriptor) {
        return getRequiredLocktime(descriptor.Verify);
    }
    if ('After' in descriptor && typeof descriptor.After === 'object' && descriptor.After !== null) {
        if ('absLockTime' in descriptor.After && typeof descriptor.After.absLockTime === 'number') {
            return descriptor.After.absLockTime;
        }
    }
    return undefined;
}
function assertSatisfiable(psbt, inputIndex, descriptor) {
    // If the descriptor requires a locktime, the input must have a non-final sequence number
    const requiredLocktime = getRequiredLocktime(descriptor);
    if (requiredLocktime !== undefined) {
        const input = psbt.txInputs[inputIndex];
        if (input.sequence === exports.FINAL_SEQUENCE) {
            throw new Error(`Input ${inputIndex} has a non-final sequence number, but requires a timelock`);
        }
        if (psbt.locktime !== requiredLocktime) {
            throw new Error(`psbt locktime (${psbt.locktime}) does not match required locktime (${requiredLocktime})`);
        }
    }
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0U2F0aXNmaWFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9wc2J0L2Fzc2VydFNhdGlzZmlhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1CQSxrREFzQ0M7QUFFRCw4Q0FZQztBQXZFRDs7Ozs7Ozs7O0dBU0c7QUFDSCw0REFBb0Q7QUFHdkMsUUFBQSxjQUFjLEdBQUcsVUFBVSxDQUFDO0FBRXpDOzs7R0FHRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLFVBQWdDO0lBQ2xFLElBQUksVUFBVSxZQUFZLDRCQUFVLEVBQUUsQ0FBQztRQUNyQyxPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDMUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxJQUFJLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN2QixPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdkIsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNELElBQUksTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUMvQixPQUFPLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxJQUFJLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN6QixPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsSUFBSSxRQUFRLElBQUksVUFBVSxFQUFFLENBQUM7UUFDM0IsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELElBQUksT0FBTyxJQUFJLFVBQVUsSUFBSSxPQUFPLFVBQVUsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDL0YsSUFBSSxhQUFhLElBQUksVUFBVSxDQUFDLEtBQUssSUFBSSxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFGLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsSUFBa0IsRUFBRSxVQUFrQixFQUFFLFVBQXNCO0lBQzlGLHlGQUF5RjtJQUN6RixNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pELElBQUksZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssc0JBQWMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxVQUFVLDJEQUEyRCxDQUFDLENBQUM7UUFDbEcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLElBQUksQ0FBQyxRQUFRLHVDQUF1QyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDN0csQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGVzZSBhcmUgc29tZSBoZWxwZXJzIGZvciB0ZXN0aW5nIHNhdGlzZmlhYmlsaXR5IG9mIGRlc2NyaXB0b3JzIGluIFBTQlRzLlxuICpcbiAqIFRoZXkgYXJlIG1vc3RseSBhIGRlYnVnZ2luZyBhaWQgLSBpZiBhbiBpbnB1dCBjYW5ub3QgYmUgc2F0aXNpZmllZCwgdGhlIGBmaW5hbGl6ZVBzYnQoKWAgbWV0aG9kIHdpbGwgZmFpbCwgYnV0XG4gKiB0aGUgZXJyb3IgbWVzc2FnZSBpcyBwcmV0dHkgdmFndWUuXG4gKlxuICogVGhlIG1ldGhvZHMgaGVyZSBoYXZlIHRoZSBnb2FsIG9mIGNhdGNoaW5nIGNlcnRhaW4gY2FzZXMgZWFybGllciBhbmQgd2l0aCBhIGJldHRlciBlcnJvciBtZXNzYWdlLlxuICpcbiAqIFRoZSBnb2FsIGlzIG5vdCBhbiBleGhhdXN0aXZlIGNoZWNrLCBidXQgdG8gY2F0Y2ggY29tbW9uIG1pc3Rha2VzLlxuICovXG5pbXBvcnQgeyBEZXNjcmlwdG9yIH0gZnJvbSAnQGJpdGdvL3dhc20tbWluaXNjcmlwdCc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbmV4cG9ydCBjb25zdCBGSU5BTF9TRVFVRU5DRSA9IDB4ZmZmZmZmZmY7XG5cbi8qKlxuICogR2V0IHRoZSByZXF1aXJlZCBsb2NrdGltZSBmb3IgYSBkZXNjcmlwdG9yLlxuICogQHBhcmFtIGRlc2NyaXB0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvcjogRGVzY3JpcHRvciB8IHVua25vd24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIERlc2NyaXB0b3IpIHtcbiAgICByZXR1cm4gZ2V0UmVxdWlyZWRMb2NrdGltZShkZXNjcmlwdG9yLm5vZGUoKSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yICE9PSAnb2JqZWN0JyB8fCBkZXNjcmlwdG9yID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoJ1dzaCcgaW4gZGVzY3JpcHRvcikge1xuICAgIHJldHVybiBnZXRSZXF1aXJlZExvY2t0aW1lKGRlc2NyaXB0b3IuV3NoKTtcbiAgfVxuICBpZiAoJ1NoJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvci5TaCk7XG4gIH1cbiAgaWYgKCdNcycgaW4gZGVzY3JpcHRvcikge1xuICAgIHJldHVybiBnZXRSZXF1aXJlZExvY2t0aW1lKGRlc2NyaXB0b3IuTXMpO1xuICB9XG4gIGlmICgnQW5kVicgaW4gZGVzY3JpcHRvcikge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkZXNjcmlwdG9yLkFuZFYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGFuIGFycmF5Jyk7XG4gICAgfVxuICAgIGlmIChkZXNjcmlwdG9yLkFuZFYubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGV4YWN0bHkgdHdvIGVsZW1lbnRzJyk7XG4gICAgfVxuICAgIGNvbnN0IFthLCBiXSA9IGRlc2NyaXB0b3IuQW5kVjtcbiAgICByZXR1cm4gZ2V0UmVxdWlyZWRMb2NrdGltZShhKSA/PyBnZXRSZXF1aXJlZExvY2t0aW1lKGIpO1xuICB9XG4gIGlmICgnRHJvcCcgaW4gZGVzY3JpcHRvcikge1xuICAgIHJldHVybiBnZXRSZXF1aXJlZExvY2t0aW1lKGRlc2NyaXB0b3IuRHJvcCk7XG4gIH1cbiAgaWYgKCdWZXJpZnknIGluIGRlc2NyaXB0b3IpIHtcbiAgICByZXR1cm4gZ2V0UmVxdWlyZWRMb2NrdGltZShkZXNjcmlwdG9yLlZlcmlmeSk7XG4gIH1cbiAgaWYgKCdBZnRlcicgaW4gZGVzY3JpcHRvciAmJiB0eXBlb2YgZGVzY3JpcHRvci5BZnRlciA9PT0gJ29iamVjdCcgJiYgZGVzY3JpcHRvci5BZnRlciAhPT0gbnVsbCkge1xuICAgIGlmICgnYWJzTG9ja1RpbWUnIGluIGRlc2NyaXB0b3IuQWZ0ZXIgJiYgdHlwZW9mIGRlc2NyaXB0b3IuQWZ0ZXIuYWJzTG9ja1RpbWUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRvci5BZnRlci5hYnNMb2NrVGltZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFNhdGlzZmlhYmxlKHBzYnQ6IHV0eG9saWIuUHNidCwgaW5wdXRJbmRleDogbnVtYmVyLCBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yKTogdm9pZCB7XG4gIC8vIElmIHRoZSBkZXNjcmlwdG9yIHJlcXVpcmVzIGEgbG9ja3RpbWUsIHRoZSBpbnB1dCBtdXN0IGhhdmUgYSBub24tZmluYWwgc2VxdWVuY2UgbnVtYmVyXG4gIGNvbnN0IHJlcXVpcmVkTG9ja3RpbWUgPSBnZXRSZXF1aXJlZExvY2t0aW1lKGRlc2NyaXB0b3IpO1xuICBpZiAocmVxdWlyZWRMb2NrdGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgaW5wdXQgPSBwc2J0LnR4SW5wdXRzW2lucHV0SW5kZXhdO1xuICAgIGlmIChpbnB1dC5zZXF1ZW5jZSA9PT0gRklOQUxfU0VRVUVOQ0UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgJHtpbnB1dEluZGV4fSBoYXMgYSBub24tZmluYWwgc2VxdWVuY2UgbnVtYmVyLCBidXQgcmVxdWlyZXMgYSB0aW1lbG9ja2ApO1xuICAgIH1cbiAgICBpZiAocHNidC5sb2NrdGltZSAhPT0gcmVxdWlyZWRMb2NrdGltZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwc2J0IGxvY2t0aW1lICgke3BzYnQubG9ja3RpbWV9KSBkb2VzIG5vdCBtYXRjaCByZXF1aXJlZCBsb2NrdGltZSAoJHtyZXF1aXJlZExvY2t0aW1lfSlgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==

Выполнить команду


Для локальной разработки. Не используйте в интернете!