見出し画像

Minato ノードのセットアップ

この記事では、Soneium のテストネットである Minato ノードの構築をオフィシャルなドキュメントを元にガイドしていきます。

”はじめに”のところで、Soneium についても軽く触れていきますので、ご存じの方はそこを読み飛ばしてください。

なお、この記事は ICT やパーソナルコンピューターに対しての基礎知識、および基本的な Linux のオペレーションや Cloud Native な仕組みに精通した方向けとなっています。用語やコマンド、アーキテクチャ、設定や操作については詳しく解説されていない事がありますので、ご了承ください。
具体的には下記の要素が含まれるため、それらに関する基本的な仕組みや操作に理解を持たれている方が対象です。

  • IP ネットワーク(IPアドレス, DNS, etc)

  • Ubuntu Linux

  • パブリッククラウドサービス

  • Docker, Docker Compose

  • シェルスクリプト

  • テキストエディタ(vim, nano, etc)

  • Git, GitHub

インターナショナル版はこちら


はじめに

2024年8月にソニーはブロックチェーン"Soneium™(ソニューム)"の開発を発表しました。

ソニーグループポータル | ニュースリリース | ブロックチェーン"Soneium™(ソニューム)"を開発 (sony.com)

この Soneium は、ソニーグループと Startale Labs の合弁会社である Sony Block Solutions Labs によって開発が進められています。

Startale Labs は 2023年1月3日に設立された、Web3のマスアダプションを目指す企業であり、日本最大のWeb3プロダクトであるパブリックブロックチェーン Astar Network の開発や、Web3インフラを提供する Startale Web3 Cloud の開発を行っています。

https://startale.com/

そして、Soneium は昨年ローンチした Astar zkEVM (Ethereum の L2)の移行先のブロックチェーンとしても発表されています。

Astar Network - Connecting you to Web3

この記事投稿時点で、この Soneium のテストネットである「Minato」が稼働中であり、各種ドキュメント類も整備されてきています。

それでは、このドキュメントの「Minato Node Setup」のセクションを元に解説をしていきます。

事前準備

ハードウェア要件

ドキュメントには「AWS(Amazon Web Service)でいうところの i3.2xlarge のインスタンスか同等のハードウェアを推奨」とされています。これはどのくらいのパワーが必要なシステムかというと、以下になります。

CPU:  8 CPU
メモリ: 61GiB
ストレージ: 1900GB NVMe SSD
ネットワーク: Max 10Gbps

特に、i3 インスタンスなので、重要視されているのはストレージスペックです。この点は比較的、ストレージインテンシブなブロックチェーンのノードに対しては容易に理解できます。

これほどのハードウェアスペックの物理マシンを用意するにはそこそこコストがかかります。AWSで i3.2xlarge 使った場合で、且つ日本リージョンで1時間 83円($0.73)です。(※ 2024/9/15 の為替換算の金額)

この記事においては、ガイドをすることが目的であり、運用ではないため私のなじみのある「DigitalOcean」のクラウドインスタンス(Droplet)を使うことにします。

インスタンスの用意

DigitalOcean 自体の使い方などは省略します。ここで使ったインスタンス(Droplet)は以下のスペックです。

https://www.digitalocean.com/pricing

リージョンはシンガポール、Linux は Ubuntu 24.04 LTS で作成しました。

Docker と Dockre Compose の導入

ドキュメントでは、ノードをコンテナで起動することが前提となっています。そのため、Docker、Docker Compose が導入されている必要があります。これらの最新バージョンを導入する手順を参考までに記載します。

Docker インストール 

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

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

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

Docker Compose インストール

$ sudo apt-get install docker-compose-plugin
$ docker compose version
Docker Compose version v2.29.2

Minato 固有のファイル

ドキュメント上にいくつか必要なファイルのダウンロードと準備があります。

jwt.txt
docker-compose.yml
minato-genesis.json
minato-rollup.json
sample.env

jwt.txt ファイルに関しては、Ubuntu 上で下記のコマンドで生成します。

$ openssl rand -hex 32 > jwt.txt

なお、個別のファイルのダウンロードと準備が面倒な場合、以下のシェルスクリプトをコピー&ペーストして実行することですぐに終わります。(私が作成したので、利用に関してはわかる方のみ自己責任でお願いします。)

https://raw.githubusercontent.com/tksarah/Minato/main/download.sh

Minato ノードの設定

.env の編集

.env ファイルの中で以下の3点を書き換えます。これらの値は選択するエンドポイントやご自身の環境に合わせて調整します。

L1_URL=https://sepolia-l1.url
L1_BEACON=https://sepolia-beacon-l1.url
P2P_ADVERTISE_IP=<Node Public IP>

例えば私が試した際は下記のように修正し、稼働を確認しました。

L1_URL=https://ethereum-sepolia-rpc.publicnode.com
L1_BEACON=https://sepolia.beaconstate.info
P2P_ADVERTISE_IP=<今回 DigitalOcenanで作成した Droplet の Public IP>

docker-compose.yml の編集

