Ejecutar un Nodo de Symbol manualmente
Esta guía lo lleva a través del proceso de configuración de un nodo para unirse a la red de Symbol sin usar Symbol Bootstrap.
Symbol Bootstrap es una herramienta muy útil que permite el despliegue rápido de los nodos de Symbol, Sin embargo se basa en la tecnología Docker y node.js que puede no estar disponible (o permitida) en todos los escenarios. Esta guía toma la ruta más larga y explica cómo configurar un nodo de Symbol manualmente. Si desea utilizar Symbol Bootstrap, utilice esta guía en su lugar.
La siguiente sección explica cómo construir un nodo de pares y la siguiente expande el nodo para convertirlo en un nodo API.
Nota
Las siguientes instrucciones solo se han verificado para funcionar en Linux.
Construye un nodo Pares
Construye el servidor
Siga las instrucciones del servidor Catapult para construir sus binarios, ya sea manualmente o usando Conan.
Generar claves
Un nodo de Symbol requiere varias claves para funcionar correctamente. Estas claves generalmente se generan de forma aleatoria, por lo que debe generar algunas para usar en los siguientes pasos.
Este paso se puede realizar en una máquina fuera de línea para mayor seguridad.
Principal, remoto y VRF
Desde el directorio _build que creó en la sección anterior, ejecute:
./bin/catapult.tools.addressgen --count 3 --network public
Esto generará 3 pares de claves similares a este:
address (public): NDPPBHSMLVEU75DNUMFX6GWPTGB6PP6AFQU7WSY address decoded: 68DEF09E4C5D494FF46DA30B7F1ACF9983E7BFC02C29FB4B public key: 1E886BA00B4F85DBC0B31DBB78DADFAA29945DF7290DB7A4243D94864483C627 private key: 3DDDC333029BC8ACDB460435BBC71041D460B911725B03D6F93805521AAD60CB
Cada bloque es un par de claves (hay un bloque que se muestra arriba) compuesto por una clave privada, una clave pública y una dirección.
Cópielos todos en un archivo de texto temporal para su uso posterior y etiquete los pares de claves Main, Remote y VRF.
Nota
Si ya tiene alguna de estas claves, puede usarlas en lugar de las generadas aleatoriamente.
El escenario más relevante es cuando se utiliza una cuenta principal habilitada desde una cuenta NIS1. En este caso, puede usar directamente la clave obtenida en el proceso de suscripción como clave principal en lugar de la clave generada.
Votación
Si su nodo va a ser un nodo de votación, debe haber vinculado una clave de votación para el período en el que desea votar. Esto es interesante ya que los nodos de votación reciben recompensas de votación.
La generación de la clave de votación es un poco más compleja que las anteriores:
- Aún desde dentro del directorio _build, cree otro directorio llamado votekeys.
- Cree la clave de votación:
Las claves de votación se diferencian de las demás claves en el hecho de que tienen un período de validez, por ejemplo. Solo son válidas desde una Época inicial hasta una Época final (consulte el recuadro lateral).
Los nodos solo son elegibles como votantes si están vinculados a una clave de votación válida para la época actual de blockchain, así que recuerde renovar su clave de votación periódicamente
Para ayudarlo con esa tarea, puede tener hasta 3 claves de votación vinculadas, con diferentes períodos, para que pueda renovar fácilmente una clave mientras todavía hay otra activa (deberá desvincular una clave anterior para poder vincular más de 3 llaves).
Épocas
La votación ocurre una vez en cada época. Una época de votación dura 1440 bloques o alrededor de 12 h (consulte voteSetGrouping en las propiedades de la red).
La duración máxima de la clave de votación (End Epoch – Start Epoch) es de 360 épocas o aproximadamente 6 meses (consulte maxVotingKeyLifetime).
Puede averiguar la época actual dividiendo la altura actual de la cadena de bloques por 1440 y descartando los decimales.
Una clave de votación se crea usando catapult.tools.votingkey y proporcionando su período de validez (tenga en cuenta que no se usa catapult.tools.addressgen como antes):
bin/catapult.tools.votingkey --output votingkeys/private_key_tree1.dat \ --startEpoch 100 --endEpoch 460
Esto crea un archivo llamado votekeys / private_key_tree1.dat e imprime la clave de votación en la terminal. A medida que expiren sus claves de votación y cree otras nuevas, aumente el número en el nombre del archivo.
generating 361 keys, this might take a while votingkeys\private_key_tree1.dat generated verifying generated file saved voting public key: **************** loaded voting public key: ****************
Copie la clave pública de la clave de votación en el archivo de texto temporal donde guarda el resto de las claves, etiquétela como Voto y guárdela para más tarde.
Configuración
Symbol es altamente personalizable y esto significa que hay muchos parámetros que se pueden ajustar para satisfacer las necesidades de su nodo. Algunos de estos parámetros están relacionados con la red y deben coincidir con el resto de nodos de la red (por ejemplo, currencyMosaicId), mientras que otros están relacionados con los nodos y puede configurarlos libremente (por ejemplo, friendlyName).
Puede editar estos archivos manualmente (eche un vistazo a estas plantillas para saber cómo se ven), pero es más conveniente utilizar la Herramienta de Configuración del nodo de Symbol como se muestra a continuación.
Este paso se puede realizar en una máquina fuera de línea para mayor seguridad.
- Prerrequisitos
- Install symbol-node-configurator.
- Descargue y extraiga symbol-node-configurator.zip. Alternativamente, clone el repositorio de GitHub si sabe cómo usar Git.
- Vaya al directorio symbol-node-configurator e instale los requisitos de la herramienta ejecutando:
python3 -m pip install -r requirements.txt
- Cree certificados
- Cree una carpeta llamada certificados y muévase a ella.
- Cree un archivo de texto llamado private.main.txt y coloque la clave privada de la cuenta principal dentro.
- Descargue y ejecute este script de generación de certificados.
- Elimina private.main.txt.
- Vuelve a la carpeta principal.
Ahora deberías tener al menos los siguientes archivos en la carpeta de certificados: ca.pubkey.pem, ca.crt.pem, node.full.crt.pem, node.crt.pem y node.key.pem.
- Cree archivos de claves de cosecha y VRF
- Cree un archivo llamado private.harvesting.txt y coloque la clave privada remota dentro.
- Cree un archivo llamado private.vrf.txt y coloque la clave privada VRF dentro.
- Ejecute la herramienta de configuración
La herramienta de configuración de nodos se llama generator.py y acepte una serie de parámetros según el tipo de nodo que desee:
Parametro | Descripción |
---|---|
--mode | (Obligatorio) Tipo de nodo. Los valores aceptados son api , peer and dual . |
--harvesting | (Opcional) Para crear un nodo de cosecha. La llave remota se utilizará automáticamente para que la cosecha remota esté habilitada de forma predeterminada. |
--voting | (Opcional) Para crear un nodo de votación. Si habilita esto, copie el archivo private_key_tree1.dat que creó anteriormente en este directorio. |
--output | (Opcional) Carpeta donde se almacenará la configuración resultante. |
Por ejemplo:
python3 generator.py --mode dual --harvesting --voting --output settings i | extracting nemesis seed i | preparing base settings i | turning on harvesting i | turning on voting i | extracting mongo scripts i | copying certificates i | moving private_key_tree1.dat
Este comando producirá todos los archivos de configuración de nodo requeridos en el directorio de configuración y debe copiarlos en _build, en la máquina donde se ejecutará su nodo:
- Copiar
settings/resources
to_build/resources
. - Copiar
settings/certificates
to_build/certificates
. - Copiar
settings/nemesis/seed
to_build/seed
(Omitir la parte de némesis).
- Edite config-user.properties
- Regrese al directorio _build.
- Edite resources / config-user.properties para que apunte a los lugares correctos:
seedDirectory = ../seed certificateDirectory = ../certificates dataDirectory = ../data pluginsDirectory = ../lib votingKeysDirectory = ../votingkeys
- Edite config-node.properties
Edite resources / config-node.properties para personalizar el nodo. Obtenga más información sobre las propiedades disponibles en la guía Configuración de propiedades del nodo.
Los más comunes están en la sección [localnode]:
Propiedades | Descripción |
---|---|
host | Dirección IP o nombre de dominio de su nodo. |
friendlyName | Nombre de su nodo para fines de visualización. |
version | Versión de catapult-server utilizada por su nodo. Déjelo vacío para usar el actual. |
roles | Una lista separada por comas de los siguientes valores: Peer , Api , Voting , IPv4 , IPv6 . |
Por ejemplo:
[localnode] host = <YOUR_NODE_IP> friendlyName = myPeerNode version = 1.0.0.0 roles = IPv4,Peer
Ejecutar el servidor
Cree una última carpeta:
mkdir data
¡Y finalmente encienda el servidor!
cd bin ./catapult.server
Debería ver una gran cantidad de resultados de depuración mientras el nodo comienza a sincronizarse con el resto de la red:
... peer returned 42 blocks (heights 2 - 43)
El nodo puede detenerse presionando Ctrl-C y reiniciarse simplemente ejecutando catapult.server nuevamente.
Si no ve ningún mensaje de error, su servidor está funcionando y puede continuar con esta guía.
Vincular las claves
El servidor ahora se está ejecutando, pero no podrá cosechar porque es necesario vincular varias claves. Estos enlaces se crean a través de transacciones anunciadas a la red.
Estas transacciones se pueden anunciar desde CUALQUIER máquina. En particular, esto se puede hacer desde una máquina que no sea la que ejecuta su nodo, por lo que la clave privada de su cuenta principal nunca se almacena en el nodo.
Utilizará la herramienta symbol-cli para esto. Instale symbol-cli ejecutando:
npm install --global symbol-cli
Todas las transacciones se enviarán desde (y las tarifas pagadas por) su cuenta principal, por lo que debe informar a symbol-cli al crear un perfil.
Nota
Este perfil contendrá la clave privada de su cuenta principal en forma encriptada. Se solicitará una contraseña cada vez que se acceda.
El perfil se almacena en ~ / symbol-cli.config.json. Puede eliminar este archivo una vez que haya terminado con symbol-cli.
- Abra este archivo y elija cualquiera de los hosts enumerados en las líneas que comienzan con “host” :. Utilizará esto en el siguiente comando en lugar de HOST.
Ejecutar:
$ symbol-cli profile import --network MAIN_NET --url http://HOST:3000 --default ✔ Enter a profile name: ... Main ✔ Enter your wallet password: ... ********* ✔ Select an import type: › PrivateKey ✔ Enter your account private key: ... ********************************
- Ingrese un nombre para su perfil (por ejemplo, Principal).
- Ingrese una contraseña para proteger el perfil.
- Seleccione PrivateKey como tipo de importación.
- Ingrese su clave privada principal.
La información del perfil se almacena (encripta) en ~ / symbol-cli.config.json y symbol-cli ahora está listo para usar.
Nota
Todos los enlaces clave creados en las siguientes subsecciones se pueden deshacer en cualquier momento al anunciar una transacción de desvinculación equivalente (–action Unlink). Por lo tanto, siempre puede corregir cualquier error o cambiar la configuración de su nodo (aunque cada transacción tiene una tarifa).
Llave remota
Configuró el nodo para firmar los bloques creados con la clave remota, pero las tarifas de recolección deben ir a su cuenta principal. Esto se logra al anunciar una transacción AccountKeyLink:
ymbol-cli transaction accountkeylink --sync --action Link \ --max-fee 1000000 --mode normal ✔ Enter your wallet password: ... ********* ✔ Enter the public key of the remote account: ********************************
- Ingrese su contraseña de perfil.
- Ingrese su clave pública remota.
... ✔ Do you want to announce this transaction? ... yes SUCCESS Transaction announced SUCCESS Transaction confirmed
Clave VRF
Para ser elegible para la cosecha, una cuenta debe tener vinculada una clave VRF. Esto se logra al anunciar una transacción VrfKeyLink:
symbol-cli transaction vrfkeylink --sync --action Link \ --max-fee 1000000 --mode normal ✔ Enter your wallet password: ... ********* ✔ Enter the public key to link: ... ********************************
- Ingrese su clave pública VRF.
Clave de votación
Si su nodo va a ser un nodo de votación, debe vincular la clave de votación que generó anteriormente. El enlace se logra al anunciar una transacción VotingKeyLink:
symbol-cli transaction votingkeylink --sync --action Link \ --max-fee 1000000 --mode normal ✔ Enter your wallet password: ... ********* ✔ Enter the public key of the voting key account: **************** ✔ Enter the start point: ... 100 ✔ Enter the end point: ... 460
- Ingrese su contraseña de perfil.
- Ingrese la clave pública de votación que obtuvo anteriormente.
- Ingrese las épocas de inicio y finalización que utilizó al crear la clave de votación.
✔ Do you want to announce this transaction? ... yes SUCCESS Transaction announced SUCCESS Transaction confirmed
Cuando comience la próxima época, si está dentro de las épocas de inicio y finalización de una de sus claves registradas, su nodo debe participar en el proceso de finalización y cosechar recompensas de votación.
Nota
Cada época, al menos el 70% de todos los nodos de votación elegibles deben emitir sus votos o puestos de finalización.
Por lo tanto, si planea desconectar su nodo (por ejemplo, para mantenimiento), es importante que desvincule sus claves de votación para ese período para que la finalización no se vea afectada.
Construye un nodo de API
Una vez que tenga Catapult Server en ejecución, puede agregar servicios adicionales para convertirlo en un nodo API:
Como se muestra en el diagrama anterior, además del servidor Catapult también necesitará:
- Una base de datos que contiene los datos REST.
- Un Catapult Broker serializa los accesos a la base de datos.
- Una puerta de enlace REST que acepta solicitudes de clientes y las convierte en comandos de servidor o consultas de base de datos.
Las siguientes secciones explican cómo instalar cada servicio. Los necesitará todos.
Vaya a la carpeta _build creada durante la construcción del servidor y cree las carpetas adicionales solicitadas en los siguientes pasos dentro de _build.
Ejecutar la base de datos
- Instale MongoDB (al menos la versión 4.4).
Se recomienda seguir las propias instrucciones de instalación del programa y NO instalar desde los paquetes de su distribución.
- Cree un directorio para almacenar los archivos de datos y ejecutar la base de datos:
mkdir dbfiles mongod --dbpath=dbfiles --wiredTigerCacheSizeGB 2 --bind_ip 127.0.0.1
Mantenga mongod funcionando mientras se ejecute su nodo.
- Genere índices para optimizar los accesos a la base de datos.
El repositorio de catapult-server que clonaste para construir el servidor en el primer paso contiene una carpeta con scripts mongo. Ejecuta este:
mongo 127.0.0.1/catapult < ../scripts/mongo/mongoDbPrepare.js
Sin este paso, el rendimiento de la base de datos será inaceptablemente lento.
Ejecutar el broker
- Edite
resources/config-database.properties
y los puntosdatabaseUri
to127.0.0.1:27017
:
[database] databaseUri = mongodb://127.0.0.1:27017 databaseName = catapult
- Ejecutar el broker:
Muévase al directorio bin y ejecute:
./catapult.broker ..
Mantenga el intermediario en ejecución mientras se ejecute su nodo.
Construya y ejecute la puerta de enlace REST
Clone el repositorio de catapult-rest e instale sus dependencias:
(Volviendo al directorio _build primero)
cd .. git clone https://github.com/nemtech/catapult-rest.git cd catapult-rest npm install -g yarn ./yarn_setup.sh
- Construya la puerta de enlace REST:
cd rest yarn build
- Configure la puerta de enlace REST:
Toda la configuración se almacena en el archivo resources / rest.json.
Edite este archivo para asegurarse de que las siguientes propiedades apunten a los archivos correctos:
Property | File | Default location |
---|---|---|
tlsClientCertificatePath | node.crt.pem | _build/certificate/ |
tlsClientKeyPath | node.key.pem | _build/certificate/ |
tlsCaCertificatePath | ca.crt.pem | _build/certificate/ |
networkPropertyFilePath | config-network.properties | _build/resources/ |
nodePropertyFilePath | config-node.properties | _build/resources/ |
Utilice caminos absolutos. Por ejemplo:
{ "host": "127.0.0.1", "port": 7900, "timeout": 1000, "tlsClientCertificatePath": "/home/symbol/catapult-server/_build/certificate/node.crt.pem", "tlsClientKeyPath": "/home/symbol/catapult-server/_build/certificate/node.key.pem", "tlsCaCertificatePath": "/home/symbol/catapult-server/_build/certificate/ca.crt.pem", "networkPropertyFilePath": "/home/symbol/catapult-server/_build/resources/config-network.properties", "nodePropertyFilePath": "/home/symbol/catapult-server/_build/resources/config-node.properties" }
- Ejecute la puerta de enlace REST:
node _build/index.js resources/rest.json
Mantenga la puerta de enlace REST en funcionamiento mientras se ejecute su nodo.
Verificación
Si la puerta de enlace REST funciona correctamente, ahora puede realizar consultas en el puerto 3000. Si Catapult Server, Broker y MongoDB funcionan correctamente, los valores devueltos por REST se sincronizarán correctamente con el resto de la cadena de bloques.
Apunte un navegador a las siguientes URL y verifique que los valores devueltos sean similares a los esperados:
http: // localhost: 3000 / node / info: Estado de los servicios.
{
“status”:{
“apiNode”:”up”,
“db”:”up”
}
}
http: // localhost: 3000 / chain / info: conexión del nodo a la red.
{ "scoreHigh": "0", "scoreLow": "11485261672816562840", "height": "161138", "latestFinalizedBlock": { "finalizationEpoch": 224, "finalizationPoint": 44, "height": "160560", "hash": "52D3B01920C695B9194FABD869804E4D2A18D9B5509E47B2C70B0E6C3E275E33" } }
El campo de altura debe coincidir con la altura real de la cadena de bloques, pero, al iniciar el nodo por primera vez, la sincronización puede llevar un tiempo.
Finalmente, vaya a la página del Explorador de Symbol y verifique que su nodo aparezca en la lista (se actualiza cada 30 segundos).
Esta es una traducción al español del artículo original (en inglés) escrito en la Plataforma Oficial de Symbol . Traducido y editado por NEM en Español. Juntos estamos haciendo que NEM sea más fuerte y que Symbol sea más brillante.
Para más información y noticias sobre NEM, le invitamos a seguirnos en nuestras redes sociales: Facebook, Twitter e Instagram