Saltar al contenido principal

Lanza un validador Avalanche en AWS con un solo clic

Cómo lanzar un validador Avalanche usando AWS

Con la intención de permitir que los desarrolladores y emprendedores ingresen al ecosistema Avalanche con la menor fricción posible, Ava Labs lanzó recientemente una oferta para implementar un nodo validador Avalanche a través del AWS Marketplace. Este tutorial mostrará los principales pasos requeridos para poner en funcionamiento este nodo y validar en la testnet Avalanche Fuji.

Descripción del producto

El nodo validador Avalanche está disponible a través del AWS Marketplace. Allí encontrarás una descripción general del producto. Esto incluye una descripción del producto, información de precios, instrucciones de uso, información de soporte y reseñas de clientes. Después de revisar esta información, debes hacer clic en el botón "Continuar para suscribirse".

Suscríbete a este software

Una vez en la página "Suscribirse a este software", verás un botón que te permite suscribirte a esta oferta del AWS Marketplace. Además, verás los términos de servicio, incluido el Acuerdo de licencia de usuario final del vendedor y el Aviso de privacidad de AWS. Después de revisar esto, debes hacer clic en el botón "Continuar a la configuración".

Configura este software

Esta página te permite elegir una opción de cumplimiento y una versión de software para lanzar este software. No se necesitan cambios, ya que la configuración predeterminada es suficiente. Deja la opción de "Cumplimiento" como "Imagen de máquina Amazon (AMI) de 64 bits (x86)". La versión de software es la última compilación de el nodo completo AvalancheGo, v1.9.5 (22 de diciembre de 2022), también conocido como Banff.5. Esto siempre mostrará la última versión. Además, la región de implementación se puede dejar como "US East (N. Virginia)". A la derecha verás los precios del software e infraestructura. Por último, haz clic en el botón "Continuar para iniciar".

Lanza este software

Aquí puedes revisar los detalles de la configuración de lanzamiento y seguir las instrucciones para lanzar el nodo validador Avalanche. Los cambios son muy pequeños. Deja la acción como "Lanzar desde el sitio web". El tipo de instancia EC2 debe seguir siendo c5.2xlarge. El cambio principal que deberás hacer es elegir un par de claves que te permitirá ssh en la instancia EC2 recién creada para ejecutar comandos curl en el nodo validador. Puedes buscar pares de claves existentes o crear un nuevo par de claves y descargarlo a tu máquina local. Si creas un nuevo par de claves, deberás mover el par de claves a la ubicación adecuada, cambiar los permisos y agregarlo al agente de autenticación OpenSSH. Por ejemplo, en MacOS se vería similar a lo siguiente:

# En este ejemplo tenemos un par de claves llamado avalanche.pem que se descargó de AWS a ~/Downloads/avalanche.pem
# Confirma que el archivo existe con el siguiente comando
test -f ~/Downloads/avalanche.pem && echo "Avalanche.pem existe."

# Ejecutar el comando anterior mostrará lo siguiente:
# Avalanche.pem existe.

# Mueve el par de claves avalanche.pem del directorio ~/Downloads al directorio oculto ~/.ssh
mv ~/Downloads/avalanche.pem ~/.ssh

# A continuación, agrega la identidad de la clave privada al agente de autenticación OpenSSH
ssh-add ~/.ssh/avalanche.pem;

# Cambia los modos de archivo o las listas de control de acceso
sudo chmod 600 ~/.ssh/avalanche.pem

Una vez que se completen estos pasos, estás listo para lanzar el nodo validador en EC2. Para hacer que eso suceda, haz clic en el botón "Lanzar"

lanzamiento exitoso

¡Ahora tienes un nodo Avalanche implementado en una instancia AWS EC2! Copia el ID de AMI y haz clic en el enlace Consola EC2 para el siguiente paso.

Consola EC2

Ahora toma el ID de AMI del paso anterior e ingrésalo en la barra de búsqueda de la Consola EC2. Esto te llevará al panel donde puedes encontrar la dirección IP pública de las instancias EC2.

instancia AMI

Copia esa dirección IP pública y abre una terminal o un símbolo del sistema. Una vez que tengas la nueva terminal abierta, haz ssh a la instancia EC2 con el siguiente comando.

ssh nombredeusuario@dirección.ip.de.la.instancia.ec2

Configuración del nodo

Cambiar a la Testnet Fuji

De forma predeterminada, el nodo Avalanche disponible a través del AWS Marketplace sincroniza la Mainnet. Si esto es lo que estás buscando, puedes saltarte este paso.

Para este tutorial, quieres sincronizar y validar la Testnet Fuji. Ahora que estás ssh en la instancia EC2, puedes hacer los cambios necesarios para sincronizar Fuji en lugar de Mainnet.

