or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

hdnode-class.mdindex.mdmnemonic-operations.mdutility-functions.md
tile.json

mnemonic-operations.mddocs/

Mnemonic Operations

BIP39 mnemonic phrase operations providing comprehensive functionality for generating, validating, and converting between mnemonic phrases, entropy, and cryptographic seeds.

Capabilities

Mnemonic to Seed Conversion

Converts BIP39 mnemonic phrases to cryptographic seeds using PBKDF2 derivation.

/**
 * Convert mnemonic phrase to seed using PBKDF2
 * @param mnemonic - BIP39 mnemonic phrase
 * @param password - Optional passphrase (defaults to empty string)
 * @returns 64-byte seed as hex string
 */
function mnemonicToSeed(mnemonic: string, password?: string): string;

Usage Examples:

import { mnemonicToSeed } from "@ethersproject/hdnode";

const mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";

// Basic seed generation
const seed = mnemonicToSeed(mnemonic);
console.log("Seed:", seed); // 64-byte hex string

// Seed with passphrase
const seedWithPassword = mnemonicToSeed(mnemonic, "mypassword");
console.log("Protected seed:", seedWithPassword);

// Seeds are deterministic - same mnemonic + password = same seed
const seed2 = mnemonicToSeed(mnemonic, "mypassword");
console.log("Seeds match:", seed2 === seedWithPassword); // true

Mnemonic to Entropy Conversion

Converts BIP39 mnemonic phrases to their underlying entropy bytes.

/**
 * Convert mnemonic phrase to entropy bytes
 * @param mnemonic - BIP39 mnemonic phrase
 * @param wordlist - Optional wordlist for validation (defaults to English)
 * @returns Entropy as hex string
 */
function mnemonicToEntropy(mnemonic: string, wordlist?: string | Wordlist): string;

Usage Examples:

import { mnemonicToEntropy } from "@ethersproject/hdnode";

const mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";

// Convert to entropy
const entropy = mnemonicToEntropy(mnemonic);
console.log("Entropy:", entropy); // 16-byte hex string for 12-word mnemonic

// With specific wordlist
const entropyJapanese = mnemonicToEntropy(japaneseMnemonic, "ja");
console.log("Japanese entropy:", entropyJapanese);

Entropy to Mnemonic Conversion

Converts entropy bytes to BIP39 mnemonic phrases with checksum validation.

/**
 * Convert entropy bytes to mnemonic phrase
 * @param entropy - Entropy bytes (16-32 bytes)
 * @param wordlist - Optional wordlist for phrase generation (defaults to English)
 * @returns BIP39 mnemonic phrase
 */
function entropyToMnemonic(entropy: BytesLike, wordlist?: string | Wordlist): string;

Usage Examples:

import { entropyToMnemonic } from "@ethersproject/hdnode";

// Generate mnemonic from entropy
const entropy = "0x6d4b8d3c2fa45d9b7e4f8c0b1a5e7d2c"; // 16 bytes = 12 words
const mnemonic = entropyToMnemonic(entropy);
console.log("Generated mnemonic:", mnemonic);

// With different wordlist
const frenchMnemonic = entropyToMnemonic(entropy, "fr");
console.log("French mnemonic:", frenchMnemonic);

// Different entropy lengths produce different mnemonic lengths
const entropy24 = "0x6d4b8d3c2fa45d9b7e4f8c0b1a5e7d2c9f8e7d6c5b4a3928"; // 24 bytes = 18 words
const mnemonic18 = entropyToMnemonic(entropy24);
console.log("18-word mnemonic:", mnemonic18);

Mnemonic Validation

Validates BIP39 mnemonic phrases for correctness including checksum verification.

/**
 * Validate if a mnemonic phrase is valid
 * @param mnemonic - Mnemonic phrase to validate
 * @param wordlist - Optional wordlist for validation (defaults to English)
 * @returns true if mnemonic is valid, false otherwise
 */
