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

# So verwenden Sie getSignatureStatuses

> Lernen Sie Anwendungsfälle, Codebeispiele, Anforderungsparameter, Antwortstruktur und Tipps zur Verwendung von getSignatureStatuses kennen.

Die [`getSignatureStatuses`](https://www.helius.dev/docs/api-reference/rpc/http/getsignaturestatuses) RPC-Methode ermöglicht es Ihnen, den Verarbeitungs- und Bestätigungsstatus einer Liste von Transaktionssignaturen abzurufen. Dies ist nützlich, um festzustellen, ob Transaktionen vom Netzwerk [verarbeitet, bestätigt oder abgeschlossen](https://www.helius.dev/blog/solana-commitment-levels) wurden.

Es sei denn, die Option `searchTransactionHistory` ist aktiviert. Diese Methode fragt hauptsächlich einen aktuellen Status-Cache auf dem RPC-Knoten ab. Für ältere Transaktionen ist das Aktivieren von `searchTransactionHistory` entscheidend.

<Warning>
  **Vermeiden Sie Batch-Verarbeitung für bessere Leistung**

  Batch-Verarbeitung von Archivierungsmethoden erhöht die Latenz erheblich. Batches mit mehr als 10 Anfragen sind nicht erlaubt.
</Warning>

## Häufige Anwendungsfälle

* **Bestätigen der Transaktionsfinalität:** Überprüfen, ob eine gesendete Transaktion ein gewünschtes Bestätigungsniveau erreicht hat (z.B. `confirmed` oder `finalized`).
* **Batch-Statusabfrage:** Effiziente Überprüfung des Status mehrerer Transaktionen auf einmal, z.B. nach einem Batch-Versand.
* **Aktualisierung der Benutzeroberfläche basierend auf dem Transaktionsstatus:** Den Echtzeitstatus einer Transaktion für den Benutzer widerspiegeln.
* **Fehlerüberprüfung:** Ermitteln, ob eine der Transaktionen in einer Liste fehlgeschlagen ist und warum.

## Anfrageparameter

1. **`signatures`** (`array` von `string`): (Erforderlich) Ein Array von Base-58-kodierten Transaktionssignaturen. Sie können bis zu 256 Signaturen in einer einzigen Anfrage abfragen.
2. **`options`** (`object`, optional): Ein optionales Konfigurationsobjekt mit folgendem Feld:
   * **`searchTransactionHistory`** (`boolean`, optional): Wenn `true`, sucht der RPC-Knoten seine gesamte Transaktionshistorie nach den Signaturen ab. Wenn `false` (Standard), wird nur ein aktueller Status-Cache durchsucht. Für alte oder möglicherweise gestrichene Transaktionen setzen Sie dies auf `true`.

## Antwortstruktur

Das `result`-Feld der JSON-RPC-Antwort enthält ein Objekt mit zwei Feldern:

* **`context`** (`object`): Ein Objekt, das Folgendes enthält:
  * **`slot`** (`u64`): Der Slot, in dem dieser Anfrage vom RPC-Knoten verarbeitet wurde.
* **`value`** (`array` von `object` | `null`): Ein Array von Statusobjekten, entsprechend der Reihenfolge der Signaturen in der Anfrage. Jedes Element kann sein:
  * Ein **Objekt** mit den folgenden Feldern, wenn die Signatur gefunden wird:
    * **`slot`** (`u64`): Der Slot, in dem die Transaktion verarbeitet wurde.
    * **`confirmations`** (`number` | `null`): Die Anzahl der Blöcke, die seit der Verarbeitung der Transaktion bestätigt wurden. `null`, wenn die Transaktion abgeschlossen ist (da Finalität impliziert, dass sie nicht zurückgerollt wird, ist eine spezifische Bestätigungsanzahl weniger relevant).
    * **`err`** (`object` | `null`): Ein Fehlerobjekt, wenn die Transaktion fehlgeschlagen ist (z.B. `{"InstructionError":[0,{"Custom":1}]}`), oder `null`, wenn sie erfolgreich war.
    * **`status`** (`object`): Ein Objekt, das den Ausführungsstatus der Transaktion anzeigt. Normalerweise `{"Ok":null}` für erfolgreiche Transaktionen oder ein Objekt, das den Fehler bei fehlgeschlagenen Transaktionen detailliert beschreibt.
    * **`confirmationStatus`** (`string` | `null`): Der Bestätigungsstatus des Clusters für die Transaktion (z.B. `processed`, `confirmed`, `finalized`). Kann `null` sein, wenn der Status nicht im Cache verfügbar ist und `searchTransactionHistory` falsch ist.
  * **`null`**: Wenn eine Signatur im Status-Cache nicht gefunden wird und `searchTransactionHistory` `false` ist (oder auch mit der Verlaufsdurchsuchung wirklich nicht existiert).

## Beispiele

### 1. Status für eine Liste von Signaturen abrufen (Aktueller Cache)

Dieses Beispiel ruft den Status für zwei Signaturen ab und verlässt sich dabei auf den aktuellen Cache des Knotens.

<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. Status mit Transaktionsverlaufsdurchsuchung abrufen

Dieses Beispiel ruft den Status für Signaturen ab und fordert den Knoten ausdrücklich auf, seinen Transaktionsverlauf zu durchsuchen.

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

## Entwicklertipps

* **`searchTransactionHistory`:** Entscheidend für die Zuverlässigkeit. Wenn `false` (Standard), überprüft die Methode nur einen begrenzten aktuellen Cache. Wenn eine Transaktion alt ist oder möglicherweise gestrichen wurde und nicht in diesem Cache ist, wird `null` für den Status dieser Signatur zurückgegeben. Setzen Sie es immer auf `true`, wenn Sie den Status von Transaktionen bestätigen müssen, die möglicherweise nicht sehr aktuell sind.
* **Signaturgrenze:** Sie können maximal 256 Signaturen pro Anruf abfragen.
* **`null` Status:** Ein `null` im `value` Array für eine gegebene Signatur bedeutet, dass ihr Status nicht gefunden wurde. Dies könnte daran liegen, dass sie nicht im aktuellen Cache ist (wenn `searchTransactionHistory` falsch ist), die Transaktion nie landete oder sie zu alt für die historische Suche des Knotens ist, selbst mit `searchTransactionHistory: true`.
* **`confirmations: null`**: Dies bedeutet normalerweise, dass die Transaktion den `finalized` Status erreicht hat. Zu diesem Zeitpunkt ist das Konzept einer spezifischen Anzahl von Bestätigungen weniger relevant, da der Block als unumkehrbar angesehen wird.
* **Fehlerbehandlung:** Überprüfen Sie das `err` Feld innerhalb jedes Statusobjekts, um festzustellen, ob eine Transaktion fehlgeschlagen ist. Das `status` Feld liefert ebenfalls Details (z.B. `{"Err":...}`).

Die Verwendung von `getSignatureStatuses` ist eine effiziente Möglichkeit, den Status mehrerer Solana-Transaktionen zu überwachen. Denken Sie daran, `searchTransactionHistory: true` für eine robuste Statusüberprüfung zu verwenden.
