파싱된 이벤트
IDL 가져오기
Parsed Events가 명령어를 디코딩하는 데 사용하는 카탈로그에서 특정 슬롯 시점에 Solana 프로그램에 적용되던 IDL을 가져옵니다.
GET
/
v1
/
parsed-events
/
idl
/
{programId}
/
{slot}
IDL 가져오기
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"
}
]
}이 페이지의 경로 매개변수, 응답 스키마, 예시는 OpenAPI 정의에서 생성됩니다.
IDL 가져오기는 특정 슬롯 시점의 프로그램 IDL, 즉
두 형식 모두
그 밖의 오류는
slot 또는 그 이전에 활성화된 최신 버전을 반환합니다. slot은 버전과 정확히 일치할 필요가 없으므로 기록상의 어떤 시점이든 전달할 수 있습니다. 특정 버전 하나를 가져오려면 IDL 버전 목록의 slot을 전달하세요.
IDL은 Parsed Events와 Parsed Streams가 명령어를 디코딩하는 데 사용하는 동일한 카탈로그에서 가져옵니다. Orb 탐색기는 이러한 엔드포인트를 사용하여 프로그램 IDL을 표시합니다.
사용 사례
- 올바른 인터페이스로 기록을 디코딩합니다. 트랜잭션이 실행될 때 적용되던 IDL을 가져오려면 해당 트랜잭션의 슬롯을 전달하세요. 프로그램의 명령어와 계정은 시간이 지나면서 변경되므로 현재 IDL로는 이전 트랜잭션을 잘못 해석할 수 있습니다.
- 필터에 사용할 정확한 이름을 찾습니다. 트랜잭션 기록 스캔
match.programs[].instructions은 IDL에 표기된 명령어 이름을 받습니다. - 인터페이스 변경 사항을 검토합니다. 두 버전을 가져와
instructions을 비교하면 업그레이드에서 추가되거나 제거된 항목을 확인할 수 있습니다. IDL 버전 목록의 예시를 참조하세요.
IDL 형식
응답은 저장된 그대로의 IDL 문서입니다. 카탈로그의 프로그램은 두 가지 Anchor 형식 중 하나를 사용하며, 한 프로그램의 여러 버전에서 두 형식을 모두 사용할 수도 있습니다. 내용을 읽기 전에 어떤 형식을 받았는지 확인하세요.| 레거시 Anchor(0.30 이전) | Anchor 0.30+ | |
|---|---|---|
| 프로그램 이름 및 버전 | 최상위 name 및 version | metadata.name 및 metadata.version |
| 프로그램 주소 | 최상위 address 없음 | 최상위 address |
| 명령어 판별자 | 포함되지 않음 | instructions[].discriminator |
| 명령어 계정 플래그 | isMut, isSigner | writable, signer |
instructions을 포함합니다. 대부분의 IDL에는 accounts, types, errors도 있으며, 많은 IDL에 events이 있습니다.
크레딧
각 요청에는 10크레딧이 필요하며 모든 요금제에서 사용할 수 있습니다. 크레딧을 참조하세요.오류
| 상태 | 발생 조건 |
|---|---|
400 | programId이 유효한 base58 주소가 아니거나 slot이 부호 없는 64비트 정수가 아닙니다. |
401 | API 키가 누락되었거나 유효하지 않습니다. 본문은 일반 텍스트인 Unauthorized입니다. |
404 | 카탈로그에 해당 프로그램의 IDL이 없거나 slot 또는 그 이전에 활성화된 버전이 없습니다. |
{"error": "no IDL found for program KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD at or before slot 1"} 같은 error 메시지가 포함된 JSON 본문을 반환합니다.
요청 매개변수
string
필수
base58로 인코딩된 프로그램 주소입니다.
number
필수
조회할 슬롯입니다. 버전의 활성화 슬롯과 일치할 필요는 없습니다. 정확한 버전을 가져오려면 IDL 버전 목록의
slot을 전달하고, 트랜잭션이 실행될 때 적용되던 IDL을 가져오려면 해당 트랜잭션의 슬롯을 전달하세요.인증
경로 매개변수
base58로 인코딩된 프로그램 주소입니다.
예시:
"KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD"
조회할 슬롯입니다. 버전의 활성화 슬롯과 일치할 필요는 없습니다. IDL 버전 목록의 slot을 전달하면 해당 버전을 정확히 가져오고, 트랜잭션의 슬롯을 전달하면 트랜잭션 실행 시점에 적용되던 IDL을 가져옵니다.
필수 범위:
x >= 0예시:
205509752
응답
저장된 그대로의 IDL 문서입니다. 레거시 Anchor 형식과 Anchor 0.30+ 형식이 모두 사용되므로, 읽기 전에 어떤 형식을 받았는지 확인하세요.
저장된 그대로 반환되는 IDL 문서입니다. 두 가지 형식이 사용됩니다:
- 레거시 Anchor(0.30 이전): 최상위
name과version을 사용합니다. 명령어 계정은isMut와isSigner를 사용합니다. - Anchor 0.30+: 최상위
address와metadata(name,version,spec,description)를 사용합니다. 명령어에는discriminator가 포함되며, 명령어 계정은writable과signer를 사용합니다.
두 형식 모두 instructions를 포함합니다. 대부분의 IDL에는 accounts, types, errors도 있으며, 많은 IDL에 events가 있습니다. 한 프로그램의 여러 버전이 서로 다른 형식을 사용할 수 있습니다.
이 페이지가 도움이 되었나요?
⌘I
IDL 가져오기
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"
}
]
}