개요
이 예시들은 지원되는 Quicknode 제품 전반에 걸쳐 SDK의 구성을 보여줍니다. 이 예시들은 사용자가 이미 다음과 같이 SDK를 초기화했다고 가정합니다. qn ~에서 빠른 시작.
관리자 API
Admin API 클라이언트를 사용하여 엔드포인트, 팀, 사용량, 청구, 보안, 요청 제한 등의 계정 리소스를 확인하고 관리할 수 있습니다.
- Node.js
파이썬
- Rust
- 루비
import { QuicknodeSdk } from "@quicknode/sdk";
const qn = QuicknodeSdk.fromEnv();
const endpoints = await qn.admin.getEndpoints({
limit: 20,
sortBy: "created_at",
sortDirection: "desc",
});
for (const endpoint of endpoints.data) {
console.log(endpoint.id, endpoint.name, endpoint.status);
}
import asyncio
from quicknode_sdk import QuicknodeSdk
async def main():
qn = QuicknodeSdk.from_env()
엔드포인트 = await qn.admin.get_endpoints(
limit=20,
정렬 기준="created_at",
정렬 방향="desc",
)
for 엔드포인트 in endpoints.데이터:
print(endpoint.id, 엔드포인트.name, 엔드포인트.상태)
asyncio.run(main())
use quicknode_sdk::{admin::GetEndpointsRequest, QuicknodeSdk};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let qn = QuicknodeSdk::from_env()?;
let params = GetEndpointsRequest {
limit: Some(20),
sort_by: Some("created_at".to_string()),
sort_direction: Some("desc".to_string()),
..Default::default()
};
let endpoints = qn.admin.get_endpoints(¶ms).await?;
for endpoint in endpoints.data {
println!("{} {} {}", endpoint.id, endpoint.name, endpoint.status);
}
Ok(())
}
require "json"
require "quicknode_sdk"
qn = QuicknodeSdk::SDK.from_env
endpoints = qn.admin.get_endpoints(
limit: 20,
sort_by: "created_at",
sort_direction: "desc",
)
endpoints["data"].each do |endpoint|
puts "#{endpoint["id"]} #{endpoint["name"]} #{endpoint["status"]}"
end
전체 API 기능에 대해서는 Admin API 문서를 참조하십시오.
RPC & Tooling Access
You can use the RPC client to send JSON-RPC requests to the account's Tooling Access endpoint; qn.rpc mints and refreshes the session JWT for each call. Enable Tooling Access first with the qn.admin control-plane methods (requires an admin role). Pass 네트워크 to route a call to a specific network.
- Node.js
파이썬
- Rust
- 루비
import { QuicknodeSdk } from "@quicknode/sdk";
const qn = QuicknodeSdk.fromEnv();
// Enable Tooling Access once (idempotent; requires an admin role).
const status = await qn.admin.toolingAccessStatus();
if (!status.enabled) {
await qn.admin.enableToolingAccess();
}
// params defaults to []; pass an array (positional) or object (named).
const blockNumber = await qn.rpc.call("eth_blockNumber");
const balance = await qn.rpc.call("eth_getBalance", ["0xabc...", "latest"]);
console.log(blockNumber, balance);
// Route a call to a specific network by its multichain key.
const slot = await qn.rpc.call("getSlot", [], "solana-mainnet");
console.log(slot);
import asyncio
from quicknode_sdk import QuicknodeSdk
async def main():
qn = QuicknodeSdk.from_env()
# Enable Tooling Access once (idempotent; requires an admin role).
status = await qn.admin.tooling_access_status()
if not status.enabled:
await qn.admin.enable_tooling_access()
block_number = await qn.rpc.call("eth_blockNumber")
balance = await qn.rpc.call("eth_getBalance", ["0xabc...", "latest"])
print(block_number, balance)
# Route a call to a specific network by its multichain key.
slot = await qn.rpc.call("getSlot", network="solana-mainnet")
print(slot)
asyncio.run(main())
use quicknode_sdk::QuicknodeSdk;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let qn = QuicknodeSdk::from_env()?;
// Enable Tooling Access once (idempotent; requires an admin role).
let status = qn.admin.tooling_access_status().await?;
if !status.enabled {
qn.admin.enable_tooling_access().await?;
}
// call(method, params, network, endpoint_url). params is Option; None defaults to [].
let block_number = qn.rpc.call("eth_blockNumber", None, None, None).await?;
let balance = qn
.rpc
.call(
"eth_getBalance",
Some(serde_json::json!(["0xabc...", "latest"])),
None,
None,
)
.await?;
println!("{:?} {:?}", block_number, balance);
Ok(())
}
require "quicknode_sdk"
qn = QuicknodeSdk::SDK.from_env
# Enable Tooling Access once (idempotent; requires an admin role).
status = qn.admin.tooling_access_status
qn.admin.enable_tooling_access unless status["enabled"]
block_number = qn.rpc.call(method: "eth_blockNumber")
balance = qn.rpc.call(method: "eth_getBalance", params: ["0xabc...", "latest"])
puts block_number
puts balance
# Route a call to a specific network by its multichain key.
slot = qn.rpc.call(method: "getSlot", network: "solana-mainnet")
puts slot
스트림
Streams 클라이언트를 사용하여 스트림을 나열, 확인, 생성, 업데이트, 일시 중지, 활성화, 삭제 및 테스트할 수 있습니다. 아래 예제에서는 스트림을 나열하고, 활성화된 스트림의 수를 확인하며, 계정 상태를 변경하지 않고 필터를 시뮬레이션합니다.
- Node.js
파이썬
- Rust
- 루비
import { QuicknodeSdk, StreamDataset } from "@quicknode/sdk";
const qn = QuicknodeSdk.fromEnv();
const streams = await qn.streams.listStreams({ limit: 10 });
console.log(`Streams: ${streams.pageInfo.total}`);
const enabled = await qn.streams.getEnabledCount();
console.log(`Enabled Streams: ${enabled.total}`);
const filterFunction = Buffer.from(`
function main(data) {
return data;
}
`).toString("base64");
const result = await qn.streams.testFilter({
network: "ethereum-mainnet",
dataset: StreamDataset.Block,
block: "17811625",
filterFunction,
});
console.log(result.result);
import asyncio
import base64
from quicknode_sdk import QuicknodeSdk
async def main():
qn = QuicknodeSdk.from_env()
streams = await qn.streams.list_streams(limit=10)
print(f"Streams: {streams.page_info.total}")
enabled = await qn.streams.get_enabled_count()
print(f"Enabled Streams: {enabled.total}")
filter_function = base64.b64encode(
b"function main(data) { return data; }"
).decode()
result = await qn.streams.test_filter(
network="ethereum-mainnet",
dataset="block",
block="17811625",
filter_function=filter_function,
)
print(result.result)
asyncio.run(main())
use quicknode_sdk::{
streams::{ListStreamsParams, StreamDataset, TestFilterParams},
QuicknodeSdk,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let qn = QuicknodeSdk::from_env()?;
let streams = qn
.streams
.list_streams(&ListStreamsParams {
limit: Some(10),
offset: Some(0),
..Default::default()
})
.await?;
println!("Streams: {}", streams.page_info.total);
let enabled = qn.streams.get_enabled_count(None).await?;
println!("Enabled Streams: {}", enabled.total);
let result = qn
.streams
.test_filter(&TestFilterParams {
network: "ethereum-mainnet".to_string(),
dataset: StreamDataset::Block,
block: "17811625".to_string(),
filter_function: Some(
"ZnVuY3Rpb24gbWFpbihkYXRhKSB7IHJldHVybiBkYXRhOyB9".to_string(),
),
filter_language: None,
address_book_config: None,
})
.await?;
println!("{}", result.result);
Ok(())
}
require "base64"
require "json"
require "quicknode_sdk"
qn = QuicknodeSdk::SDK.from_env
streams = qn.streams.list_streams({ limit: 10, offset: 0 })
puts "Streams: #{streams["pageInfo"]["total"]}"
enabled = qn.streams.get_enabled_count({})
puts "Enabled Streams: #{enabled["total"]}"
filter_function = Base64.strict_encode64("function main(data) { return data; }")
result = qn.streams.test_filter(
network: "ethereum-mainnet",
dataset: "block",
block: "17811625",
filter_function: filter_function,
)
puts result["result"]
대상 옵션, 지원되는 데이터 세트 및 요청 세부 정보에 대해서는 Streams REST API 문서를 참조하십시오.
웹훅
Webhooks 클라이언트를 사용하여 웹훅을 나열하고, 웹훅을 확인하며, 템플릿을 기반으로 웹훅을 생성하고, 전달을 일시 중지하거나 활성화하며, 활성화된 개수를 조회할 수 있습니다. 아래 예시는 읽기 전용입니다.
- Node.js
파이썬
- Rust
- 루비
import { QuicknodeSdk } from "@quicknode/sdk";
const qn = QuicknodeSdk.fromEnv();
const webhooks = await qn.webhooks.listWebhooks({
limit: 10,
offset: 0,
});
for (const webhook of webhooks.data) {
console.log(webhook.id, webhook.name, webhook.status);
}
const enabled = await qn.webhooks.getEnabledCount();
console.log(`Enabled webhooks: ${enabled.total}`);
import asyncio
from quicknode_sdk import QuicknodeSdk
async def main():
qn = QuicknodeSdk.from_env()
webhooks = await qn.webhooks.list_webhooks(limit=10, offset=0)
for webhook in webhooks.data:
print(webhook.id, webhook.name, webhook.status)
enabled = await qn.webhooks.get_enabled_count()
print(f"Enabled webhooks: {enabled.total}")
asyncio.run(main())
use quicknode_sdk::{webhooks::GetWebhooksParams, QuicknodeSdk};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let qn = QuicknodeSdk::from_env()?;
let webhooks = qn
.webhooks
.list_webhooks(&GetWebhooksParams {
limit: Some(10),
offset: Some(0),
})
.await?;
for webhook in webhooks.data {
println!("{} {} {}", webhook.id, webhook.name, webhook.status);
}
let enabled = qn.webhooks.get_enabled_count().await?;
println!("Enabled webhooks: {}", enabled.total);
Ok(())
}
require "json"
require "quicknode_sdk"
qn = QuicknodeSdk::SDK.from_env
webhooks = qn.webhooks.list_webhooks({ limit: 10, offset: 0 })
webhooks["data"].each do |webhook|
puts "#{webhook["id"]} #{webhook["name"]} #{webhook["status"]}"
end
enabled = qn.webhooks.get_enabled_count
puts "Enabled webhooks: #{enabled["total"]}"
템플릿 동작 및 대상 구성에 대해서는 Webhooks REST API 문서를 참조하십시오.
키-값 저장소
간단한 상태 저장을 위해서는 키-값 저장소 클라이언트를 사용하세요. ‘sets’는 키 하나당 하나의 문자열 값을 저장합니다. ‘lists’는 하나의 키 아래에 정렬된 문자열 모음을 저장합니다.
- Node.js
파이썬
- Rust
- 루비
import { QuicknodeSdk } from "@quicknode/sdk";
const qn = QuicknodeSdk.fromEnv();
const sets = await qn.kvstore.getSets({ limit: 10 });
console.log(`Sets: ${sets.data.length}`);
if (sets.data.length > 0) {
const set = await qn.kvstore.getSet(sets.data[0].key);
console.log(set.value);
}
const lists = await qn.kvstore.getLists({ limit: 10 });
console.log(`Lists: ${lists.data.keys.length}`);
import asyncio
from quicknode_sdk import QuicknodeSdk
async def main():
qn = QuicknodeSdk.from_env()
sets = await qn.kvstore.get_sets(limit=10)
print(f"Sets: {len(sets.data)}")
if len(sets.data) > 0:
set_value = await qn.kvstore.get_set(sets.data[0].key)
print(set_value.value)
lists = await qn.kvstore.get_lists(limit=10)
print(f"Lists: {len(lists.data.keys)}")
asyncio.run(main())
use quicknode_sdk::{
kvstore::{GetListsParams, GetSetsParams},
QuicknodeSdk,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let qn = QuicknodeSdk::from_env()?;
let sets = qn
.kvstore
.get_sets(&GetSetsParams {
limit: Some(10),
cursor: None,
})
.await?;
println!("Sets: {}", sets.data.len());
if let Some(first_set) = sets.data.first() {
let set = qn.kvstore.get_set(&first_set.key).await?;
println!("{}", set.value);
}
let lists = qn
.kvstore
.get_lists(&GetListsParams {
limit: Some(10),
cursor: None,
})
.await?;
println!("Lists: {}", lists.data.keys.len());
Ok(())
}
require "json"
require "quicknode_sdk"
qn = QuicknodeSdk::SDK.from_env
sets = qn.kvstore.get_sets({ limit: 10 })
puts "Sets: #{sets["data"].length}"
unless sets["data"].empty?
set = qn.kvstore.get_set(key: sets["data"][0]["key"])
puts set["value"]
end
lists = qn.kvstore.get_lists({ limit: 10 })
puts "Lists: #{lists["data"]["keys"].length}"
모든 리스트 및 집합 연산에 대해서는 키-값 스토어 REST API 문서를 참조하십시오.
SQL 탐색기
SQL Explorer 클라이언트를 사용하여 인덱싱된 블록체인 데이터에 대해 SQL 쿼리를 실행하고 테이블 스키마를 가져옵니다.
- Node.js
파이썬
- Rust
- 루비
import { QuicknodeSdk } from "@quicknode/sdk";
const qn = QuicknodeSdk.fromEnv();
// Run a SQL query
const result = await qn.sql.query(
"SELECT action_type, user FROM hyperliquid_system_actions LIMIT 3",
"hyperliquid-core-mainnet"
);
console.log(`${result.rows} rows, ${result.credits} credits`);
// Get the schema for a cluster
const schema = await qn.sql.getSchema("hyperliquid-core-mainnet");
console.log(schema);
import asyncio
from quicknode_sdk import QuicknodeSdk
async def main():
qn = QuicknodeSdk.from_env()
# Run a SQL query
result = await qn.sql.query(
"SELECT action_type, user FROM hyperliquid_system_actions LIMIT 3",
"hyperliquid-core-mainnet",
)
print(f"{result.rows} rows, {result.credits} credits")
# Get the schema for a cluster
schema = await qn.sql.get_schema("hyperliquid-core-mainnet")
print(schema)
asyncio.run(main())
use quicknode_sdk::QuicknodeSdk;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let qn = QuicknodeSdk::from_env()?;
// Run a SQL query
let result = qn
.sql
.query(
"SELECT action_type, user FROM hyperliquid_system_actions LIMIT 3",
"hyperliquid-core-mainnet",
)
.await?;
println!("{} rows, {} credits", result.rows, result.credits);
// Get the schema for a cluster
let schema = qn.sql.get_schema("hyperliquid-core-mainnet").await?;
println!("{:?}", schema);
Ok(())
}
require "json"
require "quicknode_sdk"
qn = QuicknodeSdk::SDK.from_env
# Run a SQL query
result = qn.sql.query(
"SELECT action_type, user FROM hyperliquid_system_actions LIMIT 3",
"hyperliquid-core-mainnet",
)
puts "#{result["rows"]} rows, #{result["credits"]} credits"
# Get the schema for a cluster
schema = qn.sql.get_schema("hyperliquid-core-mainnet")
puts schema
쿼리 구문 및 사용 가능한 테이블에 대해서는 SQL Explorer 문서를 참조하십시오.
에이전트 워크플로우 예시
에이전트는 한 번의 실행으로 여러 클라이언트를 통합 처리할 수 있습니다. 예를 들어, 릴리스 자동화 에이전트는 어떤 조치를 취할지 결정하기 전에 엔드포인트, 스트림, 웹훅, 키-값 저장소 상태를 확인하고 블록체인 데이터를 조회할 수 있습니다.
import { QuicknodeSdk } from "@quicknode/sdk";
const qn = QuicknodeSdk.fromEnv();
const endpoints = await qn.admin.getEndpoints({ tagLabels: ["sdk-managed"] });
const streams = await qn.streams.listStreams({ limit: 10 });
const webhooks = await qn.webhooks.listWebhooks({ limit: 10 });
const sets = await qn.kvstore.getSets({ limit: 10 });
const trades = await qn.sql.query(
"SELECT * FROM hyperliquid_trades LIMIT 5",
"hyperliquid-core-mainnet"
);
console.log({
endpoints: endpoints.data.length,
streams: streams.data.length,
webhooks: webhooks.data.length,
sets: sets.data.length,
trades: trades.rows,
});