Historische Konten
getHistoricalAccountInfo
Lies ein beliebiges Solana-Konto so, wie es in einem vergangenen slot oder direkt nach einer bestimmten Transaktion war. Nutze dabei die getAccountInfo-Codierungen und die Position des letzten Schreibvorgangs.
POST
/
getHistoricalAccountInfo
curl --request POST \
--url 'https://mainnet.helius-rpc.com/?api-key=' \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"id": "1",
"method": "getHistoricalAccountInfo",
"params": [
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
{
"slot": 445000000
},
{
"encoding": "jsonParsed"
}
]
}
'import requests
url = "https://mainnet.helius-rpc.com/?api-key="
payload = {
"jsonrpc": "2.0",
"id": "1",
"method": "getHistoricalAccountInfo",
"params": ["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", { "slot": 445000000 }, { "encoding": "jsonParsed" }]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
jsonrpc: '2.0',
id: '1',
method: 'getHistoricalAccountInfo',
params: [
'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
{slot: 445000000},
{encoding: 'jsonParsed'}
]
})
};
fetch('https://mainnet.helius-rpc.com/?api-key=', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://mainnet.helius-rpc.com/?api-key=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'jsonrpc' => '2.0',
'id' => '1',
'method' => 'getHistoricalAccountInfo',
'params' => [
'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
[
'slot' => 445000000
],
[
'encoding' => 'jsonParsed'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://mainnet.helius-rpc.com/?api-key="
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"id\": \"1\",\n \"method\": \"getHistoricalAccountInfo\",\n \"params\": [\n \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n {\n \"slot\": 445000000\n },\n {\n \"encoding\": \"jsonParsed\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://mainnet.helius-rpc.com/?api-key=")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"id\": \"1\",\n \"method\": \"getHistoricalAccountInfo\",\n \"params\": [\n \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n {\n \"slot\": 445000000\n },\n {\n \"encoding\": \"jsonParsed\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://mainnet.helius-rpc.com/?api-key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"jsonrpc\": \"2.0\",\n \"id\": \"1\",\n \"method\": \"getHistoricalAccountInfo\",\n \"params\": [\n \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n {\n \"slot\": 445000000\n },\n {\n \"encoding\": \"jsonParsed\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": "1",
"result": {
"context": {
"slot": 468129571
},
"value": {
"lamports": 531589475273,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"data": [
"<string>"
],
"executable": false,
"rentEpoch": 123,
"space": 82,
"lastUpdatedAt": {
"slot": 444999837,
"transactionIndex": 700
}
}
}
}{
"jsonrpc": "2.0",
"error": {
"code": -32602,
"message": "Ungültige Parameter"
},
"id": "1"
}{
"jsonrpc": "2.0",
"error": {
"code": -32001,
"message": "Nicht autorisiert"
},
"id": "1"
}{
"jsonrpc": "2.0",
"error": {
"code": -32005,
"message": "Zu viele requests"
},
"id": "1"
}{
"jsonrpc": "2.0",
"error": {
"code": -32603,
"message": "Interner Fehler"
},
"id": "1"
}{
"jsonrpc": "2.0",
"error": {
"code": -32002,
"message": "Dienst nicht verfügbar"
},
"id": "1"
}{
"jsonrpc": "2.0",
"error": {
"code": -32003,
"message": "Gateway-timeout"
},
"id": "1"
}getHistoricalAccountInfo befindet sich in der Betaphase. Parameter, Preise, response-Formate und Datenabdeckung können sich ändern.Übersicht
getHistoricalAccountInfo gibt ein Solana-Konto so zurück, wie es in einem vergangenen slot oder direkt nach einer bestimmten Transaktion in diesem slot war. Diese RPC-Methode ist exklusiv bei Helius verfügbar. Das standardmäßige getAccountInfo gibt nur den aktuellen Zustand zurück.
Die response enthält dieselben Kontofelder wie getAccountInfo sowie lastUpdatedAt: den slot und die Transaktion des letzten Schreibvorgangs, der den empfangenen Zustand erzeugt hat.
Der Verlauf ist ab slot 444,959,999 (7. September 2026) verfügbar. Das entspricht dem Zustand zu Beginn der Epoche 1030. Requests für frühere slots geben den Fehler -32018 zurück.
getHistoricalAccountInfo ist im Mainnet für Business-Tarife und höher verfügbar. Während der Betaphase kostet jeder Aufruf 0 Credits. Die Preise können sich ändern.
Position im Verlauf auswählen
Der zweite Parameter ist ein Abfrageobjekt, das den zu lesenden Zeitpunkt im Verlauf auswählt:| Abfrage | Gibt das Konto zurück |
|---|---|
Weggelassen oder {} | Beim neuesten indizierten slot, begrenzt auf das angeforderte commitment |
{ "slot": 445000000 } | Am Ende von slot 445,000,000 |
{ "slot": 445000000, "transactionIndex": 10 } | Direkt nach Ausführung der Transaktion mit Index 10 in slot 445,000,000 |
transactionIndex erfordert slot. Um ein Konto direkt vor der Transaktion mit dem Index N zu lesen, frage transactionIndex: N - 1 ab. Frage für die erste Transaktion in einem slot den vorherigen slot ohne transactionIndex ab.
Schreibvorgänge außerhalb von Transaktionen, etwa Epochenbelohnungen, werden am Ende des slot angewendet. Eine Abfrage mit transactionIndex enthält sie nie.
Beispiel-request
curl https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "1",
"method": "getHistoricalAccountInfo",
"params": [
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
{ "slot": 445000000 },
{ "encoding": "jsonParsed" }
]
}'
response lesen
valueist das Konto, wie es an der angeforderten Position war, odernull, wenn das Konto damals nicht existierte: Es war entweder noch nicht erstellt oder bereits geschlossen. Einenull-response enthält keinlastUpdatedAt.lastUpdatedAt.slotundlastUpdatedAt.transactionIndexidentifizieren den Schreibvorgang, der diesen Zustand erzeugt hat. Der Schreibvorgang liegt an oder vor der angeforderten Position.lastUpdatedAt.transactionIndexistnull, wenn der Schreibvorgang außerhalb einer Transaktion erfolgte, etwa bei Epochenbelohnungen.lastUpdatedAt.slotmit dem Wert 444,959,999 und einemnull-Wert fürtransactionIndexbedeutet, dass sich das Konto seit Beginn der Verlaufsabdeckung nicht geändert hat. Es bedeutet nicht, dass das Konto in diesem slot geschrieben wurde.context.slotist der neueste slot, den Helius beim Verarbeiten des request indiziert hatte, nicht der von dir abgefragte slot.jsonParsedtoken Konten verwenden die Dezimalstellen des Mint zum Zeitpunkt der angeforderten Position. Wenn der Mint an dieser Position nicht gelesen werden kann, verwendet das Konto ersatzweise base64.
lastUpdatedAt als Cursor, um alle früheren Zustände eines Kontos aufzulisten. Siehe Kontoverlauf rückwärts durchlaufen.
Fehler
| Code | Bedeutung |
|---|---|
-32018 | Der slot liegt vor dem Beginn der Verlaufsabdeckung (slot 444,959,999) |
-32004 | Der slot ist neuer, als das angeforderte commitment zulässt. Verwende confirmed oder frage einen älteren slot ab |
-32602 | Ungültige Parameter, etwa transactionIndex ohne slot, die Codierung base58 oder ein unbekanntes Konfigurationsfeld |
-32601 | Methode nicht gefunden. Rufe deinen Helius Mainnet- oder Gatekeeper-endpoint auf. Die Methode ist im Devnet nicht verfügbar |
Verwandte Methoden
Historical Accounts Guide
So funktionieren Positionen, Abdeckung und lastUpdatedAt bei Methoden für historische Konten
getHistoricalTokenAccountsByOwner
Liste die token Konten einer Wallet in einem vergangenen slot auf
getTransactionsForAddress
Finde den slot und den transactionIndex der Transaktionen, die du untersuchen möchtest
getAccountInfo
Lies den aktuellen Zustand eines Kontos
Request-Parameter
slot, an dem der Zustand gelesen werden soll. Gibt das Konto so zurück, wie es am Ende dieses slot war. Der früheste unterstützte slot ist 444959999. Das entspricht dem Zustand zu Beginn der Epoche 1030. Wenn dieser Parameter weggelassen wird, liest die Methode den neuesten indizierten slot, begrenzt auf das angeforderte commitment.
Position einer Transaktion innerhalb des slot. Gibt den Kontozustand direkt nach Ausführung dieser Transaktion zurück, nicht am Ende des slot. Erfordert slot.
Codierungsformat für Kontodaten. base58 und binary werden nicht unterstützt.
base64base64+zstdjsonParsed
Gibt nur einen Ausschnitt der Daten jedes Kontos zurück. Gilt für die Codierungen base64 und base64+zstd.
Autorisierungen
Dein Helius API key. Du erhältst ihn kostenlos im Dashboard.
Body
application/json
Array mit der Kontoadresse, einem optionalen Abfrageobjekt zur Auswahl der Position im Verlauf und einem optionalen Konfigurationsobjekt.
Required array length:
1 - 3 elementsBase58-kodierte Adresse des zu lesenden Kontos.
Beispiel:
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
War diese Seite hilfreich?
⌘I
getHistoricalAccountInfo
curl --request POST \
--url 'https://mainnet.helius-rpc.com/?api-key=' \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"id": "1",
"method": "getHistoricalAccountInfo",
"params": [
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
{
"slot": 445000000
},
{
"encoding": "jsonParsed"
}
]
}
'import requests
url = "https://mainnet.helius-rpc.com/?api-key="
payload = {
"jsonrpc": "2.0",
"id": "1",
"method": "getHistoricalAccountInfo",
"params": ["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", { "slot": 445000000 }, { "encoding": "jsonParsed" }]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
jsonrpc: '2.0',
id: '1',
method: 'getHistoricalAccountInfo',
params: [
'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
{slot: 445000000},
{encoding: 'jsonParsed'}
]
})
};
fetch('https://mainnet.helius-rpc.com/?api-key=', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://mainnet.helius-rpc.com/?api-key=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'jsonrpc' => '2.0',
'id' => '1',
'method' => 'getHistoricalAccountInfo',
'params' => [
'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
[
'slot' => 445000000
],
[
'encoding' => 'jsonParsed'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://mainnet.helius-rpc.com/?api-key="
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"id\": \"1\",\n \"method\": \"getHistoricalAccountInfo\",\n \"params\": [\n \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n {\n \"slot\": 445000000\n },\n {\n \"encoding\": \"jsonParsed\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://mainnet.helius-rpc.com/?api-key=")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"id\": \"1\",\n \"method\": \"getHistoricalAccountInfo\",\n \"params\": [\n \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n {\n \"slot\": 445000000\n },\n {\n \"encoding\": \"jsonParsed\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://mainnet.helius-rpc.com/?api-key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"jsonrpc\": \"2.0\",\n \"id\": \"1\",\n \"method\": \"getHistoricalAccountInfo\",\n \"params\": [\n \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n {\n \"slot\": 445000000\n },\n {\n \"encoding\": \"jsonParsed\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": "1",
"result": {
"context": {
"slot": 468129571
},
"value": {
"lamports": 531589475273,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"data": [
"<string>"
],
"executable": false,
"rentEpoch": 123,
"space": 82,
"lastUpdatedAt": {
"slot": 444999837,
"transactionIndex": 700
}
}
}
}{
"jsonrpc": "2.0",
"error": {
"code": -32602,
"message": "Ungültige Parameter"
},
"id": "1"
}{
"jsonrpc": "2.0",
"error": {
"code": -32001,
"message": "Nicht autorisiert"
},
"id": "1"
}{
"jsonrpc": "2.0",
"error": {
"code": -32005,
"message": "Zu viele requests"
},
"id": "1"
}{
"jsonrpc": "2.0",
"error": {
"code": -32603,
"message": "Interner Fehler"
},
"id": "1"
}{
"jsonrpc": "2.0",
"error": {
"code": -32002,
"message": "Dienst nicht verfügbar"
},
"id": "1"
}{
"jsonrpc": "2.0",
"error": {
"code": -32003,
"message": "Gateway-timeout"
},
"id": "1"
}