Skip to content

Cómo Configurar un Nodo Principal WAX Sólido

Los tokens disponibles gratuitamente y los requisitos de sistema relativamente bajos hacen que el Testnet de WAX sea un lugar ideal para aprender, sin embargo, ahora es el momento de graduarse al Mainnet de WAX.

Esta guía te proporcionará la información para construir nodos sólidos de Mainnet de WAX que manejarán las demandas de red e infraestructura que se requieren cumplir por las Guilds exitosas.

Este artículo ha sido actualizado para incorporar el proceso de construcción de software Antelope Leap.

Cómo Configurar un Nodo Principal WAX Sólido

El Mainnet de WAX, en lo que respecta a las cadenas de Antelope, tiene un requisito de infraestructura muy pesado. Por supuesto, el Mainnet de WAX está en constante crecimiento y hay numerosas formas de cumplir con estos requisitos.

Este artículo repasará un ejemplo que actualmente es válido (septiembre de 2022) y utilizado por la Guild de EOSphere, que está sirviendo a múltiples peers y millones de solicitudes de API por día.

Requisitos del Mainnet

Hardware

  • CPU de 4 núcleos / se recomienda 4Ghz+ si deseas producir bloques
  • (1) Disco de 256GB+ / SSD o NVMe de Grado Empresarial (Alta Resistencia Req.)
  • (2) Disco de 4TB+ / SAS o SATA están bien, sin embargo, se prefieren SSD o NVMe
  • 128GB+ RAM

Sistema Operativo

  • Ubuntu 18.04
  • Ubuntu 20.04 (Recomendado)
  • Ubuntu 22.04

Internet

  • Conexión moderna de banda ancha / fibra (100Mb/s sincrónicos y superior)
  • Dirección IP Pública Estática (Ya sea terminando en este nodo o reenviada con NAT)

Preparar el Entorno del Sistema Operativo

Antes de que el software de WAX sea construido y configurado, el entorno del sistema operativo, Ubuntu 20.04 en este caso, necesita ser configurado para el rendimiento y la carga que tomará.

Sistema de Archivos Zettabyte (ZFS)

Esta construcción de nodo utiliza 2 Discos Discretos para equilibrar la IO de disco y proporcionar una opción de almacenamiento más asequible para el archivo blocks.log, que actualmente es de 2.1TB y creciendo.

Disco 1 es el SSD o NVMe de grado empresarial de alta velocidad que será el disco del SO utilizado para el software de WAX, todos los archivos de configuración y los archivos de estado. Los archivos de estado son extremadamente intensivos en IO, la vida útil de un SSD basado en consumidor será corta debido al alto número de escrituras, de ahí la necesidad de usar un SSD o NVMe empresarial de alta resistencia.

Nota: Es necesario mencionar que hay mecanismos para ejecutar estos archivos de estado en memoria si tienes suficiente disponible, este tema se cubrirá en un futuro artículo.

En este ejemplo, el Disco 1 ejecutará el Sistema de Archivos Ext4 predeterminado del SO que ya se implementará durante la instalación de Ubuntu 20.04.

Disco 2 es el disco grande de capacidad SATA o SAS que albergará el archivo blocks.log. Las demandas de IO en el directorio de bloques son mucho menores que los archivos de estado y los discos de husillo de mayor capacidad y más lentos aún son adecuados.

En este ejemplo, el Disco 2 ejecutará el Sistema de Archivos ZFS que nos dará dos beneficios principales. ZFS nos permitirá usar compresión LZ4 (que actualmente es una ganancia de 1.3x) y mejorará la IO de disco con Cache de Reemplazo Adaptativo (ARC)

Implementa ZFS en el Disco 2 con la siguiente configuración:

#Instalar ZFS  
> sudo apt-get install zfsutils-linux

#Localizar el nombre del dispositivo del Disco 2  
> lsblk

#Crear Pool ZFS llamado "datavolume" en el dispositivo "sdb"  
> sudo zpool create datavolume /dev/sdb

