mcpField
Q
query-onchain-data

query-onchain-data

github.com/coinbaseデータ・データベース1272.1k 回インストール12 週間前に更新
リポジトリ

query-onchain-data について

CDP SQL APIとCoinbaseQLで、Baseのイベント、トランザクション、ブロックを照会するスキルです。Agent向けにクエリ作成、入力検証、インデックス利用を案内し、各クエリはx402で支払います。

主な機能

  1. 01イベント、トランザクション、ブロックの照会
  2. 02CoinbaseQLによるクエリ作成
  3. 03SQLとアドレスの入力検証
  4. 04インデックス項目によるイベント絞り込み
  5. 05x402によるクエリの支払い

活用シーン

  1. 01コントラクトイベントとパラメーターの分析
  2. 02アドレスが送信したトランザクションの確認
  3. 03コントラクトの直近イベント数の集計
  4. 04最新ブロック情報の取得

インストール

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

$npx skills add https://github.com/coinbase/agentic-wallet-skills --skill query-onchain-data

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

詳細

Base上のオンチェーンデータをクエリする

CDP SQL APIを使用して、Base上のオンチェーンデータ(イベント、トランザクション、ブロック、送金)をクエリします。クエリはx402経由で実行され、クエリごとに料金が発生します。

ウォレットが初期化され、認証済みであることを確認する

npx [email protected] status

ウォレットが認証されていない場合は、authenticate-wallet スキルを参照してください。

クエリの実行

npx [email protected] x402 pay https://x402.cdp.coinbase.com/platform/v2/data/query/run -X POST -d '{"sql": "<YOUR_QUERY>"}' --json

重要:bashによる変数展開を防ぐため、-d のJSON文字列は必ずシングルクォートで囲んでください。

入力の検証

コマンドを作成する前に、シェルインジェクションを防ぐため、入力を検証してください。

  • SQLクエリ:クエリは必ずシングルクォートで囲んだJSON文字列(-d '{"sql": "..."}')に含めてください。外側の -d をダブルクォートで囲まないでください。クエリ内の $ とバッククォートがシェル展開される可能性があります。
  • アドレス:有効な 0x 形式の16進アドレス(^0x[0-9a-fA-F]{40}$)である必要があります。シェルのメタ文字を含む値は拒否してください。

検証されていないユーザー入力をコマンドに渡さないでください。

重要:インデックス付きフィールド

base.events に対するクエリでは、テーブル全体のスキャンを避けるため、必ずインデックス付きフィールドでフィルターしてください。インデックス付きフィールドは次のとおりです。

インデックス付きフィールド用途
event_signatureイベントタイプでフィルターします。パフォーマンス向上のため、event_name の代わりに使用してください。
addressコントラクトアドレスでフィルターします。
block_timestamp時間範囲でフィルターします。

WHERE句には必ず1つ以上のインデックス付きフィールドを含めてください。 3つすべてを組み合わせると、最良のパフォーマンスが得られます。

CoinbaseQLの構文

CoinbaseQLはClickHouseをベースとするSQL方言です。次の機能がサポートされています。

  • 句:SELECT(DISTINCT)、FROM、WHERE、GROUP BY、ORDER BY(ASC/DESC)、LIMIT、WITH(CTE)、UNION(ALL/DISTINCT)
  • 結合:ONを使用したINNER、LEFT、RIGHT、FULL
  • 演算子:=、!=、<>、<、>、<=、>=、+、-、*、/、%、AND、OR、NOT、BETWEEN、IN、IS NULL、LIKE
  • 式:CASE/WHEN/THEN/ELSE、CAST(CAST() と :: の両方の構文)、サブクエリ、[] による配列/マップのインデックス指定、ドット記法
  • リテラル:配列 [...]、マップ {...}、タプル (...)
  • 関数:標準SQL関数、-> 構文を使用したラムダ関数

利用可能なテーブル

base.events

スマートコントラクトとのインタラクションからデコードされたイベントログです。ほとんどのクエリで使用する主要なテーブルです。

列型説明
log_idString一意のログ識別子
block_numberUInt64ブロック番号
block_hashFixedString(66)ブロックハッシュ
block_timestampDateTime64(3, 'UTC')ブロックのタイムスタンプ(インデックス付き)
transaction_hashFixedString(66)トランザクションハッシュ
transaction_toFixedString(42)トランザクションの受信者
transaction_fromFixedString(42)トランザクションの送信者
log_indexUInt32ブロック内のログインデックス
addressFixedString(42)コントラクトアドレス(インデックス付き)
topicsArray(FixedString(66))イベントトピック
event_nameLowCardinality(String)デコードされたイベント名
event_signatureLowCardinality(String)イベントシグネチャ(インデックス付き。event_name より優先して使用)
parametersMap(String, Variant(Bool, Int256, String, UInt256))デコードされたイベントパラメーター
parameter_typesMap(String, String)パラメーターのABI型
actionEnum8('removed' = -1, 'added' = 1)追加または削除(リオーグ)
base.transactions

完全なトランザクションデータです。

