import {generateMnemonic, mnemonicToSeed, validateMnemonic} from 'bip39'; // 当前版本3.0.4 rn 0.69可用,否则BigInt报错 import {fromSeed} from 'bip32'; import {randomBytes} from 'crypto'; import {error, mnemonicStrength, Return} from '../config' import {IMnemonicTools} from "./mnemonic"; import {IReturnResult} from "../config"; class Mnemonic implements IMnemonicTools { random(strength: number | undefined, rng?: any): string { strength = strength ?? mnemonicStrength["12"]; const data = generateMnemonic(strength, rng ?? randomBytes); if (!this.verify(data)) return this.random(strength, rng); return data; } async toSeed(mnemonic: string, path?: string): Promise> { // 助记词错误 if (!this.verify(mnemonic)) return error.mnemonic; const data = await mnemonicToSeed(mnemonic); const seed = path ? fromSeed(data).derivePath(path) : fromSeed(data); const ReturnClass = new Return(); ReturnClass.setPrivateKey(seed.privateKey.toString('hex')); ReturnClass.setPublicKey(seed.publicKey.toString('hex')); return ReturnClass.end(); } verify(mnemonic: string): boolean { return validateMnemonic(mnemonic); } } const mnemonicTools = new Mnemonic(); export { mnemonicTools, } export type { IMnemonicTools }