Saltar al contenido principal
El estado histórico de las cuentas está en Beta. Los parámetros, precios, formatos de respuesta y la cobertura de datos pueden cambiar.

¿Qué es el estado histórico de una cuenta?

Los métodos RPC estándar de Solana, como getAccountInfo e getTokenAccountsByOwner, solo devuelven el estado actual de una cuenta. Los validadores conservan únicamente la versión más reciente de cada cuenta, por lo que cada escritura reemplaza la anterior. El historial de transacciones no cubre este vacío: getTransaction e getBlock devuelven instrucciones, registros y cambios de saldo, no los datos de cuenta que escribió un programa. Los métodos de cuentas históricas de Helius devuelven las cuentas tal como estaban en un slot anterior o inmediatamente después de una transacción específica dentro de ese slot. Como puedes leer el estado entre dos transacciones del mismo slot, puedes ver exactamente qué cambió una transacción, incluso cuando se escribe en una cuenta muchas veces dentro de un solo slot. Úsalos para:
  • Consultar los saldos de tokens de una billetera en un momento determinado para auditorías, contabilidad o declaraciones de impuestos
  • Depurar una transacción leyendo las cuentas que modificó justo antes y después de su ejecución
  • Leer las cuentas de un protocolo, como pools, bóvedas u oráculos, en un slot anterior sin tener que reproducir el libro mayor
Estos métodos RPC son exclusivos de Helius. No forman parte del RPC estándar de Solana.

¿Qué método debo usar?

Ambos aceptan los mismos tres parámetros: una dirección, un objeto de consulta que selecciona la posición en el historial y un objeto de configuración.

Disponibilidad y precios

  • Planes: planes Business y superiores.
  • Costo: 0 créditos por llamada durante la beta (los precios están sujetos a cambios).
  • Límites de solicitudes: getHistoricalAccountInfo permite 100 solicitudes por segundo, con una ráfaga máxima de 100. getHistoricalTokenAccountsByOwner permite 10 solicitudes por segundo, con una ráfaga máxima de 10. Estos límites son independientes del límite de solicitudes RPC de tu plan, y las solicitudes que los superen devuelven HTTP 429. Consulta límites de solicitudes.
  • Red: solo Mainnet. Llámalos en el endpoint estándar de mainnet, https://mainnet.helius-rpc.com, o en el endpoint de Gatekeeper, https://beta.helius-rpc.com. Devnet devuelve el error -32601.

Cobertura de datos

El historial está disponible a partir del slot 444,959,999 (7 de septiembre de 2026). Ese es el último slot de la época 1029, por lo que contiene el estado al inicio de la época 1030. Las solicitudes de slots anteriores devuelven el error -32018 (“Historial de la cuenta no disponible”).

Elige una posición en el historial

El segundo parámetro es un objeto de consulta con dos campos opcionales, slot e transactionIndex: transactionIndex requiere slot. Las escrituras ajenas a una transacción, como las recompensas de época, se aplican al final del slot. Una consulta con transactionIndex nunca las incluye, ni siquiera para la última transacción del slot. Para incluirlas, consulta slot sin transactionIndex.

Lee el estado antes y después de una transacción

Para examinar qué cambió una transacción, lee la cuenta dos veces:
  • Después de la transacción: consulta sus propios slot e transactionIndex.
  • Antes de la transacción: consulta el mismo slot con transactionIndex menos 1. Si la transacción es la primera de su slot (índice 0), consulta el slot anterior sin transactionIndex.
getTransactionsForAddress devuelve slot e transactionIndex para cada transacción, por lo que puedes encontrar allí la posición de una transacción y pasarla directamente a estos métodos.

Comprende lastUpdatedAt

Cada cuenta devuelta incluye lastUpdatedAt, la posición de la escritura que produjo el estado que recibiste:
  • slot e transactionIndex apuntan a la última escritura en la posición consultada o antes de ella. En el ejemplo anterior, una consulta del slot 445,000,000 devolvió el estado escrito por última vez por la transacción en el índice 700 del slot 444,999,837.
  • transactionIndex: null significa que la escritura ocurrió fuera de una transacción, como en el caso de las recompensas de época.
  • slot: 444959999 con transactionIndex: null significa que la cuenta no ha cambiado desde que comenzó la cobertura del historial. No significa que la cuenta se haya escrito en ese slot.

Qué significa un valor null

value es null cuando la cuenta no existía en la posición consultada. Puede que todavía no se hubiera creado o que ya se hubiera cerrado.
  • Una respuesta null no tiene lastUpdatedAt, por lo que no indica cuándo se creó o cerró la cuenta. Para encontrar esas transacciones, usa getTransactionsForAddress.
  • Una dirección que nunca existió también devuelve null, no un error.
  • Un slot anterior a la cobertura del historial devuelve el error -32018 para todas las direcciones, sin importar si la cuenta existía.

