Dapatkan IDL
Dapatkan IDL yang berlaku untuk program Solana pada slot mana pun dari katalog yang digunakan Parsed Events untuk mendekode instruksi.
curl --request GET \
--url 'https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}/{slot}?api-key='import requests
url = "https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}/{slot}?api-key="
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}/{slot}?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}/{slot}?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}/{slot}?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}/{slot}?api-key=")
.asString();require 'uri'
require 'net/http'
url = URI("https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}/{slot}?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{
"name": "kamino_lending",
"version": "0.1.0",
"instructions": [
{
"name": "refreshObligation",
"accounts": [
{
"name": "lendingMarket",
"isMut": false,
"isSigner": false
},
{
"name": "obligation",
"isMut": true,
"isSigner": false
}
],
"args": []
}
],
"errors": [
{
"code": 6000,
"name": "InvalidMarketAuthority",
"msg": "Market authority is invalid"
}
]
}slot. slot tidak harus sama persis dengan suatu versi, sehingga Anda dapat meneruskan titik mana pun dalam riwayat. Untuk mengambil satu versi tertentu, teruskan slot versinya dari Daftar Versi IDL.
IDL berasal dari katalog yang sama dengan yang digunakan Parsed Events dan Parsed Streams untuk mendekode instruksi. Penjelajah Orb menggunakan endpoint ini untuk menampilkan IDL program.
Kasus Penggunaan
- Dekode riwayat dengan antarmuka yang tepat. Teruskan slot transaksi untuk mendapatkan IDL yang berlaku saat transaksi tersebut dieksekusi. Program mengubah instruksi dan akunnya seiring waktu, sehingga IDL saat ini dapat salah membaca transaksi lama.
- Temukan nama yang tepat untuk filter. Pindai Riwayat Transaksi
match.programs[].instructionsmenerima nama instruksi sesuai dengan penulisannya dalam IDL. - Tinjau perubahan antarmuka. Ambil dua versi dan bandingkan
instructionsuntuk melihat apa yang ditambahkan atau dihapus oleh suatu peningkatan. Lihat contoh di Daftar Versi IDL.
Format IDL
Responsnya adalah dokumen IDL sebagaimana disimpan. Program dalam katalog menggunakan salah satu dari dua format Anchor, dan versi-versi dari satu program dapat menggunakan keduanya. Periksa format yang Anda terima sebelum membacanya:| Anchor Lama (sebelum 0.30) | Anchor 0.30+ | |
|---|---|---|
| Nama dan versi program | name dan version tingkat teratas | metadata.name dan metadata.version |
| Alamat program | Tidak ada address tingkat teratas | address tingkat teratas |
| Diskriminator instruksi | Tidak disertakan | instructions[].discriminator |
| Flag akun instruksi | isMut, isSigner | writable, signer |
instructions. Sebagian besar IDL juga memiliki accounts, types, dan errors, serta banyak yang memiliki events.
Kredit
Setiap permintaan dikenai biaya 10 kredit dan tersedia pada semua paket. Lihat Kredit.Kesalahan
| Status | Kondisi |
|---|---|
400 | programId bukan alamat base58 yang valid, atau slot bukan bilangan bulat 64-bit tanpa tanda. |
401 | Kunci API tidak ada atau tidak valid. Isi respons berupa teks biasa: Unauthorized. |
404 | Katalog tidak memiliki IDL untuk program tersebut, atau tidak ada versi yang aktif pada atau sebelum slot. |
error, seperti {"error": "no IDL found for program KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD at or before slot 1"}.
Parameter Permintaan
slot dari Daftar Versi IDL untuk mendapatkan versi tersebut secara tepat, atau slot transaksi untuk mendapatkan IDL yang berlaku saat transaksi tersebut dieksekusi.Otorisasi
Parameter Path
Alamat program yang dikodekan dengan base58.
"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"
Slot yang akan dicari. Nilainya tidak harus sama dengan slot aktivasi suatu versi. Teruskan slot dari Cantumkan Versi IDL untuk mendapatkan versi tersebut secara tepat, atau slot transaksi untuk mendapatkan IDL yang berlaku saat transaksi dijalankan.
x >= 0205509752
Respons
Dokumen IDL sebagaimana disimpan. Format Anchor lama dan format Anchor 0.30+ sama-sama dapat ditemukan, jadi periksa format yang Anda terima sebelum membacanya.
Dokumen IDL yang dikembalikan sebagaimana disimpan. Ada dua format:
- Anchor Lama (sebelum 0.30):
namedanversionpada tingkat teratas. Akun instruksi menggunakanisMutdanisSigner. - Anchor 0.30+:
addressdanmetadata(name,version,spec,description) pada tingkat teratas. Instruksi memilikidiscriminator, dan akun instruksi menggunakanwritabledansigner.
Kedua format memiliki instructions. Sebagian besar IDL juga memiliki accounts, types, dan errors, serta banyak yang memiliki events. Versi-versi dari satu program dapat menggunakan format yang berbeda.
Apakah halaman ini membantu?
curl --request GET \
--url 'https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}/{slot}?api-key='import requests
url = "https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}/{slot}?api-key="
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}/{slot}?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}/{slot}?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}/{slot}?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}/{slot}?api-key=")
.asString();require 'uri'
require 'net/http'
url = URI("https://mainnet.helius-rpc.com/v1/parsed-events/idl/{programId}/{slot}?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{
"name": "kamino_lending",
"version": "0.1.0",
"instructions": [
{
"name": "refreshObligation",
"accounts": [
{
"name": "lendingMarket",
"isMut": false,
"isSigner": false
},
{
"name": "obligation",
"isMut": true,
"isSigner": false
}
],
"args": []
}
],
"errors": [
{
"code": 6000,
"name": "InvalidMarketAuthority",
"msg": "Market authority is invalid"
}
]
}