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Выполнить команду
Для локальной разработки. Не используйте в интернете!