> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Como Usar getTransaction

> Aprenda casos de uso do getTransaction, exemplos de código, parâmetros de solicitação, estrutura de resposta e dicas.

O método RPC [`getTransaction`](https://www.helius.dev/docs/api-reference/rpc/http/gettransaction) permite que você recupere informações detalhadas sobre uma transação confirmada fornecendo sua assinatura. Isso inclui o slot da transação, horário do bloco, metadados (como taxas, status e alterações de saldo) e a própria estrutura da transação.

<Warning>
  **Evite Agrupamento para Melhor Desempenho**

  Agrupar métodos de arquivamento aumenta significativamente a latência. Lotes com mais de 100 solicitações não são permitidos.
</Warning>

## Casos de Uso Comuns

* **Verificação de Transação:** Confirmar que uma transação foi processada e verificar seu resultado (sucesso ou falha).
* **Exibição de Histórico de Transações:** Mostrar aos usuários os detalhes de transações passadas em uma carteira ou explorador.
* **Auditoria e Análise:** Examinar os detalhes de uma transação, incluindo instruções executadas, taxas pagas e contas envolvidas.
* **Depuração de Transações com Falha:** Inspecionar campos `logMessages` e `err` nos metadados para entender por que uma transação falhou.
* **Indexação de Dados:** Extrair informações específicas de transações para armazenamento fora da cadeia e análise.

## Parâmetros da Solicitação

1. **`transactionSignature`** (string, obrigatório): A assinatura da transação codificada em base-58 que você deseja consultar.

2. **`options`** (objeto, opcional): Um objeto de configuração opcional que pode incluir:
   * **`commitment`** (string, opcional): Especifica o [nível de compromisso](https://www.helius.dev/blog/solana-commitment-levels) (por exemplo, `"finalized"`, `"confirmed"`). Se não for fornecido, o compromisso padrão do nó é usado (normalmente `"finalized"`).
   * **`encoding`** (string, opcional): A codificação para os dados `transaction`. Valores comuns:
     * `"json"`: Retorna os dados da transação em um formato JSON estruturado (mas as instruções ainda podem ser codificadas em base64).
     * `"jsonParsed"`: Retorna os dados da transação com instruções específicas do programa convertidas em uma estrutura JSON legível sempre que possível. Esta é frequentemente a codificação mais útil para análise.
     * `"base58"`: Retorna os dados da transação como uma string codificada em base-58.
     * `"base64"`: Retorna os dados da transação como uma string codificada em base-64.
     * O padrão é `"json"` se não especificado por Helius, mas o padrão Solana pode ser diferente. É melhor especificar isso.
   * **`maxSupportedTransactionVersion`** (número, opcional): A versão máxima da transação que o endpoint RPC deve processar.
     * Defina como `0` para incluir transações versionadas (incluindo legados).
     * Se omitido, alguns nós podem apenas retornar transações legadas ou erro se transações versionadas forem encontradas. É altamente recomendável configurar isso para `0` para suportar todos os tipos de transações.

## Estrutura da Resposta

O método retorna `null` se a transação não for encontrada (por exemplo, ainda não processada ou assinatura incorreta) ou não confirmada para o nível de compromisso especificado. Caso contrário, retorna um objeto com os seguintes campos:

* **`slot`** (u64): O número do slot no qual a transação foi incluída em um bloco.
* **`blockTime`** (i64 | null): O timestamp Unix estimado (segundos desde a época) quando o bloco contendo a transação foi produzido. Pode ser `null` se não disponível.
* **`meta`** (objeto | null): Um objeto contendo metadados sobre a execução da transação. Pode ser `null` se a transação falhou antes de ser processada ou se os metadados não estiverem disponíveis.
  * **`err`** (objeto | null): Um objeto de erro se a transação falhou, caso contrário `null`.
  * **`fee`** (u64): A taxa em lamports paga pela transação.
  * **`preBalances`** (array de u64): Saldos de lamports das contas envolvidas *antes* do processamento da transação.
  * **`postBalances`** (array de u64): Saldos de lamports das contas envolvidas *depois* do processamento da transação.
  * **`preTokenBalances`** (array de objetos | null): Saldos de tokens das contas de token envolvidas *antes* da transação.
  * **`postTokenBalances`** (array de objetos | null): Saldos de tokens das contas de token envolvidas *depois* da transação.
  * **`innerInstructions`** (array de objetos | null): Uma série de instruções executadas como parte do CPI (Cross-Program Invocations) dentro desta transação.
  * **`logMessages`** (array de string | null): Uma série de mensagens de log emitidas pelas instruções da transação e quaisquer instruções internas.
  * **`loadedAddresses`** (objeto, opcional): Especifica as contas carregadas de tabelas de pesquisa de endereços para esta transação. Contém arrays `writable` e `readonly` de chaves públicas.
  * **`returnData`** (objeto, opcional): Dados retornados pela transação via `sol_set_return_data` e `sol_get_return_data`. Contém `programId` (string) e `data` (array: `[string, encoding]`).
  * **`computeUnitsConsumed`** (u64, opcional): O número de unidades de computação consumidas por esta transação.
* **`transaction`** (objeto | array): A própria estrutura da transação. O formato depende do parâmetro `encoding`:
  * Se `encoding` for `"jsonParsed"` ou `"json"`: Um objeto com `message` (contendo `accountKeys`, `instructions`, `recentBlockhash`, etc.) e `signatures` (array de strings).
  * Se `encoding` for `"base58"`, `"base64"`: Um array `[encoded_string, encoding_format_string]`.
* **`version`** ("legacy" | número | indefinido): A versão da transação. Pode ser `"legacy"` para transações mais antigas ou um número (por exemplo, `0`) para transações versionadas. `undefined` se `maxSupportedTransactionVersion` não estiver configurado e a transação for versionada.

**Exemplo de Resposta (codificação `jsonParsed`):**

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "result": {
    "blockTime": 1635900000,
    "meta": {
      "err": null,
      "fee": 5000,
      "innerInstructions": [],
      "logMessages": [
        "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS invoke [1]",
        "Program log: Memo 'Hello, Solana!'",
        "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS success"
      ],
      "postBalances": [
        499999999999994999, 
        1000000000
      ],
      "postTokenBalances": [],
      "preBalances": [
        500000000000000000, 
        1000000000
      ],
      "preTokenBalances": [],
      "rewards": [],
      "status": { "Ok": null },
      "computeUnitsConsumed": 200
    },
    "slot": 98765432,
    "transaction": {
      "message": {
        "accountKeys": [
          "SysvarRent111111111111111111111111111111111",
          "Vote111111111111111111111111111111111111111"
        ],
        "instructions": [
          {
            "parsed": {
              "type": "vote",
              "info": {
                "votePubkey": "Vote111111111111111111111111111111111111111",
                "slot": 123,
                "hash": "abc..."
              }
            },
            "program": "vote",
            "programId": "Vote111111111111111111111111111111111111111"
          }
        ],
        "recentBlockhash": "xyz..."
      },
      "signatures": [
        "sig1..."
      ]
    },
    "version": "legacy"
  },
  "id": 1
}
```

## Exemplos de Código

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <TRANSACTION_SIGNATURE> with an actual signature
  curl -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getTransaction",
      "params": [
        "<TRANSACTION_SIGNATURE>",
        {
          "encoding": "jsonParsed",
          "maxSupportedTransactionVersion": 0
        }
      ]
    }' \
    <YOUR_RPC_URL>
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  const { Connection } = require('@solana/web3.js');

  async function getTransactionDetails(signature) {
    // Replace with your RPC endpoint
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');

    try {
      const transaction = await connection.getTransaction(signature, {
        maxSupportedTransactionVersion: 0, // Recommended to support all transaction versions
        // commitment: 'confirmed', // Optional: specify commitment level
      });

      if (transaction) {
        console.log('Transaction Details:');
        console.log(`  Slot: ${transaction.slot}`);
        console.log(`  Block Time: ${transaction.blockTime ? new Date(transaction.blockTime * 1000).toLocaleString() : 'N/A'}`);
        console.log(`  Fee: ${transaction.meta ? transaction.meta.fee : 'N/A'} lamports`);
        console.log(`  Status: ${transaction.meta && transaction.meta.err ? 'Failed' : 'Success'}`);
        if (transaction.meta && transaction.meta.err) {
          console.log(`    Error: ${JSON.stringify(transaction.meta.err)}`);
        }
        // console.log(JSON.stringify(transaction, null, 2)); // Log full transaction details

        if (transaction.meta && transaction.meta.logMessages) {
          console.log('  Log Messages:');
          transaction.meta.logMessages.forEach(log => console.log(`    ${log}`));
        }

      } else {
        console.log('Transaction not found or not confirmed.');
      }
    } catch (error) {
      console.error(`Error fetching transaction ${signature}:`, error);
    }
  }

  // Replace with an actual transaction signature from Mainnet-beta or your test environment
  const exampleSignature = '5h4zCwobYsdL3mY26FgfXy8c4rTPkX6gYVXW8w2tTjCXZMWzE9jX9p8Q2Y8Yj9p8ZQ8Yj9p8ZQ8Yj9p8ZQ8Yj9'; // Replace with a real signature
  // getTransactionDetails(exampleSignature);

  // Example of a known transaction (you'll need to find a recent one on an explorer)
  // getTransactionDetails('2xNdnHjZDmJRy1L6jC1mF87K3V9nXZo2bY6vA8GzQ3T7bS9xU8cM7sR5eD3fG2hJ1aB0cE9lK6mN5pP4qR7');

  console.log("Please replace 'exampleSignature' with a real transaction signature to run the example.");

  ```
</CodeGroup>

## Dicas para Desenvolvedores

* **Finalidade da Transação:** Certifique-se de consultar com um nível `commitment` apropriado. Solicitar uma transação que não atingiu o compromisso especificado resultará em `null`.
* **Volume de Dados:** O objeto de resposta pode ser muito grande, especialmente para transações complexas com muitas instruções ou registros detalhados. Tenha isso em mente ao processar os dados.
* **`jsonParsed` vs. `json`:** Embora `jsonParsed` seja muito conveniente, o suporte à análise depende das capacidades do nó RPC para programas específicos. Se um programa não for reconhecido, suas instruções podem voltar a um formato menos analisado mesmo com `jsonParsed`.
* **Transações Versionadas:** Sempre configure `maxSupportedTransactionVersion: 0` em suas opções de solicitação para garantir que sua aplicação possa lidar com transações legadas e versionadas. Caso contrário, você pode perder dados ou encontrar erros em formatos de transações mais recentes.
* **Diferenças em Provedores RPC:** Embora a API principal seja padrão, alguns provedores RPC podem oferecer análise aprimorada ou campos adicionais. Helius, por exemplo, fornece uma análise rica de transações.

Este guia oferece uma visão abrangente do método RPC `getTransaction`, capacitando você a buscar e entender dados detalhados de transações Solana.
