mcpField
Q
quicknode

quicknode

github.com/sendaifunクラウド・DevOps130115 回インストール13 週間前に更新
リポジトリ

quicknode について

Quicknodeは、ブロックチェーンアプリ開発者向けにSolana RPC、アセット照会、リアルタイムストリーム、データパイプラインを提供します。80以上のネットワークにも対応しています。

主な機能

  1. 01Solana RPCとWebSocketエンドポイント
  2. 02DASデジタルアセット照会API
  3. 03Yellowstone gRPCリアルタイムデータストリーム
  4. 04Streamsのフィルタリングと配信パイプライン
  5. 05オンチェーンイベントのWebhook通知
  6. 06エンドポイント管理と使用量API

活用シーン

  1. 01NFT、トークン、圧縮NFTアセットの照会
  2. 02アカウント、トランザクション、ブロックのリアルタイム監視
  3. 03オンチェーンのインデックス作成と分析パイプライン構築
  4. 04チェーンイベントに応じたアプリ通知

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sendaifun/skills --skill quicknode

インストール後、Claude Code で/quicknodeを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

docs/
troubleshooting.md
examples/basic-rpc/
README.md
examples/das-api/
README.md
examples/streaming/
README.md
examples/streams-webhooks/
README.md
resources/
das-api-reference.md
marketplace-addons.md
rpc-reference.md
streams-reference.md
webhooks-reference.md
yellowstone-grpc-reference.md
templates/
quicknode-setup.ts

詳細

Quicknode Solana インフラストラクチャ

Quicknode を使って、高性能な Solana アプリケーションを構築しましょう。Quicknode は、低レイテンシの RPC エンドポイント、DAS API、Yellowstone gRPC ストリーミング、リアルタイムデータパイプライン、開発者を第一に考えた API を提供する、80 以上のチェーンに対応したブロックチェーンインフラストラクチャプロバイダーです。

概要

Quicknode が提供する機能:

  • RPC エンドポイント:URL に認証情報が埋め込まれた、低レイテンシの Solana アクセス
  • DAS API:NFT とトークンを統一的にクエリ。標準 NFT、圧縮 NFT(cNFT)、代替可能トークン、MPL Core Assets、Token 2022 に対応
  • Yellowstone gRPC:Geyser プラグイン経由のリアルタイム Solana データストリーミング
  • 優先手数料 API:トランザクションの着地に必要な手数料を推定
  • Streams:JavaScript フィルタリングに対応したリアルタイムおよび履歴データのパイプライン
  • Webhooks:イベント駆動型のブロックチェーン通知
  • Metis:Jupiter Swap API との統合
  • IPFS:分散型ファイルストレージ
  • Key-Value Store:Streams のサーバーレス状態永続化
  • Admin API:プログラムからのエンドポイント管理
  • x402:USDC マイクロペイメントによる従量課金型 RPC(API キー不要)
  • マルチチェーン:Ethereum、Polygon、Arbitrum、Base、BSC、Avalanche、Bitcoin など、80 以上のネットワーク

クイックスタート

エンドポイントを取得する
  1. quicknode.com/endpoints にアクセスします
  2. Solana とネットワーク(Mainnet / Devnet)を選択します
  3. エンドポイントを作成します
  4. HTTP URL と WSS URL をコピーします
環境設定
# .env file
QUICKNODE_RPC_URL=https://your-endpoint.solana-mainnet.quiknode.pro/your-token/
QUICKNODE_WSS_URL=wss://your-endpoint.solana-mainnet.quiknode.pro/your-token/
QUICKNODE_API_KEY=your_console_api_key  # Optional: for Admin API
@solana/kit を使った基本設定
import { createSolanaRpc, createSolanaRpcSubscriptions } from "@solana/kit";

const rpc = createSolanaRpc(process.env.QUICKNODE_RPC_URL!);
const rpcSubscriptions = createSolanaRpcSubscriptions(process.env.QUICKNODE_WSS_URL!);

