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, comogetAccountInfo 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
¿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:
getHistoricalAccountInfopermite 100 solicitudes por segundo, con una ráfaga máxima de 100.getHistoricalTokenAccountsByOwnerpermite 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 HTTP429. 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
slotetransactionIndex. - Antes de la transacción: consulta el mismo
slotcontransactionIndexmenos 1. Si la transacción es la primera de su slot (índice 0), consulta el slot anterior sintransactionIndex.
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 incluyelastUpdatedAt, la posición de la escritura que produjo el estado que recibiste:
slotetransactionIndexapuntan 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: nullsignifica que la escritura ocurrió fuera de una transacción, como en el caso de las recompensas de época.slot: 444959999contransactionIndex: nullsignifica 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
nullno tienelastUpdatedAt, por lo que no indica cuándo se creó o cerró la cuenta. Para encontrar esas transacciones, usagetTransactionsForAddress. - Una dirección que nunca existió también devuelve
null, no un error. - Un slot anterior a la cobertura del historial devuelve el error
-32018para todas las direcciones, sin importar si la cuenta existía.
Recorre hacia atrás el historial de una cuenta
UsalastUpdatedAt 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
nullen el último slot. Pasa una posiciónstartcorrespondiente 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
getTransactionsForAddressesortOrder: "asc". Luego, lee el estado en los valoresslotetransactionIndexde 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
paginationKeyen el objeto de configuración para obtener la página siguiente. - Detente solo cuando
paginationKeyseanull. Una página puede ser corta o estar vacía y aun así tener más resultados después. - Fija
sloten todas las páginas. Si omitesslot, cada página lee el último slot indexado y tus páginas pueden provenir de distintos momentos. - Configura
limitentre 1 y 5,000. El valor predeterminado es 5,000.
Codificaciones y datos analizados
- Las codificaciones compatibles son
base64(la predeterminada),base64+zstdejsonParsed.base58ebinaryno son compatibles. - Las cuentas de tokens
jsonParsedusan 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. dataSlicefunciona de la misma manera que engetAccountInfo.
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 agetHistoricalAccountInfo 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í. AgregatransactionIndex 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 mediantelastUpdatedAt. 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