> ## 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.

# Cara Menggunakan getSignatureStatuses

> Pelajari kasus penggunaan getSignatureStatuses, contoh kode, parameter permintaan, struktur respons, dan kiat.

Metode RPC [`getSignatureStatuses`](https://www.helius.dev/docs/api-reference/rpc/http/getsignaturestatuses) memungkinkan Anda mengambil status pemrosesan dan konfirmasi dari daftar tanda tangan transaksi. Metode ini berguna untuk menentukan apakah transaksi telah [diproses, dikonfirmasi, atau difinalisasi](https://www.helius.dev/blog/solana-commitment-levels) oleh jaringan.

Kecuali jika opsi `searchTransactionHistory` diaktifkan, metode ini terutama mengueri cache status terbaru pada node RPC. Untuk transaksi lama, mengaktifkan `searchTransactionHistory` sangat penting.

<Warning>
  **Hindari Pemrosesan Batch untuk Performa yang Lebih Baik**

  Pemrosesan metode arsip secara batch meningkatkan latensi secara signifikan. Batch yang berisi lebih dari 10 permintaan tidak diizinkan.
</Warning>

## Kasus Penggunaan Umum

* **Mengonfirmasi Finalitas Transaksi:** Memverifikasi apakah transaksi yang dikirimkan telah mencapai tingkat konfirmasi yang diinginkan (misalnya, `confirmed` atau `finalized`).
* **Pencarian Status secara Batch:** Memeriksa status beberapa transaksi sekaligus secara efisien, misalnya setelah pengiriman batch.
* **Memperbarui UI berdasarkan Status Transaksi:** Menampilkan status transaksi secara real-time kepada pengguna.
* **Pemeriksaan Kesalahan:** Mengidentifikasi apakah ada transaksi dalam daftar yang gagal beserta penyebabnya.

## Parameter Permintaan

1. **`signatures`** (`array` dari `string`): (Wajib) Array tanda tangan transaksi yang dienkode dengan base-58. Anda dapat mengueri hingga 256 tanda tangan dalam satu permintaan.
2. **`options`** (`object`, opsional): Objek konfigurasi opsional dengan bidang berikut:
   * **`searchTransactionHistory`** (`boolean`, opsional): Jika `true`, node RPC akan mencari tanda tangan dalam seluruh riwayat transaksinya. Jika `false` (nilai default), node hanya mencari dalam cache status terbaru. Untuk transaksi lama atau yang mungkin tidak tercatat, atur opsi ini ke `true`.

## Struktur Respons

Bidang `result` dari respons JSON-RPC berisi objek dengan dua bidang:

* **`context`** (`object`): Objek yang berisi:
  * **`slot`** (`u64`): Slot tempat node RPC memproses permintaan ini.
* **`value`** (`array` dari `object` | `null`): Array objek status yang urutannya sesuai dengan urutan tanda tangan dalam permintaan. Setiap elemen dapat berupa:
  * Sebuah **objek** dengan bidang berikut jika tanda tangan ditemukan:
    * **`slot`** (`u64`): Slot tempat transaksi diproses.
    * **`confirmations`** (`number` | `null`): Jumlah blok yang telah dikonfirmasi sejak transaksi diproses. Bernilai `null` jika transaksi telah difinalisasi (karena finalitas menyiratkan bahwa transaksi tidak akan dibatalkan, sehingga jumlah konfirmasi tertentu tidak lagi terlalu relevan).
    * **`err`** (`object` | `null`): Objek kesalahan jika transaksi gagal (misalnya, `{"InstructionError":[0,{"Custom":1}]}`), atau `null` jika transaksi berhasil.
    * **`status`** (`object`): Objek yang menunjukkan status eksekusi transaksi. Biasanya `{"Ok":null}` untuk transaksi yang berhasil atau objek yang merinci kesalahan untuk transaksi yang gagal.
    * **`confirmationStatus`** (`string` | `null`): Status konfirmasi klaster untuk transaksi tersebut (misalnya, `processed`, `confirmed`, `finalized`). Dapat bernilai `null` jika status tidak tersedia dalam cache dan `searchTransactionHistory` bernilai false.
  * **`null`**: Jika tanda tangan tidak ditemukan dalam cache status dan `searchTransactionHistory` bernilai `false` (atau jika tanda tangan tersebut memang tidak ada meskipun pencarian riwayat dilakukan).

## Contoh

### 1. Mendapatkan Status untuk Daftar Tanda Tangan (Cache Terbaru)

Contoh ini mengambil status untuk dua tanda tangan dengan mengandalkan cache terbaru node.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  # Replace with actual transaction signatures
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getSignatureStatuses",
      "params": [
        [
          "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW",
          "2x5YfV29N4p9K2kEFK2gFfC5T5acbs2z2MytTZqrgq17pYjCMfYjW4sAUpkWMkMzxGztD2Qv5v7n92uYJcQY9c7a" 
        ]
      ]
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  const { Connection } = require('@solana/web3.js');

  async function checkRecentSignatures() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    const signatures = [
      '5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW',
      '2x5YfV29N4p9K2kEFK2gFfC5T5acbs2z2MytTZqrgq17pYjCMfYjW4sAUpkWMkMzxGztD2Qv5v7n92uYJcQY9c7a' // Replace with another signature
    ];

    try {
      const response = await connection.getSignatureStatuses(signatures);
      console.log("RPC Response Context Slot:", response.context.slot);
      response.value.forEach((status, index) => {
        console.log(`--- Status for Signature ${index + 1} (${signatures[index].substring(0,10)}...) ---`);
        if (status) {
          console.log(`  Slot: ${status.slot}`);
          console.log(`  Confirmations: ${status.confirmations === null ? 'Finalized (or N/A)' : status.confirmations}`);
          console.log(`  Error: ${JSON.stringify(status.err)}`);
          console.log(`  Execution Status: ${JSON.stringify(status.status)}`);
          console.log(`  Confirmation Status: ${status.confirmationStatus}`);
        } else {
          console.log('  Status not found (likely not in recent cache or does not exist).');
        }
      });
    } catch (error) {
      console.error('Error fetching signature statuses:', error);
    }
  }

  checkRecentSignatures();
  ```
</CodeGroup>

### 2. Mendapatkan Status dengan Pencarian Riwayat Transaksi

Contoh ini mengambil status tanda tangan dan secara eksplisit meminta node untuk mencari dalam riwayat transaksinya.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  # Replace with actual transaction signatures
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getSignatureStatuses",
      "params": [
        [
          "3jPTfHcbzWHeD4jW8q4Y8g3h2D1aBwM81y1sHhDqYQ7Z9x5n7cVy2gD8QWbK9eXwSjJ6aA7FzV2kLpQoEwU9jX", 
          "4SyzjM2fTALqTNjLKMM1yG1bW7kCFu2GvEkKcvKChG9o1KjQW8jLdZ6sWfN9mP1pU3rD7XvA6B2CjHkLwRzYxTnX"  
        ],
        {
          "searchTransactionHistory": true
        }
      ]
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  const { Connection } = require('@solana/web3.js');

  async function checkSignaturesWithHistory() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    const signatures = [
      // Replace with a signature you know is older or might have been dropped
      '3jPTfHcbzWHeD4jW8q4Y8g3h2D1aBwM81y1sHhDqYQ7Z9x5n7cVy2gD8QWbK9eXwSjJ6aA7FzV2kLpQoEwU9jX',
      // Replace with another valid signature
      '4SyzjM2fTALqTNjLKMM1yG1bW7kCFu2GvEkKcvKChG9o1KjQW8jLdZ6sWfN9mP1pU3rD7XvA6B2CjHkLwRzYxTnX' 
    ];

    try {
      const response = await connection.getSignatureStatuses(signatures, { searchTransactionHistory: true });
      console.log("RPC Response Context Slot:", response.context.slot);
      response.value.forEach((status, index) => {
        console.log(`--- Status for Signature ${index + 1} (${signatures[index].substring(0,10)}...) ---`);
        if (status) {
          console.log(`  Slot: ${status.slot}`);
          console.log(`  Confirmations: ${status.confirmations === null ? 'Finalized (or N/A)' : status.confirmations}`);
          console.log(`  Error: ${JSON.stringify(status.err)}`);
          console.log(`  Execution Status: ${JSON.stringify(status.status)}`);
          console.log(`  Confirmation Status: ${status.confirmationStatus}`);
        } else {
          console.log('  Status not found (even with history search, it might not exist or is too old).');
        }
      });
    } catch (error) {
      console.error('Error fetching signature statuses with history:', error);
    }
  }

  checkSignaturesWithHistory();
  ```
