import bip39 from "bip39"; import hdWallet from "ethereumjs-wallet/hdkey"; import cluster from "cluster"; import fs from "fs"; const ETH_PATH = "m/44'/60'/0'/0"; const NUM_CPUS = 8; const NUM_ACCOUNTS_PER_CORE = 200000; const mnemonic = "source pitch chronic mother need ghost unable asset supreme tragic else interest asset eagle update rule slim elder adapt next emerge trash doctor fun"; const seed = bip39.mnemonicToSeed(mnemonic); const wallet = hdWallet.fromMasterSeed(seed); const genesisFile = { config: { chainId: 15, homesteadBlock: 0, eip155Block: 0, eip158Block: 0 }, difficulty: "20", gasLimit: "2100000", alloc: {} }; const cleanup = () => { fs.writeFile( "./sample-genesis.json", JSON.stringify(genesisFile, null, 2), err => { if (err) { return console.log(err); } } ); }; let received = 0; if (cluster.isMaster) { for (var i = 0; i < NUM_CPUS; i++) { const worker_env = { start: NUM_ACCOUNTS_PER_CORE * i, limit: NUM_ACCOUNTS_PER_CORE }; const proc = cluster.fork(worker_env); proc.on("message", message => { if (message === "done") proc.kill(0); else { received++; if (received % 1000 === 0) console.log(received); genesisFile.alloc[message] = { balance: "30000000000000000000" }; if (received > NUM_ACCOUNTS_PER_CORE * NUM_CPUS - 1) cleanup(); } }); } } else { const worker_env = process.env; for ( var i = parseInt(worker_env.start); i < parseInt(worker_env.start) + parseInt(worker_env.limit); i++ ) { process.send( wallet .derivePath(ETH_PATH) .deriveChild(i) .getWallet() .getAddressString() .replace("0x", "") ); } process.send("done"); }