import { ethers } from "ethers"; import { parse, stringify } from "envfile"; import * as fs from "fs"; import password from "@inquirer/password"; const envFilePath = "./.env"; const getValidatedPassword = async () => { while (true) { const pass = await password({ message: "Enter a password to encrypt your private key:" }); const confirmation = await password({ message: "Confirm password:" }); if (pass === confirmation) { return pass; } console.log("āŒ Passwords don't match. Please try again."); } }; const setNewEnvConfig = async (existingEnvConfig = {}) => { console.log("šŸ‘› Generating new Wallet\n"); const randomWallet = ethers.Wallet.createRandom(); const pass = await getValidatedPassword(); const encryptedJson = await randomWallet.encrypt(pass); const newEnvConfig = { ...existingEnvConfig, DEPLOYER_PRIVATE_KEY_ENCRYPTED: encryptedJson, }; // Store in .env fs.writeFileSync(envFilePath, stringify(newEnvConfig)); console.log("\nšŸ“„ Encrypted Private Key saved to packages/hardhat/.env file"); console.log("šŸŖ„ Generated wallet address:", randomWallet.address, "\n"); console.log("āš ļø Make sure to remember your password! You'll need it to decrypt the private key."); }; async function main() { if (!fs.existsSync(envFilePath)) { // No .env file yet. await setNewEnvConfig(); return; } const existingEnvConfig = parse(fs.readFileSync(envFilePath).toString()); if (existingEnvConfig.DEPLOYER_PRIVATE_KEY_ENCRYPTED) { console.log("āš ļø You already have a deployer account. Check the packages/hardhat/.env file"); return; } await setNewEnvConfig(existingEnvConfig); } main().catch(error => { console.error(error); process.exitCode = 1; });