TypeScript SDK

O Wormhole TypeScript SDK é uma ferramenta valiosa para interagir com as blockchains suportadas pelo Wormhole e com os protocolos construídos sobre ele. Este pacote reúne funções, definições e constantes que simplificam o processo de conectar blockchains e realizar transferências utilizando o Wormhole. O SDK também oferece subpacotes específicos para plataformas integradas ao Wormhole, permitindo adicionar suporte multichain sem criar dependências excessivas.

Esta seção abrange tudo o que você precisa saber sobre as funcionalidades e a facilidade de desenvolvimento proporcionadas pelo Wormhole TypeScript SDK. Explore o pacote para descobrir como ele facilita as integrações. Entenda como o SDK abstrai as complexidades associadas a conceitos como plataformas, contextos e signatários. Por fim, você encontrará orientações sobre uso, juntamente com exemplos de código, para demonstrar como utilizar as ferramentas oferecidas pelo SDK.

Instalação

Básica

Para instalar o pacote meta usando npm, execute o seguinte comando no diretório raiz do seu projeto:

npm install @wormhole-foundation/sdk  

Este pacote combina todos os pacotes individuais, facilitando a configuração e permitindo tree shaking.

Avançada

Alternativamente, você pode instalar um conjunto específico de pacotes publicados individualmente:

Tradução Técnica

Pacotes do SDK

  • sdk-base: expõe constantes.

    npm install @wormhole-foundation/sdk-base  
  • sdk-definitions: expõe interfaces de contrato, tipos básicos e definições de payload para VAA.

    npm install @wormhole-foundation/sdk-definitions  
  • sdk-evm: expõe utilitários específicos para EVM.

    npm install @wormhole-foundation/sdk-evm  
  • sdk-evm-tokenbridge: expõe o cliente para o protocolo EVM Token Bridge.

    npm install @wormhole-foundation/sdk-evm-tokenbridge  

Uso

Iniciar sua integração é simples. Primeiro, importe o Wormhole:

Em seguida, importe cada uma das plataformas do ecossistema que você deseja suportar:

Para tornar os módulos das plataformas utilizáveis, passe-os para o construtor do Wormhole:

Com um objeto Wormhole configurado, você pode realizar operações como:

  • Analisar endereços para as plataformas fornecidas.

  • Obter um objeto ChainContext.

  • Buscar VAAs (Verified Action Approvals).

Por exemplo, para obter um contexto de cadeia específico:

Para recuperar um VAA, utilize o seguinte exemplo, configurando um tempo limite de 60.000 milissegundos (60 segundos). O tempo necessário para o VAA ficar disponível pode variar de acordo com a rede:

Configuração Opcional do WormholeConfig

Você pode substituir a configuração padrão utilizando um objeto parcial do tipo WormholeConfig, para ajustar campos específicos, como um endpoint RPC diferente:


Conceitos

Visão Geral

Compreender conceitos de alto nível do Wormhole e como o SDK abstrai essas funcionalidades pode ajudar a utilizar as ferramentas de forma mais eficaz. A seguir, abordaremos as noções de plataformas, contextos de cadeia, endereços, assinantes e protocolos. Explicaremos como cada conceito é usado no Wormhole e como o SDK simplifica o desenvolvimento em cada área.


Plataformas

Embora cada blockchain tenha características únicas, cadeias dentro da mesma plataforma compartilham funcionalidades padrão. O SDK inclui módulos de Plataforma, que fornecem uma interface padronizada para interagir com cadeias de uma mesma plataforma suportada.

Os módulos podem incluir:

  • Protocolos como o Wormhole Core, configurados para a plataforma selecionada.

  • Definições e configurações para tipos, assinantes, endereços e cadeias.

  • Utilitários para lidar com transações não assinadas na plataforma selecionada.

Esses módulos também importam e expõem funções essenciais, reduzindo a necessidade de dependências completas de pacotes nativos. Isso mantém as dependências do projeto enxutas ao instalar apenas pacotes essenciais.

Plataformas atualmente suportadas pelo Wormhole:

  • EVM

  • Solana

  • Cosmos

  • Sui

  • Aptos

  • Algorand

Para uma lista atualizada, consulte a pasta Platforms no SDK TypeScript do Wormhole.


Contexto de Cadeia (Chain Context)

O pacote sdk-definitions inclui a classe ChainContext, que cria uma interface padronizada para trabalhar com cadeias conectadas. Ela fornece:

  • Configurações de rede, cadeia e plataforma.

  • Clientes de RPC e protocolo em cache.

  • Métodos e utilitários específicos de cadeias.

Por exemplo:


Endereços

O SDK utiliza a classe UniversalAddress, que implementa a interface Address. Endereços de diferentes redes são convertidos em uma representação binária de 32 bytes. Cada plataforma possui um tipo de endereço nativo, chamado NativeAddress.

Exemplo:


Tokens

O tipo TokenId é usado para identificar exclusivamente qualquer token, seja um token padrão ou a moeda nativa de uma blockchain (como ETH no Ethereum).

Para tokens padrão, o Wormhole utiliza o endereço do contrato. Para moedas nativas, é usado o termo native no lugar de um endereço.

Exemplo:

