Événements analysés
Répertorier les versions d’IDL
Répertoriez toutes les versions d’IDL dont Parsed Events dispose pour un programme Solana, avec le slot auquel chaque version est devenue active.
GET
/
v1
/
parsed-events
/
idl
/
{programId}
Répertorier les versions de l’IDL
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"
}Les paramètres de chemin, le schéma de réponse et les exemples de cette page sont générés à partir de la définition OpenAPI.
Répertorier les versions d’IDL renvoie l’historique de l’interface d’un programme depuis le catalogue d’IDL utilisé par Parsed Events et Parsed Streams pour décoder les instructions. Chaque élément correspond à une version, identifiée par le slot auquel elle est devenue active. Les éléments sont triés du plus ancien au plus récent ; le dernier correspond donc à la version actuelle.
Transmettez n’importe quelle valeur
Pour détecter les modifications au fil du temps, stockez la valeur
Les autres erreurs renvoient un corps JSON contenant un message
slot de la réponse à Obtenir un IDL pour récupérer le document IDL de cette version. L’explorateur Orb utilise ces endpoints pour afficher les IDL des programmes.
Cas d’utilisation
- Suivre les modifications de l’interface. Interrogez régulièrement Répertorier les versions d’IDL pour un programme dont vous dépendez. Lorsqu’une nouvelle version apparaît, récupérez-la ainsi que la précédente avec Obtenir un IDL, puis comparez leurs
instructions. L’ajout d’une instruction d’administration ou d’autorité mérite un examen de sécurité. - Vérifier la couverture du catalogue. Une réponse
404signifie que le catalogue ne contient aucun IDL pour le programme. Les programmes tels que SPL Token sont plutôt décodés par des décodeurs intégrés et renvoient également404.
Exemple : détecter une nouvelle version d’IDL
Ce script répertorie les versions d’IDL d’un programme, récupère les deux plus récentes et affiche les instructions ajoutées ou supprimées :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 de la dernière version observée et comparez-la lors de chaque interrogation.
Crédits
Chaque requête coûte 10 crédits et est disponible avec toutes les offres. L’exemple ci-dessus effectue trois requêtes et coûte donc 30 crédits. Consultez Crédits.Erreurs
| Statut | Cas |
|---|---|
400 | programId n’est pas une adresse base58 valide. |
401 | La clé API est absente ou non valide. Le corps est en texte brut : Unauthorized. |
404 | Le catalogue ne contient aucun IDL pour le programme. |
error, tel que {"error": "no IDLs found for program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}.
Paramètres de la requête
string
requis
Adresse du programme, encodée en base58.
Autorisations
Paramètres de chemin
Adresse du programme, encodée en base58.
Exemple:
"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"
Réponse
Versions de l’IDL du programme, triées par slot croissant.
Slot auquel cette version de l’IDL est devenue active. Transmettez-le à Obtenir l’IDL pour récupérer cette version.
Emplacements où Événements analysés a trouvé cette version. Les valeurs comprennent anchor, program_metadata et github, et d’autres pourront être ajoutées. Une version peut avoir plusieurs sources.
Cette page vous a-t-elle été utile ?
⌘I
Répertorier les versions de l’IDL
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"
}