Primero, confirma que el nodo está sincronizando la Mainnet ejecutando el comando info.getNetworkID.

Solicitud info.getNetworkID

curl -X POST --data '{
"jsonrpc":"2.0",
"id" :1,
"method" :"info.getNetworkID",
"params": {
}
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/info

Respuesta info.getNetworkID

El networkID devuelto será 1, que es el ID de red de Mainnet.

{
"jsonrpc": "2.0",
"result": {
"networkID": "1"
},
"id": 1
}

Ahora quieres editar /etc/avalanchego/conf.json y cambiar la propiedad "network-id" de "mainnet" a "fuji". Para ver el contenido de /etc/avalanchego/conf.json, puedes usar el comando cat en el archivo.

cat /etc/avalanchego/conf.json
{
"api-keystore-enabled": false,
"http-host": "0.0.0.0",
"log-dir": "/var/log/avalanchego",
"db-dir": "/data/avalanchego",
"api-admin-enabled": false,
"public-ip-resolution-service": "opendns",
"network-id": "mainnet"
}

Edita ese /etc/avalanchego/conf.json con tu editor de texto favorito y cambia el valor de la propiedad "network-id" de "mainnet" a "fuji". Una vez que eso esté completo, guarda el archivo y reinicia el nodo Avalanche a través de sudo systemctl restart avalanchego. Luego puedes llamar al endpoint info.getNetworkID para confirmar que el cambio fue exitoso.

Solicitud info.getNetworkID

curl -X POST --data '{
"jsonrpc":"2.0",
"id" :1,
"method" :"info.getNetworkID",
"params": {
}
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/info

Respuesta de info.getNetworkID

El networkID devuelto será 5, que es el ID de red para Fuji.

{
"jsonrpc": "2.0",
"result": {
"networkID": "5"
},
"id": 1
}

A continuación, ejecutas el comando info.isBoostrapped para confirmar si el nodo validador de Avalanche ha terminado de arrancar.

Solicitud de info.isBootstrapped

curl -X POST --data '{
"jsonrpc":"2.0",
"id" :1,
"method" :"info.isBootstrapped",
"params": {
"chain":"P"
}
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/info

Una vez que el nodo ha terminado de arrancar, la respuesta será:

Respuesta de info.isBootstrapped

{
"jsonrpc": "2.0",
"result": {
"isBootstrapped": true
},
"id": 1
}

Nota que inicialmente la respuesta es false porque la red todavía se está sincronizando.
Cuando estés agregando tu nodo como validador en la Mainnet de Avalanche, querrás esperar a que esta respuesta devuelva true para no sufrir ningún tiempo de inactividad mientras validas. Para este tutorial, no vas a esperar a que termine de sincronizarse ya que no es estrictamente necesario.

Solicitud de info.getNodeID

A continuación, quieres obtener el ID del nodo que se utilizará para agregar el nodo como un validador. Para obtener el ID del nodo, llamas al punto final jsonrpc info.getNodeID.

curl --location --request POST 'http://127.0.0.1:9650/ext/info' \
--header 'Content-Type: application/json' \
--data-raw '{
"jsonrpc":"2.0",
"id" :1,
"method" :"info.getNodeID",
"params" :{
}
}'

Respuesta de info.getNodeID

Toma nota del valor nodeID que se devuelve, ya que necesitarás usarlo en el siguiente paso cuando agregues un validador a través de Core web. En este caso, el nodeID es NodeID-Q8Gfaaio9FAqCmZVEXDq9bFvNPvDi7rt5

{
"jsonrpc": "2.0",
"result": {
"nodeID": "NodeID-Q8Gfaaio9FAqCmZVEXDq9bFvNPvDi7rt5",
"nodePOP": {
"publicKey": "0x85675db18b326a9585bfd43892b25b71bf01b18587dc5fac136dc5343a9e8892cd6c49b0615ce928d53ff5dc7fd8945d",
"proofOfPossession": "0x98a56f092830161243c1f1a613ad68a7f1fb25d2462ecf85065f22eaebb4e93a60e9e29649a32252392365d8f628b2571174f520331ee0063a94473f8db6888fc3a722be330d5c51e67d0d1075549cb55376e1f21d1b48f859ef807b978f65d9"
}
},
"id": 1
}

Agregar el nodo como validador en Fuji a través de el Web Wallet

Para agregar el nuevo nodo como un validador en la red de pruebas Fuji, puedes usar la Avalanche Web Wallet.

Avalanche Web Wallet

