Skip to main content

Minato Node Setup Guide

This guide provides instructions on setting up a Minato node using Docker, Docker Compose, and binary installation.

Soneium is a next-generation Ethereum layer 2 blockchain ecosystem developed by Sony Block Solutions Labs. It connects Web3 with everyday Web2 services, making blockchain more accessible for users. Soneium aims to be a versatile, general-purpose platform, empowering developers and creators with scalable, user-friendly technology. It supports a range of applications, including entertainment, gaming, and finance, offering innovative and competitive features in the Ethereum layer 2 space. image

Hardware Requirement

We recommend using the i3.2xlarge AWS instance type or equivalent hardware. If you want to set it up as a public RPC, you will need to adjust node resources based on your traffic.

ResourceSpecification
CPU Cores8 vCPUs
RAM61 GiB
Storage1.9 TB NVMe SSD

Docker Installation (Option 1)

Prerequisites

  • Docker: Ensure Docker is installed on your system. You can install it by following the instructions below.
  • Docker Compose: Ensure Docker Compose is installed on your system. You can install it by following the instructions below.

Make sure you have the latest versions of Docker and Docker Compose installed.

Install Docker

Run the following commands to install Docker:

sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release

# Add Docker’s official GPG key:
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.gpg > /dev/null

# Set up the Docker repository:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Install Docker Engine:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Verify the installation:
sudo docker --version

Install Docker Compose

sudo apt install docker-compose
docker-compose --version

Install OpenSSL

Run the following commands to install OpenSSL on your system:

sudo apt update
sudo apt install openssl -y

Setup Instructions

Generate JWT Secret

Generate a JWT secret by running the following command:

openssl rand -hex 32 > jwt.txt

Rename Environment File

mv sample.env .env

Update Environment Variables

Open the .env file in a text editor and update the following variables:

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

In some node providers, you need to specify your node's public IP for op-geth. To do this, replace <your_node_public_ip> with your actual public IP in the --nat=extip:<your_node_public_ip> parameter within the docker-compose.yml file, specifically under the op-geth-minato service settings.

Recommendation: For faster synchronization, it's recommended to have the L1 node geographically close to the Minato node.

Run Docker Compose

Run the Docker Compose file to start the services:

docker-compose up -d

Check Logs

Monitor the logs to ensure the services are running correctly:

For op-node-minato:

docker-compose logs -f op-node-minato

For op-geth-minato:

docker-compose logs -f op-geth-minato

After each restart, it takes approximately 2 minutes for the node to start syncing.

Binary Installation (Option 2)

Prerequisites

  • Ubuntu 22.04 or a compatible Linux distribution.
  • Root or sudo privileges.
  • OpenSSL installed.

Install OpenSSL

Run the following commands to install OpenSSL on your system:

sudo apt update
sudo apt install openssl -y

Installation Steps

Step 1: Download Binaries

Download the op-node and geth binaries from the release page:

wget https://github.com/Soneium/soneium-node/releases/download/v1.9.0-ec45f663-1723023640/op-node
wget https://github.com/Soneium/soneium-node/releases/download/v1.101315.3-stable-8af19cf2/geth

Step 2: Set Executable Permissions

Make the downloaded binaries executable:

chmod +x op-node geth

Step 3: Move Binaries to /usr/local/bin

Move the binaries to /usr/local/bin for easy execution:

sudo mv -t /usr/local/bin geth op-node

Step 4: Set Up Configuration

Create the necessary directories and generate the JWT secret:

sudo mkdir /etc/optimism
openssl rand -hex 32 > jwt.txt
git clone git@github.com:Web3-Technology-Planning-Office-SNCLabs/soneium-node.git
cd soneium-node/minato
openssl rand -hex 32 > jwt.txt
sudo mv -t /etc/optimism/ minato-genesis.json jwt.txt minato-rollup.json

Step 5: Initialize Geth

Initialize geth with the genesis configuration:

sudo geth init --datadir=/data/optimism/ /etc/optimism/genesis.json

Service Configuration

op-node Service

Create a systemd service for op-node:

sudo nano /etc/systemd/system/op-node.service

Add the following content:

[Unit]
Description=op-node
After=network-online.target
Wants=network-online.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/bin/op-node \
--l1=https://sepolia-l1.url \
--l2=http://localhost:8551 \
--rpc.addr=127.0.0.1 \
--rpc.port=9545 \
--l2.jwt-secret=/etc/optimism/jwt.txt \
--l1.trustrpc \
--l1.beacon=https://beacon-l1.url \
--syncmode=execution-layer \
--l1.rpckind=erigon \
--p2p.priv.path=/etc/optimism/p2p.key \
--p2p.static=/dns4/peering-01.prd.hypersonicl2.com/tcp/9222/p2p/16Uiu2HAm36ufaFmS3tjSjkUnwSJmQN8W8fZ8yXiu2AYL2o11EgcK,/dns4/peering-02.prd.hypersonicl2.com/tcp/9222/p2p/16Uiu2HAmPkRbG8kkhJ3JWmrqeiMvy1hWXFSz4s4rncVe8YiCJHmx \
--p2p.discovery.path=/etc/optimism/p2p.db \
--p2p.peerstore.path=/etc/optimism/p2p-peerstore.db \
--metrics.enabled \
--p2p.advertise.ip=<your-public-ip> \
--metrics.port=7310 \
--rollup.config=/etc/optimism/rollup.json

Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

op-geth Service

Create a systemd service for geth:

sudo nano /etc/systemd/system/op-geth.service

Add the following content:

[Unit]
Description=op-geth
After=network-online.target
Wants=network-online.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/bin/geth --datadir=/data/optimism --http --http.corsdomain="*" --http.vhosts="*" --http.addr=0.0.0.0 --http.api=web3,debug,eth,txpool,net,engine --ws --ws.addr=0.0.0.0 --ws.port=8546 --ws.origins="*" --ws.api=debug,eth,txpool,net,engine --syncmode=full --gcmode=archive --maxpeers=100 --authrpc.vhosts="*" --authrpc.addr=0.0.0.0 --rollup.sequencerhttp=https://seq3-rpc.prd.hypersonicl2.com --authrpc.port=8551 --authrpc.jwtsecret=/etc/optimism/jwt.txt --metrics --metrics.addr=0.0.0.0 --metrics.expensive --metrics.port=6060 --rollup.disabletxpoolgossip=false --db.engine=pebble --state.scheme=hash --bootnodes=enode://6526c348274c54e7b4184014741897eb25e12ca388f588b0265bb2246caeea87ed5fcb2d55b7b08a90cd271a53bc76decb6d1ec37f219dbe4cd3ed53a888118b@peering-02.prd.hypersonicl2.com:30303,enode://34f172c255b11f64828d73c90a60395691e89782639423d434385594dd38b434ddffb78ad411da6fd37cbda6d0f93e17ceae399ac4f2594b0d54eb8c83c27de9@peering-01.prd.hypersonicl2.com:30303

Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Step 6: Enable and Start Services

Enable and start the services to run at boot:

sudo systemctl enable op-node.service
sudo systemctl start op-node.service

sudo systemctl enable op-geth.service
sudo systemctl start op-geth.service

Monitoring Logs

You can monitor the logs for both services with the following commands: For op-node:

sudo journalctl -u op-node.service -f

For op-geth:

sudo journalctl -u op-geth.service -f