Tutorial: setting up a Near validator node in Stakewars testnet (spanish)

Near Protocol is a powerfull and blazing fast L1 blockchain.

En el artículo de hoy traemos un tutorial para todos aquellos interesados en montar un nodo validador o chunk only producer para la red de Near.

Near protocol es una de las blockchains L1 más potentes e interesantes de todo el ecosistema crypto, así que si no la conoces estás tardan en hacer tu propia investigación (DYOR), y si eres holder del token NEAR echa un vistazo a nuestro validador para delegar tus tokens con nosotros.

Sin más dilación comenzamos el tutorial.

Crear cartera Near

La cartera Near está basada en una aplicación web de navegador, para acceder a ella visita la web de wallet Near de la testnet.

Pulsamos en el botón de “Create Account”. Luego elegimos un nombre que esté disponible para nuestra cuenta pulsamos en el botón “Reserve My Account ID”.

Cómo método elejimos el de la frase de seguridad en este tutorial, aunque bien podrías usar cualquier otro, especialmente el de la billetera fría Ledger.

Una vez le damos a continuar se nos mostrará un pantallas con las palabras de la frase de seguridad, almacenalas en un lugar seguro para poder recuperar tu cuenta.

En los dos pasos siguientes se nos pedirá confirmar nuestra frase de seguridad. Y voilá ya tenemos nuestra cuenta creada, y además con suficientes tokens para poder hacer pruebas y staking en nuestro validador más adelante.

Instalar Near CLI

El siguiente paso es instalar la interfaz de línea de comandos de Near (CLI). Para ellos hemos de seguir los siguientes pasos

sudo apt update -ycurl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -  
sudo apt install build-essential nodejs
PATH="$PATH"
# comprobamos que se han instalado correctamente node y npm
node -v
npm -v
# instalamos el CLI
sudo npm install -g near-cli
# creamos la variable de entorno para stakewars
export NEAR_ENV=shardnet
echo 'export NEAR_ENV=shardnet' >> ~/.bashrc
# comprobamos que funciona el CLI ejecutando un comando
near validators current

Instalar Nodo Near

Lo siguiente es instalar el software del nodo de Near junto con todas sus dependencias, también descargaremos un snapshot de la base de datos de la blockchain para q el proceso de sincronización sea más rápido.

# comprobamos que nuestro servidor soporta los requisitos hardware
lscpu | grep -P '(?=.*avx )(?=.*sse4.2 )(?=.*cx16 )(?=.*popcnt )' > /dev/null \
&& echo "Supported" \
|| echo "Not supported"
# instalamos dependencias
sudo apt install -y git binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev cmake gcc g++ python docker.io protobuf-compiler libssl-dev pkg-config clang llvm cargo
sudo apt install python3-pipUSER_BASE_BIN=$(python3 -m site --user-base)/bin
export PATH="$USER_BASE_BIN:$PATH"
sudo apt install clang build-essential makecurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsource $HOME/.cargo/env# descargamos el software del nodo near y lo compilamos con Rust
git clone https://github.com/near/nearcore
cd nearcore
git fetch
git checkout master
cargo build -p neard --release --features shardnet# inicializamos el nodo y descargamos el fichero génesis
./target/release/neard --home ~/.near init --chain-id shardnet --download-genesis
# modificamos el fichero de configuración con los nodos de arranque (bootnodes)
rm ~/.near/config.json
wget -O ~/.near/config.json https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/config.json
# descargamos el snapshot de la base de datos para sincronización rápida del nodo
sudo apt-get install awscli -y
cd ~/.near
aws s3 --no-sign-request cp s3://build.openshards.io/stakewars/shardnet_noarchive/data.tar.gz .
tar -xzvf data.tar.gz
# ejecutamos el nodo y esperamos a que termine de sincronizarse con la blockchain
cd ~/nearcore
./target/release/neard --home ~/.near run

Activar el Nodo como Validador

Para activar el nodo como validador necesitamos hacer login con el CLI con la wallet Near que hemos creado, y crear las claves con las que operará el nodo validador para firmar bloques de la blockchain. Lo primero es hacer login, ejecutamos el comando

near login

que nos devolverá una url, que copiaremos y pegaremos en nuestra navegador. Se nos abriŕa la wallet de Near para darle permisos al CLI para poder hacer operaciones firmadas con la cuenta que queramos (en este caso la que hemos creado anteriormente).

Seleccionamos la cuenta y seguidamente aceptamos la asignación de permisos de la cuenta al CLI.

Introducimos el id de nuestra cuenta y confirmamos la operación. El siguiente paso será meter el id de nuestra en la consola, justo donde se quedó parado el comando de login que habíamos ejecutado.

Ya estamos logados y podemos crear las claves y asignarlas a nuestro nodo validador.

# creamos la clave para el nodo
near generate-key blockscope
cp ~/.near-credentials/shardnet/blockscope.json ~/.near/validator_key.json# editamos el contenido para que contenga el id de la pool y cambiamos el id de la propiedad private_key por el id secret_key. Debería quedar de la siguiente forma{
"account_id": "blockscope.factory.shardnet.near",
"public_key": "ed25519:HeaBJ3xLgvZacQWmEctTeUqyfSU4SDEnEwckWxd92W2G",
"secret_key": "ed25519:****"
}
# una vez hecho esto podemos ejecutar el nodo como validador
target/release/neard run

