El método RPC 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.
Evita agrupar solicitudes para mejorar el rendimientoAgrupar métodos de archivo aumenta significativamente la latencia. No se permiten lotes de más de 10 solicitudes.
Casos de uso comunes
- Inspeccionar el contenido de un bloque: Consulta todas las transacciones incluidas en un bloque 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
-
slot (número, obligatorio): El número de slot del bloque que se consultará (u64).
-
config (objeto, opcional): Un objeto de configuración con los siguientes campos:
commitment (cadena, opcional): Especifica el nivel de compromiso 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.
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.
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.
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.