Introducción
¡Ahora es un buen momento para aprender cómo ejecutar un validador en NEAR!
¿Qué opinas de un programa para incorporar muchos más validadores? ¿Llevar NEAR a 1k en los próximos meses?[/caption>
Entonces, en esta guía, te mostraré cómo ejecutar un validador en la red principal de NEAR. ¡Esta guía fácil y paso a paso te ayudará a unirte rápidamente y validar la red de NEAR, contribuir a su descentralización y resistencia, y ganar recompensas como validador en el camino!
Como miembro de la comunidad de NEAR, he estado ejecutando un nodo de NEAR durante más de dos años, comenzando con Stake Wars 3 (2022). En esta guía, te proporcionaré un tutorial detallado y paso a paso para que puedas configurar tu propio nodo completo de NEAR basado en mi experiencia todos estos años.
¡Estoy emocionado de compartir todo lo que he aprendido, ofreciendo instrucciones claras y detalladas para guiarte a través del proceso de configurar tu propio nodo validador en NEAR! ¡Vamos a alcanzar los 1000 validadores activos en NEAR!
¿Por qué deberías ejecutar un nodo de NEAR?
NEAR es la blockchain con una gran cantidad de actividades en el espacio web3, pero el requisito mínimo para ejecutar un nodo es relativamente ligero, económico de mantener y mucho más fácil de mantener en comparación con otras redes.
Principales blockchains por actividades, fuente: Artemis.
Y aquí está el requisito mínimo de hardware para ejecutar un nodo en algunas cadenas populares (por actividades de red)
Requisitos de los validadores de NEAR[/caption>
Básicamente, el requisito para un nodo de NEAR es como una computadora portátil de consumo que puedes encontrar en casi cualquier lugar (sería mejor ejecutarlo en una computadora portátil para juegos en mi humilde opinión 😆).Lo genial de NEAR es que no necesitas un mainframe (> 512GB de RAM, 300TB de espacio en disco) ni siquiera tener que configurar un centro de base de datos completo para ejecutarlo y realmente puedes ser rentable sin cubrir los costos de la Fundación, ¡a diferencia de otras cadenas!
¡Por supuesto, para el nodo, cuanto más potente sea la máquina, mejor funcionará!
Personalmente ejecuto mi nodo en una máquina con 32 GB de RAM y 2TB NVME SSD en 12 núcleos de CPU, lo cual cuesta alrededor de 70$/mes.
Otras razones son cuando necesitas ejecutar aplicaciones que dependen en gran medida del rendimiento y/o disponibilidad de RPC, desarrollar e implementar contratos en un nodo local (independiente y aislado) a veces llamado “localnet” o extraer rápidamente datos de la cadena de bloques que se pueden utilizar para análisis de cadena, explorador de bloques, etc…
¡Esa es prácticamente la razón para ser optimista 🐂 sobre la ejecución de un nodo NEAR, así que comencemos ahora!
Instalación
Requisitos
- Puedes usar cualquier distribución de Linux, pero para esta guía usaré Ubuntu, el requisito de versión de Ubuntu es 20.04 o más reciente, el mío está ejecutando 22.04
- Requisito mínimo de hardware:
- 8GB de RAM (se recomiendan 16GB+)
- ~1 TB de NVME SSD (se recomiendan 1.5TB+)
- CPU con 8 núcleos, características de CPU: CMPXCHG16B, POPCNT, SSE4.1, SSE4.2, AVX, SHA-NI
- Ancho de banda de red de 1Gbit.
Configuración
Configurar la mainnet de NEAR
Necesitarás una dirección de NEAR para ejecutar el nodo, esta dirección también recibirá recompensas de red por ser un validador activo.
- Crea una dirección de NEAR con nombre GRATUITA aquí: https://wallet.meteorwallet.app Creé lncvalidator.near para esta guía
- Deposita alrededor de 31 NEAR en la dirección, se necesitan 30 NEAR para crear el grupo de participación y se bloquearán para almacenamiento, puedes recuperar esos NEAR más tarde si ya no ejecutas el nodo.
- Importa la cuenta a https://app.mynearwallet.com/
Instalar bibliotecas y Nearcore
Ahora viene la parte divertida, configuremos el nodo NEAR, inicia sesión en tu servidor y ejecuta los siguientes comandos primero para actualizar el sistema operativo, instalar herramientas y bibliotecas (near-cli, node, Python, Git, docker…).
Ten en cuenta: ¡Todos los comandos en esta guía necesitarán ejecutarse bajo el usuario root!
sudo apt update && sudo apt upgrade -y && sudo apt install -y git binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev cmake gcc g++ python3 docker.io protobuf-compiler libssl-dev pkg-config clang llvm awscli tmux jq ccze rclone
Instalar Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
rustup -V
Durante la instalación, si se pregunta, ¡simplemente presiona Sí y elige lo predeterminado para todo!
Instalar NEAR Rust CLI y la extensión NEAR-Validator
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/near/near-cli-rs/releases/latest/download/near-cli-rs-installer.sh | sh && curl --proto '=https' --tlsv1.2 -LsSf https://github.com/near-cli-rs/near-validator-cli-rs/releases/latest/download/near-validator-installer.sh | sh && source $HOME/.cargo/env
Clonar el repositorio de nearcore, elegir la última rama estable para mainnet y compilar el nearcore desde el origen
cd ~ && git clone https://github.com/near/nearcore && cd nearcore/ && git checkout <VERSION>
make release
echo 'export NEAR_ENV=mainnet' >> ~/.bashrc
source ~/.bashrc
para el <VERSION>, obtener la última versión de lanzamiento de mainnet aquí: https://github.com/near/nearcore/releases, por ejemplo, la versión actual es 2.4.0, por lo que el comando de checkout será git checkout 2.4.0
Este proceso de compilación (make release) tomará alrededor de 15 minutos, necesitas esperar antes de pasar a los siguientes comandos.
Autorizar billetera
near login
Nota: Este comando abre un navegador web que permite la autorización de una clave de acceso completa para ser copiada localmente.
1 – Copia el enlace en tu navegador
2 – Concede acceso a Near CLI, elige “Almacenar la clave de acceso en mi llavero” desde el comando CLI.
3 – Después de conceder, ingresa tu dirección de validador (lncvalidator.near en este caso) y presiona Enter
Inicializar y comenzar el nodo
Definiciones:
- <pool_id> o pool_id – tu nombre de grupo, por ejemplo lncvalidator
- <full_pool_id> o full_pool_id – xxx.poolv1.near, donde xxx es tu pool_id
- <accountId> o accountId – xxx.near donde xxx es tu nombre de cuenta, por ejemplo lncvalidator.near
cd ~/nearcore && target/release/neard init --chain-id="mainnet" --account-id=<full_pool_id>
Establece tu <full_pool_id>, por ejemplo: xxx.poolv1.near, donde xxx es tu pool_id, por ejemplo: lncvalidator.poolv1.near
validator_key.json generado después del comando anterior en la carpeta ~/.near/ debe ser algo así:
La account_id debe coincidir con el id del contrato del grupo de participación o no podrás firmar/verificar bloques.
Nota: Si tu nodo tiene menos de 1TB de espacio en disco, deberás reducir “epoch data to keep” para evitar problemas de disco lleno mediante
actualiza ~/.near/config.json y reduce “gc_num_epochs_to_keep” a 3 en lugar de 5 por defecto:
Configura Systemd para que el nodo siempre se ejecute con el sistema
sudo nano /etc/systemd/system/neard.service
Pega:
Description=NEARd Daemon Service [Service] Type=simple User=root WorkingDirectory=/root/.near ExecStart=/root/nearcore/target/release/neard run Restart=on-failure RestartSec=30 KillSignal=SIGINT TimeoutStopSec=45 KillMode=mixed [Install] WantedBy=multi-user.target
Después de eso, habilita el servicio:
sudo systemctl enable neard
Sincroniza datos usando NEAR Peer-to-peer state sync:
NEAR tiene una sincronización de estado descentralizada, un protocolo tipo torrent para que los nodos sincronicen datos entre sí sin depender de proveedores de instantáneas, para sincronizar con p2p state sync, necesitarás obtener la última lista de nodos de arranque de la red NEAR y actualizar el archivo config.json y luego iniciar el servicio neard, aquí está el comando:
curl -s -X POST https://rpc.mainnet.near.org -H "Content-Type: application/json" -d '{ "jsonrpc": "2.0", "method": "network_info", "params": [], "id": "dontcare" }' | jq --arg newBootNodes "$(curl -s -X POST https://rpc.mainnet.near.org -H "Content-Type: application/json" -d '{ "jsonrpc": "2.0", "method": "network_info", "params": [], "id": "dontcare" }' | jq -r '.result.active_peers as $list1 | .result.known_producers as $list2 | $list1[] as $active_peer | $list2[] | select(.peer_id == $active_peer.id) | "(.peer_id)@($active_peer.addr)"' | paste -sd "," -)" '.network.boot_nodes = $newBootNodes' ~/.near/config.json > ~/.near/config.tmp && mv ~/.near/config.json ~/.near/config.json.backup && mv ~/.near/config.tmp ~/.near/config.json
después de eso, simplemente reinicia el nodo (sudo systemctl restart neard
) y verás algo como esto:
Espera un tiempo (quizás 10 horas) y habrás terminado, ¡sigue el siguiente paso para convertirte en un validador activo!
Sincroniza datos con instantánea:Para sincronizar los datos más rápido, podemos descargar la instantánea de los últimos epochs de NEAR en lugar de esperar a que el nodo se sincronice con otros pares, este proceso tomará algunas horas, se espera que el tamaño de los datos sea de alrededor de 580GB.
Ejecuta esto para descargar la instantánea y comenzar el nodo (muchas gracias a FastNEAR por mantener esto):
curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/fastnear/static/refs/heads/main/down_rclone.sh | DATA_PATH=~/.near/data CHAIN_ID=mainnet RPC_TYPE=fast-rpc bash && sudo systemctl restart neard
¡El comando sincronizará los datos y reiniciará el neard!
Si necesitas hacer un cambio en el servicio en el archivo config.json, el nodo también debe ser recargado:
sudo systemctl restart neard
Ver registros
Comando:
journalctl -n 100 -f -u neard | ccze -A
Verifica el estado de ejecución del nodo validador. Si ves algo como la imagen de arriba, significa que el nodo está completamente sincronizado, ¡y estás listo para convertirte en un validador activo!
Convertirse en un Validador Activo
Para convertirse en un validador y entrar en el conjunto de validadores para ayudar a asegurar la red y ganar recompensas, se deben cumplir un conjunto mínimo de criterios de éxito:
- El nodo debe estar completamente sincronizado
- El archivo validator_key.json debe estar en su lugar
- El contrato debe estar inicializado con la clave pública en validator_key.json
- El account_id debe estar configurado en el id del contrato de la piscina de participación
- Debe haber suficientes delegaciones para cumplir con el precio mínimo de asiento. Consulta el precio del asiento aquí o simplemente ejecuta este comando
near-validator validators network-config mainnet next
- Se debe enviar una propuesta pinging al contrato
- Una vez que se acepta una propuesta, un validador debe esperar 2-3 epochs para entrar en el conjunto de validadores
- Una vez en el conjunto de validadores, el validador debe producir más del 90% de los bloques asignados o tu nodo será expulsado
Verifica el estado de ejecución del nodo validador. Si aparece “Validador”, tu pool está seleccionado en la lista actual de validadores.
Despliega tu contrato de piscina de participación
NEAR utiliza una fábrica de piscinas de participación con un contrato de participación en lista blanca para garantizar que los fondos de los delegadores estén seguros. Para ejecutar un validador en NEAR, una piscina de participación debe ser desplegada en una cuenta de NEAR e integrada en un nodo validador de NEAR. Los delegadores deben usar una interfaz de usuario o la línea de comandos para apostar en la piscina. Una piscina de participación es un contrato inteligente que se despliega en una cuenta de NEAR.
Nota: EL CONTRATO DE LA PISCINA DE PARTICIPACIÓN NO TENDRÁ ACCESO DE ESCRITURA A LOS FONDOS O DATOS DE TODAS LAS SUBCUENTAS, esto también se aplica para cualquier subcuenta en NEAR, ¡eso significa que tu saldo de participación está seguro!
Despliega un Contrato de Piscina de ParticipaciónLlama a la fábrica de pools de staking, crea un nuevo pool de staking con el nombre especificado y lo despliega en la cuenta indicada.
Para Mainnet
near contract call-function as-transaction poolv1.near create_staking_pool json-args '{"staking_pool_id": "<pool_id>", "owner_id": "<accountId>", "stake_public_key": "<public_key>", "reward_fee_fraction": {"numerator": 5, "denominator": 100}}' prepaid-gas '100.0 Tgas' attached-deposit '30 NEAR' sign-as <accountId> network-config mainnet sign-with-keychain
Del ejemplo anterior, debes reemplazar:
- pool_id: Nombre del pool de staking
ejemplo “lncvalidator” - owner_id:: La cuenta NEAR que gestionará el pool de staking. Normalmente tu cuenta principal de NEAR.
- public_key: La clave pública en tu archivo validator_key.json.
- 5: La comisión que cobrará el pool (por ejemplo, en este caso 5 sobre 100 es el 5% de comisión), normalmente los validadores cobran una comisión del 5%, si estableces la comisión tan alta, nadie apostará en tu nodo 😉
- accountId: La cuenta NEAR que despliega el pool de staking.
Asegúrate de tener al menos 30 NEAR disponibles, es el mínimo requerido para almacenamiento.
El comando final se verá algo así:
near contract call-function as-transaction poolv1.near create_staking_pool json-args '{"staking_pool_id": "lncvalidator", "owner_id": "lncvalidator.near", "stake_public_key": "ed25519:A9RdmNFxxx", "reward_fee_fraction": {"numerator": 5, "denominator": 100}}' prepaid-gas '100.0 Tgas' attached-deposit '30 NEAR' sign-as lncvalidator.near network-config mainnet sign-with-keychain
Para cambiar los parámetros del pool, como cambiar la cantidad de comisión cobrada al 1% en el ejemplo a continuación, utiliza este comando:
near contract call-function as-transaction <full_pool_id> update_reward_fee_fraction json-args '{"reward_fee_fraction": {"numerator": 1, "denominator": 100}}' prepaid-gas '100.0 Tgas' attached-deposit '0 NEAR' sign-as <account_id> network-config mainnet sign-with-keychain
Nota: full_pool_id: <pool_id>.poolv1.near , en este caso es lncvalidator.poolv1.near .
Verás algo como esto:
Si hay un “True” al final. Tu pool está creado.
¡Felicidades! Ahora has configurado tu pool de staking y está en funcionamiento 🚀🚀🚀🚀
Administra tu contrato de pool de staking
Algunos comandos útiles que debes conocer:
Recupera el ID del propietario del pool de staking
near contract call-function as-read-only <full_pool_id> get_owner_id json-args {} network-config mainnet now
Emite este comando para recuperar la clave pública que la red tiene para tu validador
near contract call-function as-read-only <full_pool_id> get_staking_key json-args {} network-config mainnet now
Si la clave pública no coincide, puedes actualizar la clave de staking de esta manera (reemplaza la clave pública a continuación con la clave en tu archivo validator.json)
near contract call-function as-transaction <full_pool_id> update_staking_key json-args '{"stake_public_key": "<public key>"}' prepaid-gas '100.0 Tgas' attached-deposit '0 NEAR' sign-as <accountId> network-config mainnet sign-with-keychain
Trabajando con Pools de Staking
NOTA: Tu validador debe estar completamente sincronizado antes de emitir una propuesta o depositar fondos.
Propuestas y Pings
Para obtener un asiento de validador, primero debes enviar una propuesta con una cantidad adecuada de stake. Las propuestas se envían para el epoch +2. Esto significa que si envías una propuesta ahora, si es aprobada, obtendrías el asiento en 3 epochs. Debes enviar una propuesta cada epoch para asegurar tu asiento. Para enviar una propuesta usamos el comando ping. También se envía una propuesta si se envía un comando de stake o unstake al contrato de staking pool.
Cabe destacar que un ping también actualiza los saldos de staking para tus delegadores. Deberías emitir un ping cada epoch para mantener actualizadas las recompensas reportadas en el contrato de pool. Podrías configurar un ping usando un trabajo cron con un script de ping aquí.
Crea un nuevo archivo en /home/root/scripts/ping.sh y llénalo:
#!/bin/sh # Llamada de ping para renovar Propuesta agregada a crontab export NEAR_ENV=mainnet export LOGS=/home/root/logs export POOLID=<full_pool_id> export ACCOUNTID=<account_id> echo "---" >> $LOGS/all.log date >> $LOGS/all.log near contract call-function as-transaction $POOLID ping json-args '{"stake_public_key": "<public key>"}' prepaid-gas '100.0 Tgas' attached-deposit '0 NEAR' sign-as $ACCOUNTID network-config mainnet sign-with-keychain >> $LOGS/all.log
Crea la carpeta de logs:
mkdir $HOME/logs
Cambia los permisos de ejecución para el archivo ping.sh:
chmod +x $HOME/scripts/ping.sh
Crea un nuevo crontab, personalmente lo configuro para que se ejecute cada 8 horas:
crontab -e
Llena esto y guarda
0 */8 * * * sh /home/root/scripts/ping.sh
Lista el crontab para ver si está corriendo:
crontab -l
Revisa tus logs
cat $HOME/logs/all.log
¡Eso es todo, ahora necesitas tener suficientes tokens delegados para ser un validador activo, bienvenido al descentralizado Protocolo NEAR y ganar recompensas en el camino! 🚀🚀🚀🚀 💪💪💪💪 🛳️🛳️🛳️👽👽👽🛸🛸🛸
Optimizaciones de red
Para optimizar la configuración de red para un mejor rendimiento del validador, ejecuta los siguientes comandos:
MaxExpectedPathBDP=8388608 sudo sysctl -w net.core.rmem_max=$MaxExpectedPathBDP sudo sysctl -w net.core.wmem_max=$MaxExpectedPathBDP sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 $MaxExpectedPathBDP" sudo sysctl -w net.ipv4.tcp_wmem="4096 16384 $MaxExpectedPathBDP" sudo sysctl -w net.ipv4.tcp_slow_start_after_idle=0
Estos cambios no persisten después de reiniciar el sistema. Para aplicarlos automáticamente al inicio, agrega lo siguiente en /etc/sysctl.d/local.conf:
net.core.rmem_max = 8388608 net.core.wmem_max = 8388608 net.ipv4.tcp_rmem = 4096 87380 8388608 net.ipv4.tcp_wmem = 4096 16384 8388608 net.ipv4.tcp_slow_start_after_idle = 0
Opcional: Enviar información de la piscina
Agregar información de la piscina ayuda a los delegadores y también ayuda con la difusión para actualizaciones y otros anuncios importantes: https://github.com/zavodil/near-pool-details.
Los campos disponibles para agregar son: https://github.com/zavodil/near-pool-details/blob/master/FIELDS.md.
La información identificativa que los validadores deben proporcionar son: nombre, descripción, URL, telegram, twitter,…
Comandos de ejemplo:
Cambiar nombre y descripción del validador:
- Reemplaza <full_pool_id> con la dirección de tu piscina, por ejemplo: lncvalidator.poolv1.near
- Reemplaza <accountId> con la dirección de tu billetera autenticada, lncvalidator.near en este caso
near contract call-function as-transaction pool-details.near update_field json-args '{"pool_id": "<full_pool_id>", "name": "name", "value": "LearnNEARClub"}' prepaid-gas '100.0 Tgas' attached-deposit '0 NEAR' sign-as <accountId> network-config mainnet sign-with-keychain near contract call-function as-transaction pool-details.near update_field json-args '{"pool_id": "<full_pool_id>", "name": "description", "value": "LearnNEARClub Validator!"}' prepaid-gas '100.0 Tgas' attached-deposit '0 NEAR' sign-as <accountId> network-config mainnet sign-with-keychain
Ver tus informaciones de validador desde la CLI:
near contract call-function as-read-only pool-details.near get_fields_by_pool json-args '{"pool_id":"<full_pool_id>"}' network-config mainnet now
Ver informaciones del validador en NEARScope o NEARBlocks:
La información se mostrará así: (fuente: NearScope)
Mantenimiento del nodo
Es importante mantener tu nodo y mantenerlo funcionando de manera estable, aquí tienes algunas cosas importantes que necesitas saber.
Códigos de estado del nodo
- ROJO: ¡actualiza tu nodo lo ANTES POSIBLE! Algo crítico ha sucedido, repito, ¡actualízalo LO MÁS PRONTO POSIBLE!
- AMARILLO: necesitas actualizar el nodo, pero no es demasiado urgente por ahora.
Más información aquí: https://near-nodes.io/maintenance/maintenance#runtime-alerts
Comunidad de Validadores de NEAR en Telegram
Únete al grupo para obtener actualizaciones del nodo, soporte y más, por favor utiliza este grupo para preguntas y discusiones relacionadas con la ejecución de un validador en NEAR.
https://t.me/near_validators
Actualizar nueva versión del nodo
Cuando haya una nueva versión del nodo, recibirás una notificación en el grupo de Validadores de Telegram, ejecuta este comando para actualizar el nodo.
cd ~/nearcore && git fetch && export NEAR_RELEASE_VERSION=<node_version> && git checkout $NEAR_RELEASE_VERSION && make release && sudo systemctl stop neard && sudo systemctl start neard
Reemplaza <node_version> con la versión correcta de la versión de nearcore.
Monitorear el rendimiento del nodo
Monitorea el nodo de manera profesional:
https://near-nodes.io/validator/validator-bootcamp#grafana
Monitorea el nodo de manera informal:
He creado un pequeño bot para ayudarte a monitorear rápidamente el tiempo de actividad del validador aquí, puedes echar un vistazo:
https://x.com/cuongdc_real/status/1839769081723138239
Retira tus recompensas
Básicamente solo inicia sesión en cualquier billetera en NEAR y reclama tus recompensas de validador en la sección de staking de la billetera.
Comandos útiles
Algunos otros comandos útiles que deberías conocer:
- Obtener la lista de validadores activos y el precio actual del asiento, su rendimiento actual:
near-validator validators network-config mainnet now
- Próxima lista de validadores:
near-validator validators network-config mainnet next
- Ver el saldo apostado del validador:
near-validator staking view-stake <full_pool_id> network-config mainnet now
Básicamente solo inicia sesión en cualquier billetera en NEAR y reclama tus recompensas de validador en la sección de staking de la billetera.
Recursos
- Concepto de Validadores de NEAR: https://docs.near.org/concepts/basics/validators
- Nodos de NEAR – La documentación oficial de Validadores de NEAR que todos los validadores deberían revisar: https://near-nodes.io/
- Calcular recompensas de staking de NEAR: https://www.stakingrewards.com/asset/near-protocol
- Estado de la Cadena de NEAR en Twitter: https://x.com/NEARChainStatus
- Ver información de validadores en estos sitios web
Conclusión
¡Muchas gracias por leer hasta aquí! Eso es todo lo que quería compartir sobre cómo ejecutar un validador en NEAR.
En mi experiencia, ejecutar un nodo de NEAR es sencillo y casi sin errores, con muchos menos problemas en comparación con otras cadenas de alta actividad. NEAR requiere significativamente menos recursos del servidor debido a su fragmentación con Nightshade. ¡Además, ganas recompensas en el camino!
Hablando de recompensas, pronto, los validadores de NEAR también tendrán la oportunidad de ganar recompensas por ejecutar la red MPC, que contribuye al servicio de Abstracción de Cadena de NEAR para el ecosistema Web3 más amplio. Con su visión de construir la Web Abierta a través de la Abstracción de Cadena y IA Propia del Usuario, NEAR está preparado para ver aún más actividad en la red, brindando a los validadores la oportunidad de ganar recompensas adicionales.
Como validador, tu papel es crucial para asegurar una red de alto rendimiento como NEAR. Al proteger NEAR, también estás apoyando muchas aplicaciones construidas en la red, como Kaiching (una aplicación de devolución de efectivo utilizada por millones en Singapur), Sweatcoin (una aplicación de salud y fitness con 100 millones de usuarios en todo el mundo), HOT (una billetera Web3 que sirve como puerta de entrada para nuevos usuarios de criptomonedas) y Ref Finance (un intercambio descentralizado en NEAR).
Estas aplicaciones sirven a millones de usuarios diariamente, ¡y como validador, eres esencial para ayudarles a mantener sus servicios y crecer!