コンテンツへスキップ

Go Ethereum (geth)

gethというイーサリアムの実行クライアントの使い方を記載しています。

初回設定

  1. コンパイル済ファイルのダウンロードに必要なパッケージをインストールする。
sudo apt install curl
  1. Gethの公式サイトを開き、「Geth X.XX.XX for Linux」のボタンを右クリックし、URLをコピーする。
  1. Go Ethereumをダウンロードする。上記で取得した最新のURLを使用してください。
cd ~

curl -LO https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-X.XX.XX-XXXXXXXX.tar.gz
  1. 解凍して/usr/local/binにコピーし、不要になったファイルを削除する。
tar xvf geth-linux-amd64-X.XX.XX-XXXXXXXX.tar.gz

cd geth-linux-amd64-X.XX.XX-XXXXXXXX

sudo cp geth /usr/local/bin

cd /usr/local/bin

./geth version

cd ~

rm -r geth-linux-amd64-X.XX.XX-XXXXXXXX

rm geth-linux-amd64-X.XX.XX-XXXXXXXX.tar.gz
  1. Go Ethereum実行用のユーザーgoethを作成する。
sudo useradd --no-create-home --shell /bin/false goeth
  1. ノードを保存するディレクトリを作成し、ユーザーgoethにアクセス許可を与える。
sudo mkdir -p /var/lib/goethereum

sudo chown -R goeth:goeth /var/lib/goethereum
  1. サーバー起動時にGo Ethereumが自動的に開始されるためのserviceファイルを作成する。
sudo nano /etc/systemd/system/geth.service
  1. 以下を入力し、保存する。(Ctrl + O で保存、Ctrl + X で閉じる)
[Unit]
Description=Go Ethereum
After=network.target
Wants=network.target

[Service]
User=goeth 
Group=goeth
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/geth \
  --datadir /var/lib/goethereum \
  --authrpc.jwtsecret /var/lib/jwtsecret/jwt.hex

[Install]
WantedBy=default.target

ExecStart=のパラメータに--maxpeers 20を追加すればデータの送受信を抑えられます。デフォルトは50に設定されています。低くしすぎると同期に支障をきたす場合があります。

  1. daemonをリロードし、Go Ethereumがちゃんと動くか確認する。今後上記のserviceファイルに変更を加えることがあれば、毎回daemonをリロードして変更を適応するようにしてください。
    active (running)と緑で表示されれば OK、Q で閉じる)
sudo systemctl daemon-reload

sudo systemctl start geth

sudo systemctl status geth
  1. サーバー起動時にGo Ethereumが自動的に開始されるようにする。
sudo systemctl enable geth
  1. 同期状態を確認する。(Ctrl + Cで閉じる)
sudo journalctl -fu geth

※全ての取引データがダウンロードされ、同期が完了するまで1日程度かかります。ログにImported new chain segmentが表示されるようになれば同期完了です。同期完了までは次の手順に進まないでください。

バージョン更新

  1. サーバーのバージョンと公式サイトのバージョンを確認し、アップデートの必要があるか確認する。
cd /usr/local/bin

./geth version
  1. 実行中のgethを止め、止まっていることを確認する。
sudo systemctl stop geth

sudo systemctl status geth
  1. 初回設定の2~4を実施する。
  1. gethを起動する。
sudo systemctl start geth
  1. gethがちゃんと動いていることを確認する。
sudo journalctl -fu geth

プルーニング

gethの容量は時間とともに肥大化していきます。1か月に30GBほど増えていきますが殆どが不要なデータなので、定期的にそぎ落とし(プルーニング)が必要です。コンセンサスクライアントと連携しているgethをプルーニングする場合は、一時的に予備サーバーのgethと連携してください。

  1. 実行中のgethを止め、プルーニングを開始する。パソコンの処理性能によりますが3時間くらいかかります。
sudo systemctl stop geth

sudo geth snapshot prune-state --datadir /var/lib/goethereum
  1. ディレクトリ権限をserviceファイルに記載のユーザーに戻し、gethを起動する。
sudo chown -R goeth:goeth /var/lib/goethereum

sudo systemctl start geth
  1. gethが最新ブロックまで問題なく同期するか確認する。
    Imported new chain segmentage=が出なくなるまで)
sudo journalctl -fu geth