装備が揃ったら、いよいよ実際にノードを建てる時です。ここからが、本当の「ハンターの一歩」になります。緊張するかもしれませんが、大丈夫。一つずつ進めていきましょう。

はじめる前に、手元に用意しておくもの

  • VPS(本記事は X Server VPS で進めます)と rootパスワード
  • 取得済みのドメイン
  • dRPC のアカウントとAPIキー(手順4で使用・無料枠あり)
  • Reown(旧WalletConnect)のアカウントと Project ID(手順9で使用)
  • ミント済みのユーザーネームNFT(手順5で紐づけ)
  • Base Sepolia のテストETH を少量(手順11で使用)。入手方法は テストETHの入手とブリッジ方法 にまとめてあります

途中でアカウント作成に走ると CLI が待ちぼうけになります。先に揃えておくと、一気に駆け抜けられます。

まず、サーバーに接続する

サーバーに接続する前に、VPSの設定を完了させましょう。これは X Server の VPS の場合ですが、まずパケットフィルターです。フィルタールール設定で、最低限つぎの3つを許可します。

  • SSH(22番ポート) ── サーバー接続用
  • Web(80番ポート) ── HTTP/Let’s Encrypt の認証用
  • Web(443番ポート) ── HTTPS(ノードの公開用)

もし接続がうまくいかない場合の切り分けとして、パケットフィルター自体を一時的にオフにする方法もあります。ただしその場合も、動作確認が済んだら必ずオンに戻しましょう(守りの固め方は、次回「城門を固める」で詳しくやります)。

パケットフィルター/フィルタールール設定の画面
パケットフィルター/フィルタールール設定の画面

そして、VPS側のサイドバーで DNS設定 を開き、取得したドメインを追加しておきます。そこでDNSレコードの設定をするのですが、設定の追加ボタンから以下を入力します。

種別 A(Aレコード)
ホスト名 空欄(ドメインそのものに向ける場合)
内容 あなたの VPSのIPアドレス
DNSレコード(Aレコード)の入力画面
DNSレコード(Aレコード)の入力画面

設定を追加すると、一覧にAレコードが追加されているはずです。サーバー側の基本設定は以上です。

ドメインを VPS に向ける

ドメインの設定では、ネームサーバーを X Server VPS に向けましょう。

ネームサーバー設定の画面
ネームサーバー設定の画面

これでVPSとドメインの設定は完了しました。

メモ
VPS を契約すると、IPアドレスと VPSパネル(管理画面)パスワードがメールで送られてきます。それとは別に、VPS契約時に記入した rootパスワード もしっかりメモして覚えておきましょう。

Windows をお使いなら PowerShell を、Mac をお使いなら ターミナル を開きます。そして、以下のコマンドを打ちます。

ssh root@【あなたのIPアドレス】

初回接続の手前で「本当に接続していい?」という確認メッセージが出ます。yes と入力して進めます。パスワードを聞かれたら、VPS契約時に設定したroot パスワードを入力しましょう。

うまく接続できれば、サーバーの中に入った状態になります。プロンプトが root@【サーバー名】:~# のように変わっているはずです。ここから、すべてのコマンドはサーバー上で実行することになります。

公式インストーラーを実行する

ここからが、本番です。CAW の公式リポジトリには、ノードを一発で構築する素晴らしいスクリプトが用意されています。サーバー上で以下のコマンドを実行してください。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/GilgameshCaw/Caw/master/install.sh)"

入力すると、以下の案内が表示されます。

インストーラー起動時の案内画面
インストーラー起動時の案内画面

このスクリプトが、以下のことを自動で行ってくれます。

  • 必要なシステム依存関係のインストール(Node.js、PostgreSQL、Redis、Elasticsearch、nginx、pm2、certbot など)
  • caw という専用ユーザーの作成
  • 公式リポジトリのクローン
  • 対話式の Node CLI への引き継ぎ

スクリプトの実行には、数分〜十数分かかります。画面にさまざまなログが流れますが、エラーが出ない限りは見守るだけで大丈夫です。

CLI 対話形式の設定

インストーラーが完了すると、対話式の CLI が起動します。ここで、設定項目を順番に答えていきます。

1

ドメインの登録

Domain(or blank) と表示されています。空欄でも大丈夫ですが、Full node で参加する場合はここに取得したドメインを入力して Enter を押してください。

役割ドメインはノードの「公開住所」。リポジトリは /var/www/(ドメイン) に配置され、SSL証明書の発行先にも、手順11でオンチェーンに登録するAPI URLにもなります。

2

ノードタイプの選択