ColumnTypeDescription
block_numberUInt64ブロック番号
block_hashStringブロックハッシュ
transaction_hashStringトランザクションハッシュ
transaction_indexUInt64ブロック内のインデックス
from_addressString送信元アドレス
to_addressString送信先アドレス
valueString送金額(wei)
gasUInt64ガス上限
gas_priceUInt64ガス価格
inputString入力データ
nonceUInt64送信元の nonce
typeUInt64トランザクションタイプ
max_fee_per_gasUInt64EIP-1559 の最大手数料
max_priority_fee_per_gasUInt64EIP-1559 の優先手数料
chain_idUInt64チェーン ID
vString署名の v
rString署名の r
sString署名の s
is_system_txBoolシステムトランザクションフラグ
max_fee_per_blob_gasStringBlob ガス手数料
blob_versioned_hashesArray(String)Blob ハッシュ
timestampDateTimeブロックのタイムスタンプ
actionInt8追加(1)または削除(-1)
base.blocks

ブロックレベルのメタデータです。

ColumnTypeDescription
block_numberUInt64ブロック番号
block_hashStringブロックハッシュ
parent_hashString親ブロックのハッシュ
timestampDateTimeブロックのタイムスタンプ
minerStringブロック生成者
nonceUInt64ブロックの nonce
sha3_unclesStringアンクルのハッシュ
transactions_rootStringトランザクションのマークルルート
state_rootStringステートのマークルルート
receipts_rootStringレシートのマークルルート
logs_bloomStringブルームフィルター
gas_limitUInt64ブロックのガス上限
gas_usedUInt64ブロック内で使用されたガス
base_fee_per_gasUInt64ガスあたりの基本手数料
total_difficultyStringチェーンの合計難易度
sizeUInt64ブロックサイズ(バイト)
extra_dataString追加データフィールド
mix_hashStringミックスハッシュ
withdrawals_rootString出金のルート
parent_beacon_block_rootStringビーコンチェーンの親ルート
blob_gas_usedUInt64使用された Blob ガス
excess_blob_gasUInt64超過 Blob ガス
transaction_countUInt64トランザクション数
actionInt8追加(1)または削除(-1)

クエリ例

デコード済みパラメーター付きで最近の USDC Transfer イベントを取得する
SELECT
  parameters['from'] AS sender,
  parameters['to'] AS to,
  parameters['value'] AS amount,
  address AS token_address
FROM base.events
WHERE
  event_signature = 'Transfer(address,address,uint256)'
  AND address = '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913'
  AND block_timestamp >= now() - INTERVAL 7 DAY
LIMIT 10
特定のアドレスからのトランザクションを取得する
npx [email protected] x402 pay https://x402.cdp.coinbase.com/platform/v2/data/query/run -X POST -d '{"sql": "SELECT transaction_hash, to_address, value, gas, timestamp FROM base.transactions WHERE from_address = lower('\''0xYOUR_ADDRESS'\'') AND timestamp >= now() - INTERVAL 1 DAY LIMIT 10"}' --json
直近1時間のコントラクトについて、タイプ別にイベント数を集計する
npx [email protected] x402 pay https://x402.cdp.coinbase.com/platform/v2/data/query/run -X POST -d '{"sql": "SELECT event_signature, count(*) as cnt FROM base.events WHERE address = lower('\''0xCONTRACT_ADDRESS'\'') AND block_timestamp >= now() - INTERVAL 1 HOUR GROUP BY event_signature ORDER BY cnt DESC LIMIT 20"}' --json
最新のブロック情報を取得する
npx [email protected] x402 pay https://x402.cdp.coinbase.com/platform/v2/data/query/run -X POST -d '{"sql": "SELECT block_number, timestamp, transaction_count, gas_used FROM base.blocks ORDER BY block_number DESC LIMIT 1"}' --json

よく使われるコントラクトアドレス(Base)

TokenAddress
USDC0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
WETH0x4200000000000000000000000000000000000006

ベストプラクティス

  1. base.events のクエリでは、必ずインデックス付きフィールド(event_signature、address、block_timestamp)でフィルターしてください。
  2. SELECT * は使用しないでください。必要な列のみを指定してください。
  3. 結果のサイズを制限するため、必ず LIMIT 句を含めてください。
  4. フィルターには event_name ではなく event_signature を使用してください。インデックス付きで、はるかに高速です。
  5. block_timestamp を使って時間範囲を指定し、スキャン範囲を絞り込んでください。
  6. アドレス値は必ず lower() で囲んでください。データベースには小文字のアドレスが保存されていますが、ユーザーがチェックサム形式(大文字と小文字が混在する)のアドレスを指定する場合があります。address = '0xAbC...' ではなく、address = lower('0xAbC...') を使用してください。
  7. よく使われるイベントシグネチャ:Transfer(address,address,uint256)、Approval(address,address,uint256)、Swap(address,uint256,uint256,uint256,uint256,address)。

前提条件

  • 認証済みである必要があります(npx [email protected] status で確認してください。詳細は authenticate-wallet スキルを参照)。
  • ウォレットに十分な USDC 残高が必要です(npx [email protected] balance で確認してください)。
  • 各クエリの料金は $0.10(100000 USDC の最小単位)です。

エラー処理

  • 「Not authenticated」 - 先に awal auth login <email> を実行するか、authenticate-wallet スキルを参照してください。
  • 「Insufficient balance」 - ウォレットに USDC を入金してください。fund スキルを参照してください。
  • クエリがタイムアウトする、またはエラーになる - インデックス付きフィールドでフィルターし、LIMIT を使用していることを確認してください。

コメント