O estado histórico das contas está em Beta. Parâmetros, preços, formatos de resposta e cobertura de dados podem mudar.
O que é o estado histórico de uma conta?
Métodos RPC padrão da Solana, comogetAccountInfo e getTokenAccountsByOwner, retornam apenas o estado atual de uma conta. Os validadores mantêm somente a versão mais recente de cada conta, portanto cada gravação substitui a anterior. O histórico de transações não preenche essa lacuna: getTransaction e getBlock retornam instruções, logs e alterações de saldo, não os dados da conta que um programa gravou.
Os métodos de contas históricas da Helius retornam as contas como elas estavam em um slot anterior ou logo após uma transação específica dentro desse slot. Como você pode ler o estado entre duas transações no mesmo slot, é possível ver exatamente o que uma transação alterou, mesmo quando uma conta é gravada várias vezes em um único slot. Use esses métodos para:
- Verificar os saldos de tokens de uma carteira em um determinado momento para auditorias, contabilidade ou declarações fiscais
- Depurar uma transação lendo as contas que ela acessou imediatamente antes e depois da execução
- Ler as contas de um protocolo, como pools, cofres ou oráculos, em um slot anterior sem precisar reproduzir o ledger por conta própria
Qual método devo usar?
Ambos recebem os mesmos três parâmetros: um endereço, um objeto de consulta que seleciona a posição no histórico e um objeto de configuração.
Disponibilidade e preços
- Planos: planos Business e superiores.
- Custo: 0 créditos por chamada durante a fase beta (preços sujeitos a alterações).
- Limites de taxa:
getHistoricalAccountInfopermite 100 solicitações por segundo, com um pico máximo de 100.getHistoricalTokenAccountsByOwnerpermite 10 solicitações por segundo, com um pico máximo de 10. Esses limites são separados do limite de taxa de RPC do seu plano, e as solicitações que os excederem retornarão HTTP429. Consulte limites de taxa. - Rede: somente Mainnet. Chame-os no endpoint padrão da mainnet,
https://mainnet.helius-rpc.com, ou no endpoint do Gatekeeper,https://beta.helius-rpc.com. A devnet retorna o erro-32601.
Cobertura de dados
O histórico está disponível a partir do slot 444.959.999 (7 de setembro de 2026). Esse é o último slot da época 1029, portanto ele contém o estado no início da época 1030. Solicitações de slots anteriores retornam o erro-32018 (“Histórico da conta indisponível”).
Escolha uma posição no histórico
O segundo parâmetro é um objeto de consulta com dois campos opcionais,slot e transactionIndex:
transactionIndex exige slot.
Gravações não relacionadas a transações, como recompensas de época, são aplicadas no final do slot. Uma consulta com transactionIndex nunca as inclui, mesmo para a última transação do slot. Para incluí-las, consulte o slot sem transactionIndex.
Leia o estado antes e depois de uma transação
Para inspecionar o que uma transação alterou, leia a conta duas vezes:- Depois da transação: consulte os próprios
slotetransactionIndexdela. - Antes da transação: consulte o mesmo
slotcomtransactionIndexmenos 1. Se a transação for a primeira do slot (índice 0), consulte o slot anterior semtransactionIndex.
getTransactionsForAddress retorna slot e transactionIndex para cada transação. Assim, você pode encontrar a posição de uma transação nesse método e passá-la diretamente para estes métodos.
Entenda lastUpdatedAt
Cada conta retornada incluilastUpdatedAt, a posição da gravação que produziu o estado recebido:
slotetransactionIndexapontam para a última gravação na posição consultada ou antes dela. No exemplo acima, uma consulta ao slot 445.000.000 retornou o estado gravado pela última vez pela transação no índice 700 do slot 444.999.837.transactionIndex: nullsignifica que a gravação ocorreu fora de uma transação, como no caso de recompensas de época.slot: 444959999comtransactionIndex: nullsignifica que a conta não mudou desde o início da cobertura do histórico. Isso não significa que a conta foi gravada nesse slot.
O que significa um valor null
value é null quando a conta não existia na posição consultada. Ela ainda não havia sido criada ou já havia sido encerrada.
- Uma resposta
nullnão contémlastUpdatedAt, portanto ela não informa quando a conta foi criada ou encerrada. Para encontrar essas transações, usegetTransactionsForAddress. - Um endereço que nunca existiu também retorna
null, não um erro. - Um slot anterior à cobertura do histórico retorna o erro
-32018para todos os endereços, independentemente de a conta ter existido ou não.
Percorra o histórico da conta em ordem reversa
UselastUpdatedAt como cursor para listar todos os estados que uma conta já teve, começando pelo mais recente. Após cada leitura, consulte a posição imediatamente anterior à gravação recebida:
Pare quando
value for null. Isso significa que a gravação que você acabou de ultrapassar criou a conta. Pare também quando lastUpdatedAt.slot chegar a 444.959.999, o início da cobertura do histórico.
- Contas que estão encerradas atualmente retornam
nullno slot mais recente. Passe uma posiçãostartde quando a conta ainda existia. - Gravações não relacionadas a transações avançam para o slot anterior. Se a mesma conta também tiver sido gravada por uma transação anterior nesse slot, o percurso ignorará esse estado.
- Para avançar no tempo, liste as transações da conta da mais antiga para a mais recente com
getTransactionsForAddressesortOrder: "asc". Depois, leia o estado nos valoresslotetransactionIndexde cada transação.
Contexto da resposta
context.slot em cada resposta é o slot mais recente que a Helius havia indexado quando processou a solicitação. Ele não é o slot que você consultou. Use o slot da sua solicitação ou lastUpdatedAt para interpretar os dados recebidos.
Paginação consistente
getHistoricalTokenAccountsByOwner retorna os resultados uma página por vez. Cada resposta inclui value.accounts e value.paginationKey.
- Passe
paginationKeynovamente no objeto de configuração para buscar a próxima página. - Pare somente quando
paginationKeyfornull. Uma página pode ter poucos resultados ou estar vazia e ainda assim haver mais resultados depois dela. - Fixe
slotem todas as páginas. Se você omitirslot, cada página lerá o slot indexado mais recente, e suas páginas poderão vir de momentos diferentes. - Defina
limitentre 1 e 5.000. O padrão é 5.000.
Codificações e dados analisados
- As codificações compatíveis são
base64(o padrão),base64+zstdejsonParsed.base58ebinarynão são compatíveis. - Contas de tokens
jsonParsedusam as casas decimais do mint na posição consultada. Assim, os valores permanecem corretos mesmo que o mint tenha sido alterado desde então. Se o mint não puder ser lido nessa posição, a conta usará base64 como alternativa. dataSlicefunciona da mesma forma que emgetAccountInfo.
Commitment
commitment aceita finalized (o padrão) e confirmed. processed não é compatível. Um slot mais recente do que o permitido pelo commitment solicitado retorna o erro -32004.
Erros
Perguntas frequentes
Como obtenho o estado de uma conta da Solana em um slot específico?
ChamegetHistoricalAccountInfo com o endereço e { "slot": S }. Ele retorna a conta como ela estava no final do slot S, no mesmo formato de getAccountInfo.
Posso ler uma conta entre duas transações no mesmo slot?
Sim. AdicionetransactionIndex à consulta para obter o estado da conta imediatamente após a execução dessa transação. Consulte Leia o estado antes e depois de uma transação.
Até onde posso retroceder em uma consulta?
O histórico começa no slot 444.959.999, em 7 de setembro de 2026. Slots anteriores retornam o erro-32018.
Quais planos incluem os métodos de contas históricas?
Planos Business e superiores. As chamadas custam 0 créditos durante o período beta; os preços estão sujeitos a alterações. Os métodos estão disponíveis somente na mainnet.Quais são os limites de taxa?
getHistoricalAccountInfo permite 100 solicitações por segundo, e getHistoricalTokenAccountsByOwner permite 10 solicitações por segundo. Ambos os limites são separados do limite de taxa de RPC do seu plano. Consulte Disponibilidade e preços.
Como obtenho todos os estados anteriores de uma conta?
Retroceda de uma gravação para a anterior usandolastUpdatedAt. Consulte Percorra o histórico da conta em ordem reversa.
Preciso de um novo SDK?
Não. Esses são métodos JSON-RPC, portanto qualquer cliente HTTP funciona. As bibliotecas cliente padrão da Solana não os incluem. Por isso, envie a solicitação diretamente, como nos exemplos acima.Próximas etapas
getHistoricalAccountInfo
Leia uma única conta em um slot ou transação anterior
getHistoricalTokenAccountsByOwner
Liste as contas de tokens de uma carteira em um slot anterior
getTransactionsForAddress
Encontre o slot e o transactionIndex das transações que você quer inspecionar
Historical data overview
Histórico de transações, transferências e outros métodos de arquivamento