PHP WebShell
Текущая директория: /opt/BitGoJS/modules/express/dist
Просмотр файла: fetchEncryptedPrivKeys.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.fetchKeys = fetchKeys;
/**
* This tool will help you creates a private key JSON file to be used with the external singing mode feature.
* It creates a JSON file containing a list of wallet IDs and their corresponding encrypted user private keys.
*
* To run this file, use the command:
* `yarn ts-node <path/to/fetchEncryptedPrivKeys.ts>`
*
* Copyright 2022, BitGo, Inc. All Rights Reserved.
*/
const fs_1 = require("fs");
const bitgo_1 = require("bitgo");
require("dotenv/config");
const esAccessToken = process.env.BITGO_EXTERNAL_SIGNER_ACCESS_TOKEN;
const esWalletIDs = process.env.BITGO_EXTERNAL_SIGNER_WALLET_IDS; // example: "{"tbtc":[{"walletId":"xxx","walletPassword":"xxx","secret":"xxx"}],"hteth":["walletId":"xxx","walletPassword":"xxx"]}"
const esWalletWithPrv = process.env.BITGO_EXTERNAL_SIGNER_WALLET_IDS_WITH_PRV; // example: "[{"walletId":"xxx","encryptedPrv":"xxx"}]"
// TODO: set env to 'test' or 'prod'
const bg = new bitgo_1.BitGo({ env: process.env.BITGO_EXTERNAL_SIGNER_ENV ?? 'test' });
// TODO: set your access token here
const accessToken = esAccessToken || '';
// TODO: set your coin type and wallet ids here e.g.
const walletIds = esWalletIDs ? JSON.parse(esWalletIDs) : {};
// {
// tbtc: ['61f039aad587c2000745c687373e0111', '6225b081cd291300071fed36b1362222'],
// tbtc: [{
// walletId: '<WALLET_ID>',
// walletPassword: '<WALLET_PASSWORD>',
// secret: 'xprv...',
// }],
// gteth: ['61fb21819c54dd000755f8de3a18e333'],
// };
// TODO: set walletId and encryptedPrv here e.g.
const walletWithPrv = esWalletWithPrv ? JSON.parse(esWalletWithPrv) : [];
// [
// {
// walletId: '<WALLET_ID>',
// encryptedPrv: '<ENCRYPTED_PRV>',
// },
// ];
async function fetchKeys(ids, token, accessToken) {
bg.authenticateWithAccessToken({ accessToken: token });
// get the encrypted user privKey for each walletId and store in the JSON output
const output = {};
for (const [coinName, credentials] of Object.entries(ids)) {
const coin = bg.coin(coinName);
for (const credential of credentials) {
const id = typeof credential === 'string' ? credential : credential.walletId;
const wallet = await coin.wallets().get({ id });
const userKeyId = wallet.keyIds()[0];
const keychain = await coin.keychains().get({ id: userKeyId });
if (keychain.encryptedPrv === undefined) {
if (typeof credential === 'object') {
const encryptedPrv = bg.encrypt({ password: credential.walletPassword, input: credential.secret });
output[id] = encryptedPrv;
}
else {
console.warn(`could not find a ${coinName} encrypted user private key for wallet id ${id}, skipping`);
continue;
}
}
else {
output[id] = keychain.encryptedPrv;
}
}
}
for (const { walletId, encryptedPrv } of walletWithPrv) {
output[walletId] = encryptedPrv;
}
const data = JSON.stringify(output, null, '\t');
const fileName = 'encryptedPrivKeys.json';
(0, fs_1.writeFile)(fileName, data, (err) => {
if (err) {
throw err;
}
console.log(`Wallet IDs and encrypted private keys saved to ${fileName}`);
});
return Promise.resolve(output);
}
fetchKeys(walletIds, accessToken).catch((e) => console.error(e));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2hFbmNyeXB0ZWRQcml2S2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mZXRjaEVuY3J5cHRlZFByaXZLZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBK0RBLDhCQXlDQztBQXhHRDs7Ozs7Ozs7R0FRRztBQUNILDJCQUErQjtBQUMvQixpQ0FBK0M7QUFDL0MseUJBQXVCO0FBcUJ2QixNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUFDO0FBQ3JFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxtSUFBbUk7QUFDck0sTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLHVEQUF1RDtBQUV0SSxvQ0FBb0M7QUFDcEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxhQUFLLENBQUMsRUFBRSxHQUFHLEVBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBNkMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBRXBHLG1DQUFtQztBQUNuQyxNQUFNLFdBQVcsR0FBRyxhQUFhLElBQUksRUFBRSxDQUFDO0FBRXhDLG9EQUFvRDtBQUNwRCxNQUFNLFNBQVMsR0FBYyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN4RSxJQUFJO0FBQ0osa0ZBQWtGO0FBQ2xGLFdBQVc7QUFDWCwyQkFBMkI7QUFDM0IsdUNBQXVDO0FBQ3ZDLHFCQUFxQjtBQUNyQixNQUFNO0FBQ04sK0NBQStDO0FBQy9DLEtBQUs7QUFFTCxnREFBZ0Q7QUFDaEQsTUFBTSxhQUFhLEdBQWtCLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3hGLElBQUk7QUFDSixN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VGhpcyB0b29sIHdpbGwgaGVscCB5b3UgY3JlYXRlcyBhIHByaXZhdGUga2V5IEpTT04gZmlsZSB0byBiZSB1c2VkIHdpdGggdGhlIGV4dGVybmFsIHNpbmdpbmcgbW9kZSBmZWF0dXJlLlxuICogSXQgY3JlYXRlcyBhIEpTT04gZmlsZSBjb250YWluaW5nIGEgbGlzdCBvZiB3YWxsZXQgSURzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGVuY3J5cHRlZCB1c2VyIHByaXZhdGUga2V5cy5cbiAqXG4gKiBUbyBydW4gdGhpcyBmaWxlLCB1c2UgdGhlIGNvbW1hbmQ6XG4gKiBgeWFybiB0cy1ub2RlIDxwYXRoL3RvL2ZldGNoRW5jcnlwdGVkUHJpdktleXMudHM+YFxuICpcbiAqIENvcHlyaWdodCAyMDIyLCBCaXRHbywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHsgd3JpdGVGaWxlIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgQml0R28sIEVudmlyb25tZW50TmFtZSB9IGZyb20gJ2JpdGdvJztcbmltcG9ydCAnZG90ZW52L2NvbmZpZyc7XG5cbnR5cGUgT3V0cHV0ID0ge1xuICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG59O1xuXG50eXBlIENyZWRlbnRpYWxzID0ge1xuICB3YWxsZXRJZDogc3RyaW5nOyAvLyBJZCBvZiB0aGUgQml0R28gd2FsbGV0LlxuICB3YWxsZXRQYXNzd29yZDogc3RyaW5nOyAvLyBQYXNzd29yZCB1c2VkIGZvciB0aGUgd2FsbGV0LlxuICBzZWNyZXQ6IHN0cmluZzsgLy8geHBydiBvZiB1c2VyIGtleSBvciBiYWNrdXAga2V5LlxufTtcblxudHlwZSBXYWxsZXRJZHMgPSB7XG4gIFtrZXk6IHN0cmluZ106IChzdHJpbmcgfCBDcmVkZW50aWFscylbXTtcbn07XG5cbnR5cGUgV2FsbGV0V2l0aFBydiA9IEFycmF5PHtcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgZW5jcnlwdGVkUHJ2OiBzdHJpbmc7XG59PjtcblxuY29uc3QgZXNBY2Nlc3NUb2tlbiA9IHByb2Nlc3MuZW52LkJJVEdPX0VYVEVSTkFMX1NJR05FUl9BQ0NFU1NfVE9LRU47XG5jb25zdCBlc1dhbGxldElEcyA9IHByb2Nlc3MuZW52LkJJVEdPX0VYVEVSTkFMX1NJR05FUl9XQUxMRVRfSURTOyAvLyBleGFtcGxlOiBcIntcInRidGNcIjpbe1wid2FsbGV0SWRcIjpcInh4eFwiLFwid2FsbGV0UGFzc3dvcmRcIjpcInh4eFwiLFwic2VjcmV0XCI6XCJ4eHhcIn1dLFwiaHRldGhcIjpbXCJ3YWxsZXRJZFwiOlwieHh4XCIsXCJ3YWxsZXRQYXNzd29yZFwiOlwieHh4XCJdfVwiXG5jb25zdCBlc1dhbGxldFdpdGhQcnYgPSBwcm9jZXNzLmVudi5CSVRHT19FWFRFUk5BTF9TSUdORVJfV0FMTEVUX0lEU19XSVRIX1BSVjsgLy8gZXhhbXBsZTogXCJbe1wid2FsbGV0SWRcIjpcInh4eFwiLFwiZW5jcnlwdGVkUHJ2XCI6XCJ4eHhcIn1dXCJcblxuLy8gVE9ETzogc2V0IGVudiB0byAndGVzdCcgb3IgJ3Byb2QnXG5jb25zdCBiZyA9IG5ldyBCaXRHbyh7IGVudjogKHByb2Nlc3MuZW52LkJJVEdPX0VYVEVSTkFMX1NJR05FUl9FTlYgYXMgRW52aXJvbm1lbnROYW1lKSA/PyAndGVzdCcgfSk7XG5cbi8vIFRPRE86IHNldCB5b3VyIGFjY2VzcyB0b2tlbiBoZXJlXG5jb25zdCBhY2Nlc3NUb2tlbiA9IGVzQWNjZXNzVG9rZW4gfHwgJyc7XG5cbi8vIFRPRE86IHNldCB5b3VyIGNvaW4gdHlwZSBhbmQgd2FsbGV0IGlkcyBoZXJlIGUuZy5cbmNvbnN0IHdhbGxldElkczogV2FsbGV0SWRzID0gZXNXYWxsZXRJRHMgPyBKU09OLnBhcnNlKGVzV2FsbGV0SURzKSA6IHt9O1xuLy8ge1xuLy8gdGJ0YzogWyc2MWYwMzlhYWQ1ODdjMjAwMDc0NWM2ODczNzNlMDExMScsICc2MjI1YjA4MWNkMjkxMzAwMDcxZmVkMzZiMTM2MjIyMiddLFxuLy8gdGJ0YzogW3tcbi8vIHdhbGxldElkOiAnPFdBTExFVF9JRD4nLFxuLy8gd2FsbGV0UGFzc3dvcmQ6ICc8V0FMTEVUX1BBU1NXT1JEPicsXG4vLyBzZWNyZXQ6ICd4cHJ2Li4uJyxcbi8vIH1dLFxuLy8gZ3RldGg6IFsnNjFmYjIxODE5YzU0ZGQwMDA3NTVmOGRlM2ExOGUzMzMnXSxcbi8vIH07XG5cbi8vIFRPRE86IHNldCB3YWxsZXRJZCBhbmQgZW5jcnlwdGVkUHJ2IGhlcmUgZS5nLlxuY29uc3Qgd2FsbGV0V2l0aFBydjogV2FsbGV0V2l0aFBydiA9IGVzV2FsbGV0V2l0aFBydiA/IEpTT04ucGFyc2UoZXNXYWxsZXRXaXRoUHJ2KSA6IFtdO1xuLy8gW1xuLy8gICB7XG4vLyAgICAgd2FsbGV0SWQ6ICc8V0FMTEVUX0lEPicsXG4vLyAgICAgZW5jcnlwdGVkUHJ2OiAnPEVOQ1JZUFRFRF9QUlY+Jyxcbi8vICAgfSxcbi8vIF07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaEtleXMoaWRzOiBXYWxsZXRJZHMsIHRva2VuOiBzdHJpbmcsIGFjY2Vzc1Rva2VuPzogc3RyaW5nKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGJnLmF1dGhlbnRpY2F0ZVdpdGhBY2Nlc3NUb2tlbih7IGFjY2Vzc1Rva2VuOiB0b2tlbiB9KTtcblxuICAvLyBnZXQgdGhlIGVuY3J5cHRlZCB1c2VyIHByaXZLZXkgZm9yIGVhY2ggd2FsbGV0SWQgYW5kIHN0b3JlIGluIHRoZSBKU09OIG91dHB1dFxuICBjb25zdCBvdXRwdXQ6IE91dHB1dCA9IHt9O1xuICBmb3IgKGNvbnN0IFtjb2luTmFtZSwgY3JlZGVudGlhbHNdIG9mIE9iamVjdC5lbnRyaWVzKGlkcykpIHtcbiAgICBjb25zdCBjb2luID0gYmcuY29pbihjb2luTmFtZSk7XG4gICAgZm9yIChjb25zdCBjcmVkZW50aWFsIG9mIGNyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCBpZCA9IHR5cGVvZiBjcmVkZW50aWFsID09PSAnc3RyaW5nJyA/IGNyZWRlbnRpYWwgOiBjcmVkZW50aWFsLndhbGxldElkO1xuICAgICAgY29uc3Qgd2FsbGV0ID0gYXdhaXQgY29pbi53YWxsZXRzKCkuZ2V0KHsgaWQgfSk7XG4gICAgICBjb25zdCB1c2VyS2V5SWQgPSB3YWxsZXQua2V5SWRzKClbMF07XG4gICAgICBjb25zdCBrZXljaGFpbiA9IGF3YWl0IGNvaW4ua2V5Y2hhaW5zKCkuZ2V0KHsgaWQ6IHVzZXJLZXlJZCB9KTtcblxuICAgICAgaWYgKGtleWNoYWluLmVuY3J5cHRlZFBydiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY3JlZGVudGlhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBjb25zdCBlbmNyeXB0ZWRQcnYgPSBiZy5lbmNyeXB0KHsgcGFzc3dvcmQ6IGNyZWRlbnRpYWwud2FsbGV0UGFzc3dvcmQsIGlucHV0OiBjcmVkZW50aWFsLnNlY3JldCB9KTtcbiAgICAgICAgICBvdXRwdXRbaWRdID0gZW5jcnlwdGVkUHJ2O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgY291bGQgbm90IGZpbmQgYSAke2NvaW5OYW1lfSBlbmNyeXB0ZWQgdXNlciBwcml2YXRlIGtleSBmb3Igd2FsbGV0IGlkICR7aWR9LCBza2lwcGluZ2ApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRbaWRdID0ga2V5Y2hhaW4uZW5jcnlwdGVkUHJ2O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgeyB3YWxsZXRJZCwgZW5jcnlwdGVkUHJ2IH0gb2Ygd2FsbGV0V2l0aFBydikge1xuICAgIG91dHB1dFt3YWxsZXRJZF0gPSBlbmNyeXB0ZWRQcnY7XG4gIH1cblxuICBjb25zdCBkYXRhID0gSlNPTi5zdHJpbmdpZnkob3V0cHV0LCBudWxsLCAnXFx0Jyk7XG4gIGNvbnN0IGZpbGVOYW1lID0gJ2VuY3J5cHRlZFByaXZLZXlzLmpzb24nO1xuICB3cml0ZUZpbGUoZmlsZU5hbWUsIGRhdGEsIChlcnIpID0+IHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGBXYWxsZXQgSURzIGFuZCBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXlzIHNhdmVkIHRvICR7ZmlsZU5hbWV9YCk7XG4gIH0pO1xuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUob3V0cHV0KTtcbn1cblxuZmV0Y2hLZXlzKHdhbGxldElkcywgYWNjZXNzVG9rZW4pLmNhdGNoKChlKSA9PiBjb25zb2xlLmVycm9yKGUpKTtcbiJdfQ==Выполнить команду
Для локальной разработки. Не используйте в интернете!