アルゴリズムとかオーダーとか

仕事で勉強したことなどをまとめてます

Windows 11 + Prysm + Geth でPraterテストネットと同期する

今更ながらの記事になりますが、今回はWindows 11上でPrysmとGethを利用してBeacon Chainのテストネットである、Praterテストネットの環境を構築する手順を紹介する。

今回記事に整理する経緯としては、2022/06/09の01:00ごろに無事にRopstenがThe Mergeに移行した。次はGoerliがThe Mergeに移行される予定となっている。
多分、今動いているPrater+Goerliの環境がThe Mergeに移行されると思うので、Prater + Goerliの環境構築を今一度まとめてみる。
なお、今回はWSL2は用いずに、純粋なWindows上でGethとPrysmを動かす手順を整理している。

環境構築手順はPrysmの公式ページを参考にしている。
docs.prylabs.network

バージョン情報

GethとPrysmはそれぞれ以下のバージョンを用いた
Geth: 1.10.18-stable
Prysm: v2.1.2

PowerShellのインストール

Windows 11だと、Windows PowerShellがデフォルトでインストールされてるのでもしかしたら必要ないかもしれない。
ただ、自分はPowerShellで環境構築を実施したので、インストールすることをお勧めする。
ちなみに、コマンドプロンプトだと、`mkdir`などのlinux likeなコマンドが使えないので、Windows PowerShellもしくは、PowerShellが必須となるはず。

PowerShellは以下のページからインストール可能。
docs.microsoft.com

Gethのインストール

その時点での最新版リリースのgethをインストールしたらよい。
以下のページからインストーラーをダウンロードして、インストールする。

geth.ethereum.org

Goerliテストネットと同期する

gethを使ってGoerliテストネットと同期する。今回自分はJドライブに専用のSSDを割り当てたので、datadirを指定して実行した。
具体的には以下のコマンドを実行する。

geth.exe --goerli --datadir="J:/goerli/" --http

同期状況の確認

Windowsではconsoleに接続するためのsocket(? windowsでもソケットって言っていいのかな?)を指定しないとattachできないことに注意。
Gethの同期状況は以下のコマンドで確認できる。

geth.exe attach ipc:\\.\pipe\geth.ipc
> eth.syncing

Prysmをインストールする

Prysmの公式からインストールと実行するためのbatファイルが提供されているので、それを用いてインストールを行う。
公式にある通り、curlでbatファイルを取得する。

mkdir prysm && cd prysm
curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.bat --output prysm.bat

次にPowerShellANSIシーケンスを有効にするためにレジストリに設定を追加する。こちらも公式にある通り、以下のコマンドを実行する。

reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1

ANSIシーケンスを有効にすることで、Prysmのログ出力が正しく表示されるようになる。詳しくは以下を参考。
www.gavo.t.u-tokyo.ac.jp


# genesis.sszをダウンロード
Praterテストネットのgenesis.sszをダウンロードする。公式ページには記載されていないが、以下のgithubで公開されているものを利用すると良い。
github.com

# Praterテストネットと同期する
Prysmを実行してPraterテストネットと同期する。
先ほどダウンロードしたbatファイルとgenesis.sszを利用する。なお、Prysmのインストールはbatファイルを実行したときに自動的に行われる。
公式にある通り、以下のコマンドを実行する。
※自分の環境ではprysm.batを指定するときに”.\prysm.bat"と指定する必要があった。

./prysm.bat beacon-chain --http-web3provider=http://localhost:8545 --prater --genesis-state=genesis.ssz

以上でGeth + Prysmを用いてPraterテストネットの同期が始まる。なお、同期には結構時間がかかる。自分の環境ではおおよそ60hぐらいと表示された。まだ同期が終わっていないので正確な時間は不明。