Recorre hacia atrás el historial de una cuenta

Usa lastUpdatedAt como cursor para enumerar todos los estados que ha tenido una cuenta, comenzando por el más reciente. Después de cada lectura, consulta la posición inmediatamente anterior a la escritura que recibiste: Detente cuando value sea null, lo que significa que la escritura que acabas de dejar atrás creó la cuenta. Detente también cuando lastUpdatedAt.slot llegue a 444,959,999, el inicio de la cobertura del historial.
  • Las cuentas que ahora están cerradas devuelven null en el último slot. Pasa una posición start correspondiente a cuando la cuenta todavía existía.
  • Las escrituras ajenas a una transacción retroceden al slot anterior. Si una transacción también escribió en la misma cuenta anteriormente en ese slot, el recorrido omite ese estado.
  • Para avanzar en el tiempo, enumera primero las transacciones más antiguas de la cuenta con getTransactionsForAddress e sortOrder: "asc". Luego, lee el estado en los valores slot e transactionIndex de cada transacción.

Contexto de la respuesta

context.slot en cada respuesta es el último slot que Helius había indexado cuando procesó la solicitud. No es el slot que consultaste. Usa el slot de tu solicitud o lastUpdatedAt para interpretar los datos que recibiste.

Pagina de forma consistente

getHistoricalTokenAccountsByOwner devuelve los resultados una página a la vez. Cada respuesta incluye value.accounts e value.paginationKey.
  • Vuelve a pasar paginationKey en el objeto de configuración para obtener la página siguiente.
  • Detente solo cuando paginationKey sea null. Una página puede ser corta o estar vacía y aun así tener más resultados después.
  • Fija slot en todas las páginas. Si omites slot, cada página lee el último slot indexado y tus páginas pueden provenir de distintos momentos.
  • Configura limit entre 1 y 5,000. El valor predeterminado es 5,000.

Codificaciones y datos analizados

  • Las codificaciones compatibles son base64 (la predeterminada), base64+zstd e jsonParsed. base58 e binary no son compatibles.
  • Las cuentas de tokens jsonParsed usan los decimales de la acuñación en la posición consultada, por lo que las cantidades son correctas aunque la acuñación haya cambiado desde entonces. Si la acuñación no puede leerse en esa posición, la cuenta usa base64 como alternativa.
  • dataSlice funciona de la misma manera que en getAccountInfo.

Compromiso

commitment acepta finalized (el valor predeterminado) e confirmed. processed no es compatible. Un slot más reciente de lo que permite el compromiso solicitado devuelve el error -32004.

Errores

Preguntas frecuentes

¿Cómo obtengo el estado de una cuenta de Solana en un slot específico?

Llama a getHistoricalAccountInfo con la dirección e { "slot": S }. Devuelve la cuenta tal como estaba al final del slot S, en el mismo formato que getAccountInfo.

¿Puedo leer una cuenta entre dos transacciones del mismo slot?

Sí. Agrega transactionIndex a la consulta para obtener el estado de la cuenta inmediatamente después de que se ejecutara esa transacción. Consulta Lee el estado antes y después de una transacción.

¿Hasta qué momento del pasado puedo consultar?

El historial comienza en el slot 444,959,999, el 7 de septiembre de 2026. Los slots anteriores devuelven el error -32018.

¿Qué planes incluyen los métodos de cuentas históricas?

Los planes Business y superiores. Las llamadas cuestan 0 créditos durante el período beta; los precios están sujetos a cambios. Los métodos están disponibles solo en mainnet.

¿Cuáles son los límites de solicitudes?

getHistoricalAccountInfo permite 100 solicitudes por segundo e getHistoricalTokenAccountsByOwner permite 10 solicitudes por segundo. Ambos límites son independientes del límite de solicitudes RPC de tu plan. Consulta Disponibilidad y precios.

¿Cómo obtengo todos los estados anteriores de una cuenta?

Retrocede desde una escritura a la anterior mediante lastUpdatedAt. Consulta Recorre hacia atrás el historial de una cuenta.

¿Necesito un SDK nuevo?

No. Estos son métodos JSON-RPC, por lo que cualquier cliente HTTP funciona. Las bibliotecas cliente estándar de Solana no los incluyen, así que envía la solicitud directamente, como en los ejemplos anteriores.

Siguientes pasos

getHistoricalAccountInfo

Lee una sola cuenta en un slot o una transacción anterior

getHistoricalTokenAccountsByOwner

Enumera las cuentas de tokens de una billetera en un slot anterior

getTransactionsForAddress

Encuentra el slot y el transactionIndex de las transacciones que quieres examinar

Historical data overview

Historial de transacciones, transferencias y otros métodos de archivo