ここ数ヶ月、EthereumのクライアントはGethもParityも不安定で苦労している方も多かったかと思いますが、先程Geth v1.8.0がリリースされました。
「パワフルなクラウドマシンならFast syncが3時間未満で同期できるよ」
とのこと。すでにunstableな時点で評価してみましたが、たしかに1日未満で同期が完了していたし途中で落ちることもありませんでした。
安定版リリースのタイミングで改めて評価し、その手順と所感をまとめます。
結論
以下の通り 総じて早くなり、安定した ので 以前のように安心して使えるようになった という印象。
- 3時間未満で同期できた
- 途中で落ちなかった
- 相変わらず微妙な挙動もある(だいぶ改善されている)
Gethユーザはすぐに更新するのが良さそうです。
試したGethのバージョン: 1.8.0-stable-5f540757。
手順は以下のとおり。
EC2インスタンス作成
- AMI:
Canonical, Ubuntu, 16.04 LTS, amd64 xenial image build on 2017-11-21
- ストレージ:
100GB
- インスタンスタイプ:
m4.xlarge
それなりのbeefy cloud machineなはずです。
Gethをインストール
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install -y ethereum
バージョン確認。
$ geth version
Geth
Version: 1.8.0-stable
Git Commit: 5f54075760748ae7f249bf735565924ea885c477
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.9.4
Operating System: linux
GOPATH=
GOROOT=/usr/lib/go-1.9
supervisorでデーモン化しておく
途中で落ちても立ち上げ直すようにsupervisorを入れておきます。
ログ用ディレクトリとsupervisor用のgethの.confファイルも作成。
sudo apt-get install -y supervisor
sudo mkdir /var/log/supervisor/jobs
sudo vi /etc/supervisor/conf.d/geth.conf
内容は以下の通り。
[program:Geth]
command=/usr/bin/geth --fast --cache=2048
user=root
autorestart=true
stdout_logfile=/var/log/supervisor/jobs/geth.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=5
stdout_capture_maxbytes=1MB
redirect_stderr=true
supervisorのreload。
sudo supervisorctl reload
以下のコマンドでログが吐かれていればOK。
tail -f /var/log/supervisor/jobs/geth.log
で、しばらく放置。
結果
冒頭に記載したとおり、問題なく3時間未満(2時間56分程度)で同期は完了しました。
geth attach
でconsoleから挙動確認しても問題なし。
途中で落ちたりもしていなかったようです。検証のためだけであればsupervisorも不要だったかもしれません。
しかし、Gethでよくある微妙な挙動はまだ見受けられます。
- 最後の数十ブロックの同期がなかなか終わらない場合がある
- ここに数日かかるパターンもあり。放置していればそのうち同期完了する
- 同期が完了したはずなのに
eth.getBalance
で残高あるのに0
が返る場合あり- これも放置していると直る印象
などなど。
そうは言ってもだいぶ安定しました。
ここ数ヶ月はメジャーなクライアントでなかなか同期が成功しない、という厳しい状況でしたので今回のリリースは非常にありがたいですね。
ちなみにLight syncでは
- Light client protocolは絶賛開発中のため用途によっては運用にご注意。