function isValidMnemonic(mnemonic: string, wordlist?: Wordlist): boolean;

Usage Examples:

import { isValidMnemonic } from "@ethersproject/hdnode";

// Valid mnemonic
const validMnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
console.log("Valid:", isValidMnemonic(validMnemonic)); // true

// Invalid checksum
const invalidChecksum = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon";
console.log("Invalid checksum:", isValidMnemonic(invalidChecksum)); // false

// Wrong length
const tooShort = "abandon abandon abandon abandon";
console.log("Too short:", isValidMnemonic(tooShort)); // false

// Unknown words
const unknownWords = "invalid words that do not exist in wordlist";
console.log("Unknown words:", isValidMnemonic(unknownWords)); // false

// Case insensitive validation
const upperCase = "ABANDON ABANDON ABANDON ABANDON ABANDON ABANDON ABANDON ABANDON ABANDON ABANDON ABANDON ABOUT";
console.log("Case insensitive:", isValidMnemonic(upperCase)); // true

Entropy and Mnemonic Length Relationships

BIP39 defines specific relationships between entropy length and mnemonic word count:

Entropy LengthMnemonic LengthSecurity Level
16 bytes (128 bits)12 wordsStandard
20 bytes (160 bits)15 wordsEnhanced
24 bytes (192 bits)18 wordsHigh
28 bytes (224 bits)21 wordsVery High
32 bytes (256 bits)24 wordsMaximum

Examples:

import { entropyToMnemonic, mnemonicToEntropy } from "@ethersproject/hdnode";

// 12-word mnemonic (128-bit entropy)
const entropy128 = "0x" + "00".repeat(16); // 16 bytes
const mnemonic12 = entropyToMnemonic(entropy128);
console.log("12 words:", mnemonic12.split(" ").length); // 12

// 24-word mnemonic (256-bit entropy)
const entropy256 = "0x" + "00".repeat(32); // 32 bytes
const mnemonic24 = entropyToMnemonic(entropy256);
console.log("24 words:", mnemonic24.split(" ").length); // 24

// Round-trip conversion
const recoveredEntropy = mnemonicToEntropy(mnemonic24);
console.log("Entropy matches:", entropy256 === recoveredEntropy); // true

Wordlist Support

The library supports multiple BIP39 wordlists for different languages:

import { wordlists } from "@ethersproject/wordlists";

// Available wordlists
const availableLanguages = Object.keys(wordlists);
console.log("Supported languages:", availableLanguages);
// ["en", "ja", "zh_cn", "zh_tw", "fr", "it", "ko", "es"]

// Using specific wordlists
const englishMnemonic = entropyToMnemonic(entropy, wordlists.en);
const japaneseMnemonic = entropyToMnemonic(entropy, wordlists.ja);
const frenchMnemonic = entropyToMnemonic(entropy, wordlists.fr);

Error Conditions

Mnemonic operations throw errors in the following situations:

  • Invalid mnemonic length: Mnemonic word count is not 12, 15, 18, 21, or 24
  • Invalid checksum: Mnemonic fails BIP39 checksum validation
  • Unknown words: Mnemonic contains words not in the specified wordlist
  • Invalid entropy length: Entropy is not 16, 20, 24, 28, or 32 bytes
  • Unknown locale: Specified wordlist language is not supported

Error Handling Examples:

import { mnemonicToEntropy, entropyToMnemonic, isValidMnemonic } from "@ethersproject/hdnode";

// Check validity before conversion
const userMnemonic = "user provided mnemonic phrase";
if (isValidMnemonic(userMnemonic)) {
  const entropy = mnemonicToEntropy(userMnemonic);
  console.log("Valid mnemonic converted to entropy");
} else {
  console.log("Invalid mnemonic provided");
}

// Handle entropy length errors
try {
  const invalidEntropy = "0x1234"; // Too short
  const mnemonic = entropyToMnemonic(invalidEntropy);
} catch (error) {
  console.log("Invalid entropy length:", error.message);
}