La Avalanche Web Wallet es una aplicación basada en web sin middleware ni ningún tipo de comunicación con el servidor. Puede ser accedida en línea o compilada y ejecutada localmente. La Avalanche Web Wallet es una joya multifacética y ofrece validación/delegación, transferencias entre cadenas, estimación de recompensas, gestión de activos/llaves, y más.

Cambiar la Red Conectada

Verifica a qué red está conectada la billetera mirando en la parte superior derecha de la pantalla. Por defecto, la Avalanche Web Wallet se conecta a Mainnet.

Conectado a Mainnet

Red -
Mainnet

Para este demo, quieres conectar la billetera a la red de pruebas Fuji. En la parte superior derecha de la billetera, haz clic en "Mainnet" y desde el menú de navegación selecciona Fuji.

Seleccionando Fuji

Red - Seleccionando Fuji

La billetera mostrará "Conectando..." mientras cambia de Mainnet a Fuji.

Conectado a Fuji

Una vez que la billetera se haya conectado a Fuji, aparecerá una ventana emergente que dice "Conectado a Fuji".

Conectado a Fuji

Conectado a Fuji

Red - Fuji

Puedes seguir los mismos pasos para volver a conectar la billetera a Mainnet desde Fuji y para agregar redes personalizadas.

La pestaña "Earn"

Para agregar un nodo como validador, primero selecciona la pestaña "Earn" en el menú de navegación izquierdo. A continuación, haz clic en el botón "Add Validator".

Avalanche Web Wallet

El formulario Earn / Validate

Veamos los valores de entrada para el formulario Earn / Validate.

  • Node ID: Un ID único derivado del certificado de staker de cada nodo individual. Usa el NodeID que se devolvió en la respuesta de info.getNodeID. En este ejemplo es NodeID-Q8Gfaaio9FAqCmZVEXDq9bFvNPvDi7rt5
  • Staking End Date: Tus tokens AVAX estarán bloqueados hasta esta fecha.
  • Stake Amount: La cantidad de AVAX a bloquear para el staking. En Mainnet, la cantidad mínima requerida es de 2,000 AVAX. En Testnet, la cantidad mínima requerida es de 1 AVAX.
  • Delegation Fee: Reclamarás este % de las recompensas de los delegadores en tu nodo.
  • Reward Address: Una dirección de recompensa es la dirección de destino de las recompensas de staking acumuladas.

¡Completa los campos y confirma! ¡Verifica cuidadosamente los detalles y haz clic en "Submit"!

Avalanche Web Wallet

La transacción AddValidatorTx

Una vez que la transacción se emite con éxito a la Red Avalanche, la lista de transacciones en la columna derecha se actualizará con la nueva AddValidatorTx empujada hasta la parte superior de la lista. Haz clic en el icono de la lupa y se abrirá una nueva pestaña del navegador con los detalles de la AddValidatorTx. Mostrará detalles como el valor total de AVAX transferidos, cualquier AVAX que se hayan quemado, el ID de blockchain, el ID de bloque, el NodeID del validador y el tiempo total que ha transcurrido desde todo el período de validación.

Transacción de validador

Confirma que el Nodo es un Validador Pendiente en Fuji

Como último paso, puedes llamar al endpoint platform.getPendingValidators para confirmar que el nodo Avalanche que fue creado recientemente en AWS está en la cola de validadores pendientes, donde permanecerá durante 5 minutos.

Solicitud de platform.getPendingValidators

curl --location --request POST 'https://api.avax-test.network/ext/bc/P' \
--header 'Content-Type: application/json' \
--data-raw '{
"jsonrpc": "2.0",
"method": "platform.getPendingValidators",
"params": {
"subnetID": "11111111111111111111111111111111LpoYY",
"nodeIDs": []
},
"id": 1
}'

Respuesta de platform.getPendingValidators

{
"jsonrpc": "2.0",
"result": {
"validators": [
{
"txID": "4d7ZboCrND4FjnyNaF3qyosuGQsNeJ2R4KPJhHJ55VCU1Myjd",
"startTime": "1673411918",
"endTime": "1675313170",
"stakeAmount": "1000000000",
"nodeID": "NodeID-Q8Gfaaio9FAqCmZVEXDq9bFvNPvDi7rt5",
"delegationFee": "2.0000",
"connected": false,
"delegators": null
}
],
"delegators": []
},
"id": 1
}

También puedes pasar el NodeID como una cadena al arreglo nodeIDs en el cuerpo de la solicitud.

curl --location --request POST 'https://api.avax-test.network/ext/bc/P' \
--header 'Content-Type: application/json' \
--data-raw '{
"jsonrpc": "2.0",
"method": "platform.getPendingValidators",
"params": {
"subnetID": "11111111111111111111111111111111LpoYY",
"nodeIDs": ["NodeID-Q8Gfaaio9FAqCmZVEXDq9bFvNPvDi7rt5"]
},
"id": 1
}'

