JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 8
  • Score
    100M100P100Q65128F
  • License Apache-2.0

HD Wallet-enabled Web3 provider

Package Exports

  • @machinomy/hdwallet-provider

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@machinomy/hdwallet-provider) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

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.