Run a Relayer
Last updated
Last updated
Os relayers desempenham um papel crucial na comunicação cross-chain, garantindo que as mensagens sejam transferidas de forma contínua entre diferentes blockchains. Embora os relayers do Wormhole forneçam uma maneira confiável de gerenciar essas transferências, eles podem não atender a todos os requisitos exclusivos de cada aplicação.
Relayers personalizados abordam essas limitações ao oferecer soluções sob medida que atendem às necessidades distintas de sua aplicação. Desenvolver um relayer personalizado proporciona controle total sobre o processamento das mensagens, mecanismos de entrega e integração com sistemas existentes. Essa personalização permite otimizar o desempenho e implementar recursos específicos que os relayers implantados pelo Wormhole podem não oferecer.
Um relayer personalizado pode ser tão simples quanto um processo no navegador que consulta a API para verificar a disponibilidade de um VAA após a submissão de uma transação e entregá-lo à cadeia de destino. Também pode ser implementado com um Spy combinado a um daemon que escuta por VAAs de um ID de cadeia e emissor relevantes, tomando ações quando um VAA é observado.
Este guia ensina como configurar e configurar um relayer personalizado para o manuseio eficiente de mensagens. Você começará entendendo como identificar de forma única um VAA utilizando o endereço do emissor, ID de sequência e ID de cadeia. Em seguida, explorará o Relayer Engine, um pacote que fornece uma estrutura para a construção de relayers personalizados, e aprenderá como buscar e processar VAAs utilizando o SDK do Wormhole.
Iniciando com um Relayer Personalizado Para começar a construir um relayer personalizado, é essencial entender os componentes que você estará gerenciando como parte do seu serviço de relaying. Seu relayer deve ser capaz de recuperar e entregar VAAs.
Independentemente do ambiente, para obter o VAA que você deseja retransmitir, é necessário ter:
O endereço do emissor
O ID de sequência da mensagem de interesse
O chainId da cadeia que emitiu a mensagem
Com esses três componentes, é possível identificar de forma única um VAA e processá-lo.
O relayer-engine
é um pacote que fornece a estrutura e o ponto de partida para um relayer personalizado.
Com o Relayer Engine, um desenvolvedor pode escrever uma lógica específica para filtrar e receber apenas as mensagens que interessam.
Após receber uma mensagem do Wormhole, o desenvolvedor pode aplicar lógica adicional para analisar payloads personalizados ou enviar as Verifiable Action Approvals (VAA) para uma ou várias cadeias de destino.
Para usar o Relayer Engine, o desenvolvedor pode especificar como retransmitir mensagens do Wormhole para sua aplicação, utilizando uma API inspirada em middleware Express/Koa, deixando que a biblioteca cuide dos detalhes.
Primeiro, instale o pacote relayer-engine
com o gerenciador de pacotes de sua preferência:
No exemplo a seguir, você:
Configura um StandardRelayerApp
, passando as opções de configuração para o relayer.
Adiciona um filtro para capturar apenas as mensagens que a aplicação se importa, com um callback para processar o VAA assim que for recebido.
Inicia o aplicativo do relayer.
A primeira linha significativa instancia o StandardRelayerApp
, uma subclasse de RelayerApp
com padrões padrão.
StandardRelayerAppOpts
Outras opções podem ser passadas ao construtor do StandardRelayerApp
para configurar ainda mais o aplicativo:
wormholeRpcs
: Lista de URLs de onde consultar VAAs perdidos
concurrency
: Quantidade de requisições simultâneas para workflows
spyEndpoint
: Endereço do Spy
logger
: Logger personalizado
privateKeys
: Conjunto de chaves para assinar e enviar transações
tokensByChain
: Lista de tokens relevantes
workflows
: Como configurar tentativas de workflows
redisClusterEndpoints
: Configuração do Redis
A última linha no exemplo simples executa await app.listen()
, que inicia o motor do relayer. Uma vez iniciado, o Relayer Engine envia solicitações de assinatura para o Spy e começa outros workflows, como o rastreamento de VAAs perdidos.
O processo continuará até ser interrompido ou até encontrar um erro irrecuperável. Para desligar o relayer de forma ordenada, chame app.stop()
.
O código-fonte para este exemplo está disponível no repositório relayer-engine
.
Estes processos precisam estar em execução para que o aplicativo do relayer funcione corretamente.
A seguir, você deve iniciar um Spy para escutar os VAAs disponíveis publicados na rede Guardian. Também é necessário uma camada de persistência; este exemplo usa Redis.
Mais detalhes sobre o Spy estão disponíveis na documentação do Spy.
Para que o aplicativo do relayer receba mensagens, um Spy local deve estar em execução, monitorando a rede Guardian. O aplicativo do relayer receberá atualizações desse Spy.
Mainnet Spy
Testnet Spy
Nota
Embora esteja utilizando o Redis aqui, a camada de persistência pode ser trocada por outro banco de dados, implementando a interface apropriada.
Uma instância do Redis também deve estar disponível para persistir os dados das tarefas de recuperação de VAAs do Spy.
Você também pode usar o Wormhole SDK para fazer polling no RPC do Guardian até que um VAA assinado esteja pronto, utilizando a função getSignedVAAWithRetry
do SDK.
Uma vez que você tenha o VAA, o método de entrega depende da cadeia.
EVM
Em cadeias EVM, os bytes do VAA podem ser passados diretamente como um argumento para um método ABI.
SOLANA
No Solana, o VAA é primeiro postado no core bridge, e então uma transação personalizada é preparada para processar e validar o VAA.