WEB3DEV

Cover image for Vamos Trabalhar com o CCIP
Isabela Curado Nehme
Isabela Curado Nehme

Posted on

Vamos Trabalhar com o CCIP

https://miro.medium.com/v2/resize:fit:720/format:webp/0*eJKDrh6auHd7agC-

Introdução

O Chainlink Cross-Chain Interoperability Protocol (CCIP ou protocolo de interoperabilidade de cadeia cruzada) fornece uma interface simples por meio da qual dApps e empreendedores Web3 podem atender com segurança todas as suas necessidades entre cadeias, incluindo transferências de tokens e mensagens arbitrárias. O CCIP é na verdade um protocolo como o TCP/IP para aplicações de cadeia cruzada e a melhor coisa sobre ele é que é open source (de código aberto). Podemos dizer que o CCIP é um dos passos importantes dados no mundo blockchain. Um de meus amigos escreveu um artigo muito bom sobre CCIP e abordou todos os seus recursos. Eu recomendo a leitura.

https://coinsbench.com/architecting-the-future-of-web3-infrastructure-with-chainlink-ccip-226cf370dcce?source=post_page-----9e3620eb494d--------------------------------

Mas neste artigo, implementaremos apenas um contrato de envio e recebimento de dados e token.

Uma coisa a mencionar é que o CCIP está em seus primeiros dias e, portanto, sua ponte de token está disponível apenas para algumas redes de teste. Agora vamos codificar e implementar o CCIP entre duas cadeias.

Para este exemplo, vamos implementar e executar uma cadeia cruzada entre as redes de teste Sepolia e Mumbai.

Suporte a Tokens

Como dito anteriormente, a ponte de tokens ainda não está disponível para todas as cadeias. Porém, existem alguns tokens que são suportados pelas redes de teste, um é o CCIP-BnM e o segundo é o CCIP-LnM.

https://miro.medium.com/v2/resize:fit:720/format:webp/1*KDbOpBi89KNR9_v4vOBVlw.png

Como você pode ver na imagem acima, cada cadeia possui um token exclusivo para ponte de ativos, o que significa que não podemos usar um token de uma via para outra via. Todas as informações estão no link abaixo.

https://docs.chain.link/ccip/supported-networks?source=post_page-----9e3620eb494d--------------------------------#overview

Estrutura Padrão para Envio de Dados e Tokens

Devido ao CCIP ser um padrão para implementação e execução de cadeia cruzada na maioria das cadeias, conhecer o corpo da carga útil e a estrutura para executar uma cadeia cruzada é crucial. O corpo da carga útil está descrito abaixo:

https://miro.medium.com/v2/resize:fit:720/format:webp/1*B2InLvLIca1sFTfXzRus5g.png

Como você pode ver, a carga útil é do tipo Client.EVM2AnyMessage e esta struct contém os seguintes campos:

· Endereço do receptor em bytes;

· Dados em bytes;

· Os tokens para transferência como outra struct;

· extraArgs em bytes;

· feeToken como endereço.

Alguns dos campos acima são confusos, então vamos ver o que são do último campo para o primeiro (porque é mais fácil de entender).

O feeToken representa o token para pagar a execução entre cadeias. Existem duas opções: a primeira são tokens de ligação e a segunda são tokens nativos (por exemplo, Eth, Matic). Se quisermos pagar com tokens de ligação, precisamos definir o endereço para o endereço do token de ligação e se quisermos pagar com tokens nativos, temos que colocar o endereço como zero.

O próximo é extraArgs. Esta seção é importante para enviar dados para outro contrato. No caso de envio de dados, temos que definir gasLimit maior que zero, mas para enviar apenas tokens podemos defini-lo como zero.

Agora vamos falar sobre tokenAmounts. Este campo é um array do tipo Client.EVMTokenAmount (que é uma struct). Como você pode ver abaixo, essa struct possui dois campos, um endereço e um valor.

https://miro.medium.com/v2/resize:fit:720/format:webp/1*7Ohu5H7SqbLlzcnTdp9KUA.png

No caso de envio apenas de dados, este campo deverá possuir um array com comprimento zero e é criado conforme visualizado abaixo.

https://miro.medium.com/v2/resize:fit:640/format:webp/1*vCLhqXoMnnk3kI7VY6rGdQ.png

No caso de envio de tokens (por exemplo, tokens ccip-BnM), simplesmente definimos o campo token como ccip-BnM e o campo amount como o valor desejado. Uma coisa a mencionar é que se quisermos enviar um tipo de token, criamos um array com um comprimento.

https://miro.medium.com/v2/resize:fit:720/format:webp/1*lKCVIfR6qaufNhktdtpgew.png

Depois de criar o payload (carga útil), é hora de enviá-lo para as cadeias desejadas.

Envio de Dados e Tokens

Para enviar dados e tokens precisamos de duas funções principais: a primeira para calcular a taxa de transação mais a taxa CCIP para enviá-los. E a segunda, uma função para realmente executar a cadeia cruzada.

A Chainlink forneceu essas duas funções no contrato do roteador e está disponível no IRouterClient.sol.

Para obter a taxa da transação, o contrato Router (roteador) fornece uma função “getFee” que aceita a carga útil e o ID da cadeia (que é do tipo uint64).

https://miro.medium.com/v2/resize:fit:720/format:webp/1*3uYe8Q4S4wehbm1WwagpFw.png

https://miro.medium.com/v2/resize:fit:720/format:webp/1*0AyCTeyxh-iJ57Ij1b9Xrw.png

Observe que a taxa retornada pela função está na unidade Wei.

E finalmente podemos enviar nossos dados e tokens. Para isso basta chamar a função “ccipsend”.

https://miro.medium.com/v2/resize:fit:720/format:webp/1*7LpJ2xpZtdMe01ri9ViOsA.png

A função retornará um ID de mensagem do tipo bytes32, que podemos usar para ver o progresso da cadeia cruzada no CCIP Explorer.

E é isso, acabamos de enviar alguns tokens e dados com o padrão CCIP da rede de teste Sepolia para a rede de teste Mumbai.

Uma última coisa é verificar se os fundos e os dados chegaram ao endereço de destino da rede desejada. Para isso, podemos copiar o ID da mensagem ou o endereço do contrato (na cadeia de origem) e colá-lo no CCIP Explorer (link abaixo).

https://ccip.chain.link/?source=post_page-----9e3620eb494d--------------------------------

Espero que todos vocês gostem, mantenham-se motivados.

Este artigo foi escrito por Arian Salmanzadeh e traduzido por Isabela Curado Nehme. Seu original pode ser lido aqui.

Oldest comments (0)