目次
- 前提知識
- ステーキングの開始手順
- メンテナンス
イーサリアムのPoWからPoSへの移行について
イーサリアムは当初 PoW(プルーフ・オブ・ステーク)という合意形成アルゴリズムを採用していましたが、 2020年12月に PoS(プルーフ・オブ・ステーク)を採用している新たなチェーンが稼働され、現在は2つのチェーンが共存しています。
※PoWや PoSといった、ブロックチェーンの合意形成アルゴリズムの違いについてはこの記事を参考にしてください。

PoWではマイニングを実施するマイナーと呼ばれる人たちによってネットワークの安全性や取引の信憑性が保たれてきましたが、PoSではステーキングを実施するバリデーター(Validator)達によってネットワークが保たれます。イーサリアムのPoSではバリデーターの統率をとるためのビーコンチェーン(Beacon Chain)が実装されましたが、まだバリデーターの仕事を割り振る機能しかないため、電車が乗客なしで試運転してるような状態です。PoWから乗客(取引記録やスマートコントラクト)をPoSに移行することにより、PoWが不要となり完全に廃止されます。
PoSへ移行してPoWを廃止することを「マージ(merge)」と呼びますが、実施時期はまだ明確になっていません。2022年7月ごろと推測されています。
ステーキングをするメリット・デメリット
ステーキングをすることで以下のメリットがあります。
- 約5%(2022年1月現在)の年利報酬を得られる:バリデーターを運用するためにはETHを担保としてデポジットする必要がありますが、担保額に対して約5%の年利報酬を得ることができます。バリデーターがオフラインになると罰金となりますが、半分くらいオンラインであれば年利報酬がプラマイゼロになります。ネットワーク全体でステーキングされているETHの総量によって報酬は変動するため、正確な年利は公式のローンチパッドを参照してください。
- イーサリアムのセキュリティを上げることに貢献する:バリデーターを個人で運用する人が増えれば増えるほどイーサリアムのセキュリティは上がります。単なる投資手段としてステーキングに参加する人には関係のない話かもしれません。
- サーバー知識が増える:自宅のサーバーでステーキングする場合はLinuxなどのサーバー知識が増えます。仕事や副業に活かせるかも。
逆に、ステーキングのデメリットは以下の通りです。
- 32 ETHの単位でしかステーキングできない:自宅のサーバーでステーキングする場合は、32 ETHの単位でしかステーキングができません。32 ETHは2022年1月現在の価格で1,000万円を超えています。バイナンスなどにステーキングを委託する場合は、ETHの保有量が32以下でもステーキングが可能です。
- 担保のETHは引き出せない:自宅のサーバーでステーキングする場合は、担保を引き出すためのコントラクトが実装されるまではデポジットしたETHは動かすことができません。ステーキングを開始した後にやっぱりやめようと思った場合、ペナルティーのない任意退出(Volunatary exit、バリデーターの権限を返上してオフラインになってもいい状態にすること)はできますが、コントラクト実装まではETHが戻ってこないことに変わりありません。担保を引き出すためのコントラクトはマージの後続アップデートで実装される予定です。バイナンスなどにステーキングを委託する場合は、担保のETHと引き換えに貰うBETHをETHに戻すことができます(1ETH ≈ 1 BETH)。
- 資産を失う可能性がある:自宅のサーバーでステーキングした場合は、ETHを引き出すときに必要な24単語のバックアップフレーズを紛失すると絶対に引き出せなくなります。また、複数のサーバーで同じバリデーターを実行するなど、不正とみなされる行為をすると担保のETHの一部を没収(Slashing)され、バリデーターとしての資格を失います。2022年1月現在、過去1年2か月でSlashingを受けたバリデーターは170/290,000(約0.06%)です。この記事の通りに運用していればSlashingされることはまずありません。バイナンスなどにステーキングを委託する場合は、アカウント凍結や会社の倒産によって資産を引き出せなくなるリスクがあります。
- メンテナンスをする必要がある:自宅のサーバーでステーキングする場合はクライアントのアップデート等のメンテナンスをする必要があります。月に30分ほどの労力です。バイナンスなどにステーキングを委託する場合は、メンテナンスの必要はありません。
- 電気代がかかる:自宅のサーバーでステーキングをする場合はパソコンを24時間365日つけっぱなしにするため、月に500円程度の電気代がかかります。ステーキングの報酬に比べると500円は誤差の範囲です。バイナンスなどにステーキングを委託する場合は電気代がかかりません。
気付いた人もいるかもしれませんが、バイナンスなどにステーキングを委託した場合のデメリットは殆どありません。強いて言うならばアカウントの凍結や会社の倒産リスクくらいです。自宅のサーバーでステーキングすることによって年利報酬以外のメリットが得られるようになりますが、資産紛失のリスクは上がります。自宅でサーバーを運用する自信のない人は、ステーキングをバイナンスなどに委託することをお勧めします。手順4の「イーサリアムの合意形成レイヤーの同期」まではETHを担保としてデポジットしなくても実施できるのでお試しでやってみてはいかがでしょうか。また、ETHのデポジットも試してみたい人は、イーサリアムのテスト環境であれば架空のETHを使用して実践できるのでSomer Esatのテスト環境での手順を参考にしてみてください。
自宅サーバーでのステーキング運用は何があっても自己責任でお願いします。このブログ以外にも、英語になりますがSomer Esatの手順や、CoinCashewの手順をリソースとして活用してください。この記事はSomer Esatの手順がベースとなっています。
自宅サーバーでのステーキングに必要なもの
- 最低32 ETH:バリデーター1つあたり32 ETHを担保としてデポジットします。1つのサーバーで複数のバリデーターを運用することが可能です。
- サーバーとしてステーキングに使用するパソコン:
推奨性能
■ PassMarkが5000点以上のCPU(消費電力を考慮して末尾がUのCPUをお勧めします。CPUはRyzenではなくIntelの方がトラブルが少ないです。)
■ 1TB以上のSSD(HDDだと遅すぎます。2TBあると容量のメンテを殆どしなくていいのでお勧めです。)
■ 16GB以上のメモリ - ステーキングに使用しないパソコン:インターネットに繋がっていれば性能はなんでもいいです。自分はWindowsを使いましたが、Macでも大丈夫です。ブラウザでETHをデポジットをしたり、サーバーを遠隔操作するのに使います。
- 秘密鍵生成用のパソコン:必須ではないですが推奨します。バリデーターの秘密鍵はエアギャップされた(インターネットにつながっていない)環境で作成するのが一番安全です。自分は使わなくなった古いノートパソコンにUbuntu Serverを入れて使用しています。
- ご自身のインターネット環境:ルーターの設定をいじるため公共インターネットでは難しいです。
- USBメモリ:SDカードでも代用可能です。Ubuntu Serverのインストールメディアを扱ったりするので4GB以上だとよいです。
- 有線LANケーブル:サーバーは無線LANで運用してもいいですが初期設定で有線LANが必要になります。
ステーキング開始までの大まかな流れ
サーバーで以下のソフトを常時起動させておく必要があります。
- バリデーター:トランザクション(取引)記録係です。マージによってPoWが廃止されるまでは空のブロックを記録し続けます。バリデーターがオンラインであることによって報酬をもらえますが、前提として合意形成レイヤーと実行レイヤーが同期されている必要があります。
- 合意形成レイヤー:バリデーターに仕事を割り振るために使われる出勤簿のようなもので、ビーコンチェーンと呼ばれています。常に最新の情報が同期されるようにします。前提として、実行レイヤーが同期されている必要があります。
- 実行レイヤー:イーサリアムの全トランザクション(取引)データです。最新のトランザクションが常に同期されるようにします。
ステーキング開始までの流れは以下の通りです。
ダウンロードの待ち時間を含めると2日くらいかかります。実際の作業時間は5時間もないと思いますし、慣れるとトータル2時間くらいの作業量です。
- Ubuntu Serverのインストール
自宅サーバーとなるパソコンにUbuntu ServerというOSをインストールします。 - Ubuntu Serverの細かい初期設定
Ubuntu Serverのインターネットの設定など、細かい初期設定をします。 - イーサリアムの実行レイヤーの同期
イーサリアムの全トランザクションをダウンロードし、常に最新のトランザクションが同期されるようにします。400GB以上あるので同期されるまでに1日程度かかります。 - イーサリアムの合意形成レイヤーの同期
バリデーターに仕事を割り振るために使われるビーコンチェーン(出勤簿のようなもの)をダウンロードし、常に同期されるようにします。Checkpoint-syncを使えば同期は数分で終わります。 - ETHのデポジットとウォレット作成
バリデーター1つあたり32 ETHを担保としてデポジットします。デポジット後にバリデーターのウォレットを作成します。 - バリデーターの設定
取引の記録係であるバリデーターを設定し、常に起動されている状態にします。 - バリデーター確認用アプリのインストール
受け取った累計報酬などをスマホアプリで確認できます。バリデーターがオフラインになったら通知してくれます。
ステーキングの開始手順
1. Ubuntu Serverのインストール
Ubuntu Serverのインストール方法はこの記事を参考にしてください。
2. Ubuntu Serverの細かい初期設定
SSH(遠隔操作)やセキュリティの設定をします。
各記事を参考にしてください。
- セキュリティアップデートの自動更新:Ubuntuのセキュリティアップデートが自動で適応されるようにします。
- IPv6の無効化:今のところステーキングにはIPv6が必要ないので無効化します。
- ECNの無効化:念のためECNを無効化しておきます。
- DNSサーバーの変更:グーグルのパブリックDNSを使用します。
- ユーザーの作成:ethereumというユーザーを作成し、sudoというグループに入れてください。今後サーバーで作業をするときはこのユーザーを使用してください。
- ファイアーウォールの設定:サーバーにアクセス可能なポートを制限します。任意のポート番号の他に、30303(Go Ethereum)と9000(Lighthouse)を許可してください。
- 正確な時刻の設定:ミリ秒単位で時刻が合っている必要があるためNTPをインストールします。
- IPアドレスの固定:SSHで他のパソコンからサーバーを遠隔操作する場合は、IPアドレスを固定しないと面倒くさいことになります。
- ルーターのポート開放:厳密にはUbuntu Serverの設定ではありませんが、ルーターのポート転送を設定します。ファイアーウォールの設定で変更した任意のポートと30303(Go Ethereum)と9000(Lighthouse)が固定したIPアドレスに転送されるように設定してください。
- SSHの設定:他のパソコンからサーバーを遠隔操作できるようにします。
- スワップ処理の無効化:スワップ処理によって無駄にCPUとSSDの負荷が増えないようにします。
- (Wifiで運用する場合)Wifiの設定:標準ではWifiが使えないので使えるようにします。
- (AMDのCPUを使用している場合)処理落ちを防ぐためこの記事の設定をしてください。
詳細設定の完了後は念のためサーバーを再起動してください。
sudo reboot
3. イーサリアムの実行レイヤーの同期
イーサリアム全トランザクションをダウンロードし、常に最新のトランザクションが同期されるようにします。400GB以上あるのでダウンロードに1日程度かかります。「Go Ethereum」というクライアントを使用します。
- Go EthereumをPPA(非公式のApp Storeのようなもの)経由でインストールできるようにする。
sudo add-apt-repository -y ppa:ethereum/ethereum
- Go Ethereumをインストールする。
sudo apt update && sudo apt install ethereum -y
- Go Ethereum実行用のユーザー
goeth
を作成する。
sudo useradd --no-create-home --shell /bin/false goeth
- ノードを保存するディレクトリを作成し、ユーザー
goeth
にアクセス許可を与える。
sudo mkdir -p /var/lib/goethereum
sudo chown -R goeth:goeth /var/lib/goethereum
- OS起動時にGo Ethereumが自動起動されるための設定ファイルを作成する。
sudo nano /etc/systemd/system/geth.service
- 以下を入力し、保存する。
[Unit]
Description=Ethereum go client
After=network-online.target
Wants=network-online.target
[Service]
User=goeth
Group=goeth
Type=simple
Restart=always
RestartSec=5
ExecStart=geth --http --datadir /var/lib/goethereum --syncmode=snap
[Install]
WantedBy=default.target
※実行レイヤーと合意形成レイヤーを別々のサーバーで運用する場合は、実行レイヤーのExecStart=
のパラメータに--http --http.addr 0.0.0.0 --http.port 8545
を追加し、ポート8545を開放してください。
※同期が完了したらExecStart=
のパラメータに--maxpeers 10
を追加すればデータの送受信を抑えられます。
daemon
をリロードし、Go Ethereumがちゃんと動くか確認する。
(active (running)
と緑で表示されれば OK、Q で閉じる)
sudo systemctl daemon-reload
sudo systemctl start geth
sudo systemctl status geth
- OS起動時にGo Ethereumが自動起動されるようにする。
sudo systemctl enable geth
- 同期状態を確認する。(Ctrl + Cで閉じる)
sudo journalctl -fu geth
※全ての取引データがダウンロードされ、同期が完了するまで1日程度かかります。ログにImported new chain segment
が表示されるようになれば同期完了です。同期完了までは次の手順に進まないでください。
※急いでいる場合は、gethの同期を待たずにInfuraを併用して次の手順に進むのもありです。 マージ後はInfuraのAPIに頼らず、各自で実行レイヤーを同期する必要があります。Infuraはマージ後に必要なEngine APIを提供していないためです。
※自分は同期中にSSDがフリーズすることがありましたがAPST(省電力設定)を無効化したら発生しなくなりました。フリーズすることがあればお試しください。
4. イーサリアムの合意形成レイヤーの同期
バリデーターに仕事を割り振るために使われるビーコンチェーンをダウンロードし、常に同期されるようにします。この手順ではビーコンチェーンとバリデーターに「Lighthouse」というクライアントを使用します。Checkpoint syncを使用すれば同期は数分で終わりますが、使用しなければ5時間以上かかります。
- Lighthouseをインストールするのに必要なパッケージをインストールする。
sudo apt install curl
- Lighthouseのコンパイルをダウンロードする。最新バージョンのURLはLighthouseの公式GitHubから取得してください。
cd ~
curl -LO https://github.com/sigp/lighthouse/releases/download/vX.X.X/lighthouse-vX.X.X-x86_64-unknown-linux-gnu.tar.gz
- ダウンロードしたファイルを解凍する。
tar xvf lighthouse-vX.X.X-x86_64-unknown-linux-gnu.tar.gz
- 解凍したLighthouseのバイナリをコピーする。
sudo cp lighthouse /usr/local/bin
- コピーしたファイルのバージョンが合っていることを確認する。
cd /usr/local/bin
./lighthouse --version
- 不要になったファイルを削除する。
cd ~
sudo rm lighthouse
sudo rm lighthouse-vX.X.X-x86_64-unknown-linux-gnu.tar.gz
- ビーコンチェーン実行用のユーザーを作成する。
sudo useradd --no-create-home --shell /bin/false lighthousebeacon
- ビーコンチェーンを保存するディレクトリを作成し、ユーザー
lighthousebeacon
に権限を付与する。
sudo mkdir -p /var/lib/lighthouse/beacon
sudo chown -R lighthousebeacon:lighthousebeacon /var/lib/lighthouse/beacon
- OS起動時にビーコンチェーンが起動されるための設定ファイルを作成する。
sudo nano /etc/systemd/system/lighthousebeacon.service
- 以下を入力して、保存する。
[Unit]
Description=Lighthouse Beacon Node
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=lighthousebeacon
Group=lighthousebeacon
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/lighthouse bn --network mainnet --staking --disable-upnp --datadir /var/lib/lighthouse --eth1-endpoints http://127.0.0.1:8545
[Install]
WantedBy=multi-user.target
※参照先の実行レイヤーはスペースなしのカンマで複数指定することができます(--eth1-endpoints
)。複数ある場合はまず1つ目が参照され、1つ目が最新の状態でなければ2つ目が参照されます。
※別のサーバーで動かしている実行レイヤーを参照するときは、そのサーバーのIPアドレスとポート番号8545を指定します(例:http://192.168.0.88:8545
)。
※Checkpoint syncを使用すれば半日以上かかる同期を数分で終わらせることができます。Infuraにログインし、「CREATE NEW PROJECT」からETH2のプロジェクトを作成し、プロジェクトのENDPOINT(HTTP)をコピーし、ExecStart=
のパラメータに追加してください(例:--checkpoint-sync-url https://26FDTweR5...
)。
systemd
をリロードし、ビーコンチェーンがちゃんと動くか確認する。
(active (running)
と緑で表示されれば OK、Q で閉じる)
sudo systemctl daemon-reload
sudo systemctl start lighthousebeacon
sudo systemctl status lighthousebeacon
- OS起動時にビーコンチェーンが起動されるようにする。
sudo systemctl enable lighthousebeacon
- 同期状態を確認する。(Ctrl + Cで閉じる)
sudo journalctl -fu lighthousebeacon
※Checkpoint syncをする場合はログでINFO Starting checkpoint sync
が表示されると数十秒~数分間ログに変化がない状態になります。そのうちLoaded checkpoint block and state
が表示され、Info Synced
が表示されれば同期が完了しています。同期が完了したらExecStart=
に追加したCheckpoint sync用のパラメータを抜いておいてください(残しても支障はないですが次回以降起動時に「不要ですよ」というログが表示されます)。
※Checkpoint syncをしない場合は、同期が完了するまで5時間以上かかります。ログにInfo Synced
が表示されるようになれば同期完了です。ビーコンチェーンに関しては同期完了を待たずに次の手順に進んで問題ないです。
5. ETHをデポジットしてウォレットを作成する
スバリデーター1つあたり32 ETHを担保としてデポジットコントラクトに送金します。その後、バリデーターのウォレットを作成します。
※以下の手順ではステーキング用のサーバーで鍵を作成していますが、可能であれば別のエアギャップしたパソコンで鍵を作成し、USB経由でステーキング用のサーバーに鍵をコピーし、鍵を作成したパソコンはインターネットに繋ぐことなくOSの初期化をすることを推奨します。
- 必要なパッケージをインストールする。
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip git -y
- 鍵生成用のリポジトリをクローンしてインストールする。
cd ~
git clone https://github.com/ethereum/eth2.0-deposit-cli.git
cd eth2.0-deposit-cli
sudo ./deposit.sh install
- 起動しているサービスを終了してサーバーの電源を落とし、インターネットの接続を完全に切り、再起動する。
sudo systemctl stop lighthousebeacon
sudo systemctl stop geth
sudo shutdown -h now
- 運用するバリーデーターの数を指定し(例:
--num_validators 2
)、デポジット用のソフトを実行する。
cd ~/eth2.0-deposit-cli
./deposit.sh new-mnemonic --num_validators バリデーター数 --chain mainnet --mnemonic_language english
- 案内に従って
keystore
にパスワードを設定する。24単語のバックアップフレーズは紙にメモし、安全な場所に保管してください!くれぐれもインターネットに接続されている環境に保存しないでください!!バックアップフレーズを紛失したり、他人に盗まれたらETHを失ったと思ってください!!!(バックアップフレーズはkeystore
ファイルを復元する際やETHを引き出す際に使用します。)
動物のサイの絵が表示されたら完了です。~/eth2.0-deposit-cli/validator_keys
に2種類のファイルが作成されます。deposit_data
⇒ 担保のETHをデポジットする際に使用するファイルで、複数のバリデーターを運用する場合であっても1つだけ作成されます。keystore
⇒ バリデーターのウォレットを作成するときに使用するファイルで、複数のバリデーターを運用する場合はバリデーターの数だけ作成されます。
正式なファイル名にはdeposit_data-1615115954.json
のように作成時の時刻が含まれているため、以下のコマンドで確認してください。
ls ~/eth2.0-deposit-cli/validator_keys
- USBかSFTPを使用して
deposit_data
をWindowsに送る。
以下はSFTPを使った場合のWindowsで実行するコマンドです。
sudo sftp -i SSH用の秘密鍵のディレクトリ -P ポート番号 サーバーユーザ名@サーバーIP
# 例
sudo sftp -i /home/myuser/key -P 1234 ethereum@192.168.0.33
get ~/eth2.0-deposit-cli/validator_keys/deposit_data-1615115954.json deposit_data.json
- Windowsでイーサリアムの公式ローンチパッドを開き、案内に従い
deposit_data
をアップロードして32 ETHをデポジットする。デポジット後はビーコンチェーンにデポジットが認可されるまで10時間ほどかかるため、それまでに手順6の「バリデーターを設定する」を完了させてバリデーターをオンラインにしておいてください。
- ビーコンチェーンを停止し(ディレクトリ権限を一時的に剥奪するため)、ログイン中のユーザー
ethereum
にバリデーターのウォレットを保存するディレクトリの権限を与える。
sudo systemctl stop lighthousebeacon
sudo chown -R ethereum:ethereum /var/lib/lighthouse
- バリデーターのウォレットを作成する。
cd /usr/local/bin
lighthouse account validator import --network mainnet --directory $HOME/eth2.0-deposit-cli/validator_keys --datadir /var/lib/lighthouse
- バリデーターのウォレットが作成されていることを確認する。
lighthouse account_manager validator list --network mainnet --datadir /var/lib/lighthouse
- ウォレットのディレクトリの権限をユーザー
ethereum
から剥奪し、ビーコンチェーンを再開する。
sudo chown root:root /var/lib/lighthouse
sudo chown -R lighthousebeacon:lighthousebeacon /var/lib/lighthouse/beacon
sudo systemctl start lighthousebeacon
6. バリデーターを設定する
取引の記録係であるバリデーターを設定し、常に起動されている状態にします。
- バリデーター実行用のユーザーを作成する。
sudo useradd --no-create-home --shell /bin/false lighthousevalidator
- ユーザー
lighthousevalidator
にディレクトリ権限を与える。
sudo chown -R lighthousevalidator:lighthousevalidator /var/lib/lighthouse/validators
- OS起動時にバリデーターが実行されるための設定ファイルを作成する。
sudo nano /etc/systemd/system/lighthousevalidator.service
- 以下を入力し、保存する。
[Unit]
Description=Lighthouse Validator
Wants=network-online.target
After=network-online.target
BindsTo=lighthousebeacon.service
[Service]
Type=simple
User=lighthousevalidator
Group=lighthousevalidator
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/lighthouse vc --network mainnet --datadir /var/lib/lighthouse
[Install]
WantedBy=multi-user.target
systemd
をリロードし、バリデーターがちゃんと動くか確認する。(active (running)
と緑で表示されれば OK、Q で閉じる)
sudo systemctl daemon-reload
sudo systemctl start lighthousevalidator
sudo systemctl status lighthousevalidator
- OS起動時にバリデーターが実行されるようにする。
sudo systemctl enable lighthousevalidator
- バリデーターのログを確認する。(Ctrl + Cで閉じる)
sudo journalctl -fu lighthousevalidator
※ビーコンチェーンの同期が完了しないとバリデーターは仕事をしてくれません。
7. バリデーターの状況確認用のアプリをスマホにインストールする
受け取った累計報酬などをアプリで確認できます。バリデーターがオフラインになったら通知してくれます。
- iPhoneの場合はApp Storeから、Androidの場合はPlay StoreからBeaconchain Dashboardというアプリをダウンロードします。
- アプリを開き、Validatorsタブから自身のバリデーターを検索し、お気に入りに登録する。
- Preferencesタブで受け取りたい通知の種類を選択する。
- 累計報酬などはDashboardタブで確認できます。
動作確認するときのコマンド
geth、lighthousebeacon、lighthousevalidatorのログを確認する。
sudo journalctl -fu geth
sudo journalctl -fu lighthousebeacon
sudo journalctl -fu lighthousevalidator
# 指定した時刻以降のログを出力(現在時刻はdateで確認)
sudo journalctl -u geth --since="2021-02-23 12:30:00"
# ログの容量を確認
sudo journalctl --disk-usage
# 3日以上経ったログを削除
sudo journalctl --vacuum-time=3d
時刻の同期(NTP)を確認する。
ntpq -pn -c rv
CPU、メモリの使用量を確認する。
htop
NVMeの温度を確認する。
sudo nvme smart-log /dev/nvme0n1
SSD容量を確認する。
df -h
データ通信料を確認する。
# RXが受信量、TXが送信量(OS起動してからの累計)
ifconfig
# OS起動日数
uptime
クライアントのアップデート方法
geth(実行レイヤー)のアップデート方法
- アップデートの必要があるか確認する。ppaの
ethereum
(-unstable
が付いてない方)と同じバージョンならアップデートの必要なし。
geth version
- 実行中のgethを止める。
sudo systemctl stop geth
- gethが止まっているか確認する。
sudo systemctl status geth
- gethをアップデートし、アップグレード後のバージョンを確認する。
sudo apt update && sudo apt upgrade -y
geth version
- gethを起動する。
sudo systemctl start geth
- gethがちゃんと動いていることを確認する。
sudo journalctl -fu geth
Lighthouse(合意形成レイヤー)のアップデート方法
- 更新があるかLighthouseの公式GitHubとバージョンを比較します。
cd /usr/local/bin
./lighthouse --version
- ビーコンチェーンとバリデーターを停止する。
sudo systemctl stop lighthousevalidator
sudo systemctl stop lighthousebeacon
- 導入手順4「イーサリアムの合意形成レイヤーの同期」の2~6を実施します。
- ビーコンチェーンとバリデーターを起動する。
sudo systemctl daemon-reload
sudo systemctl start lighthousebeacon
sudo systemctl start lighthousevalidator
- ビーコンチェーンとバリデーターがちゃんと動いていることを確認する。
sudo journalctl -fu lighthousebeacon
sudo journalctl -fu lighthousevalidator
バリデーターの数を増やす方法
バリデーターの数を増やすときは、セキュリティを考慮してサーバーとは別のエアギャップしたパソコンを使用します。エアギャップしたパソコンでバリデーターの鍵を作成し、作成した鍵をUSB経由でステーキング用のサーバーにコピーし、ステーキング用のサーバーでウォレットを再度作成します。
将来的にもっとバリデーターを増やす想定があるのであれば、将来使うであろう鍵も生成してUSBに保管しておくと時短になります。
- エアギャップするパソコンにUbuntu Serverを新しくインストールし、バリデーターの鍵を作成するために必要なパッケージをインストールしていきます。(この時点ではインターネットに繋いでいます)
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip git -y
cd ~
git clone https://github.com/ethereum/eth2.0-deposit-cli.git
cd ~/eth2.0-deposit-cli
sudo ./deposit.sh install
- インターネット接続を完全に切断し(有線LANケーブルを抜く)、パソコンを再起動します。
sudo reboot
- 初めてバリデーターを設定したときにメモった24単語のバックアップフレーズを使用し、追加するバリデーター1つあたり
deposit_data
とkeystore
を1つずつ作成します。複数のバリデーターの鍵を一度に作ることができますが、ローンチパッドでETHをデポジットする時はどのアドレスにデポジットしたらいいのか迷いやすいため1つずつ作ることをお勧めします。
cd ~/eth2.0-deposit-cli
./deposit.sh existing-mnemonic
- 作成した
deposit_data
とkeystore
をUSB経由でステーキング用のサーバーにコピーします。USBの操作方法はこの記事を参考にしてください。
- ETHのデポジットに使用するパソコン(自分はWindowsにインストールしたUbuntu)を使い、ステーキング用のサーバーから
deposit_data
をSFTPでダウンロードします。
sudo sftp -i SSH用の秘密鍵のディレクトリ -P ポート番号 サーバーユーザ名@サーバーIP
# 例
sudo sftp -i /home/myuser/key -P 1234 ethereum@192.168.0.33
get /home/deposit_data….json deposit_data.json
- ETHのデポジットに使用するパソコンのブラウザで公式ローンチパッドを開き、
deposit_data
をアップロードして追加分のETHをデポジットします。
- ステーキング用のサーバーで、運用する全てのバリデーターの
keystore
を~/eth2.0-deposit-cli/validator_keys
ディレクトリに入れます。
- 新しいバリデーターのウォレットを作る前に、実行中のビーコンチェーンとバリデーターを止めます。
sudo systemctl stop lighthousevalidator
sudo systemctl status lighthousevalidator
sudo systemctl stop lighthousebeacon
sudo systemctl status lighthousebeacon
- 既存のウォレットを削除します。
sudo rm -r /var/lib/lighthouse/validators
- 新しいバリデーターのウォレットを作成します。パスワードは
keystore
ごとに入力します。
cd ~/lighthouse
sudo lighthouse account validator import --network mainnet --directory $HOME/eth2.0-deposit-cli/validator_keys --datadir /var/lib/lighthouse
- ウォレットのディレクトリ権限をユーザー
lighthousevalidator
に付与する。
sudo chown -R lighthousevalidator:lighthousevalidator /var/lib/lighthouse/validators
- ビーコンチェーンとバリデーターを起動する。
sudo systemctl start lighthousebeacon
sudo systemctl status lighthousebeacon
sudo systemctl start lighthousevalidator
sudo systemctl status lighthousevalidator
- バリデーターが正常に動いていることを確認する。
sudo lighthouse account_manager validator list --network mainnet --datadir /var/lib/lighthouse
sudo journalctl -fu lighthousevalidator
- 近い将来に追加の鍵を生成しないのであれば、鍵の生成に使用したパソコンはインターネットに再度繋げることなくUbuntu Serverを初期化してください。
バリデーターを別のサーバーに移動する方法
バリデーターを別のサーバーに移動する流れは初めてステーキングを開始する流れとほぼ一緒ですが、バリデーターのkeystore
はUSB経由で古いサーバーから新しいサーバーに移動します。同じ鍵を使用しているバリデーターを2つのサーバーで同時に起動するとslashing(ETHの一部を没収されバリデータの資格を失う)されるので絶対にしないでください!!
- 手順4「イーサリアムの合意形成レイヤーの同期」まで新しいサーバーで実施します。
※ビーコンチェーンの同期は古いサーバーへcheckpoint syncをすると数分で終わります。
(1) 古いサーバーにアクセスできるようにするため、古いサーバーでポート開放をする。
sudo ufw allow 5052
(2) 古いサーバーのビーコンチェーンのExecStartにパラメータを追加する。
--http --http-address 0.0.0.0
(3) 新しいサーバーのビーコンチェーンのExecStart=
にパラメータを追加する。
--checkpoint-sync-url 古いサーバーのローカルIP:5052
# 例
--checkpoint-sync-url http://192.168.0.99:5052
(4) 新しいサーバーのビーコンチェーンを起動してログにSynced
が表示されるまで待機する。
sudo journalctl -fu lighthousebeacon
(5) 同期が完了したら新旧のサーバーのExecStartに追加したパラメータを削除する。
(6) 古いサーバーのポートも閉じておく。
sudo ufw deny 5052
- 新しいサーバーに
~/eth2.0-deposit-cli/validator_keys
ディレクトリを作成し、USB経由でkeystore
を古いサーバーからこのディレクトリにコピーします。 - 同じバリデーターを2つのサーバーで同時に起動しないため、古いサーバーは初期化してデータを全て削除してください。バリデーターが数十分間オフラインになると思いますが、slashingされるよりはましです。次の手順は急ぎ過ぎず、安全のため少なくとも12分以上(2 epoch以上)はバリデーターをオフラインにしてください。
- 手順5「ETHをデポジットしてウォレットを作成する」の8番「ビーコンチェーンを停止し…」から再開し、最後まで実施してください。
SSDの容量を回復する方法(Go Ethereumのプルーニング)
イーサリアムの実行レイヤーは時間とともに肥大化していきます。1か月に30GBほど増えていきますが殆どが不要なデータなので、定期的にそぎ落とし(プルーニング)が必要です。プルーニング中のgethは使えなくなるので、最新ブロック情報を予備サーバーに設定したgethから取得するようにしてください。
- プルーニングをするgethを止めても、ビーコンチェーンが予備サーバーのgethから必要な情報を取得していることを確認する。(
Fetched data from fallback
と表示されればOK)
sudo systemctl stop geth
sudo journalctl -fu lighthousebeacon
- gethのプルーニングを開始する。(パソコンの処理性能によりますが3時間くらいかかります)
sudo geth snapshot prune-state --datadir /var/lib/goethereum
- ディレクトリ権限をユーザー
goeth
に戻し、gethを起動する。
sudo chown -R goeth:goeth /var/lib/goethereum
sudo systemctl start geth
- gethが最新ブロックまで問題なく同期するか確認する。
(Imported new chain segment
でage=
が出なくなるまで)
sudo journalctl -fu geth