9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

truffle-hdwallet With Infura

Last updated at Posted at 2018-11-02

#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に以下を追加

package.json
    {  
    "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キーを取得
スクリーンショット 2018-11-03 1.40.54.png

####8. 環境変数用ファイル作成

.env
INFURA_API_KEY=InfuraのAPIキー
MNEMONIC=""

####9.コントラクトSimpleStorage.solを書く
簡単なGetter/Setterのみのコントラクト

SimpleStorage.sol
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を作成

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が生成される
スクリーンショット 2018-11-03 1.55.02.png

####12. Deploy Contractを作る

2_deploy_contracts.js
const SimpleStorage = artifacts.require("./SimpleStorage.sol")

module.exports = function(deployer) {
  // body...
  deployer.deploy(SimpleStorage);
};

####13. Ropstenテストネットへのデプロイ準備

truffle.js
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
スクリーンショット 2018-11-03 2.04.51.png

####16. truffle migrate --network ropsten

Ropstenへデプロイ

$ truffle migrate --network ropsten

エラーが出る場合:
RopstenのETHが不足していることが原因。Metamaskへログインし、Ropstenへ切り替えた上で、faucetでETHをゲットする
https://faucet.metamask.io/

うまくいくとこんな感じになり、デプロイされる。このSimpleStorageがコントラクトのアドレスなのでコピーする
スクリーンショット 2018-11-03 2.11.38.png

####17. コントラクト確認
Ether Scanへアクセスして、コントラクトのaddressを貼り付ける
スクリーンショット 2018-11-03 2.12.48.png

以上、今回はMNEMONICを使ったwalletをHDwallet-providerから生成し、Ropstenテストネットにデプロイするところまで。

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?