@ethersphere/bee-factory
Version:
Local Ethereum Swarm development stack
82 lines • 3.59 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateKeystore = generateKeystore;
exports.generateAllKeystores = generateAllKeystores;
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
const ethers_1 = require("ethers");
const config_1 = require("../config");
const BASE_DIR = '/tmp/bee-factory/keys';
/**
* Generates an Ethereum keystore V3 file for a Bee node private key,
* writes it to /tmp/bee-factory/keys/bee-{n}/ and returns that directory path.
*
* Bee expects the keystore directory to contain a file named after the
* Ethereum address (lowercase, no 0x prefix) and the file content to be
* a standard eth_keystore JSON object.
*/
async function generateKeystore(node) {
const keyDir = path.join(BASE_DIR, `bee-${node.index}`);
// Clean and re-create the key directory on each run for a fresh state
if (fs.existsSync(keyDir)) {
fs.rmSync(keyDir, { recursive: true, force: true });
}
fs.mkdirSync(keyDir, { recursive: true });
fs.chmodSync(keyDir, 0o777);
const wallet = new ethers_1.ethers.Wallet(node.privateKey);
const address = wallet.address.toLowerCase().replace(/^0x/, '');
// Encrypt with the shared password; use default params (scrypt tuning
// is not exposed in the ethers v6 type signature for encrypt())
const encrypted = await wallet.encrypt(config_1.BEE_NODE_PASSWORD);
// Bee loads the main overlay key from a file named "swarm.key" inside the
// keys directory. The file format is a standard Ethereum keystore V3 JSON.
// Bee generates libp2p.key and pss.key itself if they are absent.
void address; // address is encoded inside the keystore JSON already
const keystoreFile = path.join(keyDir, 'swarm.key');
fs.writeFileSync(keystoreFile, encrypted);
return keyDir;
}
/**
* Generate keystores for all provided nodes in parallel.
* Returns an array of { node, keystoreDir } objects in the same order.
*/
async function generateAllKeystores(nodes) {
return Promise.all(nodes.map(async (node) => {
const keystoreDir = await generateKeystore(node);
return { node, keystoreDir };
}));
}
//# sourceMappingURL=index.js.map