https://github.com/chatch/stellar-hd-wallet
🔐 Key derivation for Stellar (SEP-0005) 🚀
https://github.com/chatch/stellar-hd-wallet
bip32 bip39 bip44 ed25519 javascript nodejs npm sep-0005 stellar
Last synced: 27 days ago
JSON representation
🔐 Key derivation for Stellar (SEP-0005) 🚀
- Host: GitHub
- URL: https://github.com/chatch/stellar-hd-wallet
- Owner: chatch
- License: apache-2.0
- Created: 2017-12-25T02:31:31.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-09-09T22:37:37.000Z (over 2 years ago)
- Last Synced: 2024-10-03T12:18:49.109Z (7 months ago)
- Topics: bip32, bip39, bip44, ed25519, javascript, nodejs, npm, sep-0005, stellar
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/stellar-hd-wallet
- Size: 83 KB
- Stars: 83
- Watchers: 10
- Forks: 48
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# stellar-hd-wallet
[](https://www.npmjs.org/package/stellar-hd-wallet)
[](https://github.com/chatch/stellar-hd-wallet/actions/workflows/nodejs.yml)Key derivation for Stellar ([SEP-0005](https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0005.md))
## Usage
```ts
import StellarHDWallet from 'stellar-hd-wallet';const mnemonic = StellarHDWallet.generateMnemonic();
const wallet = StellarHDWallet.fromMnemonic(mnemonic);wallet.getPublicKey(0); // => GDKYMXOAJ5MK4EVIHHNWRGAAOUZMNZYAETMHFCD6JCVBPZ77TUAZFPKT
wallet.getSecret(0); // => SCVVKNLBHOWBNJYHD3CNROOA2P3K35I5GNTYUHLLMUHMHWQYNEI7LVED
wallet.getKeypair(0); // => StellarBase.Keypair for account 0
wallet.derive(`m/44'/148'/0'`); // => raw key for account 0 as a Buffer// wallet instance from seeds
const seedHex =
'794fc27373add3ac7676358e868a787bcbf1edfac83edcecdb34d7f1068c645dbadba563f3f3a4287d273ac4f052d2fc650ba953e7af1a016d7b91f4d273378f';
const seedBuffer = Buffer.from(seedHex);
StellarHDWallet.fromSeed(seedHex);
StellarHDWallet.fromSeed(seedBuffer);// mnemonics with different lengths
StellarHDWallet.generateMnemonic(); // 24 words
StellarHDWallet.generateMnemonic({entropyBits: 224}); // 21 words
StellarHDWallet.generateMnemonic({entropyBits: 160}); // 18 words
StellarHDWallet.generateMnemonic({entropyBits: 128}); // 12 words// validate a mnemonic
StellarHDWallet.validateMnemonic('too short and non wordlist words'); // false
```## Mnemonic Language
Mnemonics can be generated in any language supported by the underlying [bip39 npm module](https://github.com/bitcoinjs/bip39).
The full list of language keys are under exports 'wordlists' [here](https://github.com/bitcoinjs/bip39/blob/master/index.js).
### Usage
```ts
import StellarHDWallet from 'stellar-hd-wallet';// traditional chinese - 24 words
StellarHDWallet.generateMnemonic({
language: 'chinese_traditional',
});
// => '省 从 唯 芽 激 顿 埋 愤 碳 它 炸 如 青 领 涨 骤 度 牲 朱 师 即 姓 讲 蒋'// french - 12 words
StellarHDWallet.generateMnemonic({language: 'french', entropyBits: 128});
// => 'directif terrible légume dérober science vision venimeux exulter abrasif vague mutuel innocent'
```## Randomness
* NodeJs: crypto.randomBytes
* Browser: window.crypto.getRandomValues(using [randombytes npm module](https://github.com/crypto-browserify/randombytes))
## Development
### Setup
```bash
npm install
```### Build
```bash
npm run build
```### Test
```bash
npm test
```## Tests
All [SEP-0005 test cases](https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0005.md#test-cases) are exercised [here](https://github.com/chatch/stellar-hd-wallet/blob/master/test/sep0005.ts) against [these](https://github.com/chatch/stellar-hd-wallet/tree/master/test/data).