# truffle-hdwallet-provider

> HD Wallet-enabled Web3 provider

Latest version **1.0.17** (published 2019-08-22) · MIT license · 6.3K weekly downloads

> **Deprecated.** This package is deprecated.

## Install

```sh
npm install truffle-hdwallet-provider
pnpm add truffle-hdwallet-provider
yarn add truffle-hdwallet-provider
bun add truffle-hdwallet-provider
```

## Health

**Score 10/100 (F)** — status: deprecated.

Negative: deprecated.

## Facts

| | |
|---|---|
| Version | 1.0.17 |
| Published | 2019-08-22 |
| First published | 2017-01-26 |
| Weekly downloads | 6.3K |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 4 |
| Unpacked size | 6.8 MB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 13911 |
| Author | Tim Coulter |
| Maintainers | cruzmolina, davidmurdoch, eggplantzzz, fainashalts, gnidan, haltman, seesemichaelj, tcoulter |
| Keywords | etheruem, hd, mnemonic, provider, wallet |

## Links

- npm: https://www.npmjs.com/package/truffle-hdwallet-provider
- Repository: https://github.com/trufflesuite/truffle/tree/master/packages/truffle-hdwallet-provider
- Homepage: https://github.com/trufflesuite/truffle/tree/master/packages/truffle-hdwallet-provider#readme
- Issues: https://github.com/trufflesuite/truffle/issues
- npm.io page: https://npm.io/package/truffle-hdwallet-provider

## Dependencies (4)

- [web3](https://npm.io/package/web3.md) 1.2.1
- [bindings](https://npm.io/package/bindings.md) ^1.3.1
- [websocket](https://npm.io/package/websocket.md) ^1.0.28
- [any-promise](https://npm.io/package/any-promise.md) ^1.3.0

## Alternatives

- [@sindresorhus/slugify](https://npm.io/package/@sindresorhus/slugify.md) — 3.7M weekly downloads
- [solid-js](https://npm.io/package/solid-js.md) — 2.7M weekly downloads
- [expo-glass-effect](https://npm.io/package/expo-glass-effect.md) — 2.5M weekly downloads
- [nanoassert](https://npm.io/package/nanoassert.md) — 780.8K weekly downloads
- [@ffmpeg/ffmpeg](https://npm.io/package/@ffmpeg/ffmpeg.md) — 529.5K weekly downloads

## Recent versions

- 1.0.17 (latest) — 2019-08-22
- 1.1.0-ens-events.1 (ens-events) — 2019-08-20
- 1.0.15-ens.0 (ens) — 2019-07-15
- 1.0.0-web3one.5 (web3-one) — 2018-12-17
- 1.0.0-web3one.2 (beta) — 2018-11-21
- 0.0.7-beta.1 (nonce) — 2018-09-05
- 1.0.16 — 2019-08-08
- 1.0.15 — 2019-07-25
- 1.0.14 — 2019-07-11
- 1.0.13 — 2019-07-02
- 1.0.12 — 2019-06-27
- 1.0.11 — 2019-06-20
- 1.0.10 — 2019-05-30
- 1.0.9 — 2019-05-09
- 1.0.8 — 2019-04-24
- … 19 more at https://npm.io/package/truffle-hdwallet-provider/versions

## README

# 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.

```javascript
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
web3.setProvider(provider)

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

// At termination, `provider.engine.stop()' should be called to finish the process elegantly.
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.

```javascript
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 = [
  "3f841bf589fdf83a521e55d51afddc34fa65351161eead24f064855fc29c9580",
  "9549f39decea7b7504e15572b2c6a72766df0281cea22bd1a3bc87166b1ca290",
];
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:

truffle-config.js
```javascript
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, "https://ropsten.infura.io/v3/YOUR-PROJECT-ID",
            0, 1, true, "m/44'/1'/0'/0/"
        ),
      network_id: '3',
    }
  }
};
```

---
_Source: https://npm.io/package/truffle-hdwallet-provider · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
