mcpField
V
venice-crypto-rpc

venice-crypto-rpc

github.com/veniceai開発160131 回インストール5 日前に更新
リポジトリ

venice-crypto-rpc について

Venice Crypto RPCは、対応するブロックチェーンを扱う開発者向けのJSON-RPCプロキシです。複数チェーンに共通するHTTP形式で単一またはバッチ呼び出しを受け付け、メソッドの許可リストと冪等リトライを備えています。

主な機能

  1. 01HTTP経由のマルチチェーンJSON-RPC
  2. 02単一呼び出しと最大100件のバッチ
  3. 03EVM、Starknet、Solanaのメソッド
  4. 04チェーンファミリー別の許可リスト
  5. 0524時間の冪等キーによる再送

活用シーン

  1. 01対応ネットワークのデータ照会
  2. 02インデックス処理での呼び出し一括化
  3. 03トランザクション送信の安全な再試行
  4. 04リクエストのクレジットと費用の記録

インストール

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

$npx skills add https://github.com/veniceai/skills --skill venice-crypto-rpc

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

詳細

Venice Crypto RPC(JSON-RPC プロキシ)

Venice は、呼び出しごとに課金されるマルチチェーン JSON-RPC プロキシを提供します。Alchemy/Infura と同じリクエスト形式です。ベース URL を変更し、Venice の残高(DIEM → 獲得クレジット → バンドルクレジット → USD)または x402 ウォレットを使って、クレジット単位で支払います。

エンドポイント認証備考
GET /crypto/rpc/networksなし(公開)アルファベット順に並んだ { "networks": [...] } を返します。
POST /crypto/rpc/{network}Bearer API キー(INFERENCE または ADMIN)、または SIGN-IN-WITH-X(x402 ウォレット)JSON-RPC 2.0 リクエスト(単一またはバッチ)を転送します。

対応ネットワーク

curl https://api.venice.ai/api/v1/crypto/rpc/networks

現在は 27 個のスラッグが返されます(カタログは拡大するため、必ず確認してください)。

arbitrum-mainnet    arbitrum-sepolia
avalanche-mainnet   avalanche-fuji
base-mainnet        base-sepolia
blast-mainnet       blast-sepolia
bsc-mainnet         bsc-testnet
ethereum-mainnet    ethereum-sepolia    ethereum-holesky
linea-mainnet       linea-sepolia
optimism-mainnet    optimism-sepolia
polygon-mainnet     polygon-amoy
robinhood-mainnet   robinhood-testnet
solana-mainnet      solana-devnet
starknet-mainnet    starknet-sepolia
zksync-mainnet      zksync-sepolia

プロキシパスの {network} にはスラッグを使用します。不明なスラッグは 400 を返します。仕様書の /networks の例では blast-mainnet/blast-sepolia が省略されていますが、ライブエンドポイントとプロキシには含まれています。GET /crypto/rpc/networks を信頼し、クライアント側で許可リストをハードコードしないでください。

チェーンファミリー

各ネットワークが対応するメソッドファミリーは 1 つだけで、許可リストはファミリーごとに適用されます。EVM メソッドを Solana ネットワークに送信した場合(またはその逆)は、そのまま転送されず 400 を返します。

ファミリーネットワーク
evmStarknet と Solana を除くすべて。Arbitrum Orbit L2 である Robinhood Chain も含みます。
starknetstarknet-mainnet、starknet-sepolia
solanasolana-mainnet、solana-devnet

許可リストは明示的なメソッド名で構成され、プレフィックスではありません。対応する名前空間内のメソッドでも、リストにないもの(例:リストにない debug_* または trace_* メソッド)は拒否されます。EVM のリストはすべての EVM ネットワークで共通のため、チェーン固有のメソッド(zks_*、linea_*、bor_*)は、どの EVM チェーンでも Venice のチェックを通過しますが、上流ではそれぞれのチェーンでのみ機能します。

JSON-RPC リクエストを送信する

単一の呼び出し
curl -X POST https://api.venice.ai/api/v1/crypto/rpc/ethereum-mainnet \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'
{ "jsonrpc": "2.0", "id": 1, "result": "0x1" }

各リクエストオブジェクトには、文字列の method が必要です。そうでない場合は 400 を返します。

バッチ(最大 100 件)
curl -X POST https://api.venice.ai/api/v1/crypto/rpc/base-mainnet \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1},
    {"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":2}
  ]'
  • 配列が空、または項目数が 100 件を超える場合 ⇒ 400 を返します。
  • バッチ内に未対応のメソッドが 1 つでもある場合 ⇒ バッチ全体が 400 で失敗し、メッセージには該当するすべてのメソッドが列挙されます。(WebSocket 専用メソッドの場合は、該当メソッド名のみを示すメッセージとともに、バッチが直ちに失敗します。)
  • 各項目には一意の id を指定してください。課金処理では、id によってレスポンス項目とリクエストが対応付けられます。
viem でのドロップイン利用
import { createPublicClient, http } from 'viem'
import { mainnet } from 'viem/chains'

