Skip to content
Branch: master
Find file History
Pull request Compare This branch is 22 commits behind develop.
eggplantzzz Publish
 - @truffle/artifactor@4.0.39
 - @truffle/blockchain-utils@0.0.15
 - @truffle/box@1.0.46
 - @truffle/codec@0.1.0
 - @truffle/compile-solidity@4.2.12
 - @truffle/compile-vyper@1.0.36
 - @truffle/config@1.2.6
 - @truffle/contract-schema@3.0.19
 - @truffle/contract-sources@0.1.7
 - @truffle/contract@4.1.0
 - @truffle/core@5.1.0
 - @truffle/debug-utils@2.0.0
 - @truffle/debugger@6.0.0
 - @truffle/decoder@4.0.0
 - @truffle/deployer@3.1.0
 - @truffle/environment@0.1.20
 - @truffle/error@0.0.8
 - @truffle/expect@0.0.13
 - @truffle/external-compile@1.0.22
 - @truffle/hdwallet-provider@1.0.25
 - @truffle/interface-adapter@0.3.3
 - @truffle/migrate@3.1.0
 - @truffle/provider@0.2.2
 - @truffle/provisioner@0.2.0
 - @truffle/reporters@1.0.17
 - @truffle/require@2.0.28
 - @truffle/resolver@5.0.21
 - @truffle/solidity-utils@1.2.7
 - truffle@5.1.0
 - @truffle/workflow-compile@2.1.13
Latest commit a962a99 Nov 12, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.


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


$ npm install @truffle/hdwallet-provider


Node >= 7.6
Web3 ^1.2.0

General Usage

You can use this provider wherever a Web3 provider is needed, not just in Truffle. For Truffle-specific usage, see next section.

const HDWalletProvider = require("@truffle/hdwallet-provider");
const Web3 = require("web3");
const mnemonic = "mountains supernatural bird..."; // 12 word mnemonic
let provider = new HDWalletProvider(mnemonic, "http://localhost:8545");

// Or, alternatively pass in a zero-based address index.
provider = new HDWalletProvider(mnemonic, "http://localhost:8545", 5);

// Or, use your own hierarchical derivation path
provider = new HDWalletProvider(mnemonic, "http://localhost:8545", 5, 1, true, "m/44'/137'/0'/0/");

// HDWalletProvider is compatible with Web3. Use it at Web3 constructor, just like any other Web3 Provider
const web3 = new Web3(provider);

// Or, if web3 is alreay initialized, you can call the 'setProvider' on web3, web3.eth, web3.shh and/or web3.bzz

// ...
// Write your code here.
// ...

// At termination, `provider.engine.stop()' should be called to finish the process elegantly.

By default, the HDWalletProvider will use the address of the first address that's generated from the mnemonic. If you pass in a specific index, it'll use that address instead.


Parameter Type Default Required Description
mnemonic *string* null [x] 12 word mnemonic which addresses are created from.
provider string|object null [x] URI or Ethereum client to send all other non-transaction-related Web3 requests
address_index number 0 [ ] If specified, will tell the provider to manage the address at the index specified
num_addresses number 1 [ ] If specified, will create number addresses when instantiated
shareNonce boolean true [ ] If false, a new WalletProvider will track its own nonce-state
wallet_hdpath string "m/44'/60'/0'/0/" [ ] If specified, will tell the wallet engine what derivation path should use to derive addresses.

Private Keys

Instead of a mnemonic, you can alternatively provide a private key or array of private keys as the first parameter. When providing an array, address_index and num_addresses are fully supported.

const HDWalletProvider = require("@truffle/hdwallet-provider");
//load single private key as string
let provider = new HDWalletProvider("3f841bf589fdf83a521e55d51afddc34fa65351161eead24f064855fc29c9580", "http://localhost:8545");

// Or, pass an array of private keys, and optionally use a certain subset of addresses
const privateKeys = [
provider = new HDWalletProvider(privateKeys, "http://localhost:8545", 0, 2); //start at address_index 0 and load both addresses

NOTE: This is just an example. NEVER hard code production/mainnet private keys in your code or commit them to git. They should always be loaded from environment variables or a secure secret management system.

Truffle Usage

You can easily use this within a Truffle configuration. For instance:


const HDWalletProvider = require("@truffle/hdwallet-provider");

const mnemonic = "mountains supernatural bird ...";

module.exports = {
  networks: {
    development: {
      host: "localhost",
      port: 8545,
      network_id: "*" // Match any network id
    ropsten: {
      // must be a thunk, otherwise truffle commands may hang in CI
      provider: () =>
        new HDWalletProvider(mnemonic, "",
            0, 1, true, "m/44'/1'/0'/0/"
      network_id: '3',
You can’t perform that action at this time.