Si estás creando dapps o productos en una cadena basada en Substrate como Polkadot, Kusama o una implementación personalizada de Substrate, probablemente quieras tener la capacidad de ejecutar un nodo como back-end. Después de todo, siempre es mejor confiar en tu propia infraestructura que en la de un tercero en este nuevo y audaz mundo descentralizado.
Esta guía te mostrará cómo conectarte a la red Polkadot, pero el mismo proceso se aplica a cualquier otra cadena basada en Substrate. Primero, aclaremos el término full node o nodo completo.
Tipos de Nodos #
El crecimiento de una blockchain proviene de un genesis block (bloque génesis), extrinsics (extrínsecos) y events (eventos).
Cuando un validador sella el bloque 1, toma el estado de la blockchain en el bloque 0. A continuación, aplica todos los cambios pendientes sobre él, y emite los eventos que son el resultado de estos cambios. Posteriormente, el estado de la cadena en el bloque 1 se utiliza del mismo modo para construir el estado de la cadena en el bloque 2, y así sucesivamente. Una vez que dos tercios de los validadores están de acuerdo en que un bloque concreto es válido, se da por finalizado.
Un archive node (nodo de archivo) guarda todos los bloques anteriores y sus estados. Un nodo de archivo permite consultar el estado anterior de la cadena en cualquier momento. Averiguar cuál era el balance de una cuenta en un determinado bloque, o qué extrinsics dieron lugar a un determinado cambio de estado son operaciones rápidas cuando se utiliza un nodo de archivo. Sin embargo, un nodo de archivo ocupa mucho espacio en disco: en torno al bloque 12 millones de Kusama, ocupaba unos 660 GB.
CONSEJO
El sitio web de Paranodes muestra los tamaños de las bases de datos de los nodos Polkadot y Kusama en tiempo real.
Los nodos de archivo son utilizados por utilidades que necesitan información del pasado – como exploradores de bloques, escáneres de consejos, plataformas de discusión como Polkassembly, y otros. Necesitan poder consultar datos pasados de la cadena.
Un full node (nodo completo) depura los estados históricos: todos los estados de los bloques finalizados anteriores a un número configurable, excepto el estado del bloque génesis. Por defecto, este número es 256 bloques desde el último bloque finalizado. Un nodo depurado (podado) de esta forma requiere mucho menos espacio que un nodo de archivo.
Un full node o nodo completo puede ser capaz de reconstruir el estado de cada bloque sin información adicional y convertirse en un nodo de archivo, pero en el momento de escribir esto, no está implementado. Si necesitas consultar estados de bloques históricos más allá del que depuraste, necesitas purgar tu base de datos y resincronizar tu nodo comenzando en modo archivo. Alternativamente, puedes utilizar un backup (copia de seguridad) o un snapshot (instantánea) de una fuente de confianza para evitar tener que sincronizar desde génesis con la red, y sólo necesitar los estados de los bloques más allá de ese snapshot.
Los nodos completos (o full nodes) te permiten leer el estado actual de la cadena y enviar y validar extrínsecos directamente en la red sin depender de un proveedor de infraestructura centralizado.
Otro tipo de nodo es el light node (nodo ligero). Un light node o nodo ligero sólo tiene el runtime y el estado actual, pero no almacena bloques pasados, por lo que no puede leer datos históricos sin solicitarlos a un nodo que los tenga. Los light nodes o nodos ligeros son útiles para dispositivos con recursos limitados. Un caso de uso interesante de los light nodes o nodos ligeros es una extensión del navegador, que es un nodo por derecho propio, que ejecuta el runtime en formato WASM, así como un full node o nodo completo o como nodo ligero o light node que está completamente encapsulado en WASM y puede integrarse en webapps: https://github.com/paritytech/smoldot#wasm-light-node
SUBSTRATE CONNECT
Substrate Connect proporciona una forma de interactuar con blockchains basadas en Substrate en el navegador sin utilizar un servidor RPC. Es un nodo ligero o light node que se ejecuta íntegramente en Javascript. Substrate Connect utiliza un light client smoldot WASM para conectarse de forma segura a la red blockchain sin depender de terceros específicos. Substrate Connect está disponible como extensión para navegadores Chrome y Firefox.
Instrucciones de instalación #
Esto no es recomendable si eres un validador. Por favor, consulta la configuración de validador seguro si estás ejecutando un validador.
LOS COMANDOS BASH QUE SE PROPORCIONAN PARA EJECUTAR EN TU NODO UTILIZAN Polkadot
COMO LA
cadena por defecto
Utiliza el indicador (flag) --chain
si estás siguiendo las instrucciones de configuración para configurar un nodo Kusama
. Por ejemplo:
./target/release/polkadot --name "Nombre de tu nodo" --chain kusama
1.- macOS #
- Instala Homebrew dentro del terminal ejecutando:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
- A continuación, ejecuta:
brew install openssl cmake llvm
- Instala Rust en tu terminal ejecutando:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- Una vez instalado Rust, ejecuta el siguiente comando para clonar y construir el código de polkadot:
git clone https://github.com/paritytech/polkadot polkadot
cd polkadot
./scripts/init.sh
cargo build --release
- Inicia tu nodo:
./target/release/polkadot --name "Nombre de tu nodo"
- Encuentra tu nodo en Telemetry
2.- Windows #
- Instala WSL.
- Instala Ubuntu (misma página web).
- Determina la última versión de Polkadot binary.
- Descarga el binario Polkadot correcto dentro de Ubuntu ejecutando el siguiente comando. Sustituye
*VERSION*
por la etiqueta de la última versión del último paso (por ejemplo,v0.8.22
):
curl -sL https://github.com/paritytech/polkadot/releases/download/*VERSION*/polkadot -o polkadot
- A continuación, ejecuta lo siguiente:
sudo chmod +x polkadot
- Inicia tu nodo:
./target/release/polkadot --name "Nombre de tu nodo"
- Encuentra tu nodo en Telemetry
3. Linux (standalone) #
- Determina la última versión de Polkadot binary.
INFO
La naturaleza de los binarios precompilados implica que pueden no funcionar en tu arquitectura o distribución de Linux en particular. Si ves un error cannot execute binary file: Exec format error
probablemente significa que el binario no es compatible con tu sistema. Tendrás que compilar el código fuente o utilizar Docker (ver infra).
- Descarga el binario Polkadot correcto dentro de Ubuntu ejecutando el siguiente comando. Sustituye
*VERSION*
por la etiqueta de la última versión del último paso (por ejemplo,v0.8.22
):
curl -sL https://github.com/paritytech/polkadot/releases/download/*VERSION*/polkadot -o polkadot
- A continuación, ejecuta lo siguiente:
sudo chmod +x polkadot
- Inicia tu nodo:
./target/release/polkadot --name "Nombre de tu nodo"
- Encuentra tu nodo en Telemetry
4.- Linux (package) #
También puedes instalar Polkadot desde uno de nuestros repositorios de paquetes.
La instalación desde los repositorios Debian o rpm creará un servicio systemd
que puede utilizarse para ejecutar un nodo Polkadot. El servicio está deshabilitado por defecto, y puede iniciarse ejecutando systemctl start polkadot
bajo demanda (use systemctl enable polkadot
para hacer que se inicie automáticamente después de reiniciar). Por defecto, se ejecutará como el usuario polkadot
. Las flags (indicadores) de línea de comandos que se pasan al binario pueden personalizarse editando /etc/default/polkadot
. Este archivo no se sobrescribirá al actualizar polkadot.
Basado en Debian (Debian, Ubuntu) #
Actualmente soporta Debian 10 (Buster) y Ubuntu 20.04 (Focal), y derivados. Ejecuta los siguientes comandos como usuario root
.
# Import the security@parity.io GPG key
gpg --recv-keys --keyserver hkps://keys.mailvelope.com 9D4B2B6EB8F97156D19669A9FF0812D491B96798
gpg --export 9D4B2B6EB8F97156D19669A9FF0812D491B96798 > /usr/share/keyrings/parity.gpg
# Add the Parity repository and update the package index
echo 'deb [signed-by=/usr/share/keyrings/parity.gpg] https://releases.parity.io/deb release main' > /etc/apt/sources.list.d/parity.list
apt update
# Install the `parity-keyring` package - This will ensure the GPG key
# used by APT remains up-to-date
apt install parity-keyring
# Install polkadot
apt install polkadot
Si no deseas que el paquete polkadot se actualice automáticamente al actualizar los paquetes de tu servidor, puedes ejecutar el siguiente comando:
sudo apt-mark hold polkadot
RPM-based (Fedora, CentOS) #
Actualmente soporta Fedora 32 y CentOS 8, y sus derivados.
# Install dnf-plugins-core (This might already be installed)
dnf install dnf-plugins-core
# Add the repository and enable it
dnf config-manager --add-repo https://releases.parity.io/rpm/polkadot.repo
dnf config-manager --set-enabled polkadot
# Install polkadot (You may have to confirm the import of the GPG key, which
# should have the following fingerprint: 9D4B2B6EB8F97156D19669A9FF0812D491B96798)
dnf install polkadot
Información
Si eliges utilizar una carpeta personalizada para el inicio de polkadot pasando --base-path '/custom-path'
, necesitarás ejecutar el siguiente comando:
sudo mkdir /etc/systemd/system/polkadot.service.d
Y crear un nuevo archivo dentro de esta carpeta:
sudo -e /etc/systemd/system/polkadot.service.d/custom.conf
Con el siguiente contenido:
[Service]
ReadWritePaths=/custom-path
Y, por último, realiza una recarga para que systemd aplique las modificaciones:
systemctl daemon-reload
Obtén Substrate #
Sigue las instrucciones descritas aquí – ten en cuenta que los usuarios de Windows tendrán mucho trabajo. Es mejor utilizar una máquina virtual en su lugar.
Comprueba si la instalación se ha realizado correctamente ejecutando cargo --version
.
λ cargo --version
cargo 1.41.0 (626f0f40e 2019-12-03)
Clona y construye #
La rama master del repositorio paritytech/polkadot contiene el último código de Polkadot.
git clone https://github.com/paritytech/polkadot polkadot
cd polkadot
./scripts/init.sh
cargo build --release
Alternativamente, si deseas utilizar una versión específica, puedes comprobar una etiqueta específica (v0.8.3
en el ejemplo siguiente):
git clone https://github.com/paritytech/polkadot polkadot
cd polkadot
git checkout tags/v0.8.3
./scripts/init.sh
cargo build --release
Ejecuta #
El binario construido estará en la carpeta target/release
, llamado polkadot
.
Polkadot: #
./target/release/polkadot --name "El nombre de tu nodo"
Utiliza el indicador --help
para saber qué indicadores puedes utilizar al ejecutar el nodo. Por ejemplo, si se conecta a tu nodo remotamente, probablemente querrás usar --ws-external
y --rpc-cors all
.
El proceso de sincronización tomará un tiempo dependiendo de su ancho de banda, poder de procesamiento, velocidad de disco y RAM. En un droplet DigitalOcean de \$10, el proceso puede completarse en unas 36 horas.
Felicitaciones, ya estás sincronizando con Polkadot. Ten en cuenta que el proceso es idéntico cuando se utiliza cualquier otra cadena Substrate.
Ejecutando un Nodo de Archivo #
Cuando se ejecuta como un nodo de sincronización simple (arriba), sólo se mantendrá el estado de los últimos 256 bloques. Cuando se valida, se pone por defecto en modo archivo (ver arriba). Para mantener el estado completo, utiliza el indicador –pruning:
Polkadot: #
./target/release/polkadot --name "Nombre de mi nodo" --pruning archive
Es posible casi cuadruplicar la velocidad de sincronización usando un indicador adicional: --wasm-execution Compiled
. Ten en cuenta que esto utiliza mucha más CPU y RAM, por lo que debe desactivarse después de que el nodo esté sincronizado.
Uso de Docker #
Finalmente, puedes usar Docker para ejecutar tu nodo en un contenedor. Hacer esto es un poco más avanzado, por lo que es mejor dejarlo para aquellos que ya están familiarizados con Docker, o han completado las otras instrucciones de configuración en esta guía. Ten en cuenta que cuando ejecutas polkadot en docker el proceso sólo escucha en localhost por defecto. Si quieres conectarte a los servicios de tu nodo (rpc, websockets, y prometheus) necesitas asegurarte de que ejecutas tu nodo con los comandos --rpc-external, --ws-external, y --prometheus-external
.
docker run -p 9944:9944 -p 9615:9615 parity/polkadot:v0.9.13 --name "calling_home_from_a_docker_container" --rpc-external --ws-external --prometheus-external