PHP WebShell

Текущая директория: /opt/BitGoJS/modules/utxo-lib/dist/src/bitgo/legacysafe

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

"use strict";
/**
 * V1 Safe Wallets are the oldest type of wallets that BitGo supports. They were
 * created back in 2013-14 and don't use HD chains. Instead, they have only one
 * P2SH address per wallet whose redeem script uses uncompressed public keys.
 * */
Object.defineProperty(exports, "__esModule", { value: true });
exports.toUncompressedPub = toUncompressedPub;
exports.toCompressedPub = toCompressedPub;
exports.createLegacySafeOutputScript2of3 = createLegacySafeOutputScript2of3;
const assert = require("assert");
const noble_ecc_1 = require("../../noble_ecc");
const networks_1 = require("../../networks");
const types_1 = require("../types");
const bitcoinjs = require("bitcoinjs-lib");
function getPublicKeyBuffer(publicKey, { compressed = true } = {}) {
    const res = noble_ecc_1.ecc.pointCompress(publicKey, compressed);
    if (res === null) {
        throw new Error('invalid public key');
    }
    const buffer = Buffer.from(res);
    assert.strictEqual(buffer.length, compressed ? 33 : 65);
    return buffer;
}
function toUncompressedPub(pubkey) {
    return getPublicKeyBuffer(pubkey, { compressed: false });
}
function toCompressedPub(pubkey) {
    return getPublicKeyBuffer(pubkey, { compressed: true });
}
/** create p2sh scripts with uncompressed pubkeys */
function createLegacySafeOutputScript2of3(pubkeys, network) {
    if (network) {
        if (!(0, networks_1.isBitcoin)(network)) {
            throw new Error(`unsupported network for legacy safe output script: ${network.coin}`);
        }
    }
    if (!(0, types_1.isTriple)(pubkeys)) {
        throw new Error(`must provide pubkey triple`);
    }
    pubkeys.forEach((key) => {
        if (key.length !== pubkeys[0].length) {
            throw new Error(`all pubkeys must have the same length`);
        }
        if (key.length !== 65 && key.length !== 33) {
            // V1 Safe BTC wallets could contain either uncompressed or compressed pubkeys
            throw new Error(`Unexpected key length ${key.length}, neither compressed nor uncompressed.`);
        }
    });
    const script2of3 = bitcoinjs.payments.p2ms({ m: 2, pubkeys });
    assert(script2of3.output);
    const scriptPubKey = bitcoinjs.payments.p2sh({ redeem: script2of3 });
    assert(scriptPubKey);
    assert(scriptPubKey.output);
    return {
        scriptPubKey: scriptPubKey.output,
        redeemScript: script2of3.output,
    };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vbGVnYWN5c2FmZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7S0FJSzs7QUFtQkwsOENBRUM7QUFFRCwwQ0FFQztBQUdELDRFQXNDQztBQWhFRCxpQ0FBaUM7QUFDakMsK0NBQWdEO0FBQ2hELDZDQUFvRDtBQUNwRCxvQ0FBb0M7QUFDcEMsMkNBQTJDO0FBRTNDLFNBQVMsa0JBQWtCLENBQUMsU0FBaUIsRUFBRSxFQUFFLFVBQVUsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQ3ZFLE1BQU0sR0FBRyxHQUFHLGVBQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3hELElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVoQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxNQUFjO0lBQzlDLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELFNBQWdCLGVBQWUsQ0FBQyxNQUFjO0lBQzVDLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELG9EQUFvRDtBQUNwRCxTQUFnQixnQ0FBZ0MsQ0FDOUMsT0FBaUIsRUFDakIsT0FBaUI7SUFLakIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxJQUFBLG9CQUFTLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFBLGdCQUFRLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUN0QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzNDLDhFQUE4RTtZQUM5RSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixHQUFHLENBQUMsTUFBTSx3Q0FBd0MsQ0FBQyxDQUFDO1FBQy9GLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFMUIsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNyRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDckIsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU1QixPQUFPO1FBQ0wsWUFBWSxFQUFFLFlBQVksQ0FBQyxNQUFNO1FBQ2pDLFlBQVksRUFBRSxVQUFVLENBQUMsTUFBTTtLQUNoQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVjEgU2FmZSBXYWxsZXRzIGFyZSB0aGUgb2xkZXN0IHR5cGUgb2Ygd2FsbGV0cyB0aGF0IEJpdEdvIHN1cHBvcnRzLiBUaGV5IHdlcmVcbiAqIGNyZWF0ZWQgYmFjayBpbiAyMDEzLTE0IGFuZCBkb24ndCB1c2UgSEQgY2hhaW5zLiBJbnN0ZWFkLCB0aGV5IGhhdmUgb25seSBvbmVcbiAqIFAyU0ggYWRkcmVzcyBwZXIgd2FsbGV0IHdob3NlIHJlZGVlbSBzY3JpcHQgdXNlcyB1bmNvbXByZXNzZWQgcHVibGljIGtleXMuXG4gKiAqL1xuXG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGVjYyBhcyBlY2NMaWIgfSBmcm9tICcuLi8uLi9ub2JsZV9lY2MnO1xuaW1wb3J0IHsgaXNCaXRjb2luLCBOZXR3b3JrIH0gZnJvbSAnLi4vLi4vbmV0d29ya3MnO1xuaW1wb3J0IHsgaXNUcmlwbGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyBiaXRjb2luanMgZnJvbSAnYml0Y29pbmpzLWxpYic7XG5cbmZ1bmN0aW9uIGdldFB1YmxpY0tleUJ1ZmZlcihwdWJsaWNLZXk6IEJ1ZmZlciwgeyBjb21wcmVzc2VkID0gdHJ1ZSB9ID0ge30pOiBCdWZmZXIge1xuICBjb25zdCByZXMgPSBlY2NMaWIucG9pbnRDb21wcmVzcyhwdWJsaWNLZXksIGNvbXByZXNzZWQpO1xuICBpZiAocmVzID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHB1YmxpYyBrZXknKTtcbiAgfVxuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShyZXMpO1xuXG4gIGFzc2VydC5zdHJpY3RFcXVhbChidWZmZXIubGVuZ3RoLCBjb21wcmVzc2VkID8gMzMgOiA2NSk7XG4gIHJldHVybiBidWZmZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1VuY29tcHJlc3NlZFB1YihwdWJrZXk6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiBnZXRQdWJsaWNLZXlCdWZmZXIocHVia2V5LCB7IGNvbXByZXNzZWQ6IGZhbHNlIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Db21wcmVzc2VkUHViKHB1YmtleTogQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIGdldFB1YmxpY0tleUJ1ZmZlcihwdWJrZXksIHsgY29tcHJlc3NlZDogdHJ1ZSB9KTtcbn1cblxuLyoqIGNyZWF0ZSBwMnNoIHNjcmlwdHMgd2l0aCB1bmNvbXByZXNzZWQgcHVia2V5cyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVNhZmVPdXRwdXRTY3JpcHQyb2YzKFxuICBwdWJrZXlzOiBCdWZmZXJbXSxcbiAgbmV0d29yaz86IE5ldHdvcmtcbik6IHtcbiAgc2NyaXB0UHViS2V5OiBCdWZmZXI7XG4gIHJlZGVlbVNjcmlwdDogQnVmZmVyO1xufSB7XG4gIGlmIChuZXR3b3JrKSB7XG4gICAgaWYgKCFpc0JpdGNvaW4obmV0d29yaykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbmV0d29yayBmb3IgbGVnYWN5IHNhZmUgb3V0cHV0IHNjcmlwdDogJHtuZXR3b3JrLmNvaW59YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFpc1RyaXBsZShwdWJrZXlzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbXVzdCBwcm92aWRlIHB1YmtleSB0cmlwbGVgKTtcbiAgfVxuXG4gIHB1YmtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKGtleS5sZW5ndGggIT09IHB1YmtleXNbMF0ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGFsbCBwdWJrZXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhgKTtcbiAgICB9XG4gICAgaWYgKGtleS5sZW5ndGggIT09IDY1ICYmIGtleS5sZW5ndGggIT09IDMzKSB7XG4gICAgICAvLyBWMSBTYWZlIEJUQyB3YWxsZXRzIGNvdWxkIGNvbnRhaW4gZWl0aGVyIHVuY29tcHJlc3NlZCBvciBjb21wcmVzc2VkIHB1YmtleXNcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBrZXkgbGVuZ3RoICR7a2V5Lmxlbmd0aH0sIG5laXRoZXIgY29tcHJlc3NlZCBub3IgdW5jb21wcmVzc2VkLmApO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qgc2NyaXB0Mm9mMyA9IGJpdGNvaW5qcy5wYXltZW50cy5wMm1zKHsgbTogMiwgcHVia2V5cyB9KTtcbiAgYXNzZXJ0KHNjcmlwdDJvZjMub3V0cHV0KTtcblxuICBjb25zdCBzY3JpcHRQdWJLZXkgPSBiaXRjb2luanMucGF5bWVudHMucDJzaCh7IHJlZGVlbTogc2NyaXB0Mm9mMyB9KTtcbiAgYXNzZXJ0KHNjcmlwdFB1YktleSk7XG4gIGFzc2VydChzY3JpcHRQdWJLZXkub3V0cHV0KTtcblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFB1YktleTogc2NyaXB0UHViS2V5Lm91dHB1dCxcbiAgICByZWRlZW1TY3JpcHQ6IHNjcmlwdDJvZjMub3V0cHV0LFxuICB9O1xufVxuIl19

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


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