venice-crypto-rpc について
Venice Crypto RPCは、対応するブロックチェーンを扱う開発者向けのJSON-RPCプロキシです。複数チェーンに共通するHTTP形式で単一またはバッチ呼び出しを受け付け、メソッドの許可リストと冪等リトライを備えています。
主な機能
- 01HTTP経由のマルチチェーンJSON-RPC
- 02単一呼び出しと最大100件のバッチ
- 03EVM、Starknet、Solanaのメソッド
- 04チェーンファミリー別の許可リスト
- 0524時間の冪等キーによる再送
活用シーン
- 01対応ネットワークのデータ照会
- 02インデックス処理での呼び出し一括化
- 03トランザクション送信の安全な再試行
- 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 を返します。
| ファミリー | ネットワーク |
|---|---|
evm | Starknet と Solana を除くすべて。Arbitrum Orbit L2 である Robinhood Chain も含みます。 |
starknet | starknet-mainnet、starknet-sepolia |
solana | solana-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)です。
| 基本クレジット数 | チェーン |
|---|---|
20 | Ethereum、Base、Optimism、Arbitrum、Polygon、Linea、Avalanche、BSC、Blast、Robinhood、Starknet(メインネットとテストネット)。 |
30 | zkSync 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-ID | 32 文字の相関 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 を参照)。 |
429 | 1 分あたりの上限、同じユーザーの別のリクエストが処理中、一般的な 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のレスポンスは除外します)。メソッドごとに集計し、クレジットの使用先を確認します。台帳のエントリでは SKUcrypto-rpc-<network>が使われます。 - 安全なトランザクション送信 —
eth_sendRawTransactionには必ずIdempotency-Keyを指定してください。これにより、クライアントが24時間以内に再試行した場合、再ブロードキャストせずに同じ結果を返します。