Sonic

Pensada para que puedas partir desde un servidor limpio (Ubuntu 22.04 LTS o similar) y terminar firmando bloques sin sustos.

Requisitos de hardware y red

Recurso

Mínimo recomendado

CPU

4 vCPU

RAM

32 GB

Disco

1 TB NVMe/SSD local

Banda ancha

≥ 1 Gbps simétrico y redundante

Puertos

5050 TCP + UDP (o el que redefinas con --port)

Tip: evita volúmenes en red (EBS, etc.). La latencia penaliza el consenso.

Preparación básica del servidor

# Crear un usuario sin privilegios.

sudo adduser --disabled-password sonic
sudo usermod -aG sudo sonic

Actualiza sistema, fija zona horaria, habilita UFW y abre solo el puerto 5050.

Instalar herramientas de compilación y Go ≥ 1.22

sudo apt-get update && sudo apt-get install -y build-essential git
wget https://go.dev/dl/go1.23.4.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar -xzf go1.23.4.linux-amd64.tar.gz -C /usr/local
echo 'export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' | sudo tee /etc/profile.d/golang.sh
source /etc/profile.d/golang.sh

Compilar el cliente sonicd

git clone https://github.com/0xsoniclabs/Sonic.git
cd Sonic
git fetch --tags && git checkout -b v2.0.1 tags/v2.0.1   # Sustituye por la última versión estable
make all
sudo mv build/sonic* /usr/local/bin/
sonicd version      # Comprueba la build

Cargar el genesis y preparar la base de datos

mkdir -p ~/.sonic && cd ~/.sonic
wget https://genesis.soniclabs.com/sonic-mainnet/genesis/sonic.g
GOMEMLIMIT=54GiB sonictool --datadir ~/.sonic --cache 12000 genesis \
           --mode validator sonic.g

Sincronizar hasta la “cabeza” de la cadena

GOMEMLIMIT=54GiB sonicd --datadir ~/.sonic --cache 12000 --mode validator

Espera a que la diferencia de bloques (“age”) sea de solo unos segundos.

Crear la wallet del validador

sonictool --datadir ~/.sonic account new

Transfiere ≥ 500 000 S (self-stake mínimo) a la dirección generada.

Generar la clave de firma de consenso

sonictool --datadir ~/.sonic validator new

Guarda la clave y su contraseña fuera del nodo (USB, HSM, etc.)

Registrar el validador on-chain

  1. Abre SonicScan y el contrato SFC (0xFC00FACE00000000000000000000000000000000).

  2. Ejecuta createValidator indicando:

  3. public key*, validator name, y la cantidad a stakear (≥ 500 000 S).

Espera la confirmación y apunta tu validatorID.

Arrancar el nodo en modo validador

pkill sonicd                 # Detén la instancia de sincronización
GOMEMLIMIT=50GiB sonicd \
  --datadir ~/.sonic --cache 12000 --mode validator \
  --validator.id <ID> \
  --validator.pubkey <PUBKEY> \
  --validator.password <ruta/password.txt>

Hacerlo “a prueba de reinicios” con systemd

Crea /etc/systemd/system/sonicd.service:

[Unit]
Description=Sonic Validator Node
After=network-online.target

[Service]
User=sonic
LimitNOFILE=4096
ExecStart=/usr/local/bin/sonicd --datadir /home/sonic/.sonic --cache 12000 \
          --mode validator --validator.id <ID> --validator.pubkey <PUBKEY> \
          --validator.password /home/sonic/.sonic/password.txt
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now sonicd

La línea LimitNOFILE=4096 evita el típico error de “too many open files”.

Sube un JSON accesible por HTTPS con este formato:

{
  "name": "MiValidador",
  "logoUrl": "https://miweb.com/logo.png",
  "website": "https://miweb.com",
  "contact": "mailto:[email protected]"
}

Después, llama a updateInfo en el contrato STI para enlazarlo

Seguridad: arquitectura de sentry nodes

  • ¿Por qué? Aislas tu validador de ataques DDoS.

  • Cómo: Despliega 2-3 nodos “sentry” en la nube, con IP pública.

  1. En config.toml del validador pon pex=false y lista los persistent_peers con los nodeIDs de tus sentries.

  2. En los sentry deja pex=true, añade el validador en persistent_peers y su nodeID en private_peer_ids para que no se filtre. (forum.cosmos.network)

  • Mantén las conexiones entre validador ↔ sentry en red privada/VPN.

Monitorización y alertas

Aunque sonicd aún no expone un endpoint Prometheus oficial, la práctica habitual es:

  • Node Exporter + Prometheus + Grafana para recursos del servidor.

  • Logs de journalctl -u sonicd con alertas de inactividad (> 5 min).

  • Verifica tu voting power y slashing en SonicScan o scripts RPC.

Actualizaciones y copias de seguridad

  1. Backups: ~/.sonic/keystore/* y la carpeta validator (claves de firma).

  2. Upgrade de versión: git pull && git fetch --tags && git checkout vX.Y.Z && make all

  • Para cambios de protocolo, sigue las notas de la release.

  1. Snapshots: guarda una instantánea comprimida de la DB para restauraciones rápidas (útil al crear nuevos sentries).

Solución de problemas frecuentes

Síntoma

Causa típica

Solución

too many open files

Límite ulimit bajo

Aumenta LimitNOFILE en systemd a 4096+ (hub.cosmos.network)

age de bloques no baja

Puertos/firewall

Revisa que 5050 TCP/UDP esté abierto y sin filtrado

Saliste del active set

Caída prolongada

Levanta el nodo, espera sync y verifica auto-unjail

Last updated