Transferir USDC via CCTP
Neste guia, mostraremos como transferir USDC nativo entre diferentes redes blockchain utilizando o Protocolo de TransferĂȘncia entre Cadeias (CCTP) da Circle e o Wormhole TypeScript SDK.
Tradicionalmente, transferĂȘncias entre cadeias usando o CCTP envolvem vĂĄrias etapas manuais, como iniciar a transferĂȘncia na cadeia de origem, transmitir mensagens entre as cadeias e cobrir taxas de gĂĄs nas cadeias de origem e destino. Sem o TypeScript SDK, os desenvolvedores precisam lidar com essas operaçÔes independentemente, o que adiciona complexidade e aumenta a chance de erros, especialmente ao lidar com o pagamento de taxas de gĂĄs na cadeia de destino e a gestĂŁo do token nativo de gĂĄs.
O Wormhole TypeScript SDK simplifica esse processo oferecendo envio automatizado de transferĂȘncias e o gerenciamento das taxas de gĂĄs na cadeia de destino. Ele tambĂ©m oferece a opção de incluir tokens nativos de gĂĄs para uma execução contĂnua. Isso reduz o custo para o desenvolvedor, torna as transferĂȘncias mais rĂĄpidas e confiĂĄveis, alĂ©m de melhorar a experiĂȘncia do usuĂĄrio.
Neste guia, exploraremos primeiro a teoria por trĂĄs do CCTP e, em seguida, forneceremos um tutorial passo a passo para integrar o Wormhole TypeScript SDK no seu aplicativo, facilitando transferĂȘncias de USDC entre mĂșltiplas cadeias.
Conceitos Principais Ao transferir ativos entre cadeias, existem duas abordagens principais para lidar com o processo de transferĂȘncia: manual e automatizada. Abaixo, destacamos as diferenças entre essas abordagens e como elas impactam a experiĂȘncia do usuĂĄrio:
TransferĂȘncias Manuais: envolvem trĂȘs etapas principais: iniciar a transferĂȘncia na cadeia de origem, buscar a atestação da Circle para verificar a transferĂȘncia e completar a transferĂȘncia na cadeia de destino.
TransferĂȘncias Automatizadas: simplificam o processo ao lidar automaticamente com atestaçÔes da Circle e finalização. Com o envio automatizado do Wormhole, vocĂȘ sĂł precisa iniciar a transferĂȘncia, e o restante Ă© gerenciado para vocĂȘ.
PrĂ©-requisitos Antes de começar, verifique se vocĂȘ tem os seguintes itens:
Node.js e npm instalados em sua mĂĄquina
TypeScript instalado globalmente
Tokens USDC nas cadeias compatĂveis. Este tutorial usa Avalanche e Sepolia como exemplos.
Uma carteira com uma chave privada, financiada com tokens nativos (Testnet ou Mainnet) para taxas de gĂĄs.
Cadeias CompatĂveis O Wormhole SDK suporta uma ampla gama de cadeias EVM e nĂŁo-EVM, permitindo que vocĂȘ facilite transferĂȘncias entre cadeias de maneira eficiente. VocĂȘ pode encontrar uma lista completa das cadeias compatĂveis no repositĂłrio do Wormhole SDK no GitHub, que cobre ambientes Testnet e Mainnet.
Configuração do Projeto Nesta seção, vocĂȘ configurarĂĄ seu projeto para transferir USDC entre cadeias usando o SDK do Wormhole e o CCTP da Circle. Orientaremos vocĂȘ na inicialização do projeto, instalação de dependĂȘncias e preparação do ambiente para transferĂȘncias entre cadeias.
Inicializar o Projeto: comece criando um novo diretĂłrio para o seu projeto e inicializando-o com npm, que criarĂĄ o arquivo package.json do seu projeto.
Instalar DependĂȘncias: instale as dependĂȘncias necessĂĄrias, incluindo o SDK do Wormhole e bibliotecas auxiliares.
Configurar Variåveis de Ambiente: para armazenar com segurança sua chave privada, crie um arquivo
.env
na raiz do seu projeto.
Dentro do arquivo .env
, adicione sua chave privada.
Nota: Certifique-se de que sua chave privada contenha fundos USDC e tokens nativos para taxas de gĂĄs tanto na cadeia de origem quanto na de destino.
Criar um Arquivo helpers.ts: para simplificar a interação entre as cadeias, crie um arquivo para armazenar funçÔes auxiliares para buscar sua chave privada, configurar signatårios para diferentes cadeias e gerenciar a transmissão de transaçÔes.
Abra o arquivo helpers.ts
e adicione o seguinte cĂłdigo:
Criar o Script Principal: crie um novo arquivo chamado
manual-transfer.ts
para armazenar seu script para transferir USDC entre cadeias.
Abra o arquivo manual-transfer.ts
e comece importando os mĂłdulos necessĂĄrios do SDK e arquivos auxiliares.
TransferĂȘncias Manuais: nas transferĂȘncias manuais de USDC, vocĂȘ realiza cada etapa do processo de transferĂȘncia entre cadeias individualmente. Essa abordagem permite maior controle e flexibilidade sobre como a transferĂȘncia Ă© executada, o que pode ser Ăștil em cenĂĄrios onde vocĂȘ precisa personalizar certos aspectos da transferĂȘncia, como o gerenciamento de gĂĄs, seleção especĂfica de cadeias ou assinatura manual de transaçÔes.
Esta seção o guiarĂĄ por uma transferĂȘncia manual de USDC entre cadeias usando o Wormhole SDK e o CCTP da Circle.
Configurar o Ambiente de TransferĂȘncia
Configurar Detalhes da TransferĂȘncia Antes de iniciar uma transferĂȘncia entre cadeias, vocĂȘ deve configurar o contexto da cadeia e os signatĂĄrios para as cadeias de origem e destino.
Inicializar o SDK do Wormhole: inicialize a função wormhole para o ambiente Testnet e especifique as plataformas (EVM e Solana) para oferecer suporte.
VocĂȘ pode substituir 'Testnet' por 'Mainnet' se desejar realizar transferĂȘncias na Mainnet.
Configurar as cadeias de origem e destino - especifique a cadeia de origem (Avalanche) e a cadeia de destino (Sepolia) usando o mĂ©todo getChain. Isso nos permite definir onde enviar o USDC e onde recebĂȘ-los:
Configurar os signatårios - use a função getSigner para recuperar os signatårios responsåveis por assinar as transaçÔes nas respectivas cadeias. Isso garante que as transaçÔes sejam corretamente autorizadas tanto na cadeia de origem quanto na cadeia de destino:
Definir o valor da transferĂȘncia - o valor de USDC a ser transferido Ă© especificado. Neste caso, estamos transferindo 0,1 USDC, que Ă© analisado e convertido para as unidades base esperadas pelo SDK do Wormhole:
Definir o modo de transferĂȘncia - especificamos que a transferĂȘncia deve ser manual definindo automatic = false. Isso significa que vocĂȘ precisarĂĄ gerenciar os passos de atestação e finalização por conta prĂłpria:
Iniciar a TransferĂȘncia
Para começar o processo de transferĂȘncia manual, vocĂȘ precisa primeiro criar o objeto de transferĂȘncia e depois iniciar manualmente a transferĂȘncia na cadeia de origem.
Criar o objeto de transferĂȘncia do Circle - a função wh.circleTransfer()
cria um objeto com os detalhes da transferĂȘncia, como o valor de USDC, os endereços de origem e destino, e o modo. No entanto, isso nĂŁo inicia a transferĂȘncia em si:
Iniciar a transferĂȘncia - a função initiateTransfer
envia a transação na cadeia de origem. Isso envolve assinar e enviar a transação usando o signatĂĄrio de origem. Ela retornarĂĄ uma lista de IDs de transaçÔes (srcTxIds) que vocĂȘ pode usar para rastrear a transferĂȘncia:
Buscar a Atestação do Circle (VAA)
Depois de iniciar a transferĂȘncia na cadeia de origem, vocĂȘ deve buscar a VAA (Atestação de Valor Vinculado) do Circle. A VAA serve como prova criptogrĂĄfica de que o CCTP reconheceu a transferĂȘncia com sucesso. A transferĂȘncia nĂŁo pode ser concluĂda na cadeia de destino atĂ© que essa atestação seja obtida.
Definir um tempo limite - buscar a atestação pode levar algum tempo, então é comum definir um tempo limite. Neste exemplo, definimos o tempo limite para 60 segundos:
Buscar a atestação - apĂłs iniciar a transferĂȘncia, vocĂȘ pode usar a função fetchAttestation()
para recuperar a VAA. Essa função aguardarĂĄ atĂ© que a atestação esteja disponĂvel ou atĂ© que o tempo limite especificado seja alcançado:
Os attestIds
conterĂŁo os detalhes da atestação obtida, que o Wormhole usarĂĄ para completar a transferĂȘncia na cadeia de destino.
Completar a TransferĂȘncia na Cadeia de Destino
ApĂłs obter a VAA corretamente, o Ășltimo passo Ă© completar a transferĂȘncia na cadeia de destino (Sepolia neste exemplo). Isso envolve resgatar a VAA, o que move os USDC da custĂłdia do Circle para a cadeia de destino.
Use a função completeTransfer()
para finalizar a transferĂȘncia na cadeia de destino. Isso exige que o signatĂĄrio de destino assine e envie a transação para a cadeia de destino:
Os dstTxIds
conterĂŁo os IDs das transaçÔes para a transferĂȘncia na cadeia de destino, confirmando que a transferĂȘncia foi concluĂda.
VocĂȘ pode encontrar o cĂłdigo completo do script de transferĂȘncia manual de USDC abaixo:
Executar a TransferĂȘncia Manual
Para executar o script de transferĂȘncia manual, vocĂȘ pode usar o ts-node
para rodar o arquivo TypeScript diretamente:
Isso iniciarĂĄ a transferĂȘncia de USDC da cadeia de origem (Avalanche) e a completarĂĄ na cadeia de destino (Sepolia).
VocĂȘ pode monitorar o status da transação no explorador do Wormhole.
Completar uma TransferĂȘncia Parcial
Em alguns casos, uma transferĂȘncia manual pode começar, mas nĂŁo terminarâpor exemplo, se o usuĂĄrio interromper sua sessĂŁo ou houver um problema antes que a transferĂȘncia possa ser concluĂda. O SDK do Wormhole permite que vocĂȘ reconstrua o objeto de transferĂȘncia a partir do hash da transação na cadeia de origem.
Esse recurso Ă© Ăștil para recuperar uma transferĂȘncia incompleta ou para depuração.
Aqui estĂĄ como vocĂȘ pode completar uma transferĂȘncia parcial usando apenas a cadeia de origem e o hash da transação:
VocĂȘ precisarĂĄ fornecer os seguintes requisitos para completar a transferĂȘncia parcial:
ID da Transação (txId): o hash da transação na cadeia de origem onde a transferĂȘncia foi iniciada
SignatĂĄrio da cadeia de destino (destination.signer): a carteira ou chave privada que pode autorizar e concluir a transferĂȘncia na cadeia de destino. Esse signatĂĄrio Ă© o mesmo definido na configuração da transferĂȘncia manual
Isso permite retomar o processo de transferĂȘncia reconstruindo o objeto de transferĂȘncia e completando-o na cadeia de destino. Ă especialmente conveniente para depuração ou quando hĂĄ interrupçÔes na transferĂȘncia.
VocĂȘ pode encontrar o cĂłdigo completo para o script de transferĂȘncia manual de USDC abaixo:
TransferĂȘncias AutomĂĄticas
O processo de transferĂȘncia automĂĄtica simplifica as etapas automatizando a obtenção da atestação e a conclusĂŁo da transferĂȘncia. Tudo o que vocĂȘ precisa fazer Ă© iniciar a transferĂȘncia.
Configurar o Ambiente de TransferĂȘncia
Configurar os Detalhes da TransferĂȘncia A configuração para transferĂȘncias automĂĄticas Ă© semelhante Ă das transferĂȘncias manuais, com a principal diferença sendo que a flag automatic estĂĄ definida como true
. Isso indica que o Wormhole lidarĂĄ com as etapas de atestação e finalização para vocĂȘ:
Iniciar a TransferĂȘncia
O processo de transferĂȘncia Ă© o mesmo que para transferĂȘncias manuais. VocĂȘ cria o objeto de transferĂȘncia e depois inicia a transferĂȘncia na cadeia de origem:
Registrar Detalhes da TransferĂȘncia
ApĂłs iniciar a transferĂȘncia, vocĂȘ pode registrar os IDs das transaçÔes tanto da cadeia de origem quanto da cadeia de destino. Isso ajudarĂĄ a acompanhar o progresso da transferĂȘncia:
VocĂȘ pode encontrar o cĂłdigo completo para o script de transferĂȘncia automĂĄtica de USDC abaixo:
automatic-transfer.ts
Executar a TransferĂȘncia AutomĂĄtica
Assumindo que vocĂȘ tenha criado um novo arquivo automatic-transfer.ts
para transferĂȘncias automĂĄticas no diretĂłrio src
, use o seguinte comando para executĂĄ-lo com o ts-node
:
O relayer automĂĄtico cuidarĂĄ de buscar a atestação e concluir a transferĂȘncia para vocĂȘ.
Recursos
Se vocĂȘ deseja explorar o projeto completo ou precisa de uma referĂȘncia enquanto segue este tutorial, pode encontrar o cĂłdigo completo no repositĂłrio demo do GitHub do Wormhole. O repositĂłrio inclui todos os scripts de exemplo e configuraçÔes necessĂĄrias para realizar transferĂȘncias cross-chain de USDC, incluindo transferĂȘncias manuais, automĂĄticas e parciais usando o SDK do Wormhole e o CCTP da Circle.
ConclusĂŁo
Neste tutorial, vocĂȘ ganhou experiĂȘncia prĂĄtica com o CCTP da Circle e o SDK do Wormhole. Aprendeu a realizar transferĂȘncias manuais e automĂĄticas de USDC entre vĂĄrias cadeias e recuperar transferĂȘncias parciais, se necessĂĄrio.
Ao seguir esses passos, vocĂȘ aprendeu a:
Configurar transferĂȘncias cross-chain de USDC nativo entre cadeias suportadas
Lidar tanto com o envio manual quanto com o envio automåtico de transaçÔes
Recuperar e concluir transferĂȘncias incompletas usando o hash da transação e o signatĂĄrio da cadeia de destino
Last updated