Contratos Conectados Cross-Chain con Axelar

Leo1925
Moonbeam Network | Español
8 min readJul 21, 2022

Moonbeam se construyó sobre Polkadot y comparte su visión de interoperabilidad, pero la comunicación cross-chain no se detiene con parachains. El protocolo Axelar Network ha ampliado la cantidad de redes para que estén al alcance de Moonbeam al permitir que los tokens se conecten entre redes Cosmos y EVM seleccionadas. Además del puente de tokens, el paso de mensajes generales (GMP) de Axelar permite que los contratos inteligentes se comuniquen entre sí a través de cadenas. Esto permite a los desarrolladores crear aplicaciones conectadas cross-chain en Moonbeam que pueden aprovechar la funcionalidad de Polkadot, Ethereum, Avalanche, Cosmos y más.

Las dApps multi-chain actualmente son interfaces unificadas para protocolos duplicados en múltiples EVM. Los protocolos podrán conectar sus contratos cross-chain utilizando el paso de mensajes generales de Axelar para volverse conscientes de multi-chain, lo que permite una interoperabilidad y funcionalidad avanzadas entre lo que de otro modo serían ecosistemas aislados.

Para demostrar el poder de los contratos conectados, veremos una demostración que envía y almacena una cadena de una EVM de testnet a otra. Si aún no ha configurado MetaMask, puede agregar la red Moonbase Alpha en el sitio de documentos.

Introducción a los contratos de Axelar

Axelar es una cadena de prueba de participación delegada que proporciona una comunicación segura cross-chain. Todos los validadores de la red de Axelar ejecutan nodos ligeros en cadenas compatibles con Axelar. Estos validadores funcionan juntos para confirmar que los mensajes se envían de una cadena a otra al monitorear el contrato Axelar Gateway de cada cadena, que es uno de los dos contratos Axelar con los que interactuaremos más adelante en la demostración.

Imagen de Axelar Network

El otro contrato con el que trabajaremos es el microservicio Axelar Gas Receiver. Cada vez que utiliza Axelar Gateway para enviar una transacción cross-chain, IAxelarGasReceiver le permite pagar la transacción posterior en la cadena de destino. Si bien no es necesario, permite que el usuario final envíe solo una transacción para actualizar automáticamente la cadena de destino.

Contrato SimpleGeneralMessage Conectado

Ahora intentémoslo de la manera más básica posible. Para comprender lo que estamos haciendo, echemos un vistazo al contrato que desplegaremos, que se ha puesto a disposición en Github.

Si echa un vistazo al padre del contrato, encontrará que hereda de un contrato abstracto IAxelarExecutable . Este contrato principal contiene algún código con el que los contratos de Axelar requieren interactuar para pasar mensajes generales.

Hay dos funciones en el contrato principal. El primero es enviarMensaje . Envía un mensaje de cadena codificado a través de las cadenas a través de Axelar con la opción de pagar su gas en la cadena de destino.

La segunda función es _execute , que anula una función heredada por IAxelarExecutable . Esta función es interna y solo puede ser llamada por el contrato de puerta de enlace de Axelar cuando recibe un mensaje de otra cadena que está dirigido a este contrato. Aquí es donde analizamos la cadena de la carga útil del mensaje.

Hacer es la mejor manera de aprender, así que trate de seguir el despliegue y el mensaje que se transmite en Moonbase Alpha.

Despliegue con Remix en Moonbase Alpha

La forma más fácil de desplegar el contrato de demostración único es a través de Remix . Necesitará DEV para desplegar en Moonbase Alpha, que puede obtener de nuestro faucet si aún no tiene ninguno.

Para desplegar el script, primero copie y pegue el contrato en Remix. Luego compila en la pestaña de compilación. Asegúrese de que su MetaMask esté conectado a la red Moonbase Alpha. Luego, en la pestaña de despliegue de Remix, configure el entorno en Web3 inyectado, esto usará MetaMask como proveedor de Web3.

Este contrato y muchos contratos conectados que utilizan Axelar necesitarán conocer las direcciones de dos contratos: Axelar Gateway y Axelar Gas Receiver. Deberá proporcionar sus instancias en Moonbase Alpha cuando construya SimpleGeneralMessage.sol.

Una vez que su contrato se haya desplegado en Moonbase Alpha, le recomiendo que repita el proceso con cualquiera de las otras redes de prueba de EVM que están conectadas a Axelar. Aquí hay algunos de ellos con un enlace a un grifo. También he incluido los contratos de SimpleGeneralMessage que se desplegaron anteriormente si se encuentra en una crisis de tiempo importante.

Envío de un mensaje de cross-chain desde Moonbase con Axelar