#Habilitar compresión

 LZ4  
> sudo zfs set compression=lz4 datavolume

#Deshabilitar actualizaciones de tiempo de acceso de ZFS  
> sudo zfs set atime=off datavolume

#Establecer ARC para solo cachear metadatos  
> sudo zfs set primarycache=all datavolume

#Establecer el punto de montaje a tu ubicación preferida  
> sudo zfs set mountpoint=/home/eosphere/datavolume datavolume

#Verificar configuraciones de ZFS  
> zfs get all

Protocolo de Tiempo de Red (NTP)

Es crucial para una blockchain globalmente entrelazada tener un tiempo sincronizado en todos los nodos.

Chrony es un excelente cliente NTP y es bastante adecuado para las necesidades de Mainnet de WAX.

Instala, configura y verifica como se indica a continuación:

#Instalar Chrony  
> sudo apt install chrony

#Si es necesario, añade manualmente peers locales, estos son servidores AU  
> sudo nano /etc/chrony/chrony.conf  
  
server 0.pool.ntp.org  
server 1.pool.ntp.org  
server 2.pool.ntp.org  
server 3.pool.ntp.org

#Reiniciar Chrony  
> sudo /etc/init.d/chrony restart

#Verificar  
> chronyc sources -v  
> chronyc tracking

#Establecer tu zona horaria local si es necesario  
> sudo timedatectl set-timezone Australia/Perth

Límites de Stack y Archivos Abiertos

El software de WAX para direccionamiento de memoria y el número de solicitudes de API que recibirá un Nodo Principal de Producción de Mainnet requerirá que los límites predeterminados de Stack y Número de Archivos Abiertos de Ubuntu 20.04 sean aumentados.

Configura y verifica los límites aumentados como se indica a continuación:

> sudo nano /etc/systemd/system.conf

#Añadir la siguiente configuración  
DefaultLimitNOFILE=64000   
DefaultLimitSTACK=65536000

#Reiniciar el servidor y verificar  
> ulimit -a

Construir el Software

El software de WAX se deriva del software de código abierto de Antelope, sin embargo, ha sido modificado para adaptarse a las necesidades de la Red del Protocolo WAX.

Actualmente, la construcción y versión del software de WAX aceptada por el Productor de Bloques es v3.1.0wax01 creada por cc32d9, quien es miembro de la Guild de EOS Amsterdam

La última etiqueta de construcción de wax está disponible actualmente en el Github de cc32d9

Proceso de Construcción

Este ejemplo utiliza Ubuntu Linux para construir el software de WAX desde la fuente siguiendo el proceso a continuación:

> cd ~

> sudo apt install -y file

> git clone https://github.com/cc32d9/wax-leap.git

> cd wax-leap

> git checkout v3.1.0.wax01 

> git submodule update --init --recursive

> sudo bash scripts/install_deps.sh

> mkdir build

# Si es necesario, sustituye $(nproc) abajo con el número de trabajos que tu servidor puede sostener, sugiero 4GB RAM requeridos / trabajo

> nice bash scripts/pinned_build.sh ~/wax-leap/build/leap-deps ~/wax-leap/build $(nproc)

# Los binarios se encuentran en ~/wax-leap/build/programs

Configuración

Ahora que se ha compilado una construcción limpia del software de WAX, vamos a configurarlo para operar en el Mainnet de WAX.

Para configurar e iniciar el nodo se utilizará nodeos, nodeos es el daemon del servicio principal que se ejecuta en cada nodo de la Red del Protocolo WAX.

nodeos puede ser configurado para procesar contratos inteligentes, validar transacciones, producir bloques que contengan transacciones válidas y confirmar bloques para registrarlos en la blockchain.

Las funciones operativas principales de nodeos son; ejecutarlo como un Productor de Bloques, Punto Final de API de Red, Nodo Semilla P2P o Nodo de Historial de Estado. Típicamente en una red ocupada como el Main

net de WAX, separarías estas funciones en servidores físicamente discretos.

