🌌
Wormhole Docs Brasil
  • Bem-vindo!
  • Materiais
    • Build
      • Começer a Buildar
        • Redes Suportadas
        • Testnet Faucets
        • Demos
      • Construindo Aplicações Frontend
        • Wormhole SDK
          • Wormhole TypeScript SDK
          • Data Layouts
          • Construção de Protocolos e Payloads
        • Queries
          • Overview
          • Usando Queries
          • F.A.Q.
        • Conexão
          • Overview
          • Routes
          • Features
          • Configuração
          • v1 Migration
          • F.A.Q.
      • Construindo Integrações de contratos
        • Wormhole Relayer
        • Core Contracts
        • CCTP
        • Transferências de Tokens Nativos
          • Processos de Deployment
        • Comandos NTT CLI
        • Configuração de NTT
          • Limitação de Taxas
          • Controle de Acesso
        • Managers e Transceivers
        • F.A.Q. Wormhole NTT
      • MultiGov
        • Deployment
        • Upgrades Contracts
        • F.A.Q. Tecnicas
      • Ambiente de Desenvolvimento
      • F.A.Q sobre Integrações de Contratos
      • Toolkit
        • Wormholescan
        • Wormhole CLI
        • Wormhole SDK
          • TypeScript SDK
          • Data Layouts
          • Construindo Protocolos e Payloads
        • Solidity SDK
        • Tilt
        • Toolkit F.A.Q.
      • Referências
    • Infraestrutura
      • Run a Relayer
      • Run a Spy
    • Tutoriais
      • Tutorial de Conexão
      • Tutorial de Contratos Cross-Chain
        • Criação de Contratos de Mensagens Cross-Chain
        • Criação de contratos de transferência de tokens Cross-Chain
      • Tutoriais de Transferências de Tokens Nativos (NTT - Native Token Transfers)
        • Crie Tokens Multichain
      • Tutorial MultiGov
        • Proposta Cross-Chain treasury management
      • Tutoriais do Wormhole SDK
        • Transferir USDC via CCTP
        • Transferir Tokens via a Token Bridge
    • Learn
      • Fundamentos
        • Introdução
        • Segurança
        • Overview de Arquitetura
        • Glossário
      • Componentes de Infraestrutura
        • Core Contracts
        • VAAs (Verified Action Approvals)
        • Guardians
        • Spy
        • Relayers
      • Messaging
        • Token Bridge
        • Circle's CCTP Bridge
        • Transferencias de Token Nativos
          • Overview
          • Arquitetura
          • Modelos de Deploy
          • Security
      • Multigov
        • MultiGov: Governança Cross-Chain com Wormhole
        • MultiGov Architecture
        • FAQs
    • Links úteis
Powered by GitBook
On this page
  • Indexação de VAAs
  • Formato do VAA
  1. Materiais
  2. Learn
  3. Componentes de Infraestrutura

VAAs (Verified Action Approvals)

Os VAAs (Verified Action Approvals) são a principal primitiva de mensagens da Wormhole. Eles consistem em pacotes de dados cross-chain emitidos sempre que um contrato de aplicativo cross-chain interage com o contrato principal (Core Contract).

As Guardiãs validam mensagens emitidas por contratos antes de enviá-las à cadeia de destino. Uma vez que a maioria das Guardiãs observa a mensagem e determina sua finalização, elas assinam um hash keccak256 do corpo da mensagem.

A mensagem é encapsulada em uma estrutura chamada VAA, que combina a mensagem com as assinaturas das Guardiãs para formar uma prova.

Indexação de VAAs

Os VAAs são identificados de forma única por meio da tupla (emitter_chain, emitter_address, sequence). Para obter um VAA, é possível consultar a API Wormholescan usando essas informações.

Os contratos inteligentes na cadeia de destino processam os VAAs para receber mensagens da Wormhole.


Formato do VAA

Um VAA básico possui dois componentes principais: cabeçalho e corpo.

Cabeçalho

O cabeçalho contém metadados sobre o VAA atual, o conjunto de Guardiãs ativo e as assinaturas coletadas até o momento.

