https://github.com/symbol/symbol-hd-wallets
Hierarchical-deterministic wallets library for Symbol
https://github.com/symbol/symbol-hd-wallets
catapult derivation ed25519 hd-wallet javascript nem symbol typescript
Last synced: 7 months ago
JSON representation
Hierarchical-deterministic wallets library for Symbol
- Host: GitHub
- URL: https://github.com/symbol/symbol-hd-wallets
- Owner: symbol
- License: bsd-2-clause
- Created: 2019-04-07T18:07:23.000Z (about 6 years ago)
- Default Branch: main
- Last Pushed: 2024-01-31T00:51:53.000Z (over 1 year ago)
- Last Synced: 2024-11-20T21:05:53.181Z (7 months ago)
- Topics: catapult, derivation, ed25519, hd-wallet, javascript, nem, symbol, typescript
- Language: TypeScript
- Homepage:
- Size: 1.14 MB
- Stars: 11
- Watchers: 16
- Forks: 16
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Symbol HD Wallets
[](https://badge.fury.io/js/symbol-hd-wallets)
[](https://travis-ci.com/nemtech/symbol-hd-wallets)
[](https://nem2.slack.com/messages/CB0UU89GS//)Hierarchical-deterministic (HD) wallets generator library for Symbol.
This is a PoC to validate the proposed [NIP6 Multi-Account Hierarchy for Deterministic Wallets](https://github.com/nemtech/NIP/issues/12). When stable, the repository will be moved to the [nemtech](https://github.com/nemtech) organization.
**NOTE**: The author of this package cannot be held responsible for any loss of money or any malintentioned usage forms of this package. Please use this package with caution.
## Requirements
- Node.js 12 LTS
## Installation
`npm install symbol-hd-wallets`
## Usage
### Generating a mnemonic pass phrase
```ts
// examples/GeneratingAMnemonicPassPhrase.tsimport {MnemonicPassPhrase} from "../src/MnemonicPassPhrase";
// random 24-words mnemonic
MnemonicPassPhrase.createRandom();// random 12-words mnemonic
MnemonicPassPhrase.createRandom('english', 128);// random 24-words mnemonic with french wordlist
MnemonicPassPhrase.createRandom('french');// random 24-words mnemonic with japanese wordlist
MnemonicPassPhrase.createRandom('japanese');```
### Generating a password-protected mnemonic pass phrase seed (for storage)
```ts
// examples/GeneratePasswordProtectedSeedForRandomPassPhrase.tsimport {MnemonicPassPhrase} from "../src/MnemonicPassPhrase";
const mnemonic = MnemonicPassPhrase.createRandom();
const secureSeedHex = mnemonic.toSeed('your-password');```
```ts
// examples/GeneratePasswordProtectedSeedForRandomPassPhraseEmptyPassword.tsimport {MnemonicPassPhrase} from "../src/MnemonicPassPhrase";
// Example 2: empty password for password-protected seed
const mnemonic = MnemonicPassPhrase.createRandom();
const secureSeedHex = mnemonic.toSeed(); // omit password means empty password: ''```
### Generating a root (master) extended key
```ts
// examples/GeneratingARootMasterExtendedKeyForKnownPassPhrase.tsimport {MnemonicPassPhrase} from "../src/MnemonicPassPhrase";
// Example 2: generate BIP32 master seed for known pass phrase
const words = 'alpha pattern real admit vacuum wall ready code '
+ 'correct program depend valid focus basket whisper firm '
+ 'tray fit rally day dance demise engine mango';
const mnemonic = new MnemonicPassPhrase(words);// the following seed can be used with `ExtendedKey.createFromSeed()`
const bip32Seed = mnemonic.toSeed(); // using empty password```
```ts
// examples/GeneratingARootMasterExtendedKeyForRandomPassPhrase.tsimport {MnemonicPassPhrase} from "../src/MnemonicPassPhrase";
// Example 1: generate BIP32 master seed for random pass phrase
const mnemonic = MnemonicPassPhrase.createRandom();
const bip32Seed = mnemonic.toSeed();```
### Generating a HD wallet (SYMBOL **mijin** and **mijinTest** compatible)
```ts
// examples/GeneratingAHDWalletPrivateNetworkCompatible.tsimport {NetworkType} from 'symbol-sdk';
import {ExtendedKey} from "../src/ExtendedKey";
import {Wallet} from "../src/Wallet";
import {Network} from "../src/Network";const xkey = ExtendedKey.createFromSeed('000102030405060708090a0b0c0d0e0f', Network.SYMBOL);
const wallet = new Wallet(xkey);// get master account
const masterAccount = wallet.getAccount();// get DEFAULT ACCOUNT
const defaultAccount = wallet.getChildAccount();// derive specific child path
const childAccount = wallet.getChildAccount('m/44\'/4343\'/0\'/0\'/0\'', NetworkType.MIJIN_TEST);// get read-only wallet
const readOnlyWallet = new Wallet(xkey.getPublicNode());
const readOnlyAccount = readOnlyWallet.getPublicAccount(NetworkType.MIJIN_TEST);// get read-only DEFAULT ACCOUNT
const readOnlyDefaultAccount = readOnlyWallet.getChildPublicAccount();```
### Generating a HD wallet (SYMBOL **public** and **publicTest** compatible)
```ts
// examples/GeneratingAHDWalletPublicNetworkCompatible.tsimport {Network} from "../src/Network";
import {NetworkType} from "symbol-sdk";
import {Wallet} from "../src/Wallet";
import {ExtendedKey} from "../src/ExtendedKey";const xkey = ExtendedKey.createFromSeed('000102030405060708090a0b0c0d0e0f', Network.SYMBOL);
const wallet = new Wallet(xkey);// get master account
const masterAccount = wallet.getAccount();// get DEFAULT ACCOUNT
const defaultAccount = wallet.getChildAccount();// derive specific child path
const childAccount = wallet.getChildAccount('m/44\'/4343\'/0\'/0\'/0\'', NetworkType.TEST_NET);// get read-only wallet
const readOnlyWallet = new Wallet(xkey.getPublicNode());
const readOnlyAccount = readOnlyWallet.getPublicAccount(NetworkType.TEST_NET);// get read-only DEFAULT ACCOUNT
const readOnlyDefaultAccount = readOnlyWallet.getChildPublicAccount();```
### Signing with a HD wallet (SYMBOL compatible)
```ts
// examples/SigningWithAHDWalletPrivateNetworkCompatible.tsimport {Account, Deadline, EmptyMessage, NetworkType, TransferTransaction} from "symbol-sdk";
import {Wallet} from "../src/Wallet";
import {ExtendedKey} from "../src/ExtendedKey";
import {Network} from "../src/Network";const xkey = ExtendedKey.createFromSeed('000102030405060708090a0b0c0d0e0f', Network.SYMBOL);
const wallet = new Wallet(xkey);// derive specific child path
const childAccount = wallet.getChildAccount('m/44\'/4343\'/0\'/0\'/0\'', NetworkType.TEST_NET);// create a transfer object
const transfer = TransferTransaction.create(
Deadline.create(),
Account.generateNewAccount(NetworkType.TEST_NET).address,
[],
EmptyMessage,
NetworkType.TEST_NET);// sign the transaction with derived account
const generationHash = ''; // replace with network generation hash
const signedTx = childAccount.sign(transfer, generationHash);```
## Getting helpUse the following available resources to get help:
- [Symbol Documentation][docs]
- Join the community [slack group (#sig-client)][slack]
- If you found a bug, [open a new issue][issues]## Contributing
Contributions are welcome and appreciated.
Check [CONTRIBUTING](CONTRIBUTING.md) for information on how to contribute.## License
Copyright (c) 2019, Grégory Saive
Licensed under the [BSD-2 License](LICENSE).
[self]: https://github.com/nemtech/symbol-hd-wallets
[docs]: https://nemtech.github.io
[issues]: https://github.com/nemtech/symbol-hd-wallets/issues
[slack]: https://join.slack.com/t/nem2/shared_invite/enQtMzY4MDc2NTg0ODgyLWZmZWRiMjViYTVhZjEzOTA0MzUyMTA1NTA5OWQ0MWUzNTA4NjM5OTJhOGViOTBhNjkxYWVhMWRiZDRkOTE0YmU