hdwallet-provider
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
import HDWalletProvider from '@machinomy/hdwallet-provider'
import * as Web3 from 'web3'
const mnemonic = "opinion destroy betray ..."
const provider = HDWalletProvider.mnemonic({
mnemonic: mnemonic,
rpc: 'http://localhost:8545',
path: "m/44'/60'/0'/0",
numberOfAccounts: 1
})
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 |
Ledger via USB HID
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.
import HDWalletProvider from '@machinomy/hdwallet-provider'
import * as Web3 from 'web3'
const provider = await HDWalletProvider.ledgerHID({
rpc: 'http://localhost:8545',
path: "m/44'/60'/0'/0",
numberOfAccounts: 1,
accountsOffset: 0,
askConfirm: false
})
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 |
Ledger via BLE (for Ledger Nano X)
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.
import HDWalletProvider from '@machinomy/hdwallet-provider'
import * as Web3 from 'web3'
const provider = await HDWalletProvider.ledgerBLE({
rpc: 'http://localhost:8545',
path: "m/44'/60'/0'/0",
numberOfAccounts: 1,
accountsOffset: 0,
askConfirm: false
})
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 |
Development
First, install dependencies:
yarn install --pure-lockfile
Then pass some tests:
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.