ノードタイプ選択画面
ノードタイプ選択画面

「Full Node」を選びます。1 と入力して Enter を押しましょう。公開フロントエンドと API を持ち、メッシュネットワークに参加するタイプです。完全に独立したノードとして機能します。

役割フルノードは検索(Elasticsearch)・データベース(Postgres)・API・React製フロントの「全部入り」。公式READMEの推奨スペックは RAM 8GB/2コア以上/SSD 25GB以上です(メモリを一番食うのはElasticsearch)。

3

インストール方法の選択

インストール方法の選択画面
インストール方法の選択画面

1番のネイティブインストールを選択します。Postgres、Redis、Elasticsearch を VPS の OS に直接インストールしてくれます。設定もシンプルで一番おすすめです。インストールが進み、緑のチェックマークが全て付くと、次の項目が出てきます。

役割ここで入れる3つが、ノードの記憶装置です。Postgres=投稿やユーザーの本棚、Redis=高速な作業机、Elasticsearch=全文検索の索引。Docker利用や既存DBへの接続も選べますが、1台構成ならネイティブが素直です。

SSL/TLS証明書(HTTPS)の設定画面
SSL/TLS証明書(HTTPS)の設定画面

この画面は SSL/TLS証明書(HTTPS)の設定です。2番の「Use Let’s Encrypt instead (free, automated)」を選択しましょう。無料で自動取得・更新してくれる Let’s Encrypt を使います。ドメインが正しく VPS の IP に向いている場合、一番簡単で安全です。

環境(Production / Development)の選択画面
環境(Production / Development)の選択画面

2番を入力して次に進むと、この画面が出ます。一般的なサーバー運用である 『Production』を選択します。

4

RPC URL の設定

ここでは、まず L1(Ethereum Sepolia)側の RPC URL を設定します。L2(Base Sepolia)側は、のちほど手順14で設定します。

役割RPCはノードの生命線。バリデーターの提出(書き込み)と、チェーン上のイベントを読み取ってデータベースに索引する収集(読み取り)の両方が、この回線を通ります。遅いRPCはノードの成績に直結します。

L1 RPC URL 入力画面
L1 RPC URL 入力画面

まず L1 の Ethereum Sepolia テストネットの接続先URLを設定します。推奨されているものの中でも、今回は dRPC を選択しましょう(現在運用している二台とも dRPC です)。dRPC はアカウント作成後に APIキーを取得し、以下の形式で入力します。

https://lb.drpc.live/sepolia/(あなたのAPIキー)

その後、こんな入力を求められます。

? L1 WebSocket (wss) URL:
意味 L1(Ethereum Sepolia)の WebSocket(wss)接続先の入力
用途 Validator として本格的にアクション処理をしたいときや、ノードの性能を向上させたいときに使われます。設定しておいて損はありません
入力値 さきほどのURLの頭を https から wss に変更するだけ(下記)
wss://lb.drpc.live/sepolia/(あなたのAPIキー)

次は、こんな質問が表示されます。

? Use a different RPC for the frontend? (y/N)
意味 フロントエンド用の RPC URL を別に設定しますか?
答え n(No)を入力して Enter
理由 特別な理由がない限り、L1で設定したRPCをそのまま使えば問題ありません

続いて、こんな入力を求められます。

? Ethereum Mainnet RPC URL:
意味 Ethereum Mainnet(本番ネットワーク)の RPC URL の入力
用途 Uniswap から ETH やトークンの価格情報を取得するため
入力値 dRPC のメインネット用URL(下記)
https://lb.drpc.live/ethereum/(あなたのAPIキー)

こちらも二台ともに dRPC のものを利用しています。

補足
このメインネットRPCは、あくまで価格情報を「読む」ためのものです。ここに本物のETHを置く必要はありません。

5

Validator の秘密鍵の設定

秘密鍵の生成(Generate new key)画面
秘密鍵の生成(Generate new key)画面

Ethereum / Base 上のトランザクションに署名するために必要な秘密鍵を設定します。Generate new key を選択して Enter を押しましょう。押すと、バリデーター用のウォレットアドレスが表示されますので、メモしておきましょう。

役割この鍵が、あなたのノードの「実印」。バリデーターが未処理アクションをまとめてオンチェーンに提出するとき、すべてこの鍵で署名します。ユーザーNFTの紐づけは、そのノードの「名義」にあたります。

