Skip to content
HD Wallet-enabled Web3 provider, for use with raw private key string
Branch: master
Clone or download
Pull request Compare This branch is 35 commits ahead, 55 commits behind trufflesuite:master.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore Ignore packed artifacts Jan 3, 2018 Merge branch 'web3-one' into master Feb 22, 2019
index.js Merge branch 'web3-one' into master Feb 22, 2019
package-lock.json 1.0.3 Feb 8, 2019
package.json 1.0.3 Feb 8, 2019


HD Wallet-enabled Web3 provider. Use it to sign transactions for addresses derived from a raw private key string.

If you are using Web3 1.0, please use the web3-one branch. Install the package using npm i truffle-hdwallet-provider-privkey@web3-one. README is updated in that branch.


$ npm install truffle-hdwallet-provider-privkey@web3-one

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-privkey");
const privKeys = ["ce2eab51c7c428...", "46c36f1970dcf37ec..."]; // private keys
const provider = new HDWalletProvider(privKeys, "http://localhost:8545");

By default, the HDWalletProvider will use the address of the first address that's generated from the private key. Currently, the HDWalletProvider manages only one address at a time, but it can be easily upgraded to manage (i.e., "unlock") multiple addresses.


  • privateKeys: string. Array of private keys for multiple accounts (DO NOT SHARE THEM EVER).
  • provider_uri: string. URI of Ethereum client to send all other non-transaction-related Web3 requests.

Truffle Usage

Use Case

I have a an account MetaMask and I want to use it to deploy my contracts to a testnet/mainnnet.

Steps for MetaMask

  • Click 3 dots next to MetaMask
  • Click "Account Details"
  • Click "Export Private Key" and type password
  • Copy private key and use the below steps in your Truffle config.


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


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

const privateKeys = ["ce2eab51c7c428...", "46c36f1970dcf37ec..."]; // private keys

module.exports = {
  networks: {
    development: {
      host: "localhost",
      port: 8545,
      network_id: "*" // Match any network id
    ropsten: {
      provider: () => {
        return new HDWalletProvider(privateKeys, "")
      network_id: 3

Web3 Provider

You can also use the Wallet provider as an easy way to get a Web3 object that has an unlocked account to sign transactions through an INFURA node.

const Web3 = require('web3')
const WalletProvider = require('truffle-hdwallet-provider-privkey')

const privKey = "2442e1526f1..."; // raw private key

const w = new WalletProvider(privKey, "")
web3 = new Web3(w.engine)


Make sure the from address you use when sending transactions is entirely lowercase or you will see an error like this:

TypeError: private key should be a Buffer
You can’t perform that action at this time.