const client = createPublicClient({
  chain: mainnet,
  transport: http('https://api.venice.ai/api/v1/crypto/rpc/ethereum-mainnet', {
    fetchOptions: { headers: { Authorization: `Bearer ${process.env.VENICE_API_KEY}` } },
  }),
})

料金

呼び出しあたりのクレジット数 = baseCredits[chain] × methodTier。1 クレジットあたり $0.0000007(7e-7)です。

基本クレジット数チェーン
20Ethereum、Base、Optimism、Arbitrum、Polygon、Linea、Avalanche、BSC、Blast、Robinhood、Starknet(メインネットとテストネット)。
30zkSync Era、Solana。
ティア倍率メソッド
標準1×EVM のコアメソッド(eth_call、eth_getBalance、eth_blockNumber、eth_chainId、eth_getLogs、eth_estimateGas、eth_feeHistory、eth_getBlockReceipts、eth_getProof、eth_simulateV1、eth_sendRawTransaction、…)、net_version / net_listening / net_peerCount、web3_clientVersion / web3_sha3、ERC-4337 バンドラー(eth_sendUserOperation、eth_estimateUserOperationGas、eth_getUserOperationByHash、eth_getUserOperationReceipt、eth_supportedEntryPoints、pimlico_getUserOperationGasPrice、pimlico_getUserOperationStatus)、チェーン拡張(zks_*、linea_*、bor_* — 一覧にあるメソッドのみ)、一覧にあるすべての starknet_* メソッド、および Solana メソッド(getAccountInfo、getBalance、getLatestBlockhash、getProgramAccounts、sendTransaction、simulateTransaction、…)。
アドバンスド2×trace_block、trace_call、trace_callMany、trace_filter、trace_transaction、trace_rawTransaction、debug_traceBlock、debug_traceBlockByHash、debug_traceBlockByNumber、debug_traceCall、debug_traceTransaction、debug_storageRangeAt、txpool_inspect、txpool_status、arbtrace_block / _call / _callMany / _filter / _transaction。EVM のみ。
大規模4×trace_replayBlockTransactions、trace_replayTransaction、txpool_content、arbtrace_replayBlockTransactions、arbtrace_replayTransaction、および Solana の getLargestAccounts / getSupply。

例:

  • 標準の EVM 呼び出し(20 × 1 = 20 クレジット)= $0.000014
  • Ethereum でのアドバンスドトレース(20 × 2)= $0.000028
  • 大規模なトレースリプレイ(20 × 4)= $0.000056
  • zkSync または Solana の標準呼び出し(30 × 1)= $0.000021
  • Solana の getLargestAccounts(30 × 4)= $0.000084

エラー時の課金:

  • JSON-RPC の error が返された項目(HTTP 200 — 例:不正なパラメーター、そのチェーンで利用できないメソッド)には、ティアに応じた料金ではなく、一律 5 クレジットが課金されます。バッチでは、id がリクエストと一致しない成功項目にも 5 クレジットが課金されます。
  • アップストリームノードが HTTP 4xx を返した場合、各項目に 5 クレジットが課金されます。アップストリームの 402、429、5xx は 0 クレジットです。
  • Venice 自身が拒否するリクエスト(400、401、402、429)には課金されません。

転送前に、Venice は現在の消費通貨の残高が、ティアに基づく見積もり費用の全額をカバーしているか確認します。残高が足りない場合は 402 を返します。

レスポンスヘッダー

ノードから中継されるすべてのレスポンス(ステータスを問わない)と冪等性の再実行に設定されます。検証エラー、402、429、アップストリームの取得時に発生した 500 など、Venice 自身が生成するレスポンスには設定されません。

ヘッダー意味
X-Venice-RPC-Credits課金された合計クレジット数(バッチ全体の合計)。再実行では、再実行自体は課金されませんが、元の呼び出しのクレジット数が再度示されます。
X-Venice-RPC-Cost-USD小数点以下 8 桁で示したドル建ての費用。
X-Request-ID32 文字の相関 ID — サポートへの問い合わせに含めてください。
Idempotent-Replayed冪等性キャッシュから返された場合は "true"。

2xx の場合、Content-Type は常に application/json です。アップストリームのエラーボディーは転送前にサニタイズされます。仕様には x402 の呼び出し元向けに X-Balance-Remaining も記載されていますが、プロキシはこれを設定しません。GET /x402/balance/{walletAddress} を使用してください。

サポート対象外のメソッド

