Instalación de un full node validador en Cosmos:

Wimel
Wimel
Jun 23, 2018 · 9 min read

- 1. Leer el FAQ.

Familiarícese con todas las responsabilidades de un validador leyendo nuestras preguntas frecuentes. Estas preguntas frecuentes se actualizarán con frecuencia, así que, asegúrese de mantenerse actualizado.

- 2. Participa en la testnet.

Participa activamente en la testnet. Para finales de 2017, debería poder mantener un nodo validador con tiempo de actividad constante en la testnet. El tutorial de Testnet contiene instrucciones sobre cómo convertirse en un validador en la testnet.

3. Establece un sitio web de validador.

Configure un sitio web de validador dedicado y señale su intención de convertirse en validador en nuestro foro. Esto es importante ya que los delegados querrán tener información sobre la entidad a la que están delegando sus átomos

- 4. Hardware.

Actualmente no existe una solución de nube apropiada para la administración de claves del validador. Esto puede cambiar cuando la nube SGX esté más ampliamente disponible. Por esta razón, los validadores deben configurar una operación física asegurada con acceso restringido.
Los validadores deben equipar la ubicación de su centro de datos con energía redundante, conectividad y copias de seguridad de almacenamiento.
Anticipan que los requisitos de red serán bajos inicialmente. La testnet actual requiere recursos mínimos. Por lo tanto, los requisitos de ancho de banda, CPU y memoria aumentarán a medida que la red crezca, recomiendan discos duros grandes para almacenar la historia de la blockchain.

- 6. Protección DDOS (nodo de guardia/sentry node).

Los validadores son responsables de garantizar que la red pueda soportar los ataques de denegación de servicio.
Recomiendan que los validadores ejecuten nodos completos en la nube y configuren sus nodos de validador no solo para conectarse a esos nodos completos. Esos nodos completos se pueden mover o aplicar protección DDOS basada en la nube para mitigar los ataques DDOS.

- Los nodos validadores deberían editar su config.toml:

# Comma separated list of nodes to keep persistent connections to
# Do not add private peers to this list if you don't want them advertised
persistent_peers =[list of sentry nodes]
# Set true to enable the peer-exchange reactor
pex = false

- Los nodos de guardia deberian editar su config.toml:

# Comma separated list of peer IDs to keep private (will not be gossiped to other peers)
private_peer_ids = "ipaddress of validator nodes"

- 7. Organízate con tu jurisdicción local.

Recomiendan que los validadores configuren una grupo separado y que un individuo no la ejecute directamente. Busque asesoría legal si cree que puede necesitar licencias adicionales. Los validadores pueden querer establecer términos de servicio y límites de responsabilidad para delegados para operar bajo su propio riesgo.

· Una vez explicado todo, vamos a instalar lo necesario para ser un nodo completo en la testnet, para ello vamos a usar una máquina virtual sin nada instalado, lo haremos todo desde 0 (comprobar en su github cual es la versión actual del sdk, en este caso es la v0.19.0), si se tiene alguna duda, lo mejor es entrar en su canal de Riot, tanto del Sdk como de validadores (para que al salir de la sesión el equipo no pare, yo uso tmux, de esta manera simplemente cierro la ventana de la terminal y el equipo sigue trabajando).

· Requisitos mínimos del sistema (pueden ir aumentando con el tiempo a medida que la blockchain se haga más grande, es mejor entrar en el chat y preguntar):

- CPUs: 2 (No está en ningún sitio, pero creo que es lo mínimo necesario).

- RAM: 4GB (Algunos usuarios en el chat de riot tienen problemas con 3GB).

- Disco: 30GB (Lo mejor es un SSD).