このファイル内のパブリックIPアドレスを指定する部分があるので、Droplet の パブリックIPアドレスを指定します。
具体的には op-geth-minato サービス設定の --nat=extip:<your_node_public_ip> パラメータを置き換えます。

< docker-compose.yml 該当部分の抜粋 >  
--rollup.disabletxpoolgossip=false --rpc.allow-unprotected-txs=true --nat=extip:<your_node_public_ip> --db.engine=pebble --state.scheme=hash

Minato ノードの起動

docker compose の実行

docker compose up -d でコンテナを起動します。初めて起動する際はコンテナイメージをダウンロードするところから始まるため少し時間がかかりますが、それでも2分かからずコンテナ起動まで完了しました。

# docker compose up -d
WARN[0000] /root/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 7/7
✔ op-geth-minato Pulled                                                                                                                                 26.6s
✔ d25f557d7f31 Pull complete                                                                                                                          18.6s
✔ b3cc85aa4eb5 Pull complete                                                                                                                          18.7s
✔ 4f3551ab5801 Pull complete                                                                                                                          19.1s
✔ op-node-minato Pulled                                                                                                                                 10.1s
✔ 930bdd4d222e Pull complete                                                                                                                           2.4s
✔ 0ea884f55b13 Pull complete                                                                                                                           3.8s
[+] Running 6/6
✔ Network root_minato              Created                                                                                                               0.1s
✔ Volume "root_op-geth-storage"    Created                                                                                                               0.0s
✔ Volume "root_op-node-storage"    Created                                                                                                               0.0s
✔ Volume "root_op-secrets"         Created                                                                                                               0.0s
✔ Container root-op-geth-minato-1  Started                                                                                                               0.4s
✔ Container root-op-node-minato-1  Started                                                                                                               0.4s

ここで起動するコンテナは、2つで、「op-geth-minato」と「op-node-minato」です。

# docker container ls --format "table {{.Names}}\t{{.Status}}"
NAMES                   STATUS
root-op-geth-minato-1   Up 22 minutes
root-op-node-minato-1   Up 22 minutes

この2つのコンテナ(Minato における重要なコンポーネント)についてはこちらをご参照ください。

ノード起動の確認

ドキュメントにはコンテナ起動のおよそ2分後に同期が開始されるとありますが、私が試した環境では比較的速やかに同期が開始されました。

docker compose logs を使ってログの方で確認します。

# docker compose logs -f op-node-minato
# docker compose logs -f op-geth-minato

セットアップは以上になります。

おまけ

リソースの使用状況

ノード起動後、2時間ほどのリソース状況

CPU
Load averages(1/5/15)
Memory
Disk I/O
Bandwidth
Disk Usage

補足、2024/9/15 時点の情報

  • CPU は 8 CPU で結構余裕がある

  • Memory は およそ 7GB

  • Disk Usage は およそ 33GB

  • Network の帯域幅は小さくても平気そう

Optimism Docs より抜粋翻訳

Node Architecture

”Superchain ネットワーク上で動作するすべてのノードのアーキテクチャをレビューします。すべてのOP Mainnetノードは、Rollup NodeExecution Clientという2つのコアソフトウェアサービスで構成されています。

OP Mainnetは、オプションで3つ目のコンポーネントであるLegacy Gethをサポートしており、Bedrock Upgrade以前に作成されたブロックおよびトランザクションに対するステートフルクエリを処理することができます。”

  • Rollup Node

  • Execution Client

  • Legacy Geth

Rollup Node(op-node):
Rollup Nodeは、L1データからL2ブロックペイロードを導出し、
それらのペイロードをExecution Client(op-geth)に渡す役割を担っています。Rollup Nodeは、オプションでピアツーピアネットワークに参加し、
ブロックがL1に提出される前にSequencerから直接ブロックを受け取ることもできます。Rollup Nodeは、EthereumのConsensusクライアントに大きく類似しています。

Execution Client(op-geth):
Execution Clientは、標準のEthereum Engine APIを介してJSON-RPC経由で
Rollup Nodeから受け取ったブロックペイロードを実行する役割を担っています。Execution Clientは、Ethereum開発者が慣れ親しんでいる標準のJSON-RPC APIを公開しており、
ブロックチェーンデータのクエリやネットワークへのトランザクションの送信に使用できます。Execution Clientは、EthereumのExecutionクライアントに大きく類似しています。

Legacy Geth:
Bedrock Upgrade以前にOP Mainnetノードを実行するために使用されていたソフトウェアです。OP Mainnetノードと並行してLegacy Gethのインスタンスを実行すると、ノードは過去のトランザクションに対するリクエストをLegacy Gethインスタンスに転送できるようになります。Legacy Gethは必須ではなく、通常はOP Mainnetの完全なアーカイブノードを維持したい場合にのみ必要です。

おわりに

今回は、ノードの起動をコンテナを利用する場合のガイドを記載しました。バイナリを使ったドキュメントも近々公開されるようですので、そちらの方がよりアーキテクチャとしては理解が進むと思います。その際はまたチェックします。

ここまで、お読みいただきありがとうございます。

余談ですが、"Soneium" は Googlability がとてもいい!

参考


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