これらは常に 400 を返します。

  • ステートフルなフィルターメソッド — eth_newFilter、eth_newBlockFilter、eth_newPendingTransactionFilter、eth_getFilterChanges、eth_getFilterLogs、eth_uninstallFilter。フィルターの状態は特定のバックエンドに固定されるため、負荷分散された HTTP プロキシでは維持できません。代わりに eth_getLogs を使用してください。
  • WebSocket 専用メソッド — EVM の eth_subscribe/eth_unsubscribe と、Solana の *Subscribe/*Unsubscribe(account、block、logs、program、root、signature、slot、slotsUpdates、vote)。このプロキシは HTTP 専用です。
  • ウォレット/マイナーメソッド — eth_sign、eth_accounts、eth_getWork、eth_submitWork、eth_mining、eth_hashrate。
  • Solana の追加機能およびレガシーエイリアス — getAsset*(DAS)および非推奨の getConfirmed*。
  • 異なるファミリー間のメソッド — EVM チェーンでの starknet_* または Solana の getBalance、Solana での eth_call など。
  • 許可リストにないその他すべてのメソッド。 エラーメッセージに拒否されたメソッドが示されます。

冪等性

安全に再試行するには、Idempotency-Key に [A-Za-z0-9_-]{1,255} に一致する文字列を設定してください。

curl -X POST https://api.venice.ai/api/v1/crypto/rpc/ethereum-mainnet \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Idempotency-Key: send-tx-2026-04-21-nonce-42" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0x..."],"id":1}'
  • ステータス、本文、クレジット、X-Request-ID を含む完全なレスポンスが、(user, idempotency-key) をキーとして 24 時間キャッシュされます。
  • 同じ本文で再送すると、Idempotent-Replayed: true とともにキャッシュされたレスポンスが返され、再度課金されません。再送も 1 分あたりのレート制限の対象になります。
  • 同じキーで異なる本文を送信すると、400 が返されます。
  • パターンに一致しないキーは通知なく無視され(冪等性を適用せずにリクエストが実行されます)、キーはクライアント側で検証してください。
  • キャッシュはベストエフォートで、レスポンス送信後に作成されます。元のリクエストの処理が完了する前に再送が届いた場合、重複排除されません。

ネットワーク再試行による二重ブロードキャストを防ぐため、状態を変更するメソッド(eth_sendRawTransaction、eth_sendUserOperation、Solana の sendTransaction)にはこれを使用してください。

レート制限と同時実行数

  • ユーザーごとに1 分あたり 100 リクエストです。後から 400 で拒否されるリクエストや、冪等性キーを使った再送も含め、すべてのリクエストがカウントされます。
  • 上限を超えると、X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset(Unix 秒)を含む 429 が返されます。超過は GET /api_keys/rate_limits/log(ADMIN キーのみ)にも modelId: "endpoint:api/v1/crypto/rpc" として記録されます。
  • バッチは1 リクエストとしてカウントされるため、スループットを上げるにはバッチ処理を使用してください。
  • リクエストはユーザーごとに 1 件ずつ処理されます。同時リクエストは短時間(約 0.5 秒)待機し、その後 429 と "Another request for this user is in flight" が返されます。ジッターを加えて再試行するか、並列に分散させずにバッチ処理してください。
  • 1 日あたりのクレジット上限はありません。(仕様の記述には今も 24 時間あたり 10,000,000 クレジットの上限がありますが、現在は適用されません。)
  • 上流への呼び出しは 30 秒後にタイムアウトします。

エラー

ステータス典型的な原因
400不明なネットワークスラッグ、空の本文またはバッチ、100 件を超えるバッチ、文字列の method を持たない項目、サポート対象外/WebSocket/フィルター/異なるファミリー間のメソッド、異なる本文での冪等性キーの再利用。
401無効な Bearer キー、または無効な SIGN-IN-WITH-X。
402認証情報が一切ない(authOptions を含む x402 認証チャレンジ)、残高が推定コストを下回っている、キーごとの支出上限に達した、または x402 ウォレットの残高が 0.10 ドル未満(本文にチャージ手順が含まれます。詳細は venice-x402 を参照)。
4291 分あたりの上限、同じユーザーの別のリクエストが処理中、一般的な API エラー予算、または x402 の同時リクエスト 5 件の上限。
500上流へのフェッチ失敗/タイムアウト、またはサービスの設定ミス。同じ Idempotency-Key を使用して安全に再試行できます。
その他上流ノードからの 2xx 以外のステータスが(サニタイズされて)そのまま返されます。

パターン

  • マルチチェーンダッシュボード — 1つの API キーで、すべてのネットワークを利用できます。チェーンごとにキーをローテーションする必要はありません。
  • 高スループットのインデックス作成 — 1リクエストあたり最大100件の呼び出しをまとめられます。各項目は個別に課金されますが、レート制限と一度に1件というルールでは1リクエストとして扱われます。
  • ウォレットベース(x402)の RPC — Base または Solana で USDC をチャージしてから、SIGN-IN-WITH-X を送信します。402 はクレジット不足を示し、チャージ手順が付属します。
  • コストの追跡 — リクエストごとに X-Venice-RPC-Credits と X-Venice-RPC-Cost-USD を記録します(課金されていない Idempotent-Replayed: true のレスポンスは除外します)。メソッドごとに集計し、クレジットの使用先を確認します。台帳のエントリでは SKU crypto-rpc-<network> が使われます。
  • 安全なトランザクション送信 — eth_sendRawTransaction には必ず Idempotency-Key を指定してください。これにより、クライアントが24時間以内に再試行した場合、再ブロードキャストせずに同じ結果を返します。

コメント