// Make RPC calls
const slot = await rpc.getSlot().send();
const balance = await rpc.getBalance(address).send();
認証

Quicknode エンドポイントでは、URL に認証情報が含まれています:

https://{ENDPOINT_NAME}.solana-mainnet.quiknode.pro/{TOKEN}/

セキュリティをさらに強化するには、Quicknode ダッシュボードで JWT 認証または IP 許可リストを有効にしてください。

RPC エンドポイント

Solana エンドポイント
ネットワークURL パターン
Mainnethttps://{name}.solana-mainnet.quiknode.pro/{token}/
Devnethttps://{name}.solana-devnet.quiknode.pro/{token}/
WebSocketwss://{name}.solana-mainnet.quiknode.pro/{token}/
@solana/kit での使用
import {
  createSolanaRpc,
  createSolanaRpcSubscriptions,
  address,
  lamports,
} from "@solana/kit";

const rpc = createSolanaRpc(process.env.QUICKNODE_RPC_URL!);
const rpcSubscriptions = createSolanaRpcSubscriptions(process.env.QUICKNODE_WSS_URL!);

// Account balance
const balance = await rpc.getBalance(address("E645TckHQnDcavVv92Etc6xSWQaq8zzPtPRGBheviRAk")).send();

// Account info
const accountInfo = await rpc.getAccountInfo(address("E645TckHQnDcavVv92Etc6xSWQaq8zzPtPRGBheviRAk"), {
  encoding: "base64",
}).send();

// Recent blockhash
const { value: blockhash } = await rpc.getLatestBlockhash().send();

// Token accounts
const tokenAccounts = await rpc.getTokenAccountsByOwner(
  address("E645TckHQnDcavVv92Etc6xSWQaq8zzPtPRGBheviRAk"),
  { programId: address("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA") },
  { encoding: "jsonParsed" },
).send();
レガシー web3.js での使用
import { Connection, PublicKey } from "@solana/web3.js";

const connection = new Connection(process.env.QUICKNODE_RPC_URL!);
const balance = await connection.getBalance(new PublicKey("E645TckHQnDcavVv92Etc6xSWQaq8zzPtPRGBheviRAk"));
レート制限とプラン
プランリクエスト/秒クレジット/月
無料トライアル1510M
Build5080M
Accelerate125450M
Scale250950M
Business5002B

DAS API(Digital Asset Standard)

Solana のデジタルアセット(標準 NFT、圧縮 NFT(cNFT)、代替可能トークン、MPL Core Assets、Token 2022 Assets)をクエリするための包括的な API です。Marketplace アドオン(Metaplex DAS API)として利用できます。

オーナー別にアセットを取得する
const response = await fetch(process.env.QUICKNODE_RPC_URL!, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "getAssetsByOwner",
    params: {
      ownerAddress: "E645TckHQnDcavVv92Etc6xSWQaq8zzPtPRGBheviRAk",
      limit: 10,
      options: { showFungible: true, showCollectionMetadata: true },
    },
  }),
});

const { result } = await response.json();
// result.total — total assets
// result.items — array of asset metadata
// result.cursor — for pagination
アセットを検索する
const response = await fetch(process.env.QUICKNODE_RPC_URL!, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "searchAssets",
    params: {
      ownerAddress: "E645TckHQnDcavVv92Etc6xSWQaq8zzPtPRGBheviRAk",
      tokenType: "fungible",
      limit: 50,
    },
  }),
});
アセットの証明を取得する(圧縮 NFT)
const response = await fetch(process.env.QUICKNODE_RPC_URL!, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "getAssetProof",
    params: { id: "compressed_nft_id" },
  }),
});
DAS メソッドリファレンス
メソッド説明
getAsset単一のアセットのメタデータを取得
getAssets複数のアセットのメタデータを取得
getAssetProof圧縮アセットの Merkle 証明を取得
getAssetProofs複数のアセットの Merkle 証明を取得
getAssetsByAuthorityauthority 別にアセットを一覧表示
getAssetsByCreator作成者別にアセットを一覧表示
getAssetsByGroupグループ(例:コレクション)別にアセットを一覧表示
getAssetsByOwnerウォレットのオーナー別にアセットを一覧表示
getAssetSignatures圧縮アセットのトランザクション署名
getTokenAccountsmint またはオーナー別にトークンアカウントを取得
getNftEditionsマスター NFT のエディション詳細
searchAssets柔軟なフィルターでアセットを検索

Yellowstone gRPC(Solana Geyser)

gRPC 経由でリアルタイムのブロックチェーンデータをストリーミングする、高性能な Solana Geyser プラグインです。Marketplace アドオンとして利用できます。

セットアップ
import Client, { CommitmentLevel } from "@triton-one/yellowstone-grpc";

// Derive gRPC URL from HTTP endpoint:
// HTTP:  https://example.solana-mainnet.quiknode.pro/TOKEN/
// gRPC:  https://example.solana-mainnet.quiknode.pro:10000
const client = new Client(
  "https://example.solana-mainnet.quiknode.pro:10000",
  "TOKEN",
  {}
);

const stream = await client.subscribe();

stream.on("data", (data) => {
  if (data.transaction) {
    console.log("Transaction:", data.transaction);
  }
  if (data.account) {
    console.log("Account update:", data.account);
  }
});

// Subscribe to transactions for a specific program
stream.write({
  transactions: {
    txn_filter: {
      vote: false,
      failed: false,
      accountInclude: ["PROGRAM_PUBKEY"],
      accountExclude: [],
      accountRequired: [],
    },
  },
  accounts: {},
  slots: {},
  blocks: {},
  blocksMeta: {},
  transactionsStatus: {},
  entry: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.CONFIRMED,
});
フィルターの種類
フィルター説明
accountspubkey、owner、またはデータパターンによるアカウントデータの変更
transactionsvote/failure/account フィルターを使用したトランザクションイベント
transactionsStatus軽量なトランザクションステータス更新
slotsスロットの進行状況とステータスの変更
blocksオプションでトランザクションやアカウントを含められる完全なブロックデータ
blocksMeta完全な内容を含まないブロックメタデータ
entryPoH エントリーの更新
gRPC のベストプラクティス
  • gRPC 接続にはポート 10000 を使用します
  • ほとんどの用途ではコミットメントを CONFIRMED に設定し、不可逆性が必要な場合は FINALIZED に設定します
  • 帯域幅を削減するため、zstd 圧縮を有効にします
  • 接続を維持するため、10 秒ごとにキープアライブ ping を送信します
  • 指数バックオフを使った再接続ロジックを実装します
  • データ量を最小限に抑えるため、絞り込んだフィルター(特定のアカウントやプログラム)を使用します

優先手数料 API

トランザクションを最適に取り込むための優先手数料を見積もります。

// Get recommended priority fees
const response = await fetch(process.env.QUICKNODE_RPC_URL!, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    method: "qn_estimatePriorityFees",
    params: {
      last_n_blocks: 100,
      account: "YOUR_ACCOUNT_PUBKEY",
    },
  }),
});
トランザクションでの優先手数料の使用
import {
  pipe,
  createTransactionMessage,
  setTransactionMessageFeePayer,
  setTransactionMessageLifetimeUsingBlockhash,
  prependTransactionMessageInstructions,
  appendTransactionMessageInstruction,
} from "@solana/kit";
import {
  getSetComputeUnitLimitInstruction,
  getSetComputeUnitPriceInstruction,
} from "@solana-program/compute-budget";

// 1. Get fee estimate
const feeResponse = await fetch(process.env.QUICKNODE_RPC_URL!, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    method: "qn_estimatePriorityFees",
    params: { last_n_blocks: 100, account: payer.address },
  }),
});
const feeData = await feeResponse.json();
const priorityFee = feeData.result.per_compute_unit.high;

// 2. Build transaction with compute budget
const tx = pipe(
  createTransactionMessage({ version: 0 }),
  (tx) => setTransactionMessageFeePayer(payer.address, tx),
  (tx) => setTransactionMessageLifetimeUsingBlockhash(blockhash, tx),
  (tx) => prependTransactionMessageInstructions([
    getSetComputeUnitLimitInstruction({ units: 200_000 }),
    getSetComputeUnitPriceInstruction({ microLamports: BigInt(priorityFee) }),
  ], tx),
  (tx) => appendTransactionMessageInstruction(mainInstruction, tx),
);

Metis — Jupiter Swap API

DEX アグリゲーション向けの Quicknode ホスト版 Jupiter Swap API です。Marketplace のアドオンとして利用できます。

import { createJupiterApiClient } from "@jup-ag/api";

const jupiterApi = createJupiterApiClient({
  basePath: process.env.QUICKNODE_METIS_URL!,
});

// Get swap quote
const quote = await jupiterApi.quoteGet({
  inputMint: "So11111111111111111111111111111111111111112",   // SOL
  outputMint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // USDC
  amount: 1_000_000_000, // 1 SOL
  slippageBps: 50,
});

// Get swap transaction
const swapResult = await jupiterApi.swapPost({
  swapRequest: {
    quoteResponse: quote,
    userPublicKey: "YourPubkey...",
  },
});

Streams

ブロックチェーンデータをリアルタイムおよび履歴から取得し、フィルタリング、変換して配信先に届けるデータパイプラインです。

ストリームの種類
種類データ用途
Block完全なブロックデータブロックエクスプローラー、分析
Transactionトランザクションの詳細トランザクションの監視、インデックス作成
LogsコントラクトイベントDeFi の追跡、トークンの転送
Receiptトランザクションレシートステータスの追跡
セットアップ
  1. Quicknode ダッシュボードでストリームを作成します
  2. Solana とデータタイプを選択します
  3. フィルター関数(JavaScript)を追加します
  4. 配信先(webhook、S3、PostgreSQL、Azure)を設定します
フィルター関数の例
function main(data) {
  // Filter for transactions involving a specific program
  const PROGRAM_ID = "YOUR_PROGRAM_ID";
  const hasProgram = data.transaction?.message?.accountKeys?.some(
    (key) => key === PROGRAM_ID
  );
  if (!hasProgram) return null;
  return data;
}
Streams と Webhooks の比較
機能StreamsWebhooks
複雑さ設定項目が多い簡単にセットアップ可能
フィルタリングカスタム JavaScriptテンプレートベース
配信先Webhook、S3、Postgres、Azure、SnowflakeHTTP エンドポイントのみ
処理完全な変換限定的
用途複雑なパイプラインシンプルなアラート

Webhooks

Solana ブロックチェーンのアクティビティに関するイベント駆動型通知です。

Webhook のセットアップ

Quicknode ダッシュボードまたは Admin API を使用して Webhook を作成すると、特定のオンチェーンイベントの発生時に通知を受け取れます。

API の例と設定については、resources/webhooks-reference.md を参照してください。

IPFS ストレージ

Quicknode の IPFS ゲートウェイを介した分散型ファイルストレージです。

// Upload file to IPFS
const formData = new FormData();
formData.append("file", fileBuffer);

const response = await fetch("https://api.quicknode.com/ipfs/rest/v1/s3/put-object", {
  method: "POST",
  headers: { "x-api-key": process.env.QUICKNODE_API_KEY! },
  body: formData,
});

const { pin } = await response.json();
// Access via: https://quicknode.quicknode-ipfs.com/ipfs/{pin.cid}
一般的な用途
  • NFT メタデータの保存
  • コレクション用アセットのホスティング
  • 分散型コンテンツの永続化

キー値ストア

リストとキー値セット向けのサーバーレスストレージです。qnLib ヘルパーライブラリを介して Streams のフィルター関数からアクセスできます。

ストリームとの統合(qnLib)
// In a Streams filter function:

// List operations — manage address watchlists
await qnLib.qnAddListItem("my-watchlist", "E645TckHQnDcavVv92Etc6xSWQaq8zzPtPRGBheviRAk");
const isWatched = await qnLib.qnContainsListItems("my-watchlist", [data.from]);

// Set operations — store key-value pairs
await qnLib.qnAddSet("token-prices", { key: "SOL", value: "150.25" });
const price = await qnLib.qnGetSet("token-prices", "SOL");
リスト操作
  • qnLib.qnUpsertList — リストを作成または更新します
  • qnLib.qnAddListItem — リストに項目を追加します
  • qnLib.qnRemoveListItem — リストから項目を削除します
  • qnLib.qnContainsListItems — 複数項目の一括メンバーシップ確認を行います
  • qnLib.qnDeleteList — リストを削除します
セット操作
  • qnLib.qnAddSet — キー値セットを作成します
  • qnLib.qnGetSet — キーで値を取得します
  • qnLib.qnBulkSets — セットを一括で作成または削除します
  • qnLib.qnDeleteSet — セットを削除します

Quicknode SDK

Quicknode サービス向けの公式 JavaScript/TypeScript SDK です。

npm install @quicknode/sdk
import { Core } from "@quicknode/sdk";

const core = new Core({
  endpointUrl: process.env.QUICKNODE_RPC_URL!,
});

// Token API
const balances = await core.client.qn_getWalletTokenBalance({
  wallet: "E645TckHQnDcavVv92Etc6xSWQaq8zzPtPRGBheviRAk",
});

// NFT API
const nfts = await core.client.qn_fetchNFTs({
  wallet: "E645TckHQnDcavVv92Etc6xSWQaq8zzPtPRGBheviRAk",
  page: 1,
  perPage: 10,
});

Admin API

Quicknode エンドポイント、使用状況、レート制限、セキュリティ、請求をプログラムから管理するための REST API です。

認証

すべての Admin API リクエストでは、https://api.quicknode.com/v0/ に対して x-api-key ヘッダーを使用します。

const QN_API_KEY = process.env.QUICKNODE_API_KEY!;

// List all endpoints
const res = await fetch("https://api.quicknode.com/v0/endpoints", {
  headers: { "x-api-key": QN_API_KEY },
});
const endpoints = await res.json();

// Get usage metrics
const usage = await fetch("https://api.quicknode.com/v0/usage/rpc", {
  headers: { "x-api-key": QN_API_KEY },
});
クイックリファレンス
リソースメソッドエンドポイント
チェーンGET/v0/chains
エンドポイントGET, POST, PATCH, DELETE/v0/endpoints
メトリクスGET/v0/endpoints/{id}/metrics
レート制限GET, POST, PUT/v0/endpoints/{id}/rate-limits
使用状況GET/v0/usage/rpc
請求GET/v0/billing/invoices

x402(リクエストごとの支払いによる RPC)

Base 上で USDC のマイクロペイメントを利用した、リクエストごとの支払いによる RPC アクセスです。API キーは不要です。

import { wrapFetch } from "@x402/fetch";
import { createWalletClient, http } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { base } from "viem/chains";

const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const walletClient = createWalletClient({
  account,
  chain: base,
  transport: http(),
});

// Wrap fetch to auto-handle 402 payments
const x402Fetch = wrapFetch(fetch, walletClient);

// Use like normal fetch — payments handled automatically
const response = await x402Fetch("https://x402.quicknode.com/solana-mainnet", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    jsonrpc: "2.0",
    method: "getSlot",
    params: [],
    id: 1,
  }),
});

マルチチェーン対応

Quicknode は Solana 以外にも 80 以上のブロックチェーンネットワークに対応しています。

カテゴリネットワーク
EVMEthereum, Polygon, Arbitrum, Optimism, Base, BSC, Avalanche, Fantom, zkSync, Scroll, Linea, HyperEVM
非 EVMSolana, Bitcoin, NEAR, Stacks, Cosmos, Sei, Aptos, Sui, TON, Hyperliquid

全リスト:quicknode.com/chains

マルチチェーンのセットアップ
import { Core } from "@quicknode/sdk";

const chains = {
  solana: new Core({ endpointUrl: process.env.QUICKNODE_SOL_RPC! }),
  ethereum: new Core({ endpointUrl: process.env.QUICKNODE_ETH_RPC! }),
  polygon: new Core({ endpointUrl: process.env.QUICKNODE_POLYGON_RPC! }),
};

安全なデフォルト設定

  • ネットワークが指定されていない場合は、デフォルトで devnet を使用します
  • リソースを作成する前に、読み取り専用の操作とドライランを優先します
  • 秘密鍵やシークレットキーを尋ねたり、受け取ったりしないでください
  • Streams、Webhooks、または IPFS アップロードを作成する前に、明示的な確認を求めます

エラー処理

try {
  const response = await fetch(process.env.QUICKNODE_RPC_URL!, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "getSlot", params: [] }),
  });
  if (!response.ok) {
    if (response.status === 401) console.error("Invalid endpoint URL or token");
    if (response.status === 429) console.error("Rate limited — upgrade plan or reduce requests");
    if (response.status >= 500) console.error("Server error — retry with backoff");
  }
} catch (error) {
  console.error("Network error:", error);
}
一般的なエラーコード
コード意味解決策
401認証が無効ですエンドポイント URL とトークンを確認してください
429レート制限に達しましたプランをアップグレードするか、遅延を追加してください
500+サーバーエラー指数バックオフを使用して再試行してください

ベストプラクティス

API キーのセキュリティ
  • エンドポイント URL や API キーを git にコミットしないでください
  • 環境変数を使用してください
  • 本番環境では IP 許可リストを有効にしてください
  • 機密性の高い操作には JWT 認証を使用してください
  • 認証情報を定期的にローテーションしてください
パフォーマンス
  • リアルタイムデータには WebSocket サブスクリプションを使用してください
  • RPC リクエストをバッチ処理して API 呼び出しを減らしてください
  • データが頻繁に変化しない場合は、レスポンスをキャッシュしてください
  • 最低レイテンシのストリーミングには Yellowstone gRPC を使用してください
  • 適切なコミットメントレベルを設定してください(ほとんどの場合は confirmed、不可逆性が必要な場合は finalized)
信頼性
  • 指数バックオフを使用した再試行ロジックを実装してください
  • バックオフを用いてレート制限を適切に処理してください
  • 信頼性の高いイベント処理には Streams を使用してください(自動再試行)
  • Admin API のメトリクスを通じてエンドポイントの健全性を監視してください

リソース

スキルの構成

quicknode/
├── SKILL.md                       # This file
├── resources/
│   ├── rpc-reference.md           # RPC methods and WebSocket patterns
│   ├── das-api-reference.md       # DAS API methods and parameters
│   ├── yellowstone-grpc-reference.md  # gRPC streaming reference
│   ├── streams-reference.md       # Streams filter functions and destinations
│   ├── webhooks-reference.md      # Webhook configuration
│   └── marketplace-addons.md      # Token API, NFT API, Metis, Priority Fees
├── examples/
│   ├── basic-rpc/                 # Basic RPC calls
│   ├── das-api/                   # DAS API queries
│   ├── streaming/                 # Yellowstone gRPC examples
│   └── streams-webhooks/          # Streams and webhook setup
├── templates/
│   └── quicknode-setup.ts         # Starter template
└── docs/
    └── troubleshooting.md         # Common issues and solutions

コメント