メインコンテンツへスキップ

概要

chainstream-graphql skill は、AI エージェントが ChainStream のオンチェーンデータウェアハウスに GraphQL 経由で柔軟な SQL ライクアクセスを行うためのものです。REST / MCP の事前構築済みエンドポイントでは表現力が足りない場合 — キューブ横断 JOIN、カスタム集計、多条件フィルタ、カスタム時系列解像度、GraphQL でしか公開されていないデータ(PolyMarket の予測市場キューブなど)— に適した選択肢です。
  • パターン: ツール(読み取り専用、署名なし)
  • エンドポイント: https://graphql.chainstream.io/graphql(APISIX 経由でルーティング)
  • CLI: npx @chainstream-io/cli graphql
  • 認証: API Key(X-API-KEY)、または SIWX ウォレットトークン
  • 支払い: REST と同じ API Key / サブスクリプションプール(x402 / MPP は CLI が自動処理)
  • スコープ: 3 つのチェーングループにわたる 27 キューブ — SolanaEVM(network: eth | bsc | polygon)Trading

使うべきとき

chainstream-data との判断マトリクス:
シナリオ使うもの理由
標準的なトークン検索、マーケットトレンド、ウォレットプロフィールchainstream-data事前構築された REST / MCP エンドポイントで十分・シンプル
キューブ横断 JOIN(trades + transfers、pools + events)chainstream-graphqljoinXxx サポート
カスタム集計(groupBy による count / sum / avg)chainstream-graphqlメトリクス+ディメンション集計
多条件フィルタ(ネスト、any による OR)chainstream-graphql完全なフィルタオペレータセット
カスタム解像度/バケットの時系列chainstream-graphql時間間隔バケットに対応
予測市場データ(Polygon の PolyMarket)chainstream-graphqlPredictionTrades / Managements / Settlements キューブ

統合パス

チャネルマトリクス

GraphQL は単一の表面ですが、呼び出し元ごとに利用方法が異なります:
操作CLI コマンドSDK メソッド
全キューブ一覧(サマリ)graphql schema --summaryN/A — 探索には CLI を使用
単一キューブの詳細graphql schema --type <CubeName>N/A
完全スキーマリファレンスgraphql schema --fullN/A
キャッシュされたスキーマを強制更新graphql schema --summary --refreshN/A
インラインクエリgraphql query --query '<gql>'client.graphql.query(gql)
ファイルからクエリgraphql query --file ./q.graphqlclient.graphql.query(fs.readFileSync(...))
変数付きクエリgraphql query --query '...' --var '{"k":"v"}'client.graphql.query(gql, vars)
機械可読出力--json を付与ネイティブに JSON を返却

AI ワークフロー

スキーマ探索

どのキューブを使うかエージェントがまだ把握していない場合は、必ずここから始めます。
npx @chainstream-io/cli graphql schema --summary
npx @chainstream-io/cli graphql schema --type DEXTrades
--summary は全 27 キューブをチェーン別(EVM / Solana / Trading)にグルーピングしたコンパクトなカタログを返します(トップレベルフィールドと説明付き)。--type は 1 つのキューブのフィールドツリーを展開し、クエリ構築に使います。

クエリの構築と実行

スキーマは チェーングループラッパー をトップレベルのエントリポイントとして使用します。
query {
  Solana {
    DEXTrades(
      limit: { count: 25 }
      orderBy: { descending: Block_Time }
    ) {
      Block { Time }
      Trade {
        Buy  { Currency { MintAddress } Amount PriceInUSD }
        Sell { Currency { MintAddress } Amount }
        Dex  { ProtocolName }
      }
    }
  }
}
CLI から実行:
npx @chainstream-io/cli graphql query --file ./query.graphql --json
またはインラインで:
npx @chainstream-io/cli graphql query \
  --query 'query { Solana { DEXTrades(limit:{count:5}) { Block { Time } } } }' \
  --json

クエリ構築クイックリファレンス

  • チェーングループラッパー: トップレベルで必須。SolanaEVM(network: ...)Trading のいずれか。
  • network: EVM のみ。値: ethbscpolygon
  • limit: { count: N, offset: M }。既定値は 25。
  • orderBy: { descending: Field } / { ascending: Field }。計算フィールドには { descendingByField: "field_name" } を使用。
  • where: { Group: { Field: { operator: value } } }。OR 条件は any: [{...}, {...}] で指定。
  • DateTime 形式: "YYYY-MM-DD HH:MM:SS"T なし、Z なし(ClickHouse の要件)。
  • DateTime フィルタ: sincetillafterbefore — DateTime フィールドに gt / lt を使わない
  • joinXxx: 関連キューブへの LEFT JOIN。複数クエリよりもこちらを優先。
  • dataset ラッパー引数: realtimearchivecombined(既定)。
  • aggregates ラッパー引数: yesnoonly

チェーングループとキューブ

チェーングループラッパーキューブ
SolanaSolana { ... }DEXTrades, DEXTradeByTokens, Transfers, BalanceUpdates, Blocks, Transactions, DEXPools, Instructions, InstructionBalanceUpdates, Rewards, DEXOrders, TokenSupplyUpdates
EVMEVM(network: eth|bsc|polygon) { ... }DEXTrades, DEXTradeByTokens, Transfers, BalanceUpdates, Blocks, Transactions, DEXPoolEvents, Events, Calls, MinerRewards, DEXPoolSlippages, TokenHolders, TransactionBalances, Uncles, PredictionTrades*, PredictionManagements*, PredictionSettlements*
TradingTrading { ... }Pairs, Tokens, Currencies, Trades
* 予測市場系のキューブは polygon ネットワークでのみ利用可能です。

セーフティルール

これらのルールはクエリの正当性を担保し、無駄なクォータ消費を避けるために skill 側で強制しています。
ルール理由
フラットな CubeName(network: sol) を使わない — 必ずチェーングループで包むサーバーが未ラップのクエリを拒否します
フィールド名を推測しない — 先に graphql schema --type <cube> を実行「フィールドが存在しない」エラーの往復を削減
ISO-8601 "2026-03-31T00:00:00Z" を使わない — "2026-03-31 00:00:00" を使うClickHouse の DateTime 形式
DateTime に gt / lt を使わない — since / after / before / till を使うDateTime フィルタは名前付き
joinXxx でまとめられるデータを複数クエリに分けない課金リクエストが 1 回で済む
支払いプランを自動選択しない — 必ずユーザーに選ばせる課金の同意

エラー復旧

エラー復旧
401 / “Not authenticated”config auth を確認 — 未ログインなら login(nano トライアル 50K CU を自動付与)。その後リトライ。
402 / “Payment required”plan status を確認。アクティブなサブスクリプションがなければ wallet pricingplan purchase --plan <choice>x402 ペイメント を参照。
GraphQL error: field X does not existgraphql schema --type <cube> でフィールドを再確認。
4291 秒待機後に指数バックオフ。
5xx2 秒後に 1 回リトライ。

関連

chainstream-data

トークン、マーケット、ウォレット分析向けの標準 REST/MCP クエリ

chainstream-defi

分析後の取引実行 — swap、トークン作成

GraphQL アクセス方法

エンドポイントリファレンス、認証、スキーマ概要

CLI `graphql` サブコマンド

chainstream graphql schemaquery のリファレンス