React Native implementation of Bitcoin BIP39. It's written in TypeScript and has direct bindings to a Bip39 C++ library. The primary function of this implementation is to provide mnemonic code for generating deterministic keys.
- 🏎️ Up to 800x faster then js solutions (mnemonicToSeed)
- ⚡️ Lightning fast implementation with pure C++ and JSI
- 📚 Standalone library
- 🧪 Tested in JS and C++ (OpenSSL)
- 💳 Made for crypto wallets
To use this library in your React Native project, run the following commands:
Start by installing Nitro Modules. You can find more information here.
bun i react-native-nitro-modules
cd ios && pod install
Now install react-native-nitro-bip39
bun install react-native-nitro-bip39
import { bip39 } from "react-native-nitro-bip39";
bip39.setDefaultWordlist("english");
console.log(bip39.getDefaultWordlist());
const mnemonic = bip39.generateMnemonic(12);
console.log(mnemonic); // Outputs a 12-word mnemonic
console.log(bip39.validateMnemonic(mnemonic));
console.log(bip39.mnemonicToSeed(mnemonic));
console.log(bip39.mnemonicToSeedHex(mnemonic));
const entropy = bip39.mnemonicToEntropy(mnemonic);
console.log(entropy);
console.log(bip39.entropyToMnemonic(entropy));
setDefaultWordlist(wordlist: WordLists): void
- Parameters:
wordlist
The word list to use (e.g., 'chinese_simplified', 'english', etc.). Default is 'english'.
getDefaultWordlist(): WordLists
- Returns: The word list to use (e.g., 'chinese_simplified', 'english', etc.). Default is 'english'.
generateMnemonic(wordCount?: WordCount, rng?: ArrayBuffer, wordlist?: WordLists): string
- Parameters:
wordCount
(optional): Number of words in the mnemonic (e.g., 12, 15, 18, 21, or 24). Default is 12.rng
(optional): A random number generator represented as aArrayBuffer
.wordlist
(optional): The word list to use (e.g., 'chinese_simplified', 'english', etc.). Default is 'english'.
- Returns: A string representing the generated mnemonic.
validateMnemonic(mnemonic: string, wordlist?: WordLists): boolean
- Parameters:
mnemonic
: The mnemonic phrase to validate.wordlist
(optional): The word list to use (e.g., 'chinese_simplified', 'english', etc.). Default is 'english'.
- Returns: A boolean indicating whether the mnemonic is valid.
mnemonicToSeed(mnemonic: string, password?: string): ArrayBuffer
- Parameters:
mnemonic
: The mnemonic phrase to convert.password
(optional): An optional passphrase for additional security.
- Returns: A
ArrayBuffer
representing the binary seed.
mnemonicToSeedHex(mnemonic: string, password?: string): string
- Parameters:
mnemonic
: The mnemonic phrase to convert.password
(optional): An optional passphrase for additional security.
- Returns: A string representing the hexadecimal seed.
mnemonicToEntropy(mnemonic: string, wordlist?: WordLists): string
- Parameters:
mnemonic
: The mnemonic phrase to convert.wordlist
(optional): The word list to use (e.g., 'chinese_simplified', 'english', etc.). Default is 'english'.
- Returns: A string representing the binary entropy.
entropyToMnemonic(entropy: string | ArrayBuffer, wordlist?: WordLists): string
- Parameters:
entropy
: The binary entropy to convert.wordlist
(optional): The word list to use (e.g., 'chinese_simplified', 'english', etc.). Default is 'english'.
- Returns: A string representing the mnemonic phrase.
A type representing different word lists that can be used for generating or validating mnemonics.
type WordLists =
| "chinese_simplified"
| "chinese_traditional"
| "czech"
| "english"
| "french"
| "italian"
| "japanese"
| "korean"
| "portuguese"
| "spanish";
A type representing the number of words in a mnemonic.
type WordCount = 12 | 15 | 18 | 21 | 24;
All test cases have been sourced from the Python and JavaScript implementations of BIP39. They have been subsequently adapted to be compatible with React Native.
- mrousavy/nitro Nitro Modules
- mattxlee/bip39_cpp C++ Bip39 library
- margelo/react-native-worklets-core Helpful for how JSI works
- bitcoinjs/bip39 Mostly used as bip39 reference