Decodificador de Transação Solana

Cole o base64 que uma carteira pede para você assinar ou a string que um RPC retorna. O decodificador lista signatários, contas e instruções, nomeia os programas comuns e resume as transferências de SOL e de tokens.

Assinada ou não. A decodificação roda no seu navegador; nada é enviado a lugar nenhum, então é seguro para transações não assinadas que você está prestes a assinar.
Exemplos:

Decodificado no seu navegador com JavaScript. Os endereços nunca são enviados nem armazenados.

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

Mensagens legadas vs. versionadas (v0)

PropriedadeLegadov0 (versionada)
Prefixo da mensagemnenhum; começa com o cabeçalhobyte de versão 0x80 antes do cabeçalho
Contastodas listadas inline, até o limite de 1232 bytesinline mais índices em address lookup tables
Resolúvel offlinesim, toda conta está na mensagementradas de lookup table precisam de dados on-chain
Produtores típicoscarteiras simples, SDKs antigosagregadores 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.

Perguntas frequentes

Quais formatos funcionam?

O base64 de getTransaction com encoding base64, do signTransaction de uma carteira, ou de Transaction.serialize(); base58 como usado por sendTransaction; hex bruto. Uma mensagem isolada (sem o array de assinaturas) também é aceita, que é o que algumas carteiras mostram antes de assinar.

O que é uma transação v0?

Transações versionadas (v0) podem referenciar contas armazenadas em address lookup tables para caber mais contas no limite de 1232 bytes. O decodificador mostra os endereços das tabelas e os índices, mas as contas reais por trás deles vivem on-chain e não podem ser resolvidas offline; elas aparecem como 'conta de lookup table #n'.

A assinatura da transação é o mesmo que um hash?

Na Solana a primeira assinatura serve como ID da transação. Ela é mostrada quando o slot de assinatura é diferente de zero; uma transação não assinada ainda não tem ID.

Quais instruções são decodificadas?

Transferências e criação de contas do System Program, transferências, aprovações, mints, burns e closes de SPL Token e Token-2022 (as variantes checked mostram o valor com decimais), criação de Associated Token Account, limites e preços de Compute Budget, e texto de Memo. Outros programas são mostrados pelo nome quando conhecidos (Jupiter, Raydium, Orca, Metaplex) com contas e dados brutos.

O que é o limite de 1232 bytes?

Transações Solana precisam caber em um pacote de rede: 1280 bytes de MTU IPv6 menos cabeçalhos deixam 1232 bytes para a transação serializada. Cada conta custa 32 bytes e cada assinatura 64, e é por isso que transações grandes usam lookup tables.

Por que os valores estão em unidades brutas no Transfer de SPL?

A instrução Transfer simples não carrega decimais, só a TransferChecked carrega. Converta as unidades brutas com o conversor de decimais depois de saber os decimais do mint.