Peristiwa yang Diuraikan
Daftar Versi IDL
Cantumkan setiap versi IDL yang dimiliki Parsed Events untuk program Solana, beserta slot saat setiap versi mulai aktif.
GET
/
v1
/
parsed-events
/
idl
/
{programId}
Cantumkan Versi 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"
}Parameter jalur, skema respons, dan contoh di halaman ini dihasilkan dari definisi OpenAPI.
Daftar Versi IDL menampilkan riwayat antarmuka program dari katalog IDL yang digunakan oleh Parsed Events dan Parsed Streams untuk mendekode instruksi. Setiap item merupakan satu versi yang diidentifikasi berdasarkan slot saat versi tersebut mulai aktif. Item diurutkan dari yang paling lama, sehingga item terakhir adalah versi saat ini.
Teruskan
Untuk mendeteksi perubahan dari waktu ke waktu, simpan
Kesalahan lainnya menampilkan isi JSON dengan pesan
slot apa pun dari respons ke Dapatkan IDL untuk mengambil dokumen IDL versi tersebut. Penjelajah Orb menggunakan endpoint ini untuk menampilkan IDL program.
Kasus Penggunaan
- Lacak perubahan antarmuka. Lakukan polling Daftar Versi IDL untuk program yang Anda gunakan. Saat versi baru muncul, ambil versi tersebut dan versi sebelumnya dengan Dapatkan IDL, lalu bandingkan
instructionskeduanya. Instruksi admin atau otoritas baru perlu ditinjau dari sisi keamanan. - Periksa cakupan katalog.
404berarti katalog tidak memiliki IDL untuk program tersebut. Program seperti SPL Token didekode oleh dekoder bawaan dan juga menampilkan404.
Contoh: Mendeteksi Versi IDL Baru
Skrip ini mencantumkan versi IDL program, mengambil dua versi terbaru, dan menampilkan instruksi yang ditambahkan atau dihapus: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 dari versi terakhir yang telah Anda lihat, lalu bandingkan dengannya pada setiap polling.
Kredit
Setiap permintaan menggunakan 10 kredit dan tersedia pada semua paket. Contoh di atas membuat tiga permintaan, sehingga menggunakan 30 kredit. Lihat Kredit.Kesalahan
| Status | Kondisi |
|---|---|
400 | programId bukan alamat base58 yang valid. |
401 | Kunci API tidak ada atau tidak valid. Isi respons berupa teks biasa: Unauthorized. |
404 | Katalog tidak memiliki IDL untuk program tersebut. |
error, seperti {"error": "no IDLs found for program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}.
Parameter Permintaan
string
wajib
Alamat program yang dikodekan dalam base58.
Otorisasi
Parameter Path
Alamat program yang dikodekan dengan base58.
Contoh:
"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"
Respons
Versi IDL program, diurutkan berdasarkan slot secara menaik.
Slot saat versi IDL ini mulai aktif. Teruskan nilainya ke Dapatkan IDL untuk mengambil versi ini.
Lokasi tempat Peristiwa Terurai menemukan versi ini. Nilainya mencakup anchor, program_metadata, dan github, serta nilai lain mungkin ditambahkan. Satu versi dapat memiliki lebih dari satu sumber.
Apakah halaman ini membantu?
⌘I
Cantumkan Versi 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"
}