イーサリアムのクライアント、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
オススメの書籍
導入部分から非常に面白いです、、、ブロックチェーンアプリケーション開発の入門に是非!