Esto filtrará la respuesta por el arreglo nodeIDs, lo que te ahorrará tiempo al no tener que buscar en todo el cuerpo de la respuesta los NodeIDs.

{
"jsonrpc": "2.0",
"result": {
"validators": [
{
"txID": "4d7ZboCrND4FjnyNaF3qyosuGQsNeJ2R4KPJhHJ55VCU1Myjd",
"startTime": "1673411918",
"endTime": "1675313170",
"stakeAmount": "1000000000",
"nodeID": "NodeID-Q8Gfaaio9FAqCmZVEXDq9bFvNPvDi7rt5",
"delegationFee": "2.0000",
"connected": false,
"delegators": null
}
],
"delegators": []
},
"id": 1
}

Después de 5 minutos, el nodo comenzará oficialmente a validar la red de pruebas Avalanche Fuji y ya no lo verás en el cuerpo de respuesta del endpoint platform.getPendingValidators. Ahora podrás acceder a él a través del endpoint platform.getCurrentValidators.

Solicitud de platform.getCurrentValidators

curl --location --request POST 'https://api.avax-test.network/ext/bc/P' \
--header 'Content-Type: application/json' \
--data-raw '{
"jsonrpc": "2.0",
"method": "platform.getCurrentValidators",
"params": {
"subnetID": "11111111111111111111111111111111LpoYY",
"nodeIDs": ["NodeID-Q8Gfaaio9FAqCmZVEXDq9bFvNPvDi7rt5"]
},
"id": 1
}'

Respuesta de platform.getCurrentValidators

{
"jsonrpc": "2.0",
"result": {
"validators": [
{
"txID": "2hy57Z7KiZ8L3w2KonJJE1fs5j4JDzVHLjEALAHaXPr6VMeDhk",
"startTime": "1673411918",
"endTime": "1675313170",
"stakeAmount": "1000000000",
"nodeID": "NodeID-Q8Gfaaio9FAqCmZVEXDq9bFvNPvDi7rt5",
"rewardOwner": {
"locktime": "0",
"threshold": "1",
"addresses": [
"P-fuji1tgj2c3k56enytw5d78rt0tsq3lzg8wnftffwk7"
]
},
"validationRewardOwner": {
"locktime": "0",
"threshold": "1",
"addresses": [
"P-fuji1tgj2c3k56enytw5d78rt0tsq3lzg8wnftffwk7"
]
},
"delegationRewardOwner": {
"locktime": "0",
"threshold": "1",
"addresses": [
"P-fuji1tgj2c3k56enytw5d78rt0tsq3lzg8wnftffwk7"
]
},
"potentialReward": "5400963",
"delegationFee": "2.0000",
"uptime": "0.0000",
"connected": false,
"delegators": null
}
]
},
"id": 1
}

Mainnet

Todos estos pasos se pueden aplicar a Mainnet. Sin embargo, la cantidad mínima requerida de tokens Avax para convertirse en un validador es de 2,000 en Mainnet. Para obtener más información, por favor lee este documento.

Mantenimiento

El clic de un solo botón de AWS está destinado a ser utilizado en entornos automatizados, no como una solución para el usuario final. Aún puedes gestionarlo manualmente, pero no es tan fácil como una instancia de Ubuntu o usar el script:

  • El binario AvalancheGo está en /usr/local/bin/avalanchego
  • La configuración del nodo principal está en /etc/avalanchego/conf.json
  • El directorio de trabajo está en /home/avalanche/.avalanchego/ (y pertenece al usuario avalanchego)
  • La base de datos está en /data/avalanchego
  • Los registros están en /var/log/avalanchego

Para una actualización simple, necesitarías colocar el nuevo binario en /usr/local/bin/. Si ejecutas una Subnet, también necesitarías colocar el binario de la VM en /home/avalanche/.avalanchego/plugins.

También puedes considerar usar esta guía, pero eso no abordará la actualización de la Subnet, si tienes una.

Resumen

Avalanche es la primera plataforma descentralizada de contratos inteligentes construida para la escala de las finanzas globales, con finalidad de transacción casi instantánea. Ahora, con un nodo validador de Avalanche disponible como instalación de un solo clic desde el AWS Marketplace, los desarrolladores y emprendedores pueden ingresar al ecosistema Avalanche en cuestión de minutos. Si tienes alguna pregunta o quieres hacer un seguimiento de alguna manera, únete a nuestro servidor de Discord en [https://chat.avax.network]. Para obtener más recursos para desarrolladores, por favor consulta nuestra Documentación para Desarrolladores.

Was this page helpful?