@machinomy/hdwallet-provider
Version:
HD Wallet-enabled Web3 provider
126 lines (95 loc) • 5.09 kB
Markdown
HD Wallet-enabled Web3 provider. Use it to sign transactions,
and messages for addresses derived from a 12-word mnemonic, or Ledger.
For Ledger it supports both USB and BLE (Ledger Nano X) transports.
## Install
$ yarn install @machinomy/hdwallet-provider
## Usage
You can use this provider wherever a Web3 provider is needed.
### Mnemonic
```typescript
import HDWalletProvider from '@machinomy/hdwallet-provider'
import * as Web3 from 'web3'
const mnemonic = "opinion destroy betray ..." // 12 word mnemonic
const provider = HDWalletProvider.mnemonic({
mnemonic: mnemonic, // mandatory
rpc: 'http://localhost:8545', // mandatory
path: "m/44'/60'/0'/0", // optional
numberOfAccounts: 1 // optional
})
const web3 = new Web3(provider)
```
Parameters:
| Argument | Type | Description |
| --------------------- | -------- | -------------------------------------------------------------- |
| `mnemonic` | `string` | 12 word mnemonic which addresses are created from |
| `rpc` | `string` | URI of Ethereum client to send all other non-transaction-related Web3 requests |
| `path` | `string` | Optional. HD derivation path, default is `m/44'/60'/0'/0` |
| `numberOfAccounts` | `string` | Optional. Number of accounts to manage, default is 1 |
In addition to a mnemonic, you might use Ledger to manage a private key. We support connecting to Ledger
in Node setting only. _You can not use the provider to connect to Ledger on a web browser._ The following
enables connecting to Ledger via USB HID transport.
As Ledger connection is optional, Ledger-related providers are built via Promise-based interface.
Factory `HDWalletProvider.ledgerHID` returns a `Promise<HDWalletProvider>`.
It makes requiring USB-related packages on demand.
```typescript
import HDWalletProvider from '@machinomy/hdwallet-provider'
import * as Web3 from 'web3'
// ...
const provider = await HDWalletProvider.ledgerHID({
rpc: 'http://localhost:8545', // mandatory
path: "m/44'/60'/0'/0", // optional
numberOfAccounts: 1, // optional
accountsOffset: 0, // optional
askConfirm: false // optional
})
const web3 = new Web3(provider)
```
Parameters:
| Argument | Type | Description |
| --------------------- | -------- | -------------------------------------------------------------- |
| `rpc` | `string` | URI of Ethereum client to send all other non-transaction-related Web3 requests |
| `path` | `string` | Optional. HD derivation path, default is `m/44'/60'/0'/0` |
| `numberOfAccounts` | `string` | Optional. Number of accounts to manage, default is `1` |
| `accountsOffset` | `string` | Optional. Offset of derivation path index, defaults to `0` |
| `askConfirm` | `string` | Optional. Ask for confirmation on Ledger, default is `false` |
In addition to a mnemonic, you might use Ledger to manage a private key. We support connecting to Ledger
in Node setting only. _You can not use the provider to connect to Ledger on a web browser._ The following
enables connecting to Ledger via BLE transport. You might then use your Ledger Nano X wirelessly.
As Ledger connection is optional, Ledger-related providers are built via Promise-based interface.
Factory `HDWalletProvider.ledgerBLE` returns a `Promise<HDWalletProvider>`.
It makes requiring BLE-related packages on demand.
```typescript
import HDWalletProvider from '@machinomy/hdwallet-provider'
import * as Web3 from 'web3'
// ...
const provider = await HDWalletProvider.ledgerBLE({
rpc: 'http://localhost:8545', // mandatory
path: "m/44'/60'/0'/0", // optional
numberOfAccounts: 1, // optional
accountsOffset: 0, // optional
askConfirm: false // optional
})
const web3 = new Web3(provider)
```
Parameters:
| Argument | Type | Description |
| --------------------- | -------- | -------------------------------------------------------------- |
| `rpc` | `string` | URI of Ethereum client to send all other non-transaction-related Web3 requests |
| `path` | `string` | Optional. HD derivation path, default is `m/44'/60'/0'/0` |
| `numberOfAccounts` | `string` | Optional. Number of accounts to manage, default is `1` |
| `accountsOffset` | `string` | Optional. Offset of derivation path index, defaults to `0` |
| `askConfirm` | `string` | Optional. Ask for confirmation on Ledger, default is `false` |
First, install dependencies:
```bash
yarn install --pure-lockfile
```
Then pass some tests:
```bash
yarn test
```
It tests only basic things for mnemonic providers. To test against USB or BLE Ledger use `src/script/try-ledger-hid.ts`
and `src/script/try-ledger-ble.ts` scripts correspondingly.