EthereumのHDwalletメモ

# はじめに

自分のまわりでHDwalletが話題になってきているので調べたことをメモする。

HDwalletの厳密な定義は知らない。とりあえず、12ワードのニーモニックから始まって、パスによりアカウントを導出するものをさすことにする。

まずは、資料が豊富そうなEthereumから。

## mnemonic

ランダムに生成したニーモニックを使う。

```
remember naive stairs dose six decorate catalog banner gaze tiny into lady
```

## Path

BIP-44
https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki

Pathは、以下のように定義される。

```
m / purpose' / coin_type' / account' / change / address_index
```

SLIP-44
https://github.com/satoshilabs/slips/blob/master/slip-0044.md

ここには、index=60にEtherが定義してある。


## Ganache

Ganacheに入れてみる。`m/44'/60'/0'/0/`が使われている。

```
ganache-cli -m "remember naive stairs dose six decorate catalog banner gaze tiny into lady"
Ganache CLI v6.4.2 (ganache-core: 2.5.4)

Available Accounts
==================
(0) 0xb7242502386b00220c5a0ef889a5da0e8251e596 (~100 ETH)
(1) 0x219883c5dd2e50c29e2e9433a7761b4ecd97fbf8 (~100 ETH)
(2) 0xb96174e33c583a1da05e77a37ecc1b5d96363c1c (~100 ETH)
(3) 0x9cb5d503203308a2fddc7293314f283049578e97 (~100 ETH)
(4) 0x527e7a8bc1137bde1acac3b91acc4122461856af (~100 ETH)
(5) 0xbdd7f2f78ae952dd3f66ec6982f481fed9b4e9ff (~100 ETH)
(6) 0xe1c43afb6c4da4de00851062138cb5803472028a (~100 ETH)
(7) 0x35463e55b8d953b432a3866779df31982cb5cd01 (~100 ETH)
(8) 0xa45ff989892c1e09fe7ea1c324d43131b04fec40 (~100 ETH)
(9) 0x068fe2de4e27b6087be98623c587c943c97849a3 (~100 ETH)

Private Keys
==================
(0) 0xbdd5b053645c2282cea64f206f4e8c7d1a7905f302f3e792f7a48768c10102a5
(1) 0xd68565eaac95d38339a33dd8cb909bbf697abbb40e9476bdc3bddf3baa977a97
(2) 0x22417fc0bd03dd7b5717ed54b701a96831a92380eec0e4d5030bfc80f6f0b026
(3) 0xc4af260c206fe0609b85f849d66ac07dd3903015ee5a81804c6e847c4493ac85
(4) 0x7610f3bfa8524a6edb52ed5fd9bc607db03cb7f8bfe565e0149e55fc692dfc9e
(5) 0x002b924369c80fdf7a5785f20f1530e63aa9d0f3db00884ae497961eb151eda2
(6) 0x5e0791efd582711f7ffd0ce15d16fe6b4b9972cf34c16827281c7a90f77832ea
(7) 0x911d209c4bec2b1ca4ca2c1b4e49f38a0afcd12628de04be545fdcde5e17e885
(8) 0xdc447536b9665e2273d2692e336600da07fbe61407e53c58b3822d5d9ce6d80b
(9) 0xa5d5d6fe45d75361f9ee490c91721fa9a9520072958a26fc348cb0f2fdb39290

HD Wallet
==================
Mnemonic:      remember naive stairs dose six decorate catalog banner gaze tiny into lady
Base HD Path:  m/44'/60'/0'/0/{account_index}
```

## Truffle HD wallet Provider

https://github.com/trufflesuite/truffle-hdwallet-provider

READMEに`m/44'/60'/0'/0/`がデフォだって書いてある。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172833/f7fce735-e441-b358-1111-3f1a1d41b20f.png)

ちょっとやってみる

```javascript
var HDWalletProvider = require("truffle-hdwallet-provider");
var mnemonic = "remember naive stairs dose six decorate catalog banner gaze tiny into lady";
var host = "http://localhost:8545";
var provider = new HDWalletProvider(mnemonic, host, 0, 10);
var Web3 = require('web3');

var web3 = new Web3(provider);

web3.eth.getAccounts().then((accounts) => {
    console.log(accounts);
    provider.engine.stop();
})
```

```
[ '0xB7242502386b00220C5A0Ef889A5da0E8251e596',
  '0x219883C5dd2E50C29E2e9433a7761B4eCD97fbF8',
  '0xB96174E33C583a1dA05e77a37ECC1B5D96363c1c',
  '0x9cB5D503203308A2fDdC7293314f283049578E97',
  '0x527e7A8bc1137BdE1acaC3b91ACc4122461856aF',
  '0xBDd7F2F78Ae952DD3f66EC6982F481Fed9B4E9ff',
  '0xE1c43aFB6c4dA4de00851062138Cb5803472028A',
  '0x35463e55B8d953b432a3866779DF31982cb5cD01',
  '0xa45FF989892C1E09FE7Ea1c324D43131b04fEC40',
  '0x068FE2de4e27B6087BE98623C587c943C97849A3' ]
```

## BIP39

https://iancoleman.io/bip39/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172833/f742177a-53b4-c4e3-68d0-31f0a0d38348.png)