truffle-hdwallet-provider
HD Wallet-enabled Web3 provider. Use it to sign transactions for addresses derived from a 12 or 24 word mnemonic.
Install
$ npm install truffle-hdwallet-provider
Requirements
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...";
let provider = new HDWalletProvider(mnemonic, "http://localhost:8545");
provider = new HDWalletProvider(mnemonic, "http://localhost:8545", 5);
provider = new HDWalletProvider(mnemonic, "http://localhost:8545", 5, 1, true, "m/44'/137'/0'/0/");
const web3 = new Web3(provider);
web3.setProvider(provider)
provider.engine.stop();
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.
Parameters:
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");
let provider = new HDWalletProvider("3f841bf589fdf83a521e55d51afddc34fa65351161eead24f064855fc29c9580", "http://localhost:8545");
const privateKeys = [
"3f841bf589fdf83a521e55d51afddc34fa65351161eead24f064855fc29c9580",
"9549f39decea7b7504e15572b2c6a72766df0281cea22bd1a3bc87166b1ca290",
];
provider = new HDWalletProvider(privateKeys, "http://localhost:8545", 0, 2);
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:
truffle-config.js
const HDWalletProvider = require("truffle-hdwallet-provider");
const mnemonic = "mountains supernatural bird ...";
module.exports = {
networks: {
development: {
host: "localhost",
port: 8545,
network_id: "*"
},
ropsten: {
provider: () =>
new HDWalletProvider(mnemonic, "https://ropsten.infura.io/v3/YOUR-PROJECT-ID",
0, 1, true, "m/44'/1'/0'/0/"
),
network_id: '3',
}
}
};