LoginSignup
1
4

More than 5 years have passed since last update.

Ganacheでブロックチェーン開発環境を構築する手順と設定周りを調べてみた

Last updated at Posted at 2019-03-13

はじめに

Qiita初投稿です。
Ethereumのスマートコントラクトを開発する上で、手軽に開発環境を構築できるというGanacheが便利だと聞いたので触ってみました。
さくっとブロックチェーンネットワークを構築できたので手順の覚え書きと、設定周りで調べたことをまとめました。

Ganacheについて

とりあえず触ってみた

リポジトリをgit cloneしてNode.jsで起動する方法もあるらしいが、今回はインストーラーを入手してデスクトップアプリとして起動する方法を試しました。

環境

  • Windows 10(64bit)
  • Ganache v1.3.1

手順

  1. 公式サイトからインストーラーを入手して実行。
  2. インストール完了後に起動する。

以上です。
後述する設定次第で色々と変えられますが、初回起動時は以下の通りです。
- localhost:7545でネットワークが起動する。
- 初回起動の時点で、10個のアカウントが事前に作成されていて、各アカウントには100ETHずつ配布されている。
- トランザクションを送信すると即時でブロックを作成するモード(AUTO MINE)が有効になっている。
- Gas Limit, Gas Priceもデフォルト値で固定。

ganache1.PNG

簡単に動作確認

試しにJSON RPCで送金トランザクションを送信してみます。valueは 0x8AC7230489E80000(10000000000000000000wei = 10ether)とします。

リクエスト
{
  "jsonrpc":"2.0",
  "id":1,
  "method":"eth_sendTransaction",
  "params": [{
    "from": "0x1B6C60b8468eFf469e109b770B5A46b0b756fFf2",
    "to": "0x3f9A747468E3A3f340C2dB39dc6d2ca09f155334",
    "value": "0x8AC7230489E80000"
  }]
}
レスポンス
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": "0x2d1758a12cf4452c25922fd11aa85562862b446dd711450adf3f444ee5a4df16"
}

アカウント0x1B6C60b8468eFf469e109b770B5A46b0b756fFf2の残高が10ether減って、0x3f9A747468E3A3f340C2dB39dc6d2ca09f155334の残高が10 ehter増えました。
画面上部でブロック数(CURRENT BLOCK)が1になったことも確認できます。
ganache2.PNG

BLOCKSタブを開くと、ブロックの中身の情報を確認できます。
GUIで確認できた情報は以下の通りでした。
- Gas Used
- Gas Limit
- Mined On(ブロック生成時刻)
- ブロックハッシュ値
- ブロックに含まれるトランザクション

ganache11.PNG

GUIで確認できるブロックの情報は限られていましたが、JSON RPCでgetBlockByNumberをリクエストすると詳細なブロックの情報を取得できました。minerのアドレスは0x0000000000000000000000000000000000000000で固定の模様です。

リクエスト
{
  "jsonrpc":"2.0",
  "id":1,
  "method":"eth_getBlockByNumber",
  "params": ["latest", true]
}
レスポンス
{
  "id": 1,
  "jsonrpc": "2.0",
  "result":{
    "number": "0x1",
    "hash": "0x86cd2e4f1a95bce73f2428b70471c24bba002fa8671fc70c2c552fe20c6eba4f",
    "parentHash": "0xf0345b25a09d809bb922cee8d1289b048437ed3b09c9e802eeefda6b5063ba1d",
    "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "nonce": "0x0000000000000000",
    "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "transactionsRoot": "0x0d3e289a38fa05c00cca7ad3b3761250061caec7270a1d16d5a29022673080e1",
    "stateRoot": "0x7eb119d558f4d4c493a66232eeea8eb19f0ede908772f7fe65c19e4bdce27e55",
    "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
    "miner": "0x0000000000000000000000000000000000000000",
    "difficulty": "0x0",
    "totalDifficulty": "0x0",
    "extraData": "0x",
    "size": "0x3e8",
    "gasLimit": "0x6691b7",
    "gasUsed": "0x5208",
    "timestamp": "0x5c88f963",
    "transactions":[
      {
        "hash": "0x2d1758a12cf4452c25922fd11aa85562862b446dd711450adf3f444ee5a4df16",
        "nonce": "0x0",
        "blockHash": "0x86cd2e4f1a95bce73f2428b70471c24bba002fa8671fc70c2c552fe20c6eba4f",
        "blockNumber": "0x1",
        "transactionIndex": "0x0",
        "from": "0x1b6c60b8468eff469e109b770b5a46b0b756fff2",
        "to": "0x3f9a747468e3a3f340c2db39dc6d2ca09f155334",
        "value": "0x8ac7230489e80000",
        "gas": "0x15f90",
        "gasPrice": "0x4a817c800",
        "input": "0x",
        "v": "0x1c",
        "r": "0x93204fc2719d734b3e7bae6a6ce902720195c40dcdcb2cab3c84b489d0bccd9f",
        "s": "0x4017a6380cd875ef7993d73a77ca0ea4787ee18e4a36ed5958f17987ce6f1b66"
      }
   ],
    "uncles":[]
  }
}