最重要
そのあとに秘密鍵についての質問が来ます。秘密鍵をバックアップするために yes を選び、表示されたキーを保管しましょう。紙に書き写すなど、オフラインでの保管が最も安全です。テストネット段階の鍵とはいえ、扱いはメインネットと同じ習慣で。絶対に第三者に見せてはいけません。「バックアップしましたか?」と質問が来るので、y を入力して Enter を押します。
ユーザーNFT紐付け(By username)画面
ユーザーNFT紐付け(By username)画面

By username を選択して、ミントしたユーザーNFTを紐づけます。Enter を押した後、自身のユーザーネームを入力してください。「このユーザーを使いますか?」と再確認が来るので、y を押して Enter を押します。

6

「ZK sig-only path」の有効化確認

ZK sig-only path 確認画面
ZK sig-only path 確認画面

これはテストネット段階では必要ないので n を押して Enter で構いません。ZK証明を使ってガス代を節約できる高度な機能ですが、メインネットが始まってからでも遅くはないかと思います。

注意
この機能を自分のサーバーで動かすには、高スペックなVPSを契約する必要があります。公式ドキュメント(docs/ZK_SIG_PATH.md)によれば、証明の生成にはピークで約16GBのRAMを消費します。メモリの少ないVPS(6GB程度)では、生成中にメモリ不足でサーバーごと落ちる(Postgres や pm2 が強制終了される)と明記されています。
推奨 ローカルで証明を生成するなら RAM 16GB以上のプランを。初回は約5.8GBの一時データのダウンロードも発生します
代替 低スペックのVPSでも、ホスト型の証明ネットワーク(SP1)を利用すれば動かせます(1証明あたり約10秒)
費用対効果 現状のバッチ規模(20〜30アクション)ではガスがむしろ約25%割高。1バッチ約70アクションを超えて初めて得になる、と公式に明記されています

7

Admin Dashboard のパスワード設定

管理画面パスワード設定画面
管理画面パスワード設定画面

パスワードを設定して、メモ帳などで保管しておきましょう。私は紙に書くのと、スマホにメモを入れる、両方やっています。

8

Client ID

Client ID 選択画面
Client ID 選択画面

Use client Id 1 はパブリック CAW ネットワークの一部として動く、みんなと繋がる選択肢です。推奨されているので、これを選択して OK です。

役割Client ID は「どのネットワーク(クライアント群)に属すか」の区分。ネットワーク登録・手数料・インスタンス台帳を司る CawNetworkManager コントラクト上の単位で、1=パブリックCAW本体。手順16の複製対象の指定にも、この番号が再登場します。

9

WalletConnect Project ID の設定

WalletConnect Project ID 入力画面
WalletConnect Project ID 入力画面

ユーザーがあなたの CAW フロントエンドで「Connect Wallet」をクリックすると、ウォレット選択モーダルは WalletConnect(現 Reown)によって動きます。

MetaMask Mobile、Rainbow、Trust などのモバイルウォレットは、Reown のリレーサーバー経由でサイトと通信しているので、Project ID がない場合、モーダルはプレースホルダーにフォールバックし、WalletConnect ベースのウォレットに接続できません。

それを回避するために、Reown でアカウントを作成し、プロジェクトを作成して32桁の英数字をコピペしましょう。

10

Giphy API key の設定

Giphy API key 入力画面
Giphy API key 入力画面

GIF検索・GIF選択機能があり、その機能に Giphy という GIF サービスを使うための APIキーが必要です、という案内です。後から追加もできるので、今回は skip します。

11

ノードをオンチェーンに登録するかの設定

オンチェーン登録の確認画面
オンチェーン登録の確認画面

あなたの CAW インスタンスは、API URL をオンチェーンに登録できます。これを yes で選択すると instanceID が付与され、オンチェーンでこのドメインが認識される仕組みです。

役割インスタンス台帳(Instance Registry)への記帳です。あなたのAPI URLがオンチェーンに載ることで、他のノードやクライアントから「発見してもらえる」ようになります。メッシュの一員として名簿に載るイメージです。

注意
登録には Base Sepolia のテストETH が少量必要になります(バリデーターウォレットに入れておきます)。これは無料で入手できるテスト用ETHで、本物のお金ではありません。Sepolia ETH の入手から Base/Arbitrum へのブリッジまでの手順は、こちらの記事にまとめてあります。入手したら、手順5でメモしたバリデーターアドレスへ送っておきましょう。

今回は y を押して Enter します。

12

X連携・Sentry の設定

X連携の設定画面
X連携の設定画面

今はフロントエンドでの本格的運用を考えていないので、この機能拡張はスキップします。

Sentry エラー監視の設定画面
Sentry エラー監視の設定画面

これは Sentry のエラー監視を設定しますか?という画面です。これも任意なので、空欄でスキップできます。Sentry は、アプリやサーバーで起きたエラーを自動で集めてくれるサービスですが、今回は飛ばします。

