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:
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.
sdk-definitions: expõe interfaces de contrato, tipos básicos e definições de payload para VAA.
sdk-evm: expõe utilitários especÃficos para EVM.
sdk-evm-tokenbridge: expõe o cliente para o protocolo EVM Token Bridge.
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:
Iniciar a transferência na cadeia de origem.
Aguardar a attestation (se necessário).
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
Last updated