@machinomy/hdwallet-provider

HD Wallet-enabled Web3 provider. Use it to sign transactions, and messages for addresses derived from a 12-word mnemonic, or Ledger.

Usage no npm install needed!

<script type="module">
  import machinomyHdwalletProvider from 'https://cdn.skypack.dev/@machinomy/hdwallet-provider';
</script>

README

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

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', // 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

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', // 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

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.