Geparste Ereignisse
IDL-Versionen auflisten
Liste alle IDL-Versionen auf, die Parsed Events für ein Solana-Programm enthält, einschließlich des slots, ab dem die jeweilige Version aktiv war.
GET
/
v1
/
parsed-events
/
idl
/
{programId}
IDL-Versionen auflisten
curl --request GET \
--url 'https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}?api-key='import requests
url = "https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}?api-key="
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}?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/v1/parsed-events/idl/{programId}?api-key=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}?api-key="
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}?api-key=")
.asString();require 'uri'
require 'net/http'
url = URI("https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}?api-key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body[
{
"slot": 182747476,
"sources": [
"anchor"
]
},
{
"slot": 205509752,
"sources": [
"anchor"
]
},
{
"slot": 206074074,
"sources": [
"anchor"
]
}
]{
"error": "invalid program id: notanaddress: String is the wrong size"
}Unauthorized{
"error": "no IDLs found for program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
}Die Pfadparameter, das response-Schema und die Beispiele auf dieser Seite werden aus der OpenAPI-Definition generiert.
„IDL-Versionen auflisten“ gibt den Verlauf der Programmschnittstelle aus dem IDL-Katalog zurück, den Parsed Events und Parsed Streams zum Decodieren von Anweisungen verwenden. Jedes Element entspricht einer Version und wird durch den slot identifiziert, ab dem sie aktiv war. Die Elemente sind aufsteigend nach Alter sortiert. Das letzte Element ist daher die aktuelle Version.
Übergib einen beliebigen
Um Änderungen im Laufe der Zeit zu erkennen, speichere den
Andere Fehler geben einen JSON-Textkörper mit einer
slot-Wert aus der response an IDL abrufen, um das IDL-Dokument dieser Version abzurufen. Der Orb Explorer verwendet diese endpoints, um Programm-IDLs anzuzeigen.
Anwendungsfälle
- Änderungen an der Schnittstelle verfolgen. Frage „IDL-Versionen auflisten“ regelmäßig für ein Programm ab, von dem du abhängig bist. Wenn eine neue Version erscheint, rufe sie und die vorherige Version mit „IDL abrufen“ ab und vergleiche ihre
instructions. Eine neue Admin- oder Autorisierungsanweisung sollte einer Sicherheitsprüfung unterzogen werden. - Katalogabdeckung prüfen. Ein
404bedeutet, dass der Katalog keine IDL für das Programm enthält. Programme wie SPL Token werden stattdessen von integrierten Decodern verarbeitet und geben ebenfalls404zurück.
Beispiel: Eine neue IDL-Version erkennen
Dieses Skript listet die IDL-Versionen eines Programms auf, ruft die beiden neuesten ab und gibt die hinzugefügten oder entfernten Anweisungen aus:diff-idl-versions.js
const API_KEY = process.env.HELIUS_API_KEY;
if (!API_KEY) {
console.error("Missing HELIUS_API_KEY.");
process.exit(1);
}
const BASE = "https://mainnet.helius-rpc.com/v1/parsed-events/idl";
const PROGRAM_ID = "KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD";
async function get(path) {
const response = await fetch(`${BASE}/${path}?api-key=${API_KEY}`);
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}
return response.json();
}
const versions = await get(PROGRAM_ID);
if (versions.length < 2) {
console.log("Fewer than two IDL versions; nothing to compare.");
process.exit(0);
}
const [previous, latest] = versions.slice(-2);
const [before, after] = await Promise.all([
get(`${PROGRAM_ID}/${previous.slot}`),
get(`${PROGRAM_ID}/${latest.slot}`),
]);
const names = (idl) => new Set(idl.instructions.map((ix) => ix.name));
const beforeNames = names(before);
const afterNames = names(after);
console.log(`Comparing slot ${previous.slot} with slot ${latest.slot}`);
console.log("Added:", [...afterNames].filter((name) => !beforeNames.has(name)));
console.log("Removed:", [...beforeNames].filter((name) => !afterNames.has(name)));
slot-Wert der zuletzt gesehenen Version und vergleiche ihn bei jeder Abfrage.
Credits
Jeder request kostet 10 Credits und ist in allen Tarifen verfügbar. Das obige Beispiel führt drei requests aus und kostet daher 30 Credits. Weitere Informationen findest du unter Credits.Fehler
| Status | Wann |
|---|---|
400 | programId ist keine gültige Base58-Adresse. |
401 | Der API key fehlt oder ist ungültig. Der Textkörper enthält Klartext: Unauthorized. |
404 | Der Katalog enthält keine IDL für das Programm. |
error-Meldung zurück, beispielsweise {"error": "no IDLs found for program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}.
Request-Parameter
string
erforderlich
Programmadresse, Base58-codiert.
Autorisierungen
Pfadparameter
Programm-Adresse, Base58-codiert.
Beispiel:
"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"
Antwort
Die IDL-Versionen des Programms, aufsteigend nach slot sortiert.
Der slot, ab dem diese IDL-Version aktiv war. Übergib ihn an „IDL abrufen“, um diese Version abzurufen.
Wo Parsed Events diese Version gefunden hat. Mögliche Werte sind anchor, program_metadata und github. Weitere Werte können hinzukommen. Eine Version kann mehrere Quellen haben.
War diese Seite hilfreich?
⌘I
IDL-Versionen auflisten
curl --request GET \
--url 'https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}?api-key='import requests
url = "https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}?api-key="
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}?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/v1/parsed-events/idl/{programId}?api-key=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}?api-key="
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}?api-key=")
.asString();require 'uri'
require 'net/http'
url = URI("https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}?api-key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body[
{
"slot": 182747476,
"sources": [
"anchor"
]
},
{
"slot": 205509752,
"sources": [
"anchor"
]
},
{
"slot": 206074074,
"sources": [
"anchor"
]
}
]{
"error": "invalid program id: notanaddress: String is the wrong size"
}Unauthorized{
"error": "no IDLs found for program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
}