設定できる項目

画面右上の歯車アイコンから、ネットワークやアルゴリズム周りの設定を変更できます。
開発する上で変更することにあまり意味がなさそうな項目もありますが、まとめます。

SERVER(サーバー)

  • Host Name
    • ホスト名
  • Port Number
    • ポート番号
  • Network ID
    • ネットワークID
  • Auto Mine
    • 有効(デフォルト):トランザクションが送信されると即時にブロックを生成する。
    • 無効:指定した間隔(秒)でブロックを生成する。トランザクションが発生していてもしていなくても、生成間隔は固定。
  • Error on Transaction Failure
    • 有効(デフォルト):トランザクション要求で失敗した場合にエラー(event?)を発生させる。
    • 無効:エラーが発生しないので、JSON RPCのeth_getTransactionReceiptメソッドでレスポンス項目statusで判断する必要がある。

ACCOUNTS & KEYS(アカウントと鍵)

  • Account Default Balance
    • 起動時にアカウントに配布されるether残高。
    • デフォルト:100ether
  • Total Accounts to Generate
    • 起動時に作成するアカウント数。
    • デフォルト:10
  • Auto Generate HD Mnemonic
    • 有効:Ganacheを起動する度にアカウントのアドレスをランダムに生成する。
    • 無効(デフォルト):MNemonicで指定した固定文字列を元に毎回同じアドレスを生成する。
  • Lock Accounts
    • 有効(デフォルト)にすると、起動時にアカウントがロックされる。ただし、ローカルからなら送金トランザクションは要求できる。

CHAIN(ブロックチェーン)

  • Gas Limit
    • 生成されるブロックのGas Limit。ここで設定した値で常に固定。
    • デフォルト:6721975
  • Gas Price
    • 生成されるブロックのGas Price。ここで設定した値で常に固定。
    • デフォルト:20000000000
  • Hard Fork
    • Petersburg(デフォルト)
    • Constantinople
    • Byzantium

ADVANCED

LOGGING

  • Output Logs to File
    • 有効にすると、指定したフォルダにファイル(ganache-yyyyMMdd-hhmmss.log)を出力する。
    • デフォルトでは無効
  • Verbose Logs
    • 有効にすると、JSON RPCのレスポンスがログに出力されるようになる。
    • デフォルトでは無効

ANALYTICS

  • Google Analytics
    • 有効にすると、Ganacheの使用状況が開発チームに匿名で送られる。個人を特定できる情報、アカウント情報、秘密鍵は送信されないとのこと。
    • 初回インストール時にも設定を要求される。

まとめ

Ganachでブロックチェーン開発環境を構築する手順と、設定周りについて調べました。

構築する手順はとても簡単でした。
設定できる項目はシンプルで、スマートコントラクトを開発する上で最低限に絞られている印象でした。

また、アプリケーションを動かしながらブロックチェーンの情報をリアルタイムで確認できるのはとても便利で、ParityやGeth等で作成したプライベートブロックチェーンにアタッチしてこの画面で見られるようになると嬉しいと思いました。

参考

1
4
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
1
4