</CodeGroup>

## Kiat untuk Pengembang

* **`searchTransactionHistory`:** Sangat penting untuk keandalan. Jika bernilai `false` (default), metode ini hanya memeriksa cache terbaru yang terbatas. Jika transaksi sudah lama atau mungkin tidak tercatat dan tidak ada dalam cache ini, metode akan mengembalikan `null` untuk status tanda tangan tersebut. Selalu atur ke `true` jika Anda perlu mengonfirmasi status transaksi yang mungkin sudah tidak terlalu baru.
* **Batas Tanda Tangan:** Anda dapat mengueri maksimal 256 tanda tangan per panggilan.
* **Status `null`:** Nilai `null` dalam array `value` untuk tanda tangan tertentu berarti statusnya tidak ditemukan. Hal ini dapat terjadi karena tanda tangan tidak ada dalam cache terbaru (jika `searchTransactionHistory` bernilai false), transaksi tidak pernah tercatat, atau transaksi terlalu lama untuk riwayat node meskipun menggunakan `searchTransactionHistory: true`.
* **`confirmations: null`**: Ini biasanya berarti transaksi telah mencapai status `finalized`. Pada tahap ini, konsep jumlah konfirmasi tertentu menjadi kurang relevan karena blok dianggap tidak dapat dibatalkan.
* **Penanganan Kesalahan:** Periksa bidang `err` dalam setiap objek status untuk mengetahui apakah transaksi gagal. Bidang `status` juga akan memberikan detail (misalnya, `{"Err":...}`).

Menggunakan `getSignatureStatuses` merupakan cara yang efisien untuk memantau status beberapa transaksi Solana. Ingatlah untuk menggunakan `searchTransactionHistory: true` agar pemeriksaan status lebih andal.
