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

# Wie man getBlock verwendet

> Erfahren Sie mehr über getBlock-Anwendungsfälle, Codebeispiele, Abfrageparameter, Antwortstruktur und Tipps.

Die [`getBlock`](https://www.helius.dev/docs/api-reference/rpc/http/getblock) RPC-Methode ermöglicht es Ihnen, detaillierte Informationen über einen bestätigten Block im Solana-Ledger abzurufen. Dies ist unerlässlich für Block-Explorer, Transaktionshistorienanalysen und das Verständnis des Zustands der Kette zu einem bestimmten Zeitpunkt.

<Warning>
  **Batching vermeiden für bessere Leistung**

  Das Batching von Archivierungsmethoden erhöht die Latenz erheblich. Batches von über 10 Anfragen sind nicht erlaubt.
</Warning>

## Häufige Anwendungsfälle

* **Untersuchen des Blockinhalts:** Sehen Sie alle Transaktionen in einem bestimmten [Block](https://www.helius.dev/blog/solana-slots-blocks-and-epochs) an.
* **Abrufen von Block-Hashes:** Erhalten Sie den Blockhash für einen bestimmten Slot, den Blockhash des übergeordneten Blocks und dessen übergeordneten Slot.
* **Überprüfen von Blockhöhe und Zeit:** Erfahren Sie die Höhe eines Blocks (seine Sequenznummer) und die geschätzte Produktionszeit.
* **Analysieren von Transaktionsdetails:** Mit den entsprechenden Parametern können Sie vollständige Transaktionsdaten erhalten, einschließlich Metadaten wie Gebühren, Status, Vor-/Nachsalden und inneren Anweisungen.
* **Abrufen von Belohnungen:** Optional können Sie Belohnungsinformationen für den Block einfügen.

## Parameter

1. `slot` (Nummer, erforderlich): Die Slotnummer des zu abfragenden Blocks (u64).

2. `config` (Objekt, optional): Ein Konfigurationsobjekt mit den folgenden Feldern:
   * `commitment` (String, optional): Gibt das [Commitment-Level](https://www.helius.dev/blog/solana-commitment-levels) an, das verwendet werden soll. `processed` wird für diese Methode nicht unterstützt. Standardmäßig auf `finalized`.
   * `encoding` (String, optional): Die Kodierung für Transaktionsdaten. Standardmäßig auf `json` wenn `transactionDetails` ist `full` oder `accounts`, sonst `base64`.
     * `json`: Gibt Transaktionen und Kontodaten im JSON-Format zurück (veraltet zugunsten von `jsonParsed`).
     * `jsonParsed`: Gibt Transaktionen und Kontodaten als geparstes JSON zurück. Dies wird empfohlen, da es alle Transaktionskontoschlüssel enthält (einschließlich derer aus Adressnachschlagetabellen).
     * `base58` (langsam)
     * `base64`
     * `base64+zstd`
   * `transactionDetails` (String, optional): Gibt an, welches Detailniveau der Transaktion zurückgegeben werden soll. Standardmäßig auf `full`.
     * `full`: Gibt vollständige Transaktionsdetails einschließlich Transaktionsmetadaten zurück.
     * `accounts`: Gibt eine Liste von Konten in jeder Transaktion zurück, jedoch nicht die vollständigen Transaktionsdaten oder Metadaten.
     * `signatures`: Gibt nur die Transaktionssignaturen zurück.
     * `none`: Gibt keine Transaktionsdetails zurück.
   * `rewards` (Boolean, optional): Ob das Belohnungsarray in die Antwort aufgenommen werden soll. Standardmäßig auf `false`.
   * `maxSupportedTransactionVersion` (Nummer, optional): Die maximale Transaktionsversion, die zurückgegeben werden soll. Wenn der Block eine Transaktion mit einer höheren Version enthält, schlägt die Anfrage mit JSON-RPC-Fehler `-32015` fehl. Wenn weggelassen, werden nur Legacy-Transaktionen zurückgegeben, und ein Block mit einer versionierten Transaktion führt zu einem Fehler. Setzen Sie auf `1`, um Legacy-, v0 (Adressnachschlagetabellen) und v1-Transaktionen einzubeziehen. Siehe [Transaktion v1 Unterstützung](/docs/de/rpc/transaction-v1).

## Antwort

Wenn der angegebene Block bestätigt und gefunden wird, wird das Feld `result` ein Objekt mit Informationen über den Block sein. Wenn der Block nicht gefunden oder nicht bestätigt wird, wird `result` `null` sein.

Schlüsselfelder im Blockobjekt umfassen:

* `blockhash` (String): Der Base-58-codierte Blockhash für diesen Block.
* `previousBlockhash` (String): Der Base-58-codierte Blockhash des vorherigen Blocks. Wenn das Elternteil nicht verfügbar ist (wegen Ledger-Bereinigung), könnte dies die Systemprogram-ID sein.
* `parentSlot` (Nummer): Die Slotnummer des Elternblocks.
* `transactions` (Array): Ein Array von Transaktionsobjekten, die im Block enthalten sind. Die Struktur dieser Objekte hängt von den Parametern `encoding` und `transactionDetails` ab.
  * Jedes Transaktionsobjekt enthält typischerweise `meta` (Metadaten wie Gebühr, Status, Logs, Vor-/Nachsalden) und `transaction` (die tatsächlichen Transaktionsdaten, einschließlich Nachricht und Signaturen).
* `rewards` (Array, optional): Ein Array von Belohnungsobjekten, vorhanden, wenn `rewards: true` angegeben wurde. Jedes Objekt beschreibt `pubkey`, `lamports`, `postBalance`, `rewardType` und möglicherweise `commission`.
* `blockTime` (Nummer | null): Die geschätzte Produktionszeit des Blocks als Unix-Zeitstempel (Sekunden seit der Epoche) oder `null`, wenn nicht verfügbar.
* `blockHeight` (Nummer | null): Die Höhe dieses Blocks (Anzahl der Blöcke davor in der Kette, die von Slot 0 ausgeht), oder `null`, wenn nicht verfügbar.

Beziehen Sie sich auf die offizielle Solana RPC-Dokumentation für die vollständige und detaillierte Struktur der Transaktions- und Metaobjekte innerhalb der Antwort.

## Beispiel: Abrufen von Blockinformationen

Versuchen wir, Informationen für eine illustrative Slotnummer auf dem Devnet abzurufen.
**Wichtig:** Slotnummern werden schnell verarbeitet. Die unten verwendete Slotnummer (`250000000`) ist ein Platzhalter. Sie sollten ihn durch einen aktuellen, bestätigten Slot ersetzen, der in Ihrem Zielnetzwerk (z. B. Devnet oder Mainnet) existiert, wenn Sie das Beispiel ausführen. Sie können aktuelle Slotnummern mithilfe eines Solana-Block-Explorers finden.

**Hinweis:** Ersetzen Sie `YOUR_API_KEY` durch Ihren tatsächlichen Helius-API-Schlüssel in den untenstehenden Beispielen.

<CodeGroup>
  ```bash curl theme={"system"}
  # Replace 250000000 with a valid, recent slot number on Devnet/Mainnet
  curl https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getBlock",
    "params": [
      250000000, 
      {
        "encoding": "jsonParsed",
        "transactionDetails": "full",
        "rewards": true,
        "maxSupportedTransactionVersion": 1
      }
    ]
  }'
  ```

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

  async function getBlockDetails() {
    const rpcUrl = 'https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY'; // Replace YOUR_API_KEY
    const connection = new Connection(rpcUrl, 'confirmed');
    
    // Replace with a valid, recent slot number on your target network
    const slotToQuery = 250000000; 

    try {
      const block = await connection.getBlock(slotToQuery, {
        encoding: "jsonParsed",
        transactionDetails: "full",
        rewards: true,
        maxSupportedTransactionVersion: 1 
      });

      if (block) {
        console.log('Block Details:');
        console.log(`   Slot: ${slotToQuery}`);
        console.log(`   Blockhash: ${block.blockhash}`);
        console.log(`   Previous Blockhash: ${block.previousBlockhash}`);
        console.log(`   Parent Slot: ${block.parentSlot}`);
        console.log(`   Block Height: ${block.blockHeight !== null ? block.blockHeight : 'N/A'}`);
        console.log(`   Block Time: ${block.blockTime ? new Date(block.blockTime * 1000).toISOString() : 'N/A'}`);
        console.log(`   Transactions Count: ${block.transactions.length}`);
        // console.log('   Transactions:', JSON.stringify(block.transactions, null, 2)); // Full transaction details
        // console.log('   Rewards:', JSON.stringify(block.rewards, null, 2)); // Reward details
      } else {
        console.log(`Block at slot ${slotToQuery} not found or not confirmed.`);
      }
    } catch (error) {
      console.error(`Error fetching block ${slotToQuery}:`, error);
    }
  }

  getBlockDetails();
  ```

  ```typescript Kit theme={"system"}
  import { createSolanaRpc } from "@solana/kit";

  const rpc_url = "https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY";
  const rpc = createSolanaRpc(rpc_url);

  const slot_number = BigInt(377261141);

  let block = await rpc
    .getBlock(
      slot_number,
      {
        commitment: "finalized",
        encoding: "json",
        transactionDetails: "full",
        maxSupportedTransactionVersion: 1,
        rewards: false,
      },
    )
    .send();

  console.log("block:", block);
  ```

  ```rust Rust theme={"system"}
  use anyhow::Result;
  use solana_client::nonblocking::rpc_client::RpcClient;
  use solana_sdk::commitment_config::CommitmentConfig;
  use solana_transaction_status_client_types::{TransactionDetails, UiTransactionEncoding};

  #[tokio::main]
  async fn main() -> Result<()> {
      let client = RpcClient::new_with_commitment(
          String::from("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY"),
          CommitmentConfig::confirmed(),
      );

      let slot_number = 377261141;

      let config = solana_client::rpc_config::RpcBlockConfig {
          encoding: UiTransactionEncoding::Base58.into(),
          transaction_details: TransactionDetails::Full.into(),
          rewards: None,
          commitment: CommitmentConfig::finalized().into(),
          max_supported_transaction_version: Some(0),
      };
      let block = client.get_block_with_config(slot_number, config).await?;

      println!("Block: {:#?}", block);

      Ok(())
  }
  ```
</CodeGroup>

## Entwickler-Tipps

* **Slot vs. Blockhöhe:** Denken Sie daran, dass `getBlock` eine `slot` Nummer als Eingabe erfordert, nicht unbedingt eine Blockhöhe. Während Slots sequentiell sind, können einige Slots von Leadern übersprungen werden. Das Feld `blockHeight` in der Antwort zeigt die tatsächliche Anzahl der Blöcke vor diesem an.
* **`maxSupportedTransactionVersion` ist entscheidend:** Um Blöcke mit versionierten Transaktionen (die jetzt Standard sind und Adressnachschlagetabellen verwenden) zu prüfen, **müssen** Sie `maxSupportedTransactionVersion: 1` (oder eine höhere Version, wenn ein neuer Standard aufkommt) setzen. Wenn Sie dies vergessen, führen die meisten modernen Blöcke zu Fehlern.
* **Wahl von `transactionDetails`:**
  * `full` ist notwendig für die meisten detaillierten Analysen, gibt jedoch die meisten Daten zurück.
  * `signatures` ist nützlich, wenn Sie nur Transaktionen in einem Block auflisten müssen.
  * `accounts` kann ein Mittelweg sein, wenn Sie sehen möchten, welche Konten beteiligt waren, ohne die vollständigen Anweisungsdaten abzurufen.
  * `none` ist selten, könnte aber verwendet werden, wenn Sie sich nur für blockbezogene Metadaten wie `blockhash` oder `rewards` interessieren.
* **`jsonParsed` wird für Kodierung empfohlen:** Beim Anfordern von Transaktionsdetails bietet `jsonParsed` die entwicklerfreundlichste Ausgabe und löst Konten aus Adressnachschlagetabellen korrekt auf, was `json` (veraltet) nicht tut.
* **Nichtverfügbarkeit von Blöcken:** Ein `null` Ergebnis bedeutet, dass der Block bei diesem Slot nicht gefunden wurde. Dies könnte daran liegen, dass der Slot übersprungen wurde, der Block nicht auf das von Ihnen angegebene Level `commitment` bestätigt wurde, oder der RPC-Knoten diesen historischen Block aus seinem Ledger entfernt hat (üblich für ältere Slots).
* **Belohnungsinformationen:** Das Setzen von `rewards: true` ist notwendig, um die Verteilung der Blockbelohnungen an den Validator (und potenziell Staker, je nach Belohnungstyp) zu sehen. Dies vergrößert die Antwortgröße.
* **Verstehen der Blockstruktur:** Für ein tieferes Verständnis, wie Blöcke in Solanas Architektur passen, siehe [Verstehen von Slots, Blöcken und Epochen auf Solana](https://www.helius.dev/blog/solana-slots-blocks-and-epochs).