En este ejemplo de Mainnet de WAX, harás que tu nodo se conecte a otros peers de la red, ofrezca un servicio de Nodo Semilla P2P y haga que el nodo esté disponible como un Punto Final de API de Red. Este nodo no proporcionará soporte de consulta de datos históricos.

nodeos requiere dos archivos para conectarse a peers y ejecutarse en el Mainnet de WAX:

config.ini

Crea un config.ini predeterminado ejecutando nodeos sin configuración según el comando a continuación:

> mkdir ~/waxdata

> cd ~/wax-leap/build/programs/nodeos

> ./nodeos --data-dir ~/waxdata --config-dir ~/waxdata

Luego podrás editar el recién creado config.ini y ver todos los parámetros disponibles:

> cd ~/waxdata

> nano config.ini

Ahora edita el config.ini y añade las siguientes configuraciones:

# the location of the blocks directory on Disk 2  
blocks-dir = /home/eosphere/datavolume/blocks

wasm-runtime = eos-vm-jit
chain-state-db-size-mb = 131072  
chain-state-db-guard-size-mb = 1024  
enable-account-queries = true  
http-server-address = 0.0.0.0:8888  
access-control-allow-origin = *  
access-control-allow-headers = Origin, X-Requested-With, Content-Type, Accept  
http-max-response-time-ms = 100  
verbose-http-errors = true  
http-validate-host = false  
p2p-listen-endpoint = 0.0.0.0:9876

# 3dkrenderwax: FI, wax-peer  
p2p-peer-address = peer.3dkrender.com:9880  
  
# 3dkrenderwax: FI, query  
p2p-peer-address = query.3dkrender.com:9880  
  
# amsterdamwax: NL, Amsterdam  
p2p-peer-address = wax.eu.eosamsterdam.net:9101  
  
# blacklusionx: DE, Germany  
p2p-peer-address = peer1.wax.blacklusion.io:4646  
  
# blokcrafters: US, Reston, Virginia  
p2p-peer-address = wax-seed1.blokcrafters.io:9876  
  
# blokcrafters: US, Reston, Virginia  
p2p-peer-address = wax-seed2.blokcrafters.io:9876  
  
# bountyblokbp: US, UnitedStates  
p2p-peer-address = p2p.wax.bountyblok.io:29876  
  
# cryptolions1: DE, Germany-Finland  
p2p-peer-address = wax.cryptolions.io:9876  
  
# csxcommunity: DE, Nuremberg,Bavaria  
p2p-peer-address = wax.csx.io:9876  
  
# dapplica: DE, Germany-Finland  
p2p-peer-address = wax.dapplica.io:9876  
  
# eosarabianet: DE, Munich  
p2p-peer-address = p2p-wax.eosarabia.net:9876  
  
# eosauthority: DE, Falkenstein  
p2p-peer-address = node-wax.eosauthority.com:10301  
  
# eosauthority: FI, Helsinki  
p2p-peer-address = node-wax-p2p.eosauthority.com:10301  
  
# eosdublinwow: FI, Finland  
p2p-peer-address = wax.p2p.eosdublin.io:9876  
  
# eoseouldotio: JP, Seoul  
p2p-peer-address = p2p.wax.eoseoul.io:29876  
  
# eosiodetroit: IN, wax-seed1-do-blr1  
p2p-peer-address = p2p.wax.eosdetroit.io:1337  
  
# eosphereiobp: AU, Sydney  
p2p-peer-address = peer1-wax.eosphere.io:9876  
  
# eosphereiobp: CA, Beauharnois  
p2p-peer-address = peer2-wax.eosphere.io:9876  
  
# greeneosiobp: DE, Germany  
p2p-peer-address = p2p1.wax.greeneosio.com:9876  
  
# ledgerwiseio: FI, LB  
p2p-peer-address = waxp2p.ledgerwise.io:21877  
  
# nation.wax: CA, Canada  
p2p-peer-address = wax.eosn.io:9876  
  
# niftylifewax: FI, Helsinki, Finland  
p2p-peer-address = p2p.niftylife.io:9876  
  