13

SigNoz でパフォーマンス計測を設定

SigNoz 設定画面
SigNoz 設定画面

SigNoz は、自分でサーバーに立てられる監視ツールで、設定すると、この CAW ノードの処理速度やボトルネック(HTTPルート・DBクエリ・RPC呼び出しの所要時間)を確認できます。とても便利ですが、公式READMEによると RAM 約4GB、ディスク 約30GB を使うので、今回はスキップしておきます。

14

L2 Sepolia の RPC URL の設定

L2 RPC URL 入力画面
L2 RPC URL 入力画面

https://sepolia.base.org(Base 公式)を入力し、その後 WebSocket の設定も行います。

役割Base L2 が、CAWにとっての「正本」(immutable source of truth)。アクションの提出先も、タイムラインの読み取り元も、最終的にはここです。

https://sepolia.base.org
wss://sepolia.base.org  # websocket

別のフロントエンド用RPCの設定は行わないので、n を入れて Enter を押します(小文字で入力OKです)。

15

Replication(複製・検証用の記録)の設定

Replication 設定画面
Replication 設定画面

参加するバリデーターは、各バッチごとのハッシュを記録し、他の参加者の不正な提出を監視します。もし誰かが不正なコミットをしているのを見つけたら、その相手のステークを slash(没収・ペナルティ)して報酬を得られる、という仕組みです。不正への異議申し立てには2日間のチャレンジ期間が設けられています。今回は y で進めてみます。

役割これがCAWの「楽観的アーカイブ」。記録は一旦信じて受け入れ、2日間は誰でも異議を申し立てられる——性善説と監視を組み合わせた保存の仕組みに、あなたのノードが加わります。

16

Arbitrum Sepolia の設定

Arbitrum Sepolia RPC 入力画面
Arbitrum Sepolia RPC 入力画面

https://sepolia-rollup.arbitrum.io/rpc(Arbitrum 公式)を使用します。

役割Arbitrum はアーカイブ(保管庫)チェーン。Base上の記録のチェックポイントが LayerZero 経由でここに複製され、二重に保全されます。

Replication対象のClient ID 入力画面
Replication対象のClient ID 入力画面

下の画面は、このノードがどの Client ID のアクションを Replication 対象にするか質問しています。先ほど Client ID で1番を選択したので、どこの CAW アクションをアーカイブするのか、ということで 1 と入力します。

17

レプリケーターキーの生成

レプリケーターキー生成画面
レプリケーターキー生成画面

ウォレットのアドレスと秘密鍵をメモしておきましょう。新しく生成するなら Generate key、すでにあるものを使う場合は 2番の import を選びましょう。

役割手順5の鍵が「提出用の実印」なら、こちらはアーカイブチェーン側で複製を提出・ステークするための別の実印。役割ごとに鍵を分けることで、万一の際の影響を小さくできます。

これらを完了すると、最後にインストールが走ります。

最終インストール実行中の画面
最終インストール実行中の画面

セットアップ コンプリート!!

設定完了、ノード稼働

すべての設定が完了すると、pm2 がノードのプロセスを起動します。成功すれば、こんな表示が出ます。

pm2 のプロセス一覧(status: online)
pm2 のプロセス一覧(status: online)

status: online になっていれば、ノードが正常に起動しています。

補足
初回起動の直後は、ログにエラーが並ぶことがあります(例:StakeLedger の DIVERGENCE など、データベースが空の状態で起こる既知のもの)。多くは対処法が確立しているので、慌てなくて大丈夫です。エラーとの付き合い方は、別の記事で詳しくまとめる予定です。

ブラウザでアクセスしてみる

最後の儀式です。ブラウザを開いて、https://【あなたのドメイン】 にアクセスしてみてください。

そこに、あなたのノードのフロントエンドが表示されたら ── おめでとうございます。あなたは、CAW ネットワーク上に、独立したフルノードを建てた、新しいハンターです。

一息ついて

ここまで本当にお疲れさまでした。実は、これでセットアップは「ひとまずの完了」です。でも、ノード運営は「建てた瞬間がゴール」ではなく、「建てた瞬間がスタート」です。

セキュリティを強化したり、定期的に動作を確認したり、つまずいた時に対処したり ── そういう日々の番人としての営みが、これから始まります。

ターミナルを閉じる前に、一度大きく息を吐いてください。
あなたは確かに、CAW の一部になりました。

次の話では、ノードを安全に運営するための「城門を固める」作業、つまりセキュリティ強化についてお伝えします。