Información del sistema operativo utilizado:
- Ubuntu 16.04 LTS.
- Codename: Xenial.
- Versión de kernel: 4.13.0–45-generic (gcc version 5.4.0 20160609 (Ubuntu 5.4.0- 6ubuntu1~16.04.9).
- Arquitectura: x86_64.

Instalamos las dependencias necesarias:

  • Instalamos git:
$ sudo apt install -y git
  • Instalamos curl:
$  sudo apt install -y curl
  • Instalamos Go (para este paso seguir esta guía, muchos problemas al ejecutar tanto el nodo, como al ser un validador en Cosmos, provienen de la instalación de Go, prestar mucha atención a la instalación del mismo.

Instalación del SDK de Cosmos:

  • Introducimos en la terminal los siguientes comandos:
$  mkdir -p $GOPATH/src/github.com/cosmos
$ cd $GOPATH/src/github.com/cosmos
$ git clone https://github.com/cosmos/cosmos-sdk
$ cd cosmos-sdk && git checkout v0.19.0
$ make get_tools
$ make update_tools
$ make get_vendor_deps
$ make install
  • Comprobamos la versión de gaia:
$ gaiad version
  • Comprobamos la verision de gaiacli:
$  gaiacli version
  • Creamos un archivo de configuración y generamos algunos archivos necesarios:
$  mkdir -p $HOME/.gaiad/config
  • Reseteamos los valores que pudiese tener gaiad:
$  gaiad unsafe_reset_all
  • Entramos en la carpeta de configuración de gaia:
$  cd .gaiad/config/
  • Editamos el config.toml, en la línea 11 cambiamos moniker = “<your_custom_name>”, y ponemos el nombre que queramos en “your_custom_name”:
$ nano config.toml

Hasta aquí todo correcto, ahora vamos con el génesis y las “seeds

  • Copiamos el “genesis.json” de la testnet, al archivo de configuración de gaiad:
$  cp -a /home/src/github.com/cosmos/cosmos-sdk/cmd/gaia/testnets/gaia-6002/genesis.json /home/.gaiad/config/genesis.json
  • Nuestro nodo necesita saber cómo encontrar más nodos, necesitamos agregar nodos con semillas “fiables” a nuestro archivo situado en “$HOME/.gaiad/config/config.toml”; aquí algunas semillas de nodos que podemos usar, separados por comas (,):
seeds = 
38aa9bec3998f12ae9088b21a2d910d19d565c27@gaia-6002.coinculture.net:46656,
80a35a46ce09cfb31ee220c8141a25e73e0b239b@seed.cosmos.cryptium.ch:46656,
80a35a46ce09cfb31ee220c8141a25e73e0b239b@35.198.166.171:46656,
032fa56301de335d835057fb6ad9f7ce2242a66d@165.227.236.213:46656,
  • Para ello entramos en “cd $HOME/.gaiad/config/” y editamos el archivo “config.toml” y añadimos las semillas de los nodos (está justamente en la línea 70, con “contrl+c” en nano podemos ver la linea en la que está situada el cursor):
$ nano $HOME/w1/.gaiad/config/config.toml
  • También podemos poner en la línea 70 del archivo “config.toml”:
80a35a46ce09cfb31ee220c8141a25e73e0b239b@35.198.166.171:46656
  • Y en la línea 74 del mismo archivo (config.toml) lo siguiente:
a754a491419ef7dd69e92121ed6154f3753be35d@35.198.166.171:46656,4720573152c69457cfa9d62d3d9550b4c4babb71@51.38.190.255:46656,6bcd3efd3bb939224bbdd7b7601ba5a0397e8cb1@51.38.237.243:46656,032fa56301de335d835057fb6ad9f7ce2242a66d@165.227.236.213:46656,1eaed58d7b3b57ca58ac9fb4aa41ad9a3c2e40c2@35.237.213.249:46656,4ef446a1d711be8ca8107303a98198160f479852@35.194.142.184:46656
  • Ejecutamos el full node:
$  gaiad start
  • Comprobamos que todo está funcionando bien:
$  gaiacli status
  • Generando las claves; para recibir, mandar, o vincular tokens necesitamos nuestro juego de claves públicas/privadas, vamos a generarlas (por defecto ed25519), para ello, introducimos en la terminal lo siguiente (wimel es el nombre que yo he puesto, podéis poner la que más os guste):
$  gaiacli keys add wimel
  • Tenemos que introducir una contraseña, tiene que ser de 8 caracteres como mínimo (la contraseña no la vemos, asegurad una copia de la misma, aún así, las 16 palabras que aparecen debajo, nos sirven para recuperar nuestra cuenta), la pide una segunda vez, y después nos da diferentes datos, tanto de información de la misma, como de recuperación de nuestra cuenta (recordad que los datos aquí mostrados no tienen ninguna validez, y que estas cuentas han sido creadas expresamente para la guía).
  • Si queremos comprobar nuestra clave y nuestra address, escribimos en la terminal (recordad que wimel es el nombre que yo le puse, en vuestro caso poned el mismo que cuando la generamos):
$ gaiacli keys show wimel
  • Podemos ver todas las claves disponibles, introduciendo el siguiente comando:
$  gaiacli keys list
  • Vemos la clave pública de nuestro nodo validador (el actual) escribiendo:
$  gaiad tendermint show_validator
  • Entramos en la faucet de Cosmos para introducir nuestra address y pedir algunos tokens.
  • Podemos comprobar el balance de nuestra cuenta, escribiendo en la terminal (como antes wimel es la address que yo he generado), si nuestro balance en la cuenta es de cero tokens, obtenemos el error “No account with address <your_newly_generated_address> was found in the state”(hay que tener en cuenta que si nuestro nodo no está sincronizado, no nos mostrará el balance de nuestra cuenta correctamente):
$  gaiacli account cosmosaccaddr1utn6lj4zkzmf2vf33jlkvq4d8eyhr9q9xhcce4

Ejecutando un nodo validador:

  • Nos aseguramos de tener fondos suficientes (en address ponemos la nuestra):
$  gaiacli account *address*
  • Necesitamos saber la clave pública del nodo (cuidado, del nodo, no de la address que hemos creado):
$  gaiad tendermint show_validator
  • El paso siguiente es revelar un candidato a validador, el validador es una address que almacena (“stake”) monedas, por lo tanto el candidato será la address con la que hayamos pedido fondos, para declarar un validador, ejecutamos el siguiente comando (los datos son los que hayamos ido apuntando anteriormente) e introducimos una contraseña:
$  gaiacli stake create-validator --amount=1steak --pubkey=<your_node_pubkey> --address-validator=<your_account_address> --moniker=<your_name> --chain-id=gaia-6002 --sequence=0 --name=<your_key_name>
  • Podemos comprobar en el Hash y el bloque en el cual nos autenticamos como validadores para la red:
  • Comprobamos que nuestro candidato a validador está en el grupo de validadores, este comando muestra todos los validadores, tenemos que buscar el nuestro:
$  gaiacli stake validators
  • En mi caso, hice una prueba que salió bien, y es que ese comando nos muestra bastantes validadores, para no tener que buscar entre todos ellos puse lo siguiente (como siempre address es la nuestra):
$  gaiacli stake validators | grep *address*
  • Podemos mostrar nuestra address del nodo validador (situado en=> “$HOME/.gaiad/config/priv_validator.json”):
$  cat $HOME/.gaiad/config/priv_validator.json

- El equipo de Tendermint ha desplegado una página para ver los validadores y poder seguir el rendimiento de los mismos, podemos ver nuestra dirección de nodo con un tiempo de los últimos 100 bloques.

- Siempre podemos visitar la página del explorador de Cosmos para ver el estado de la red.

- Errores o problemas en el proceso -

  • Si nuestro nodo se detiene y vemos el siguiente mensaje de error (podemos leer más aquí y aquí):
  • Tenemos que editar el archivo situado en “/etc/security/” llamado “limits.conf”, editamos el archivo:
$  sudo nano /etc/security/limits.conf
  • Quedaría así (en *user* ponemos el usuario que esté ejecutando el nodo):

Espero esta guía les sirva de ayuda.

Recomiendan no usar la misma contraseña para varias claves, el equipo de Tendermint, la fundación Interchain y yo mismo, no se hacen responsable de la perdida de la misma.

Gracias a @li_wei y @kwun yeung del chat de riot de Cosmos_validators por su ayuda.
Thanks to @li_wei and @kwun yeung in the Riot chat of Cosmos_validators for our help, apreciate it.

Páginas de referencia:
- Página oficial de Cosmos.
- Blog en Medium de Cosmos.
- Web para desarrolladores de Cosmos.
- Cosmos-sdk github.
- Cosmos-sdk docs.
- Testnet explorer
- Cosmos Testnet Faucet.
- Riot Chat (validators).

Wimel

Written by

Wimel

Ethereum enthusiast, Maker, love Linux systems, open source and security.