Signatários e Protocolos na Wormhole SDK

Signatários (Signers)

Certos métodos para assinar transações no SDK da Wormhole requerem a interface Signer, que pode ser implementada por dois tipos principais:

  • SignOnlySigner: Ideal para casos onde o signatário está offline ou prefere não transmitir transações diretamente. Este recebe um array de transações não assinadas e retorna um array de transações assinadas e serializadas. Antes da assinatura, é possível inspecionar ou alterar as transações. A serialização depende da blockchain em uso (por exemplo, EVM ou Solana).

  • SignAndSendSigner: Utilizado quando o signatário está conectado à rede e pretende enviar as transações. Ele também aceita um array de transações não assinadas, mas retorna IDs das transações na mesma ordem do array original.

Definições de Tipos:


Configurando um Signatário com Ethers.js

Para gerenciar assinaturas programaticamente, é possível integrar o Ethers.js. Aqui está um exemplo prático:

Componentes principais:

  • Provider: Conecta o aplicativo à rede blockchain, permitindo consultas e envio de transações.

  • Signer: Representa a conta que autoriza transações por meio de assinaturas digitais.

  • Wallet: Combina o provider e o signer, facilitando a assinatura e envio de transações.

Boas práticas para gerenciamento de chaves privadas:

  • Use variáveis de ambiente para evitar armazenar chaves diretamente no código.

  • Considere carteiras físicas (hardware wallets) em ambientes de produção.


Protocolos

Wormhole Core

O Wormhole Core é o protocolo central responsável pela emissão de mensagens para interoperabilidade entre blockchains. Estas mensagens contêm:

  • Endereço do emissor.

  • Número de sequência.

  • Payload (dados da mensagem).

Exemplo de Uso no Solana:


Token Bridge

Este protocolo, construído sobre o Wormhole Core, fornece uma interface consistente para transferências de tokens entre blockchains.

Exemplo de Transferência de Tokens:


Transfers

A interface WormholeTransfer facilita transferências cross-chain de tokens, oferecendo uma abstração que engloba todas as etapas do processo, desde a origem até o destino.

Exemplo Completo de Transferência de Tokens:

Etapas principais:

  1. Iniciar a transferência na cadeia de origem.

  2. Aguardar a attestation (se necessário).

  3. Completar a transferência na cadeia de destino.

Internamente, o sistema utiliza o cliente do protocolo TokenBridge para realizar transferências de tokens. Como outros protocolos, o TokenBridge fornece um conjunto consistente de métodos para todas as blockchains suportadas, gerando um conjunto de transações específicas para cada cadeia.

Transferências de USDC Nativo

Também é possível transferir USDC nativo utilizando o CCTP da Circle. Note que, no modo Automático, uma taxa pelo serviço de relay será incluída no valor da cotação. Esta taxa será deduzida do montante total solicitado para envio. Por exemplo, se o usuário deseja receber 1,0 no destino, o valor enviado deve ser ajustado para 1,0 acrescido da taxa de relay. O mesmo se aplica para entregas de gas nativo.

No exemplo a seguir, a função wh.circleTransfer é chamada com vários parâmetros para configurar a transferência. Esta função recebe:

  • O valor a ser transferido (em unidades base do token),

  • A cadeia e o endereço do remetente,

  • A cadeia e o endereço do destinatário,

  • Um booleano para definir se a transferência será automática,

  • Um payload opcional (definido como undefined neste exemplo),

  • E, se a transferência for automática, a opção de enviar gas nativo (a moeda nativa da blockchain) ao destinatário.

Além disso, é configurado um tempo limite de 60.000 milissegundos para aguardar a VAA (Verified Action Approval), que varia de acordo com a rede.

Exemplo de código:


Recuperação de Transferências

Caso uma transferência seja abandonada antes da conclusão, é possível recuperá-la. Para isso, utilize a classe Transfer com o método estático from, passando um TransactionId ou WormholeMessageId para identificar a transferência.

Exemplo de código:

Rotas

O uso de transferências específicas, como TokenTransfer ou CCTPTransfer, exige que o desenvolvedor saiba qual tipo de transferência utilizar. Para simplificar, a classe Wormhole oferece um método que gera um RouteResolver, configurado com um conjunto de rotas possíveis.

Exemplo de Configuração de Rotas:

Considerações

Essa abordagem oferece flexibilidade na escolha de rotas e configurações, mas a responsabilidade de selecionar a melhor rota (com base no tempo estimado, taxas e outros critérios) permanece com o desenvolvedor.

Veja o exemplo de router.ts no diretório de exemplos para um exemplo completo funcional.

Rotas como Plugins

As rotas podem ser importadas de qualquer pacote npm que as exporte e configuradas com o resolver. Rotas personalizadas devem estender a classe Route e implementar os métodos estáticos definidos em StaticRouteMethods.

Aqui está um exemplo de como criar uma rota personalizada:

Exemplo Notável

Um exemplo notável de uma rota exportada de um pacote npm separado é o Wormhole Native Token Transfers (NTT). Confira a implementação da rota NttAutomaticRoute para detalhes.

Consulte Também

A documentação completa em TSdoc está disponível no GitHubarrow-up-right.

Last updated