Gethのインストールから起動まで(mac)

イーサリアムのクライアント、Gethを使用する必要が出てきましたので、まとめます。

ブロックチェーンアプリ開発を始めた人、コマンドを打つのが長いのでコピペしたい人、そんな人の役に立てばと思います。

所感

数年ほど、リナックスなど、ターミナルでの操作をすることがなくなってしまったので、意外とコマンドを思い出すのに手こずりました^^;

Gethを使うとき、Linuxなどでターミナルでのファイル操作や設定等に慣れていないと少し戸惑うかもしれません。

Gethを使用する前に、イーサリアムのネットワークの概念がよくわかっていない人は、概念的な部分を調べることをオススメします^^

念のため、Gethとは?

・Gethは、イーサリアムのクライアントで、イーサリアムのネットワークに参加するためのアプリケーション。

・イーサリアムには、メインネット、テストネット、プライベートネットがあり、Gethでどこに接続するかを決めていづれかのネットワークに接続可能。

・最初からメインネットでコントラクトをデプロイ(プログラムを公開)すると、以下の開発の上で以下のデメリットがあるため、まずはテストネット、プライベートネットでテストをしてデプロイする。

デメリット1:コントラクトは公開したら、修正できない。

デメリット2:gas(手数料)がかかる。

・そのため、Gethで自分だけのイーサリアムネット(プライベートネット)を作り、試すことができる。

あと、Gethを使うことでイーサリアムのネットワークがどのようにして動いているか、理解できるというメリットもある。(マイニングしないとブロックが生成されないとか、ブロックが生成されないとトランザクションの状態が変わらないとか)

Gethを使えるようにする

ここからGo Ethereumをダウンロード

もちろんmac版をダウンロードします。

ダウンロードしたzipを解凍

以下のファイルが含まれています。

・COPYING

・geth

上記「geth」がGo Ethereumの実行ファイル(gethのアプリケーション)になりますので、これを任意の場所に置いて、パスを通します。

ホームディレクトリにgethフォルダを作成

~panda$ mkdir geth

ダウンロードしたgethファイルをホームディレクトリのgethフォルダに移動

mv ~/Downloads/geth-darwin-.../geth ~/geth

パスを通す(私はホームディレクトリの.bash_profileに追記してgethコマンドを追加)

ls -la

上記コマンドで.bash_profileがない場合、

touch .bash_profile

で.bash_profileファイルを作成。

.bash_profileにgethコマンド実行ファイルのパスを追記

open .bash_prifile

でテキストエディタを開き以下を追加

export PATH=”/Users/あなたのユーザー名/geth:${PATH}”

テキストファイルを上書き保存して、ターミナルに戻り、sourceコマンドでパスの設定を反映させる

source ~/.bash_profile

以下のコマンドで、パスに「/User/あなたのユーザー名/geth」が追加されていればOK

echo $PATH

以下のバージョン確認コマンドで、gethコマンドが使えるか確認

geth version

Version: 1.8.8-stable(以下略)などと、バージョン番号が返ってくれば成功です。

プライベートネットの作成

まずは、自分のパソコンだけでイーサリアムネットワークを立ち上げることにします。

メインネット、テストネットはたくさんのイーサリアムのクライアントによってP2Pの仕組みで成り立つネットワークになりますが、プライベートネットは自分専用のP2Pネットワークを稼働させることができ、開発などに利用することができます。

プライベートネットのデータを入れるためのフォルダを作成します。私は先ほど作成したホームディレクトリのgethフォルダ内に作成することにしました。

home->geth->my_net

mkdir ~/geth/my_net

次に、ブロックチェーンの最初のブロック、genesisを定義するファイルを作成します。jsonファイルとして定義します。

touch ~/geth/my_net/genesis.json

ファイルをテキストエディタなどで開き、ファイルに下の内容を記入、保存します。

{
  "config": {
    "chainId": 77,
    "homesteadBlock": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "nonce": "0x0000000000000033",
  "timestamp": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "gasLimit": "0x8000000",
  "difficulty": "0x100",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x3333333333333333333333333333333333333333",
  "alloc": {}
}

(”config”パラメータのchainIdの番号は、後でgethの起動に必要となるため、メモするか忘れないようにする。)

genesis.jsonのパラメータについてはコチラ

次に、プライベートネット「my_net」の初期化処理を行い、最初のブロックを作成します。

geth --datadir ~/geth/my_net/ init ~/geth/my_net/genesis.json

を実行します。

上記実行後、返却されたメッセージにSuccessfully wrote genesis stateという文字があればOKです。たくさん返ってくる文字の中の最後の方にあります。

 

Gethの起動確認と終了操作

・Geth起動

次のコマンドでgethを起動します。

geth --networkid "77" --nodiscover --datadir ~/geth/my_net/ --rpc --rpcaddr "localhost" --rpcport "8545" --rpccorsdomain "*" --rpcapi "eth,net,web3,personal" --targetgaslimit "2000000" console 2>> ~/geth/my_net/logfile.log

このとき、–networkIdには、先ほどgenesis.jsonで定義したchainIdと同様の番号にします。

–rpccorsdomainをよく入力間違いしました^^; corsのところをcrosとしてコマンドが通らないことがよくありました…

・Geth終了

exit

 

オススメの書籍

導入部分から非常に面白いです、、、ブロックチェーンアプリケーション開発の入門に是非!