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.
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.
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.
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:
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.
No caso de envio apenas de dados, este campo deverá possuir um array com comprimento zero e é criado conforme visualizado abaixo.
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.
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).
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”.
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.
Latest comments (0)