Estrutura:

  • version byte: versão do VAA.

  • guardian_set_index u32: índice do conjunto de Guardiãs que assina o VAA.

  • len_signatures u8: número de assinaturas armazenadas.

  • signatures []signature: coleção de assinaturas das Guardiãs, onde cada assinatura inclui:

    • index u8: índice da Guardiã no conjunto.

    • signature [65]byte: assinatura ECDSA.

Corpo

O corpo é derivado de forma determinística de uma mensagem on-chain e deve ser idêntico para todas as Guardiãs que processam a mesma mensagem.

Estrutura:

  • timestamp u32: marca temporal do bloco em que a mensagem foi publicada.

  • nonce u32: identificador único.

  • emitter_chain u16: ID da cadeia que emitiu a mensagem.

  • emitter_address [32]byte: endereço do contrato que chamou o Core Contract.

  • sequence u64: número incremental de mensagens publicadas pelo emissor.

  • consistency_level u8: nível de consistência exigido pelo emissor.

  • payload []byte: dados arbitrários que serão processados.


Assinaturas

O corpo do VAA é hashado duas vezes com keccak256 para produzir a mensagem de digest a ser assinada:

pythonCopiar códigodigest = keccak256(keccak256(body))
signature = ecdsa_sign(digest, key)

Atenção: Algumas implementações da validação de assinatura ECDSA aplicam hash adicional à mensagem fornecida. Por isso, é essencial passar os argumentos corretamente, como ocorre no programa secp256k1 da Solana.


Tipos de Payload

Os payloads em VAAs variam conforme o aplicativo e podem conter informações sobre a cadeia de destino e contrato, permitindo a execução de ações específicas. Exemplos incluem:

  1. Transferência de Tokens Estrutura:

    • payload_id u8: ID do payload (1 para transferências).

    • amount u256: quantidade de tokens transferidos.

    • token_address u8[32]: endereço do token na cadeia de origem.

    • token_chain u16: ID numérico da cadeia de origem.

    • to u8[32]: endereço de destino.

    • to_chain u16: ID da cadeia de destino.

    • fee u256: taxa paga ao relayer.

  2. Atestação de Token Permite registrar metadados de um token (nome, símbolo, precisão decimal). Estrutura:

    • payload_id u8: ID do payload (2 para atestação).

    • token_address [32]byte: endereço do contrato do token.

    • token_chain u16: ID da cadeia de origem.

    • decimals u8: número de casas decimais.

    • symbol [32]byte: nome curto do ativo.

    • name [32]byte: nome completo do ativo.

  3. Transferência com Mensagem Semelhante à transferência de tokens, mas com um campo adicional de payload para comportar dados arbitrários.

Governança

VAAs de governança não possuem payload_id e são utilizados para acionar ações predefinidas em contratos implantados. Estrutura:

  • module u8[32]: identificador do módulo.

  • action u8: ação de governança a ser executada.

  • chain u16: cadeia alvo (0 para todas as cadeias).

  • args any: argumentos adicionais.

Estrutura de Ação

Mensagens de governança contêm ações predefinidas que podem ser direcionadas aos vários módulos Wormhole atualmente implantados on-chain. A estrutura contém os seguintes campos:

  • module u8[32] - contém um identificador de módulo alinhado à direita

  • action u8- ação de governança predefinida a ser executada

  • chain u16 - cadeia na qual a ação está sendo direcionada. Isso deve ser definido como 0 para todas as cadeias

  • args any - argumentos para a ação

Abaixo está um exemplo de mensagem contendo uma ação de governança que aciona uma atualização de código para o contrato principal da Solana. O campo module aqui é uma codificação alinhada à direita do ASCII "Core", representado como uma string hexadecimal de 32 bytes.

plaintextCopiar códigomodule:       0x0000000000000000000000000000000000000000000000000000436f7265  
action:       1  
chain:        1  
new_contract: 0x348567293758957162374959376192374884562522281937446234828323  

Ciclo de Vida de uma Mensagem

  1. Uma mensagem é emitida por um contrato na Cadeia A.

  2. Guardiãs observam e assinam a mensagem individualmente.

  3. O VAA é submetido à cadeia de destino, servindo como prova da mensagem.

Qualquer pessoa pode submeter o VAA à cadeia de destino, com o custo de transação sendo responsabilidade do remetente.

PreviousCore ContractsNextGuardians

Last updated 5 months ago