import { ed25519 } from '@noble/curves/ed25519.js' import { bytesToHex } from '@noble/hashes/utils.js' import { mnemonicToSeedSync, validateMnemonic } from '@scure/bip39' import { wordlist } from '@scure/bip39/wordlists/english.js' const example_mnemonic = "runway civil fish reveal rather talk just annual sadness embody divert detect level hill sail tent hawk real arctic final nephew glad bicycle tilt" const deriveSeed = function (mnemonic: string): Uint8Array { try { validateMnemonic(mnemonic, wordlist) } catch (err) { console.error(err instanceof Error ? err.message : "Invalid mnemonic") } return mnemonicToSeedSync(mnemonic) } const deriveKeys = function (seed: Uint8Array) { let priv: Uint8Array = seed.slice(0, 32) return { privateKey: priv, publicKey: new Uint8Array(ed25519.getPublicKey(priv)) } } const main = function () { const seed = deriveSeed(example_mnemonic) console.log('Seed (Hex): ', bytesToHex(seed)) const recoveredKeys = deriveKeys(seed) console.log('\nPrivate Key (Hex):', bytesToHex(recoveredKeys.privateKey)) console.log('Public Key (Hex): ', bytesToHex(recoveredKeys.publicKey)) } main()