Dockerを利用してUnichainノードを立てよう!初心者向け完全ガイド
ノード構築を通してUnichainに対する技術的理解を深めると共に、ネットワークの運用に貢献しましょう。
はじめに
Unichainとは?
Unichainは、Uniswap LabsがDeFiにおける既存課題を解決すべく開発したDeFi特化Ethereumレイヤー2で、現在テストネットのみ稼働中です。詳しくは「Unichain – DeFi向けに設計されたEthereumのレイヤー2」を参照ください。
ノードを立てる目的やそのメリット
- ノード構築を通してチェーンに対する技術的理解を深める
- ネットワークに参加してチェーンの運用に貢献する
エアドロ狙いでノードを立てる場合もあると思いますが、Unichainから将来のエアドロに関する発表はされていない点を心に留めておいて下さい。ノード運用にはサーバー代がかかるので、原資ゼロでエアドロを目指す方には向きません。
必要な前提条件と環境準備
1. Unichain本家のDocsページを読も…開いておこう
ドキュメントを読むのが大好きな変態技術オタはそもそもこんな辺境のブログまで辿り着いていないと思うので、Docsを読めとは言いません。
そもそもUnichainはSuperchainの一部としてOPスタック上で動作するため、Superchainノードに関する詳細はOptimismチームが作成した別ドキュメントサイトにリンクされています。全部読もうとリンクを辿り始めるとたぶんノード構築に取り掛かる前に挫折するので、本家Docsページは開いておく程度にして、分からないことが出てきたら調べるようにしましょう。
もちろん教科書的な手順ではまずDocsを読むが1番ですが、実地訓練のほうが身に付くのが早かったりするものです。Unichainは現在テストネットのみなので、YOLO姿勢で気楽に挑戦できます。
2. まずサーバーを用意しよう
ノード構築にはノードを24時間稼働させておくサーバーが必要です。自宅PCを利用することも可能ですが、セキュリティ面や24時間稼働し続けなければならない点を考えると、仮想専用サーバー(VPS)を借りるのが一般的です。
VPSとは?
VPSは「Virtual Private Server(仮想専用サーバー)」の略で、物理的なサーバー1台を仮想化技術によって複数の独立したサーバー環境に分割したものです。それぞれの仮想環境は独立したサーバーとして機能し、ユーザーはそれを自由に設定・管理できるため、専用サーバーに近い感覚で利用できますが、専用サーバーよりもコストを抑えられるのが特徴です。
VPSの主な特徴
- 仮想化技術による分割
1台の物理サーバーを仮想化して複数のVPSを構築するため、CPU、メモリ、ストレージなどのリソースを各VPSが専有します。他のVPSと影響し合わないので、独立性が保たれています。 - 独自のOS・ソフトウェア環境
各VPSには独自のオペレーティングシステム(OS)をインストールでき、ソフトウェアの設定もユーザーが自由に行えます。そのため、専用サーバーのように使うことが可能です。 - コストの効率化
VPSは物理サーバーのリソースを分割して提供するため、専用サーバーに比べて料金が安く、必要なリソース分だけ利用できるのでコストパフォーマンスに優れています。
Webサイトやブログのホスティング、テスト開発環境の構築、チャットアプリなどの軽量なアプリケーションをホスティングするためにもよく使われます。このブログもVPS上にあります。
2.1 Unichainノードの構築に必要なVPS最低スペック
公式のスペック要件はOptimism Docsに掲載されています。
- RAM: 8 GB以上
- ストレージ: 200GB以上の空きがあるSSD
- CPU: モダンなCPUならなんでも。
💡 4 vCPUコア以上なら大丈夫でしょう。 - OS: オペレーティングシステムの指定はありませんが、Ubuntu 20.04 LTS もしくはそれより新しいものをお勧めします。トラブルシューティングが1番見つけやすいためです。
おすすめはcontaboのCloud VPS2です。私は同一VPSで別のノードも動かしているため、Cloud VPS3を契約しています。
3. Unichainノードのための環境準備
ここからはContabo VPS + Visual Studio Codeを利用した例でお届けします。
3.1 ターミナルからVPSにログインする
契約したVPSプロバイダーから提供される初期ユーザー名(root)とIPアドレスを利用し、sshコマンドでログインします。
ssh root@<IPアドレス>
次に、ContaboでVPSを契約する際に設定したパスワードを入力します。Welcome to...の画面が出たらログイン成功です。
root@<IP アドレス>'s password:
Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-25-generic x86_64)z
3.2 パッケージのアップデートをかける
sudo apt update && sudo apt upgrade -y
新しいVPSではパッケージが古い場合があるので、aptコマンドでパッケージのリストを更新し、かつ、既にインストールされているパッケージを最新バージョンにアップグレードします。「パッケージ」とはアプリやツール群だと思って下さい。
3.3 ca-certificatesとcurlを追加する
sudo apt-get install ca-certificates curl
- ca-certificates
サーバーのSSL証明書を検証するための「認証局(CA)証明書」をシステムに提供します。インターネット上での安全な通信を行う際に必要です。 - curl
コマンドラインからHTTPやFTPなどのプロトコルを使ってデータ転送を行うツールです。Webからデータを取得したり、APIリクエストを送信したりするために使用します。
3.4 keyringsディレクトリを作成する
sudo install -m 0755 -d /etc/apt/keyrings
管理者権限(sudo)で、オーナーには読み書き・実行権限を、その他のユーザーには読み取りと実行の権限のみを与える設定(0755)を付けて作成します。
3.5. Docker公式gpg鍵をkeyringsディレクトリにダウンロードして保存する
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
このgpg鍵をaptに登録することで、aptがDockerのパッケージの真正性を確認できるようになります。
3.6. docker.ascに読み取り権限を付与する
sudo chmod a+r /etc/apt/keyrings/docker.asc
Dockerのaptリポジトリを利用するために必要な公開鍵ファイルに読み取り権限を付与し、aptパッケージマネージャーが公開鍵を正常に参照できるように設定します。
3.7. DockerのaptリポジトリをUbuntuシステムに追加する
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" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
この設定によりapt update
後にDockerパッケージのインストールが可能になります。
3.8 パッケージのアップデートをかける
sudo apt-get update
3.9. Docker関連のパッケージをインストールする
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- docker-ce
Docker Community Edition(CE)本体のパッケージで、Dockerエンジンを提供します。これにより、コンテナを作成・管理する機能が使えるようになります。 - docker-ce-cli
Dockerのコマンドラインインターフェイス(CLI)ツールです。docker
コマンドを使ってコンテナの操作を行うためのインターフェイスを提供します。 - containerd.io
Dockerのコンテナランタイムcontainerd
のパッケージです。コンテナの管理を効率化し、コンテナの起動や停止、リソース管理を行います。 - docker-buildx-plugin
マルチプラットフォームに対応したビルド機能を提供するプラグインで、特に複数のアーキテクチャに対応するコンテナイメージのビルドに便利です。 - docker-compose-plugin
複数のコンテナを組み合わせて構成・起動するツールで、複雑な環境を簡単にセットアップするために使用されます。
3.10 dockerのセットアップが正しく行われたか確認する
sudo docker run hello-world
Dockerの公式イメージレジストリ、Docker Hubから hello-world
という名前のテスト用イメージをダウンロードし、コンテナを作成、実行します。
正常に実行されると、Dockerが正しく動作していることを示すメッセージが出力されます。
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
これでDockerの準備は整いました!
4.0 Unichainノードのセットアップ
4.1 GithubからUnichainレポジトリをダウンロードし、ディレクトリ移動する
git clone https://github.com/Uniswap/unichain-node.git
cd unichain-node
4.2 ポートを開ける
ufw allow 9222
ufw allow 8545
- 9222ポート
デバッグ用ポート。 - 8545ポート
Ethereum JSON-RPC APIを提供するためのデフォルトポート。このポートを開くことで、他のアプリケーションがノードにアクセスできるようになります。
4.3 Block PIを利用してSepolia、BeaconそれぞれのAPI keyを取得する
New API Key → 「Ethereum」を選択 → 「Sepolia」を選択 > Archieve ModeをONに設定
New API Key > 「Ethereum」を選択 → 「Beacon」を選択 → Archieve ModeをONに設定
4.4 APIキーを環境ファイルに入力する
# op-node configuration
# [required] replace with your preferred L1 (Ethereum, not Unichain) node RPC URL:
OP_NODE_L1_ETH_RPC=https://rpc.sepolia.org //ここをBlockPIのSepolia APIキーに変更
# [required] replace with your preferred L1 CL beacon endpoint:
OP_NODE_L1_BEACON=https://your.sepolia.beacon.node/endpoint-here //ここをBlockPIのBeacon APIキーに変更
viエディタを利用する場合は次の手順で変更できます。
// ファイルを開く
vi .env.sepolia
// 以下の2点を設定
OP_NODE_L1_ETH_RPC=<BlockPIで作成したSepolia APIキー>
OP_NODE_L1_BEACON=<BlockPIで作成したBeacon APIキー>
//保存してファイルを閉じる
:wq!
4.5 Docker composeの設定を変更する
// ファイルを開く
vi docker-compose.yml
// ファイル内の「start_interval」を「interval」に変更
//保存してファイルを閉じる
:wq!
4.6 Dockerを動かす
docker compose up -d
4.7 ノードに対してブロック番号取得リクエストを出してみる
curl -X POST -H "Content-Type: application/json" -d '{"id":1,"jsonrpc":"2.0","method":"eth_blockNumber","params":[]}' http://localhost:8545
エラーがなく、次のような出力が返って来ればノードは正常に稼働しています。
{"jsonrpc":"2.0","id":1,"result":"0x0"}
result(結果)である0x0部分は徐々にSyncされていくので、上記curlコマンドを何度か叩いて番号が更新されていくことをチェックしましょう。
{"jsonrpc":"2.0","id":1,"result":"0x3757ed"}
resultは16進数で表示されています。echo $((16#<result部分の0x以降の数字>))
コマンドを利用することで、10進数での数値に変換することができます。
echo $((16#3757ed))
3626989
Unichain block explorerを参照して、ブロック数がキャッチアップできていることを確認して下さい。
5. ノードログで稼働の最終確認
Unichainノードのログ
docker logs unichain-node-op-node-1 -f
clientログ
docker logs unichain-node-execution-client-1 -f
6. プライベートキーのバックアップ
構築したUnichainノードのプライベートキーはnodekey
に入っています。cat
コマンドで内容を参照し、セキュアな場所に保管して下さい。
cat ~/unichain-node/geth-data/geth/nodekey
MetamaskやRabbyなど、お好みのウォレットにインポートしてください。
7. Ethereum SepoliaからUnichainへのブリッジ
Ethereum SepoliaテストネットからUnichainテストネットにアセットをブリッジするなら、Superbridgeが便利です。
まとめ
ノードは稼働しましたか?
不明な点がある場合はまず公式ドキュメントを、求める回答が見つからない場合はUniswapディスコードサーバーで質問してみて下さい。