UNPKG

@ethersphere/bee-factory

Version:

Local Ethereum Swarm development stack

82 lines 3.59 kB
"use strict"; 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