O que é uma transação Solana serializada?
Uma transação Solana serializada é um array de bytes compacto: uma lista com prefixo de contagem de assinaturas ed25519 de 64 bytes seguida da mensagem, que contém um cabeçalho (número de signatários e de contas somente leitura), os endereços das contas como chaves de 32 bytes, um blockhash recente e as instruções, cada uma referenciando seu programa e suas contas por índice. Carteiras e nós RPC a trocam como base64 ou base58; a primeira assinatura também serve como ID da transação.
Lendo o resultado
- Contas são listadas na ordem da mensagem: signatários primeiro, depois graváveis, depois somente leitura. O fee payer é a conta 0.
- Instruções mostram o programa, o nome e os campos decodificados, e em "Contas e dados" a lista exata de contas e os bytes de dados.
- Transferências no topo resumem o que se move: SOL via System Program e tokens via Transfer / TransferChecked.
Mensagens legadas vs. versionadas (v0)
| Propriedade | Legado | v0 (versionada) |
|---|---|---|
| Prefixo da mensagem | nenhum; começa com o cabeçalho | byte de versão 0x80 antes do cabeçalho |
| Contas | todas listadas inline, até o limite de 1232 bytes | inline mais índices em address lookup tables |
| Resolúvel offline | sim, toda conta está na mensagem | entradas de lookup table precisam de dados on-chain |
| Produtores típicos | carteiras simples, SDKs antigos | agregadores DEX, qualquer coisa com muitas contas |
Exemplo prático
Uma mensagem de transferência de SOL tem 3 contas: o remetente (signatário, gravável), o destinatário (gravável) e o System Program 11111111111111111111111111111111. Sua única instrução aponta para o índice de conta 2 com dados 02000000 (instrução 2 = Transfer, como u32 little-endian) seguidos do valor como u64 little-endian, então 00e1f50500000000 é 100.000.000 lamports = 0,1 SOL. Uma transferência de USDC, por sua vez, aponta para o programa Token com uma instrução TransferChecked carregando o valor e decimals = 6.
Conferindo um prompt da carteira
Quando um dApp solicita uma assinatura, as carteiras costumam exibir uma simulação. Se você quer a verdade de fato, registre a mensagem serializada do dApp (a maioria das bibliotecas expõe transaction.serialize({ requireAllSignatures: false })) e cole aqui: você verá cada instrução, incluindo configurações de Compute Budget e qualquer SetAuthority ou Approve que um resumo de simulação possa esconder.
Relacionados: validador de endereços Solana, conversor de lamports, transferência em lote na devnet.