Ahora vamos a crear un servicio para que maneje el proceso del validador, para arrancarlo en el inicio de la máquina, o reiniciarlo en caso de error.

# creamos el fichero del servicio y pegamos el contenido (utiliza tu propio nombre de usuario y directorios)
sudo vim /etc/systemd/system/neard.service
[Unit]
Description=NEARd Daemon Service

[Service]
Type=simple
User=<USER>
#Group=near
WorkingDirectory=/home/<USER>/.near
ExecStart=/home/<USER>/nearcore/target/release/neard run
Restart=on-failure
RestartSec=30
KillSignal=SIGINT
TimeoutStopSec=45
KillMode=mixed

[Install]
WantedBy=multi-user.target
# activamos el servicio y lo iniciamos
sudo systemctl enable neard
sudo systemctl start neard
# para visualizar los logs
journalctl -n 100 -f -u neard

En nuestro caso:

Enhorabuena! ya tenemos nuestro servicio con el nodo validador Near corriendo.

Montar el Staking Pool en el Nodo

Para que el nodo validador pueda recibir delegaciones de los usuarios (staking) tenemos que crear una staking pool a través de ciertas llamadas a los métodos del Smart Contract q crea las staking pools.

# creamos la staking pool, introduciendo el id de nuestro validador, y de nuestra wallet near
near call factory.shardnet.near create_staking_pool '{"staking_pool_id": "blockscope", "owner_id": "blockscope.shardnet.near", "stake_public_key": "ed25519:HeaBJ3xLgvZacQWmEctTeUqyfSU4SDEnEwckWxd92W2G", "reward_fee_fraction": {"numerator": 5, "denominator": 100}, "code_hash":"DD428g9eqLL8fWUxv8QSpVFzyHi1Qd16P8ephYCTmMSZ"}' --accountId="blockscope.shardnet.near" --amount=30 --gas=300000000000000

En el caso de querer delegar más tokens desde nuestra cuenta u otro cuenta lo podemos hacer con el siguiente comando:

# delegamos más tokens desde nuestra cuenta
near call blockscope.factory.shardnet.near deposit_and_stake --amount 2900 --accountId blockscope.shardnet.near --gas=300000000000000

Para una lista de comandos útiles para hacer staking visita la documentación de stakewars.

Cronjob para hacer Ping a la staking pool

Para que la staking pool distribuya los rewards a los usuarios que están haciendo staking en ella es necesario invocar de manera periódica el método Ping del smart contract de nuestra pool. Para ello la mejor opción es crear un cronjob que ejecute el comando a diario por ejemplo.

# editamos el crontab para añadir un cronjob
crontab -e
# añadimos la invocación a diario al método ping del smart contract
@daily NEAR_ENV=shardnet && near call blockscope.factory.shardnet.near ping '{}' --accountId blockscope.shardnet.near --gas=300000000000000

Para que el validador entre en el grupo de validadores activos hay que esperar 2 épocas. En la primera la pool estará en estado de propuesta.

En la siguiente cambiará el estado a joining.

Y por último pasaremos a activos siempre que tengamos la cantidad de staking en el nodo para superar el seat price (mínimo de delegación).

Monitorización del nodo

Si nuestro nodo pierde muchos bloques se nos sacará del conjunto de validadores activos durante dos épocas, mientras creamos la propuesta y nos unimos de nuevo. Por eso es importante tener monitorización en nuestro nodo, hay muchas maneras, pero aquí exponemos una sencilla y que hemos creado nosotros mismos como solución sencilla para los que no quieren montar soluciones más complejas.

Esta herramienta propia, es un script shell que nos enviará a un canal de Discord o a un bot de Telegram cuando nuestro nodo empiece a perder bloques por encima de un umbral dado. La herramienta te la puedes descargar desde nuestro perfil de Gitlab. Near Alerter GitLab repo.

# descargamos y ejecutamos el alerter
git clone https://gitlab.com/blockscope-net/near-alerter.git
cd near-alerter
chmod +x near-alerter.sh
# editamos el script y metemos los datos de nuestro webhook de Discord y/o nuestro bot de Telegram
vim near-alerter.sh
# ejecutamos el script
./near-alerter.sh

Una vez se esté ejecutando podremos ver la salida del script en la consola

Y también recibiremos alertas en Discor y Telegram según lo hayamos configurado.

Esperemos te haya servido de ayuda nuestro tutorial, para más información no dudes en consultar la documentación y la página de Near Stakewars que te dejamos aquí abajo, así como su servidor de Discord donde tendrás un gran soporte por parte de la comunidad de Near.

--

--

We're a company of Blockchain passionate individuals that aim to help decentralize the world while having fun with technology.

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Blockscope

Blockscope

We're a company of Blockchain passionate individuals that aim to help decentralize the world while having fun with technology.