Dockerを利用してUnichainノードを立てよう!初心者向け完全ガイド

ノード構築を通してUnichainに対する技術的理解を深めると共に、ネットワークの運用に貢献しましょう。

Dockerを利用してUnichainノードを立てよう!初心者向け完全ガイド
Photo by Tatiana Noir on Unsplash

はじめに

Unichainとは?

Unichainは、Uniswap LabsがDeFiにおける既存課題を解決すべく開発したDeFi特化Ethereumレイヤー2で、現在テストネットのみ稼働中です。詳しくは「Unichain – DeFi向けに設計されたEthereumのレイヤー2」を参照ください。

きなこめも

ノードを立てる目的やそのメリット

  1. ノード構築を通してチェーンに対する技術的理解を深める
  2. ネットワークに参加してチェーンの運用に貢献する

エアドロ狙いでノードを立てる場合もあると思いますが、Unichainから将来のエアドロに関する発表はされていない点を心に留めておいて下さい。ノード運用にはサーバー代がかかるので、原資ゼロでエアドロを目指す方には向きません。

必要な前提条件と環境準備

1. Unichain本家のDocsページを読も…開いておこう

Set Up A Node | Unichain Docs
Learn how to set up a Unichain node

ドキュメントを読むのが大好きな変態技術オタはそもそもこんな辺境のブログまで辿り着いていないと思うので、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上にあります。

💡
VPSプロバイダーによってはWeb3での利用を規約で禁止している場合があります。使用したいVPSのプロバイダーの規約は必ずチェックしましょう。

2.1 Unichainノードの構築に必要なVPS最低スペック

公式のスペック要件はOptimism Docsに掲載されています。

Running an OP Sepolia node from source | Optimism Docs
Learn how to run an OP Sepolia node from source code.
  • 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を取得する

BlockPI Network | Global Distributed Web3 Infrastructure
BlockPI is a global distributed blockchain API service network. The fast, scalable, robust multichain RPC infrastructure for Web3 developers. Try for free!

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を参照して、ブロック数がキャッチアップできていることを確認して下さい。

https://sepolia.uniscan.xyz/

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が便利です。

Superbridge
Bridge ETH and ERC20 tokens into and out of the Superchain

まとめ

ノードは稼働しましたか?
不明な点がある場合はまず公式ドキュメントを、求める回答が見つからない場合はUniswapディスコードサーバーで質問してみて下さい。

Join the Uniswap Discord Server!
Uniswap is a decentralized exchange built on the Ethereum blockchain. | 53091 members