見出し画像

Setup Astar zkEVM Permissionless RPC Node

さて、今回は2023年11月の頭にドキュメントがアップされた「Setup Astar zkEVM Permissionless RPC Node」について、私自身で試しに構築をしてみたので解説記事を書きたいと思います。

なお、本記事の対象読者は少なくとも、ICTに関する基本的知識および、Linux のシェルや基本的なオペレーションができるエンジニアを対象としているため、一部詳細な手順を省略していますのでご了承ください。


はじめに

本記事は、Astar zkEVM用のパーミッションレスRPCノードを構築する手順を記載しています。以下のドキュメントの流れにそってノード構築をセットアップしていきます。

この記事を記載時点では、Astar zkEVM はテストネットが展開されており、この手順もそのテストネットである zKatana testnetで動かされる事を想定されたものとなっています。

なお、このドキュメントは 2023/11/27 にドキュメントの一部とテストネット用のセットアップファイルに修正が行われています。
私が試行した際に見つけた不具合をレポートして修正したためです。現時は、この記事や上記ドキュメントの通り実施するとノードを稼働させることが出来ます。

必要なマシンスペック

  • 16GB の RAM

  • 4 Core CPU

  • 100GB ストレージ以上(これは時間の経過とともに増加)

参考までに私が試行した具体的なマシンを以下に紹介します。
Beelink というブランドの MiniPC です。

  • Intel Alder Lake - N100 4Core 

  • 16GB SODIMM DDR4 3200

  • M.2 NVMe SSD 500GB

準備

Ubuntu OS インストール

はじめは、用意したマシンにOSをインストールしなければなりませんので今回は「Ubuntu Server 22.04.3 LTS」をインストールをしています。

Ubuntu のインストールは以下のドキュメントを参考にしています。

マシンにインストールするためのUSBインストールメディアを作成します。その後、そのUSBメディアをマシンにさして起動、OSのインストールを実施するといった流れです。以下はその流れのサマリーです。

1,balenaEtcher をダウンロード
2,Ubuntu ISOイメージをダウンロード
3,balenaEthcer を使ってISOイメージをUSBドライブにセットアップ

4,USBドライブをノードをセットアップするマシンに挿入し起動
5,Ubuntu インストールセットアップを実施

Ubuntu インストールのセットアップ手順は省略します。Minimalインストールで問題ありません。

Ethereum RPC ノードの用意

