ローカル Validium ノードのセットアップ
Validium
このクイックスタートガイドでは、ローカルマシン上にCDK Validiumを設定し、以下のコンポーネントを設定して実行する方法を示します:
- zkEVM データベース: データノード、イベント、エクスプローラーL1およびL2、プール、状態、ブリッジサービス
- zkEVM ノードコンポーネント: アグリゲーター、アプルーブサービス、シーケンサーとシーケンスセンダー、シンクロナイザー
- L1 network (mock)
- プローバー
- エクスプローラー L1, L2
- JSON RPC エクスプローラー
- L2 ガスプライサー
- DAC: データ可用性サービス、DACセットアップ委員会
- zkEVMブリッジサービスとUI
このドキュメンテーションでは、標準的なデプロイメントを説明しています。 設定ファイルを編集して独自の設定を実装します。
前提条件
ハードウェア要件
- Linux ベース OS OS (e.g., Ubuntu Server 22.04 LTS).
- 少なくとも 16GB RAM と 4 コア CPU.
- AMD64 アーキテクチャシステム.
CDKはARMベースのMacをサポートしていません。
ソフトウェア要件
現在の環境のチュートリアルでは、あらかじめマシンにgo
とdocker
がインストールさ れている必要があります。これらがインストールされていない場合は、以下のリンクをご覧ください:
このドキュメントでは、docker compose v2を使用しています。
make をインストール
Ubuntuでmakeをインストール:
sudo apt install make
リポジトリのクローン
以下のコマンドを実行:
git clone https://github.com/Snapchain/zkValidium-quickstart.git
cd zkValidium-quickstart
例をコピーして.env
ファイルを作成:
cp .env.example .env
ローカルで Validium を起動
Docker Hubから必要なDockerイメージをプル:
sudo docker compose pull
イメージをプルした後、ローカルのCDK validiumを起動:
sudo make run
すべてのサービスが正常に動作していることを確認するため、各コンテナのステータスを確認:
sudo docker compose ps
このような出力が表示されます:
コンテナのステータス詳細
$ sudo docker ps --format "table {{.Names}}\t{{.Command}}\t{{.Status}}\t{{.Ports}}"
NAMES COMMAND STATUS PORTS
explorer-sig-provider "./sig-provider-serv…" Up 11 minutes 0.0.0.0:8151->8050/tcp, :::8151->8050/tcp
visualizer-proxy "/docker-entrypoint.…" Up 11 minutes 80/tcp, 0.0.0.0:8083->8081/tcp, :::8083->8081/tcp
explorer-visualizer "./visualizer-server" Up 11 minutes 0.0.0.0:8152->8050/tcp, :::8152->8050/tcp
explorer-smart-contract-verifier "./smart-contract-ve…" Up 11 minutes 0.0.0.0:8150->8050/tcp, :::8150->8050/tcp
explorer-proxy-l2 "/docker-entrypoint.…" Up 11 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:8084->8080/tcp, :::8084->8080/tcp
explorer-stats-l2 "./stats-server" Up 11 minutes 0.0.0.0:8154->8050/tcp, :::8154->8050/tcp
explorer-stats-db-l2 "docker-entrypoint.s…" Up 11 minutes 0.0.0.0:7434->5432/tcp, :::7434->5432/tcp
explorer-frontend-l2 "./entrypoint.sh nod…" Up 11 minutes 0.0.0.0:3001->3000/tcp, :::3001->3000/tcp
explorer-backend-l2 "sh -c 'bin/blocksco…" Up 11 minutes 0.0.0.0:4001->4000/tcp, :::4001->4000/tcp
zkevm-explorer-json-rpc "/bin/sh -c '/app/zk…" Up 11 minutes 0.0.0.0:8124->8124/tcp, :::8124->8124/tcp, 8123/tcp, 0.0.0.0:8134->8134/tcp, :::8134->8134/tcp
explorer-backend-l2-db "docker-entrypoint.s…" Up 11 minutes 0.0.0.0:5437->5432/tcp, :::5437->5432/tcp
explorer-proxy-l1 "/docker-entrypoint.…" Up 11 minutes 0.0.0.0:81->80/tcp, :::81->80/tcp, 0.0.0.0:8082->8080/tcp, :::8082->8080/tcp
explorer-stats-l1 "./stats-server" Up 12 minutes 0.0.0.0:8153->8050/tcp, :::8153->8050/tcp
explorer-stats-db-l1 "docker-entrypoint.s…" Up 12 minutes 0.0.0.0:7433->5432/tcp, :::7433->5432/tcp
explorer-frontend-l1 "./entrypoint.sh nod…" Up 12 minutes 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp
explorer-backend-l1 "sh -c 'bin/blocksco…" Up 12 minutes 0.0.0.0:4000->4000/tcp, :::4000->4000/tcp
explorer-backend-l1-db "docker-entrypoint.s…" Up 12 minutes 0.0.0.0:5436->5432/tcp, :::5436->5432/tcp
zkevm-bridge-ui "/bin/sh /app/script…" Up 12 minutes 0.0.0.0:8088->80/tcp, :::8088->80/tcp
zkevm-bridge-service "/bin/sh -c '/app/zk…" Up 12 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp
zkevm-bridge-db "docker-entrypoint.s…" Up 12 minutes 5438/tcp, 0.0.0.0:5438->5432/tcp, :::5438->5432/tcp
zkevm-json-rpc "/bin/sh -c '/app/zk…" Up 12 minutes 0.0.0.0:8123->8123/tcp, :::8123->8123/tcp, 0.0.0.0:8133->8133/tcp, :::8133->8133/tcp, 0.0.0.0:9091->9091/tcp, :::9091->9091/tcp
zkevm-aggregator "/bin/sh -c '/app/zk…" Up 12 minutes 8123/tcp, 0.0.0.0:50081->50081/tcp, :::50081->50081/tcp, 0.0.0.0:9093->9091/tcp, :::9093->9091/tcp
zkevm-l2gaspricer "/bin/sh -c '/app/zk…" Up 12 minutes 8123/tcp
zkevm-sequence-sender "/bin/sh -c '/app/zk…" Up 12 minutes 8123/tcp
zkevm-sequencer "/bin/sh -c '/app/zk…" Up 12 minutes 0.0.0.0:6060->6060/tcp, :::6060->6060/tcp, 0.0.0.0:6900->6900/tcp, :::6900->6900/tcp, 8123/tcp, 0.0.0.0:9092->9091/tcp, :::9092->9091/tcp
zkevm-eth-tx-manager "/bin/sh -c '/app/zk…" Up 12 minutes 8123/tcp, 0.0.0.0:9094->9091/tcp, :::9094->9091/tcp
zkevm-sync "/bin/sh -c '/app/zk…" Up 12 minutes 8123/tcp, 0.0.0.0:9095->9091/tcp, :::9095->9091/tcp
zkevm-prover "zkProver -c /usr/sr…" Up 12 minutes 0.0.0.0:50061->50061/tcp, :::50061->50061/tcp, 0.0.0.0:50071->50071/tcp, :::50071->50071/tcp
zkevm-data-availability "/bin/sh -c '/app/cd…" Up 12 minutes 0.0.0.0:8444->8444/tcp, :::8444->8444/tcp
zkevm-data-node-db "docker-entrypoint.s…" Up 12 minutes (healthy) 0.0.0.0:5444->5432/tcp, :::5444->5432/tcp
zkevm-mock-l1-network "geth --http --http.…" Up 12 minutes 0.0.0.0:8545-8546->8545-8546/tcp, :::8545-8546->8545-8546/tcp, 30303/tcp, 30303/udp
zkevm-event-db "docker-entrypoint.s…" Up 12 minutes 0.0.0.0:5435->5432/tcp, :::5435->5432/tcp
zkevm-pool-db "docker-entrypoint.s…" Up 12 minutes 0.0.0.0:5433->5432/tcp, :::5433->5432/tcp
zkevm-state-db "docker-entrypoint.s…" Up 12 minutes 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp
サービスが動作していない場合(つまり、 Exit 1 の状態にある場合)、ログを使用してさらに調査:
sudo docker compose logs <container_name>
dockerコマンドの出力で <container_name> を見つけます。
便利なコマンド
CDK Validiumを停止するには:
sudo make stop
すべてのサービスを再起動するには:
sudo make restart
このローカルデプロイメントはL1 Gethインスタンスで動作します。
Validium をテスト
localhost に移動してブロックエクスプローラが動作していることを確認します。
次のようなページが表示されます:
Web3ウォレットにネットワークを追加
MetaMaskの手順に従って、ネットワークを手動で設定します。
- チェーンIDを 1001 に設定します
- 通貨記号は何でも良いですが、デフォルトでは POL を使用します
- RPCノードとブロックエクスプローラのコンテナはそれぞれポート 8123 と 80 で見つけることができます
新しいネットワークに切り替えます:
- テスト資金が入ったアカウントが利用可能で、プライベートキーは
0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
です - このプライベートキーに関連付けられたアドレスには、絶対に実際の資産を送信しないでください
アカウントをMetaMaskにインポートします。残高は100000 POLと表示されます:
トークンを別のアカウントに送信します:
トランザクションを確認した後、更新された残高を確認します:
MetaMaskの エクスプローラーで表示(View on explorer) をクリックすることで、トランザクションの詳細を表示することもできます:
取引が詰まる問題に遭遇した場合、それはおそらくnonce設定が間違っているためです。
この問題を解決するためには、以下の手順を実行します:
- MetaMaskを開き、アカウントに移動します
- 「設定」をクリックします
- 設定メニューで「高度な設定」を選択します
- 「アクティビティとナンスデータを消去」のオプションを探し、それをクリックします
- 多くの場合、これによりアカウントに関連付けられたnonceデータがリセットされ、取引関連の問題が解決します
ブリッジをテスト
CDKには、L1とL2 Validium 間で資金を移動できるネイティブブリッジとUIがあります。
L1 to L2
MetaMaskにL1 RPCを追加します:
L1ネットワークに切り替えると、以前にインポートしたアカウントがL1チェーン上で約999 POLを持っていることがわかります。
localhost:8088 に移動して、ブリッジUIを確認します。
Connect a wallet > MetaMask をクリックします。
このビューは2回目以降は表示されません。
以前にインポートしたアカウント0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
を選択します。接続が完了すると、このようなページが表示されます。
ブリッジする金額(例:5)を入力し、 Continue をクリックします。あなたが何をしているかを理解したことを確認した後、 ブリッジの確認 ページが表示されます。
Bridge をクリックし、MetaMaskのポップアップでトランザクションを承認します:
ブリッジが完了すると、 アクティビティ ページが表示されます。
L2 から L1 へ
MetaMaskのネットワークをあなたのValidiumチェーンに切り替え、localhost:8088に戻ります。
更新されたL1とL2の残高が表示されます。
金額を入力し、同じプロセスを経て、資金をL1に戻すためのブリッジを作成します。
あなたは、前にL1からL2にブリッジしたもの以上の資金を戻すことはできません。
L2からL1へのブリッジは、L1からL2へのものとは少し異なり、トランザクションが実行された後には、このような アクティビティ ページが表示されます:
Finalise をクリックし、トランザクションを承認します(注:MetaMaskは、最初にL1ネットワークに切り替えるようにとのウィンドウをポップアップします)。その後、ブリッジが完了したら、このように表示されます: