2import { HDNodeWallet } from 'ethers' 8const donateEthwalSecretName = 'millionpx_ethwal' 9const donateEthwalSecretPath = pathDownJoin(secretsDir, donateEthwalSecretName) 11const getOrCreateMnemonic = ({createIfMissing = true} = {}) => { 13 return fs.readFileSync(donateEthwalSecretPath, 'utf-8').trim() 15 if (/** @type {any} */ (err).code !== 'ENOENT') throw err 16 if (!createIfMissing) return null 17 const wallet = HDNodeWallet.createRandom() 18 const {mnemonic} = wallet 20 fs.mkdirSync(secretsDir, {recursive: true}) 21 fs.writeFileSync(donateEthwalSecretPath, mnemonic.phrase, 'utf-8') 22 console.log(`Created new donate wallet secret at ${shortPtPath(donateEthwalSecretPath)}`) 23 return mnemonic.phrase 27export const genDonateWallet = (opts) => { 28 const mnemonic = getOrCreateMnemonic(opts) 29 return mnemonic ? HDNodeWallet.fromPhrase(mnemonic) : null 32export const genDonateEthPay = (opts) => { 33 const wallet = genDonateWallet(opts) 34 if (!wallet) return { ethPaymentAddr: null, ethPaymentAddrA: [] } 35 const ethPaymentAddr = wallet.address 36 return { ethPaymentAddr, ethPaymentAddrA: [ethPaymentAddr] }