# tsjs-hd-keys

> library to handle hyper-deterministic keys

Latest version **0.2.0** (published 2020-07-24) · Apache 2.0 license · 0 weekly downloads

## Install

```sh
npm install tsjs-hd-keys
pnpm add tsjs-hd-keys
yarn add tsjs-hd-keys
bun add tsjs-hd-keys
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.2.0 |
| Published | 2020-07-24 |
| First published | 2020-04-20 |
| Weekly downloads | 0 |
| License | Apache 2.0 |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 11 |
| Unpacked size | 227.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | thomas.tran |

## Links

- npm: https://www.npmjs.com/package/tsjs-hd-keys
- Repository: https://github.com/thomas-tran/tsjs-hd-keys
- Homepage: https://github.com/thomas-tran/tsjs-hd-keys#readme
- Issues: https://github.com/thomas-tran/tsjs-hd-keys/issues
- npm.io page: https://npm.io/package/tsjs-hd-keys

## Dependencies (11)

- [rxjs](https://npm.io/package/rxjs.md) ^6.5.3
- [bip32](https://npm.io/package/bip32.md) ^1.0.4
- [bip39](https://npm.io/package/bip39.md) ^3.0.2
- [js-sha3](https://npm.io/package/js-sha3.md) ^0.8.0
- [bs58check](https://npm.io/package/bs58check.md) ^2.1.2
- [create-hash](https://npm.io/package/create-hash.md) ^1.2.0
- [create-hmac](https://npm.io/package/create-hmac.md) ^1.1.7
- [@types/bip32](https://npm.io/package/@types/bip32.md) ^1.0.2
- [tiny-secp256k1](https://npm.io/package/tiny-secp256k1.md) ^1.1.3
- [bip44-constants](https://npm.io/package/bip44-constants.md) ^8.0.5
- [tsjs-xpx-chain-sdk](https://npm.io/package/tsjs-xpx-chain-sdk.md) ^0.7.1

## Recent versions

- 0.2.0 (latest) — 2020-07-24
- 0.1.9 — 2020-05-27
- 0.1.8 — 2020-05-27
- 0.1.7 — 2020-05-27
- 0.1.6 — 2020-04-22
- 0.1.5 — 2020-04-22
- 0.1.4 — 2020-04-22
- 0.1.3 — 2020-04-22
- 0.1.2 — 2020-04-21
- 0.1.1 — 2020-04-21
- 0.1.0 — 2020-04-20

## README

# tsjs-hd-keys

TSJS HD KEYs generator to generate hyper-deterministic keys for the Sirius platform.

Fork from [symbol-hd-wallets](https://github.com/nemfoundation/symbol-hd-wallets)


## Installation

`npm install tsjs-hd-keys`

## Examples

### Generating a mnemonic pass phrase

```ts
// examples/GeneratingAMnemonicPassPhrase.ts

import {MnemonicPassPhrase} from 'tsjs-hd-keys';

// 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.ts

import {MnemonicPassPhrase} from 'tsjs-hd-keys';

const mnemonic = MnemonicPassPhrase.createRandom();
const secureSeedHex = mnemonic.toSeed('your-password');

```

```ts
// examples/GeneratePasswordProtectedSeedForRandomPassPhraseEmptyPassword.ts

// Example 2: empty password for password-protected seed
import {MnemonicPassPhrase} from 'tsjs-hd-keys';

const mnemonic = MnemonicPassPhrase.createRandom();
const secureSeedHex = mnemonic.toSeed(); // omit password means empty password: ''

```

### Generating a root (master) extended key

```ts
// examples/GeneratingARootMasterExtendedKeyForKnownPassPhrase.ts

import {MnemonicPassPhrase} from 'tsjs-hd-keys';

// 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.ts

import {MnemonicPassPhrase} from 'tsjs-hd-keys';

// Example 1: generate BIP32 master seed for random pass phrase
const mnemonic = MnemonicPassPhrase.createRandom();
const bip32Seed = mnemonic.toSeed();

```

### Generating a hyper-deterministic wallet (CATAPULT **mijin** and **mijinTest** compatible)

```ts
// examples/GeneratingAHDWalletPrivateNetworkCompatible.ts

import {ExtendedKey, Network, Wallet} from 'tsjs-hd-keys';
import {NetworkType} from 'tsjs-xpx-chain-sdk';

const xkey = ExtendedKey.createFromSeed('000102030405060708090a0b0c0d0e0f', Network.CATAPULT);
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\'/43\'/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 hyper-deterministic wallet (CATAPULT **public** and **publicTest** compatible)

```ts
// examples/GeneratingAHDWalletPublicNetworkCompatible.ts

import {ExtendedKey, Network, Wallet} from 'tsjs-hd-keys';
import {NetworkType} from 'tsjs-xpx-chain-sdk';

const xkey = ExtendedKey.createFromSeed('000102030405060708090a0b0c0d0e0f', Network.CATAPULT_PUBLIC);
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\'/43\'/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 hyper-deterministic wallet (CATAPULT compatible)

```ts
// examples/SigningWithAHDWalletPrivateNetworkCompatible.ts

import {ExtendedKey, Network, Wallet} from 'tsjs-hd-keys';
import {Account, Deadline, EmptyMessage, NetworkType, TransferTransaction} from "tsjs-xpx-chain-sdk";

const xkey = ExtendedKey.createFromSeed('000102030405060708090a0b0c0d0e0f', Network.CATAPULT_PUBLIC);
const wallet = new Wallet(xkey);

// derive specific child path
const childAccount = wallet.getChildAccount('m/44\'/43\'/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);

---
_Source: https://npm.io/package/tsjs-hd-keys · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
