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

# Cómo usar getBlock

> Conoce los casos de uso de getBlock, ejemplos de código, parámetros de solicitud, estructura de respuesta y consejos.

El método RPC [`getBlock`](https://www.helius.dev/docs/api-reference/rpc/http/getblock) te permite recuperar información detallada sobre un bloque confirmado en el libro mayor de Solana. Esto es esencial para los exploradores de bloques, el análisis del historial de transacciones y la comprensión del estado de la cadena en un momento específico.

<Warning>
  **Evita agrupar solicitudes para mejorar el rendimiento**

  Agrupar métodos de archivo aumenta significativamente la latencia. No se permiten lotes de más de 10 solicitudes.
</Warning>

## Casos de uso comunes

* **Inspeccionar el contenido de un bloque:** Consulta todas las transacciones incluidas en un [bloque](https://www.helius.dev/blog/solana-slots-blocks-and-epochs) específico.
* **Recuperar hashes de bloques:** Obtén el hash de bloque de un slot determinado, el hash de bloque de su bloque principal y el slot principal.
* **Comprobar la altura y la hora de un bloque:** Averigua la altura de un bloque (su número de secuencia) y su hora estimada de producción.
* **Analizar los detalles de las transacciones:** Con los parámetros adecuados, puedes obtener los datos completos de las transacciones, incluidos metadatos como comisiones, estado, saldos anteriores y posteriores e instrucciones internas.
* **Obtener recompensas:** Incluye opcionalmente información sobre las recompensas del bloque.

## Parámetros

1. `slot` (número, obligatorio): El número de slot del bloque que se consultará (u64).

2. `config` (objeto, opcional): Un objeto de configuración con los siguientes campos:
   * `commitment` (cadena, opcional): Especifica el [nivel de compromiso](https://www.helius.dev/blog/solana-commitment-levels) que se usará. Este método no admite `processed`. El valor predeterminado es `finalized`.
   * `encoding` (cadena, opcional): La codificación de los datos de las transacciones. El valor predeterminado es `json` si `transactionDetails` es `full` o `accounts`; de lo contrario, es `base64`.
     * `json`: Devuelve los datos de las transacciones y las cuentas en formato JSON (obsoleto en favor de `jsonParsed`).
     * `jsonParsed`: Devuelve los datos de las transacciones y las cuentas como JSON analizado. Se recomienda porque incluye todas las claves de cuenta de la transacción (incluidas las de las tablas de búsqueda de direcciones).
     * `base58` (lento)
     * `base64`
     * `base64+zstd`
   * `transactionDetails` (cadena, opcional): Especifica el nivel de detalle de las transacciones que se devolverá. El valor predeterminado es `full`.
     * `full`: Devuelve todos los detalles de las transacciones, incluidos sus metadatos.
     * `accounts`: Devuelve una lista de las cuentas detalladas en cada transacción, pero no los datos completos ni los metadatos de las transacciones.
     * `signatures`: Devuelve únicamente las firmas de las transacciones.
     * `none`: No devuelve detalles de las transacciones.
   * `rewards` (booleano, opcional): Indica si se incluirá el arreglo de recompensas en la respuesta. El valor predeterminado es `false`.
   * `maxSupportedTransactionVersion` (número, opcional): La versión máxima de las transacciones que se devolverá. Si el bloque contiene una transacción con una versión superior, la solicitud falla con el error JSON-RPC `-32015`. Si se omite, solo se devuelven transacciones heredadas y un bloque con cualquier transacción versionada provoca un error. Establécelo en `1` para incluir transacciones heredadas, v0 (tablas de búsqueda de direcciones) y v1. Consulta [Compatibilidad con transacciones v1](/docs/es/rpc/transaction-v1).

## Respuesta

Si el bloque especificado está confirmado y se encuentra, el campo `result` será un objeto que contiene información sobre el bloque. Si el bloque no se encuentra o no está confirmado, `result` será `null`.

Los campos clave del objeto de bloque incluyen:

* `blockhash` (cadena): El hash de este bloque codificado en base 58.
* `previousBlockhash` (cadena): El hash del bloque anterior codificado en base 58. Si el bloque principal no está disponible (debido a la limpieza del libro mayor), este podría ser el ID del programa del sistema.
* `parentSlot` (número): El número de slot del bloque principal.
* `transactions` (arreglo): Un arreglo de objetos de transacción incluidos en el bloque. La estructura de estos objetos depende de los parámetros `encoding` e `transactionDetails`.
  * Cada objeto de transacción suele contener `meta` (metadatos como la comisión, el estado, los registros y los saldos anteriores y posteriores) e `transaction` (los datos reales de la transacción, incluidos el mensaje y las firmas).
* `rewards` (arreglo, opcional): Un arreglo de objetos de recompensa, presente si se especificó `rewards: true`. Cada objeto detalla `pubkey`, `lamports`, `postBalance`, `rewardType` y, posiblemente, `commission`.
* `blockTime` (número | null): La hora estimada de producción del bloque como marca de tiempo Unix (segundos desde el inicio de la época), o `null` si no está disponible.
* `blockHeight` (número | null): La altura de este bloque (la cantidad de bloques que lo preceden en la cadena originada en el slot 0), o `null` si no está disponible.

Consulta la documentación oficial de RPC de Solana para conocer la estructura completa y detallada de los objetos de transacción y metadatos de la respuesta.

## Ejemplo: Obtener información de un bloque

Intentemos obtener información de un número de slot ilustrativo en Devnet.
**Importante:** Los números de slot se procesan rápidamente. El número de slot que se usa a continuación (`250000000`) es un marcador de posición. Cuando ejecutes el ejemplo, debes reemplazarlo por un slot reciente y confirmado que sepas que existe en tu red de destino (por ejemplo, Devnet o Mainnet). Puedes encontrar números de slot recientes mediante un explorador de bloques de Solana.

**Nota:** Reemplaza `YOUR_API_KEY` por tu clave de API de Helius real en los siguientes ejemplos.

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

## Consejos para desarrolladores

* **Slot frente a altura de bloque:** Recuerda que `getBlock` recibe un número `slot` como entrada, no necesariamente una altura de bloque. Aunque los slots son secuenciales, los líderes pueden omitir algunos. El campo `blockHeight` de la respuesta indica la cantidad real de bloques que preceden a este.
* **`maxSupportedTransactionVersion` es fundamental:** Para inspeccionar bloques con transacciones versionadas (que ahora son el estándar y usan tablas de búsqueda de direcciones), **debes** establecer `maxSupportedTransactionVersion: 1` (o una versión superior si surge un nuevo estándar). Si olvidas hacerlo, se producirán errores en la mayoría de los bloques modernos.
* **Elegir `transactionDetails`:**
  * `full` es necesario para la mayoría de los análisis detallados, pero devuelve la mayor cantidad de datos.
  * `signatures` es útil si solo necesitas enumerar las transacciones de un bloque.
  * `accounts` puede ser una opción intermedia si necesitas ver qué cuentas participaron sin obtener todos los datos de las instrucciones.
  * `none` es poco común, pero podría usarse si solo te interesan los metadatos del bloque, como `blockhash` o `rewards`.
* **Se recomienda `jsonParsed` para la codificación:** Cuando solicitas detalles de las transacciones, `jsonParsed` proporciona el resultado más fácil de usar para los desarrolladores y resuelve correctamente las cuentas de las tablas de búsqueda de direcciones, algo que `json` (obsoleto) no hace.
* **Bloque no disponible:** Un resultado `null` significa que no se encontró el bloque de ese slot. Esto podría deberse a que se omitió el slot, el bloque no se confirmó hasta el nivel especificado por `commitment` o el nodo RPC eliminó ese bloque histórico de su libro mayor (algo habitual en slots antiguos).
* **Información sobre recompensas:** Debes establecer `rewards: true` para ver la distribución de las recompensas del bloque al validador (y posiblemente a los participantes de staking, según el tipo de recompensa). Esto aumenta el tamaño de la respuesta.
* **Comprender la estructura de los bloques:** Para comprender mejor cómo encajan los bloques en la arquitectura de Solana, consulta [Comprender los slots, bloques y épocas en Solana](https://www.helius.dev/blog/solana-slots-blocks-and-epochs).
