#truffle-hdwallet-providerとは
mnemonic(ニーモニック)からウォレットを作成し、ウォレットのアカウントを使って簡単にトランザクションを発行できる仕組み
truffle-hdwallet-provider
https://github.com/trufflesuite/truffle-hdwallet-provider
#使われているモジュール
引用元:https://tomokazu-kozuma.com/about-the-mechanism-of-truffle-hdwallet-provider/
###bip39
Bitcoin Improvement Proposal 39をJavascriptで実装したものです。これは決定性キーを生成するプログラム
###ethereumjs-wallet/hdkey
Bitcoin Improvement Proposal 32をJavascriptで実装したもので階層的決定性ウォレット(Hierarchical Deterministic Wallets:HD Wallets)を作成するプログラム
truffle-hdwallet-provider内ではbip39を使ってmnemonicからシードを作成し、そのシードから鍵を生成するHD Walletsインスタンスを作成しています。このインスタンスから秘密鍵やアドレスを生成できる
###web3-provider-engine
Web3 ProviderEngineは独自のweb3プロバイダを作成するためのツール
###web3
EtherumブロックチェーンとJSON RPC経由でデータの読み書きができるライブラリ
#実際に使ってみる
※truffle/npm/ganache などは事前にインストールしておく
###1. mkdir sample-truffle-hdwallet
###2. cd sample-truffle-hdwallet
###3. truffle init
###4. npm init
###5. atom . package.jsonを編集
devDependenciesに以下を追加
{
"name": "sample-truffle-hdwallet",
"version": "1.0.0",
"description": "",
"main": "truffle.js",
"directories": {
"test": "test"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"devDependencies":{
"dotenv": "^4.0.0",
"truffle-hdwallet-provider": "0.0.5"
},
"author": "",
"license": "ISC",
},
####6. npm install
####7. InfuraでAPIキー取得
Ethereum用の開発環境を提供してくれるもの
Ropstenテストネットを利用するので必要なAPIキーを取得
####8. 環境変数用ファイル作成
INFURA_API_KEY=InfuraのAPIキー
MNEMONIC=""
####9.コントラクトSimpleStorage.solを書く
簡単なGetter/Setterのみのコントラクト
pragma solidity 0.4.24;
//Sample Smart Contract
contract SimpleStorage{
string value;
function set(string x) public{
value = x;
}
function get() public view returns(string){
return value;
}
}
####10. truffle.jsを作成
require('dotenv').config();
const HDWalletProvider = require('truffle-hdwallet-provider');
module.exports = {
solc:{
optimizer:{
enabled: true,
runs: 200
}
}
};
####11.truffle compile
contract配下にSimpleStorage.jsonが生成される
####12. Deploy Contractを作る
const SimpleStorage = artifacts.require("./SimpleStorage.sol")
module.exports = function(deployer) {
// body...
deployer.deploy(SimpleStorage);
};
####13. Ropstenテストネットへのデプロイ準備
require('dotenv').config();
const HDWalletProvider = require('truffle-hdwallet-provider');
module.exports = {
// See <http://truffleframework.com/docs/advanced/configuration>
// to customize your Truffle configuration!
networks: {
ropsten: {
provider: function(){
return new HDWalletProvider(
process.env.MNEMONIC,
'https://ropsten.infura.io/${process.env.INFURA_API_KEY}'
)
},
gasPrice: 500000, //23000000000
network_id: 3
},
development:{
host: "127.0.0.1",
port: 8545,
network_id: "*" //Match any network id
}
},
solc:{
optimizer:{
enabled: true,
runs: 200
}
}
};
gasPriceが大きすぎるとガス不足のエラーがでるので要注意
####14. ganache-cli
$ganache-cli
※未インストールの場合(npm) npm install ganache-cli
####15. HDWalletProvider生成
コンソールからwalletを作ってみる。ここが実は一番大事。
MNEMONIC 'apple banana coffee'が登録されたWalletがつくられていることがわかる
$ truffle console
####16. truffle migrate --network ropsten
Ropstenへデプロイ
$ truffle migrate --network ropsten
エラーが出る場合:
RopstenのETHが不足していることが原因。Metamaskへログインし、Ropstenへ切り替えた上で、faucetでETHをゲットする
https://faucet.metamask.io/
うまくいくとこんな感じになり、デプロイされる。このSimpleStorageがコントラクトのアドレスなのでコピーする
####17. コントラクト確認
Ether Scanへアクセスして、コントラクトのaddressを貼り付ける
以上、今回はMNEMONICを使ったwalletをHDwallet-providerから生成し、Ropstenテストネットにデプロイするところまで。