Para enviar un mensaje de cross-chain con una transacción de cadena de destino automática, primero debe saber cuánto gas gastar en la cadena de destino. En este ejemplo, la moneda nativa DEV de Moonbase Alpha se usa para pagar el gas. La red de prueba trata el precio de cada red de prueba como igual al precio de su red principal (GLMR es el equivalente de DEV en la red principal). Al momento de escribir, ETH es mucho más caro que AVAX, por lo que el precio del gas y la conversión de DEV a rETH (Ropsten ETH) serán mucho más altos que DEV a Fuji AVAX.

Para calcular la conversión de la moneda de la cadena de origen (Moonbase Alpha) al gas de la cadena de destino, puede usar este script , que usa el SDK de javascript de Axelar . Pero para ser rápido, el equivalente de 100000 gas en DEV Wei para cada cadena se enumera a continuación (en el momento de escribir este artículo). 100000 debería ser más que suficiente para la mayoría de las cadenas cortas, pero los párrafos y los ensayos podrían causar problemas.

  • Ropsten Testnet:: 356806741787800000
  • Polygon Mumbai: 3390032863000000
  • Avalanche Fuji: 97036323830100000
  • Fantom Testnet: 55389864900000

Ahora que tiene la tarifa de gas convertida a wei, puede comenzar a usar la interfaz Remix. Este ejemplo enviará un mensaje de cross-chain a la red de prueba de Fantom, pero puede sustituir el valor del gas y el nombre de la cadena por el EVM que desee. Verifique las siguientes cosas:

  • El entorno es “Proveedor inyectado — Web3” en la red 1287 (Moonbase Alpha)
  • Tiene fondos sustanciales en su billetera del grifo para cubrir tanto el costo de la transacción como el DEV calculado anteriormente
  • Tienes la tarifa de gas calculada en el paso anterior colocada en la entrada de valor
  • Ponga un mensaje corto de su elección en la entrada de mensaje de la llamada sendMessage (en este caso, “ghost of the moon”)
  • Coloque la dirección de contrato de SimpleGeneralMessage de la cadena de destino en la entrada de dirección de destino de la llamada a sendMessage . Debe ser una dirección que desplego (recomendada) o una de las direcciones desplegadas previamente
  • Ingrese “Fantom” (o el nombre canonical de la red principal para cualquier EVM de red de prueba que desee usar) en la entrada de la cadena de destino de la llamada de sendMessage

Una vez hecho esto, tramita la ejecución y confírmala en MetaMask.

Seguimiento de mensajes de cross-chain

Después de enviar su transacción, debería poder ingresar al explorador de bloques de Moonbase para ver la transacción usando su hash de transacción. Si todo salió bien, debe confirmarse y podrá ver los rastros de la entrada de su transacción en la parte inferior cuando la vea como UTF-8.

En una transacción típica, podrá ver el estado y los datos de la transacción en una sola página en un solo explorador. Pero, dado que se trata de mensajes cross-chain, en realidad hay dos transacciones EVM en dos cadenas.

Para ver realmente si su transacción ha sido exitosa, vaya al explorador de testnet de Axelarscan y encuentre su transacción. Puede buscar una transacción utilizando el mismo hash de transacción que el generado por Remix (en la cadena de origen). Debería ver algo como esto:

Si todo va bien, se aprobará su transacción y podrá ver el último mensaje actualizado en la cadena de origen de su transacción exitosa cross-chain. Si no se actualiza automáticamente, no te preocupes. En promedio, las confirmaciones tardan unos minutos en pasar por la red de prueba. El equipo de Axelar siempre está trabajando para mejorar la velocidad de su red, pero ten en cuenta que en el pasado ha tardado más, así que no te preocupes si tu transacción no finaliza de inmediato.

Si desea ver el mensaje almacenado en el contrato, puede hacerlo a través de Remix. Primero, conéctese a la red de destino a través de Metamask. Asegúrese de que está en el entorno “Proveedor inyectado” y que el contrato sigue siendo “SimpleGeneralMessage”. Luego tome la dirección del contrato de destino y péguela en la entrada “ En la dirección “. Presiónelo y debería poder usar el contrato de resultado para ver el último mensaje.

Obtenga más información sobre los contratos conectados

La visión de Moonbeam de un centro interoperable de redes no se detiene aquí. Obtenga más información sobre Axelar en su sitio web , el mensaje general que pasa en los documentos de Axelar y lea sobre cómo Moonbeam se perfila para ser el líder en interoperabilidad de blockchain en nuestra página de contratos conectados.

Si está interesado en Moonbeam y desea obtener más información, suscríbase a nuestro boletín y síganos en las redes sociales.

--

--