WEB3DEV Español

Cover image for Trabajemos con CCIP
Delia Viloria T
Delia Viloria T

Posted on

Trabajemos con CCIP

Image description

Introducción

El Protocolo de Interoperabilidad de Cadena Cruzada de Chainlink (Cross-Chain Interoperability Protocol, CCIP) proporciona una interfaz simple en la cual, las dAapps y los empresarios de la web3 pueden tener todas sus necesidades de cadena cruzada de forma segura, incluyendo la transferencia de tokens y los mensajes arbitrarios. El CCIP es, de hecho, un protocolo similar al TCP/IP para aplicaciones de cadena cruzada y lo mejor es que es de código abierto. Podemos decir que el CCIP es uno de los pasos importantes a tomar en el mundo de la blockchain. Uno de mis amigos escribió un buen artículo sobre el CCIP y cubrió todas sus capacidades. Te recomiendo leerlo.

Pero en este artículo, sólo vamos a implementar un contrato emisor-receptor para ambos los datos y el token.

Una cosa a mencionar es que el CCIP está en sus inicios y, por lo tanto, su puente token sólo está disponible para algunas redes de prueba. Ahora vamos a codear e implementar el CCIP entre dos cadenas.

Para este ejemplo, vamos a implementar y ejecutar una cadena cruzada entre las redes de prueba de Sepolia y Mumbai

Apoyo del Token

Como se dijo antes, el puente de tokens (tokens bridging) aún no está disponible para todas las cadenas. Pero, hay un par de tokens que están apoyados por las redes de pruebas es CCIP-BnM y la segunda es CCIP-LnM.

Image description

Como puedes ver en la imagen de arriba, cada cadena tiene un token único para el puente de activos, lo que quiere decir que no podemos usar un token de una vía (lane) a otra vía. Toda la información está aquí.

Estructura estándar para enviar datos y tokens

Ya que el CCIP será un estándar para implementar y ejecutar la cadena cruzada entre la mayoría de las cadenas, saber el cuerpo y la estructura de la carga útil es vital para ejecutar una cadena cruzada. El cuerpo de la carga útil se describe así:

Image description

Como puedes ver la carga útil es del tipo Client.EVM2AnyMessage. Como puedes ver, esta estructura contiene los siguientes campos:

  • receptor de la dirección como bytes
  • datos como bytes,
  • los tokens por transferir como otra estructura
  • extraArgs como bytes
  • feeToken como dirección

Algunos de los campos de arriba son confusos, así que veamos de dónde son desde el último campo hasta el primero (porque es más fácil de entender).

feeToken representa el token a pagar acerca de la ejecución de cadena cruzada. Hay dos opciones: primero son los tokens de enlace y segundo son los tokens nativos (es decir, Eth, Matic). Si queremos pagar con tokens de enlaces, necesitamos configurar la dirección a la dirección del token de enlace y si queremos pagarlo con tokens nativos, tenemos que poner una dirección cero en ella.

La siguiente es extraArgs, esta sección es importante para enviar datos a otro contrato. En el caso de enviar datos, necesitamos configurar gasLimit más que cero pero sólo para enviar tokens, podemos configurarlo a cero.

Ahora hablemos sobre tokenAmounts. Este campo es un array del tipo Client.EVMTokenAmount (el cual es una estructura). Como puedes ver abajo, esta estructura tiene dos campos: una dirección y una cantidad.

Image description

En caso de sólo enviar datos, este campo debería tener un array con la longitud cero y se crea como se muestra abajo.

Image description

En caso de enviar tokens (por ejemplo tokens ccip-BnM), simplemente establecemos el campo del token al cciip-BnM y la cantidad del campo a nuestra cantidad deseada. Una cosa a mencionar es que si queremos enviar un tipo de token, tenemos que crear un array con una longitud.

Image description

Luego de crear la carga útil, ahora es tiempo de enviarla en las cadenas deseadas.

Enviar Datos y Tokens

Para enviar Datos y Tokens, necesitamos dos funciones principales: la primera es para calcular la transacción de la tasa además de la tasa del CCIP para enviarlos. En segundo lugar, necesitamos una función para ejecutar la cadena cruzada.

Chaink-link ha proporcionado ambas funciones en el contrato router, el cual está disponible en IRouterClient.sol.

Para obtener la tasa de la transacción, el contrato Router proporcionó una función “getFee”, el cual acepta la carga útil y el ID de la cadena (el cual es del tipo uint64).

Image description

Image description

Nota que la tasa regresada desde la función es en la unidad Wei.

Y por último, podemos enviar nuestros datos y tokens. Para esto, todo lo que necesitamos hacer es llamar la función “ccipsend”.

Image description

La función regresará el ID de un mensaje del tipo bytes32, que podemos usar para ver el progreso de la cadena cruzada en el explorador CCIP.

Y esto es todo, sólo necesitamos enviar algunos tokens y los datos con el estándar CCIP desde la red de prueba de Sepolia y la red de prueba de Mumbai.

Una última cosa es revisar si los fondos y los datos llegaron a la dirección destino de la cadena deseada. Por eso, podemos copiar el ID del mensaje o la dirección del contrato (en la fuente de la cadena) y pegarla en el explorador del CCIP.

Espero que te haya gustado, mantente motivado.

Este artículo fue escrito por Arian Salmanzadeh y traducido por Delia Viloria T. Su original se puede leer aquí.

Sería genial escucharte en nuestro Discord, puedes contarnos tus ideas, comentarios, sugerencias y dejarnos saber lo que necesitas.
Si prefieres puedes escribirnos a @web3dev_eshttps://twitter.com/web3dev_es en Twitter.

Discussion (0)