今回の、Astar zkEVM RPCノードを実行するためには、Ethereum RPC ノードが必要です。ドキュメント内の手順では、パブリックRPCエンドポイント(”https://eth-sepolia-public.unifra.io”)を使う流れで説明されていますが、この場合、レートが制限されているため、ノードが正しく同期されない可能性があります。(実際セットアップしてログをみるとわかりますが、度々エラーが確認されました。)

そのため、今回は Alchemy で今回専用のエンドポイントを作ってそれを指定しています。この作成方法は詳しくは書きませんが、簡単なプロセスを載せておきます。

1,Alckemy アカウント作成
2,Appsメニューから「Create new app」を選択し必要な事項を入力

3,作成されたAppの「API Key」を確認し記録
ここで、"API Key"と"HTTPS"の値を記録しておきます。

docker , docker-compose の用意

今回の Astar zkEVM RPC ノードはコンテナで起動するようになっています。そのためコンテナが起動するための環境の準備が必要です。具体的には、docker, docker-compose が使える状態にします。

docker-compose はdockerのプラグインのもので問題ないですが、スタンドアロンもセットアップしておきます。ドキュメントは以下を参考にします。

・https://www.docker.com/get-started
・https://docs.docker.com/compose/install/

以下にこれらのセットアップのログを記載しますが、あくまで参考としていただき、きちんとドキュメントを参照して準備してください。

$ sudo apt-get update
$ sudo apt -y install build-essential

### docker
$ sudo apt-get -y install ca-certificates curl gnupg
$ sudo install -m 0755 -d /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg

$ sudo echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  tee /etc/apt/sources.list.d/docker.list > /dev/null

$ sudo apt-get update
$ sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

### docker-compose
$ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
$ mkdir -p $DOCKER_CONFIG/cli-plugins
$ curl -SL https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
$ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

$ echo "export PATH=$PATH:$DOCKER_CONFIG/cli-plugins/" > ~/.bashrc
$ . ~/.bashrc
$ docker-compose version
Docker Compose version v2.23.0

Astar zkNode(RPC Node)のセットアップ

Astar zkEVM RPCノードは以下の5つのコンテナが起動します。

zkevm-rpc(zkevm-nodeイメージ)
zkevm-sync(zkevm-nodeイメージ)
zkevm-state-db(PostgreSQLイメージ)
zkevm-pool-db(PostgreSQLイメージ)
zkevm-prover(zkevm-proverイメージ)

前述したとおり、この記事執筆次点では、zKatana testnet で稼働する前提の手順となります。

コンテナのセットアップ

設定用、インストール用、データ用のディレクトリを作成します。
※シェルは一般ユーザーとなっている前提です。

$ sudo mkdir -p /etc/zkevm/{install,config} && sudo chown -R $USER:$USER /etc/zkevm
$ sudo mkdir -p /var/lib/zkevm/{statedb,pooldb} && sudo chown -R $USER:$USER /var/lib/zkevm/

ローカル変数を設定します。(.profileや.bashrcなどに追記します。)

# define installation and config path
ZKEVM_NET=testnet
ZKEVM_DIR=/etc/zkevm/install
ZKEVM_CONFIG_DIR=/etc/zkevm/config

zkatana.tar.gz (セットアップファイルのアーカイブ)をダウンロードして展開します。

$ wget https://shared-assets.astar.network/files/zkevm/zkatana/zkatana.tar.gz
$ tar -xf zkatana.tar.gz -C $ZKEVM_DIR && rm zkatana.tar.gz

env ファイルをコピーし、L1 RPC URL を編集します。
ここで、Alchemy で作成した "HTTPS" の値を指定します。

$ cp $ZKEVM_DIR/$ZKEVM_NET/example.env $ZKEVM_CONFIG_DIR/.env
$ nano $ZKEVM_CONFIG_DIR/.env
# Use your own Sepolia RPC URL here!!
ZKEVM_NODE_ETHERMAN_URL = "ここに Alchemy で作成した"HTTPS"の値を入れる"

次に、ノード構成ファイルを編集します。
ここでも、Alchemy で作成した "HTTPS" の値を指定します。

$ nano $ZKEVM_DIR/$ZKEVM_NET/config/environments/$ZKEVM_NET/node.config.toml
[Etherman]
# Set your own Sepolia RPC URL
URL = "ここに Alchemy で作成した"HTTPS"の値を入れる"

コンテナを起動します。

$ sudo docker compose --env-file $ZKEVM_CONFIG_DIR/.env -f $ZKEVM_DIR/$ZKEVM_NET/docker-compose.yml up -d
[+] Building 0.0s (0/0)                                                                                  docker:default
[+] Running 6/6
 ✔ Network zkevm             Created                                                                                                                                               0.1s
 ✔ Container zkevm-pool-db   Healthy                                                                                                                                               0.0s
 ✔ Container zkevm-state-db  Healthy                                                                                                                                               0.0s
 ✔ Container zkevm-sync      Started                                                                                                                                               0.0s
 ✔ Container zkevm-prover    Started                                                                                                                                               0.0s
 ✔ Container zkevm-sync      Started                                                                                                                                               0.0s
 ✔ Container zkevm-prover    Started                                                                                                                                               0.0s
 ✔ Container zkevm-rpc       Started

全てのコンテナが起動しているかを確認します。以下のコマンドは見やすいように出力していますが、単に "sudo docker ps" と打ってもOkです。 STATUS がすべてUpになっていたら起動しています。

$ sudo docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
NAMES            STATUS                    PORTS
zkevm-rpc        Up 17 minutes             0.0.0.0:8545->8545/tcp, :::8545->8545/tcp, 8123/tcp, 0.0.0.0:9091->9091/tcp, :::9091->9091/tcp
zkevm-prover     Up 17 minutes             0.0.0.0:50061->50061/tcp, :::50061->50061/tcp, 0.0.0.0:50071->50071/tcp, :::50071->50071/tcp
zkevm-sync       Up 17 minutes             8123/tcp, 0.0.0.0:9092->9091/tcp, :::9092->9091/tcp
zkevm-state-db   Up 17 minutes (healthy)   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp
zkevm-pool-db    Up 17 minutes (healthy)   0.0.0.0:5433->5432/tcp, :::5433->5432/tcp

ここで、Astar zkEVM RPCノードとして待ち受けているのは、"zkevm-rpc"コンテナです。8545 ポートで稼働しているのがわかります。

RPC Request によるテスト

以下のコマンドを実行してみて、期待する応答が確認できたら正しく起動しています。

チェーンIDの確認

$ curl -H "Content-Type: application/json" -d '{"id":1, "jsonrpc":"2.0", "method": "eth_chainId", "params": []}' http://localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0x133e40"}

②最後のブロックIDの確認

$ curl -H "Content-Type: application/json" -d '{"id":1, "jsonrpc":"2.0", "method":"eth_getBlockByNumber", "params":["latest", false]}' http://localhost:8545
{"jsonrpc":"2.0","id":1,"result":{"parentHash":"0xf4cf938c5cffdd493bf677831f28b114c36b48d5e09834d091c07005c6fe4461","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0xde29a1693c7fbdb0917d2d1b10eecf877e03cc8a","stateRoot":"0x8ae41066e82e21ca1e4b256338ef39fa8ad3e2f6dc55c4bbcb48f9930340b4a1","transactionsRoot":"0xb00ab663744adc2a96b9ab688b1a460477d2b3d2e95a064a978643203bdb5387","receiptsRoot":"0x0a8ac4b7db33b587f6a30bb15fd9ff38eda8eb6fbdc96ad20e8c2cd3ea779abd","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x0","totalDifficulty":"0x0","size":"0x495","number":"0x25ef","gasLimit":"0x1c9c380","gasUsed":"0x15c4a8","timestamp":"0x6535042b","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","hash":"0xc3425d64a79a51e9407165745f1e0c1671a44bdd57c1fb80cca02d783978e754","transactions":["0xf1fde0ef379af799fd185addadd008ef593997c92d7cbfeec8e1228d61aecbbf"],"uncles":[]}}

(参考)ログ出力

正しく起動していない、curl によるチェックでエラーになる、といった場合はログを確認してみましょう。以下は"zkevm-rpc"コンテナのログを見るコマンドです。

$ sudo docker logs -fn30 zkevm-rpc

(参考)コンテナの停止

$ sudo docker compose --env-file $ZKEVM_CONFIG_DIR/.env -f $ZKEVM_DIR/$ZKEVM_NET/docker-compose.yml down
[+] Running 6/6
 ✔ Container zkevm-rpc       Removed                                                                                                                                                                                                                           0.3s
 ✔ Container zkevm-prover    Removed                                                                                                                                                                                                                          10.4s
 ✔ Container zkevm-sync      Removed                                                                                                                                                                                                                           0.2s
 ✔ Container zkevm-pool-db   Removed                                                                                                                                                                                                                           0.3s
 ✔ Container zkevm-state-db  Removed                                                                                                                                                                                                                           0.5s
 ✔ Network zkevm             Removed


以上です。

テストの際には身近にRPCノードを置いておいた方がよい場合もあるでしょう。その際の助けになれば幸いです。

参考

https://ubuntu.com/download/alternative-downloads


この記事が気に入ったらサポートをしてみませんか?