# niftylifewax: DE, Berlin, Germany  
p2p-peer-address = p2p2.niftylife.io:9876  
  
# oneinacilian: GB, United Kingdom  
p2p-peer-address = p2p.oiac.io:9896  
  
# teamgreymass: DE, FRA  
p2p-peer-address = wax.greymass.com:35777  
  
# wax.eastern: DE, Frankfurt  
p2p-peer-address = p2p.waxeastern.cn:9876  
  
# waxhiveguild: FI, Finnland  
p2p-peer-address = peer1.hivebp.io:9876  
  
# waxhiveguild: DE, Germany  
p2p-peer-address = peer2.hivebp.io:9876  
  
# waxswedenorg: SE, Sweden  
p2p-peer-address = p2p.waxsweden.org:35777  
  
# wizardsguild: US, wax-seed  
p2p-peer-address = wax-bp.wizardsguild.one:8876

# Always check for the latest PeerList - https://validate.eosnation.io/wax/reports/config.html

agent-name = "<yourname> WAX Mainnet"  
max-clients = 100  
sync-fetch-span = 500  

plugin = eosio::http_plugin  
plugin = eosio::chain_plugin  
plugin = eosio::chain_api_plugin

genesis.json

Estos son los parámetros de estado inicial requeridos por cada nodo nuevo al iniciar en el Mainnet de WAX. Crea el archivo de la siguiente manera:

> cd ~/waxdata

> nano genesis.json

Añade los siguientes parámetros al archivo genesis.json para el Mainnet Público de WAX:

{  
  "initial_timestamp": "2019-06-05T12:00:00.000",  
  "initial_key": "EOS8i2pkwtv2JmdYWNJdcy5BcJ7wCE5q6mpE1hwT25HdgHMzeRday",  
  "initial_configuration": {  
    "max_block_net_usage": 1048576,  
    "target_block_net_usage_pct": 1000,  
    "max_transaction_net_usage": 524288,  
    "base_per_transaction_net_usage": 12,  
    "net_usage_leeway": 500,  
    "context_free_discount_net_usage_num": 20,  
    "context_free_discount_net_usage_den": 100,  
    "max_block_cpu_usage": 500000,  
    "target_block_cpu_usage_pct": 2000,  
    "max_transaction_cpu_usage": 150000,  
    "min_transaction_cpu_usage": 100,  
    "max_transaction_lifetime": 3600,  
    "deferred_trx_expiration_window": 600,  
    "max_transaction_delay": 3888000,  
    "max_inline_action_size": 4096,  
    "max_inline_action_depth": 4,  
    "max_authority_depth": 6  
  }  
}

Ejecutando Nodeos

Ahora que el config.ini ha sido configurado y los parámetros iniciales de la cadena Mainnet de WAX genesis.json han sido creados, ahora puedes unirte a la red y sincronizar el nodo.

Usa screen para mantener tu sesión activa incluso cuando te desconectes, uso a continuación:

#Crea una nueva sesión de screen  
  
> screen -US wax 

#Desconecta la sesión de screen  
  
> ctrl-a+d 

#Reconecta la sesión de screen  
  
> screen -r wax

Ejecuta nodeos con indicaciones para el config, directorio de datos y archivo genesis:

> cd ~/wax-leap/build/programs/nodeos

> nodeos --data-dir ~/waxdata --config-dir ~/waxdata --genesis-json ~/waxdata/genesis.json

Tu nodo Mainnet de WAX ahora comenzará a sincronizarse con los peers configurados hasta que se ponga al día y esté actualizado con la cadena Mainnet de WAX.

Es posible acelerar el proceso de sincronización comenzando con una instantánea y un blocks.log válido, el proceso se explica en la Guía de Snapshots de WAX.


Estas Guías Técnicas para Desarrolladores de WAX se crean utilizando material fuente de la Serie de Cómo Hacer Técnico de WAX de EOSphere

Asegúrate de hacer cualquier pregunta en el Telegram de EOSphere