Gethはじめ
どうも、ぺろりんです。
今回も「はじめてのブロックチェーン・アプリケーション Ethereumによるスマートコントラクト開発入門 (DEV Engineer's Books)」でお勉強していきます。
コード以外は本の内容そのまま書かないよう注意せねば。。
さて、今回はGethの起動です。
準備
ここでは、起動前にテストネットワーク用のデータディレクトリと、Genesisブロック(0番目のブロック)を作成します。
で、準備の最後にGethを初期化します。
前回rootユーザー(ユーザー名の横に「#」がついてる)になってたので、私の場合、ひとまず本に合わせて普通のユーザー(ユーザー名の横に「$」がついてる)になっておきます。初めから「$」になってたら特にやる必要はないです。
ユーザーを変えたので、とりあえずPathだけ確認しておきます。大丈夫そう。
データディレクトリの作成
ここでは本に合わせた場所と名前でデータ用のディレクトリを作成します。
Genesisファイルの作成
次に、Genesisファイルを作成します。ファイルはjson形式[注1]です。本のとおり、Linuxのテキストエディタのviエディタ[注2]を起動して作成しましょう。viに慣れてなかったら、たぶん拡張子だけ「json」にして、GUIからテキストファイルで同じ場所にファイルを作れば良いかと思います。
開いたらこんな感じの内容を入れます。
作成できたことを確認します。ちゃんとありますね。
中身も確認しておきましょう。
Gethの初期化
この「おまじない」で初期化できるそうです。「vm01」のところはご自分のユーザー名を入れてください。
おまじないを唱えると、こんな感じになります。はじめの行に「WARNING」と出てますが、本と同じなので大丈夫そう。
初期化するとデータディレクトリがこんな感じになります。
これで準備が終わりました。
Gethの起動
本に言われた通りのおまじないをたたきます。(gethコマンドのヘルプはこちらへ)
こうなればうまく起動したってことみたいです。
まとめ
今回は、Geth用のディレクトリを用意してGethの起動までやりました。
内容を気にせず本に言われた通りすすめてきましたが、そろそろ気持ち悪いので「Genesisファイル」と「Gethの起動コマンド」についてもう少し理解を深めていきたいと思います。
ここに書くと記事が長くなりそうだったので、これは次回にまわします。
[注1] json形式…JavaScript Object Notation の略だそう。調べた結果をザクっというと、「JavaScriptから派生し、テキストベースでいろんなブラウザとか言語に対応したデータ記述形式の一種」とのこと。
(参考)
・非エンジニアに贈る「具体例でさらっと学ぶJSON」(Developers.IO)
・JSONってなにもの?(Think IT)
・JSONの意味・解説(Weblio 辞書)
[注2] viエディタ…Linuxで使うテキストエディタ。癖があるので初見だとドキッとするかも。「文字入力するためにモード切替する」とかいうエディタです。もう少しいうと、カーソルを動かしたりするモード、入力するモード、ファイルを終了(保存したりしながら)するためのモード、という3つのモードがあります。とりあえずviコマンドたたいてみたけど戻れねーよ!!ってなったら、[Esc]を押してから[:]を押して[q]、最後に[Enter]で抜けましょう。[q]でだめなら[:]のあとに[q]、[!]と入力して[Enter]で強制終了です。詳しい使い方は参考サイトをご参照ください。
(参考)
・viエディタの使い方(Linux 入門)
今回も「はじめてのブロックチェーン・アプリケーション Ethereumによるスマートコントラクト開発入門 (DEV Engineer's Books)」でお勉強していきます。
コード以外は本の内容そのまま書かないよう注意せねば。。
さて、今回はGethの起動です。
準備
ここでは、起動前にテストネットワーク用のデータディレクトリと、Genesisブロック(0番目のブロック)を作成します。
で、準備の最後にGethを初期化します。
前回rootユーザー(ユーザー名の横に「#」がついてる)になってたので、私の場合、ひとまず本に合わせて普通のユーザー(ユーザー名の横に「$」がついてる)になっておきます。初めから「$」になってたら特にやる必要はないです。
root@ubuntu:~# exit
ログアウト
vm01@ubuntu:~$
ユーザーを変えたので、とりあえずPathだけ確認しておきます。大丈夫そう。
vm01@ubuntu:~$ which geth
/usr/local/bin/geth
データディレクトリの作成
ここでは本に合わせた場所と名前でデータ用のディレクトリを作成します。
vm01@ubuntu:~$ mkdir ~/data_testnet
vm01@ubuntu:~$ cd data_testnet/
vm01@ubuntu:~/data_testnet$ pwd
/home/vm01/data_testnet
Genesisファイルの作成
次に、Genesisファイルを作成します。ファイルはjson形式[注1]です。本のとおり、Linuxのテキストエディタのviエディタ[注2]を起動して作成しましょう。viに慣れてなかったら、たぶん拡張子だけ「json」にして、GUIからテキストファイルで同じ場所にファイルを作れば良いかと思います。
vm01@ubuntu:~/data_testnet$ vi genesis.json
開いたらこんな感じの内容を入れます。
{
"nonce": "0x0000000000000042",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x0",
"gasLimit": "0x8000000",
"difficulty": "0x4000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": {}
}
~
~
~
~
~
~
~
~
~
~
"genesis.json" 11 lines, 367 characters
作成できたことを確認します。ちゃんとありますね。
vm01@ubuntu:~/data_testnet$ ls
genesis.json
中身も確認しておきましょう。
vm01@ubuntu:~/data_testnet$ cat genesis.json
{
"nonce": "0x0000000000000042",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x0",
"gasLimit": "0x8000000",
"difficulty": "0x4000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": {}
}
Gethの初期化
この「おまじない」で初期化できるそうです。「vm01」のところはご自分のユーザー名を入れてください。
vm01@ubuntu:~/data_testnet$ geth --datadir /home/vm01/data_testnet init /home/vm01/data_testnet/genesis.json
おまじないを唱えると、こんな感じになります。はじめの行に「WARNING」と出てますが、本と同じなので大丈夫そう。
I0321 06:51:35.178564 cmd/utils/flags.go:615] WARNING: No etherbase set and no accounts found as default
I0321 06:51:35.180028 ethdb/database.go:83] Allotted 128MB cache and 1024 file handles to /home/vm01/data_testnet/geth/chaindata
I0321 06:51:35.243803 ethdb/database.go:176] closed db:/home/vm01/data_testnet/geth/chaindata
I0321 06:51:35.245107 ethdb/database.go:83] Allotted 128MB cache and 1024 file handles to /home/vm01/data_testnet/geth/chaindata
I0321 06:51:35.306442 cmd/geth/chaincmd.go:131] successfully wrote genesis block and/or chain rule set: 3b3326d56983eec74bcd3c5757801dcd42e0bf2f169fc0c5d695e28e20f217d7
初期化するとデータディレクトリがこんな感じになります。
vm01@ubuntu:~/data_testnet$ cd
vm01@ubuntu:~$ tree data_testnet/
data_testnet/
├── genesis.json
├── geth
│ └── chaindata
│ ├── 000002.log
│ ├── CURRENT
│ ├── LOCK
│ ├── LOG
│ └── MANIFEST-000003
└── keystore
3 directories, 6 files
これで準備が終わりました。
Gethの起動
本に言われた通りのおまじないをたたきます。(gethコマンドのヘルプはこちらへ)
vm01@ubuntu:~$ geth --networkid 4649 --nodiscover --maxpeers 0 --datadir /home/vm01/data_testnet console 2>> /home/vm01/data_testnet/geth.log
こうなればうまく起動したってことみたいです。
Welcome to the Geth JavaScript console!
instance: Geth/v1.5.5-stable-ff07d548/linux/go1.6.2
modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
>
まとめ
今回は、Geth用のディレクトリを用意してGethの起動までやりました。
内容を気にせず本に言われた通りすすめてきましたが、そろそろ気持ち悪いので「Genesisファイル」と「Gethの起動コマンド」についてもう少し理解を深めていきたいと思います。
ここに書くと記事が長くなりそうだったので、これは次回にまわします。
[注1] json形式…JavaScript Object Notation の略だそう。調べた結果をザクっというと、「JavaScriptから派生し、テキストベースでいろんなブラウザとか言語に対応したデータ記述形式の一種」とのこと。
(参考)
・非エンジニアに贈る「具体例でさらっと学ぶJSON」(Developers.IO)
・JSONってなにもの?(Think IT)
・JSONの意味・解説(Weblio 辞書)
[注2] viエディタ…Linuxで使うテキストエディタ。癖があるので初見だとドキッとするかも。「文字入力するためにモード切替する」とかいうエディタです。もう少しいうと、カーソルを動かしたりするモード、入力するモード、ファイルを終了(保存したりしながら)するためのモード、という3つのモードがあります。とりあえずviコマンドたたいてみたけど戻れねーよ!!ってなったら、[Esc]を押してから[:]を押して[q]、最後に[Enter]で抜けましょう。[q]でだめなら[:]のあとに[q]、[!]と入力して[Enter]で強制終了です。詳しい使い方は参考サイトをご参照ください。
(参考)
・viエディタの使い方(Linux 入門)