关于 venice-crypto-rpc
Venice Crypto RPC 是面向区块链开发者的 JSON-RPC 代理,支持多个网络。它以统一的 HTTP 接口模式处理单次或批量调用,并提供方法白名单和幂等重试。
主要功能
- 01通过 HTTP 提供多链 JSON-RPC
- 02单次调用及最多 100 项批处理
- 03支持 EVM、Starknet 和 Solana 方法
- 04按链族限制方法白名单
- 05支持 24 小时幂等键重放
适用场景
- 01查询受支持网络的数据
- 02为索引任务批量发送调用
- 03安全重试交易提交
- 04追踪请求额度与美元成本
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ veniceai/ skills --skill venice-crypto-rpc安装后在 Claude Code 中输入/venice-crypto-rpc确认已加载。
详细介绍
Venice 加密货币 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 个 slug(请务必确认,目录会持续扩充):
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
在代理路径中将 slug 用作 {network}。未知 slug 会返回 400。规范中的 /networks 示例列表遗漏了 blast-mainnet / blast-sepolia,但在线端点和代理都包含它们——请以 GET /crypto/rpc/networks 为准,不要在客户端硬编码允许列表。
链系列
每个网络仅支持一种方法系列,并按系列强制执行允许列表。向 Solana 网络发送 EVM 方法(反之亦然)会返回 400,而不会直接透传。
| 系列 | 网络 |
|---|---|
evm | 除 Starknet 和 Solana 外的所有网络,包括 Robinhood Chain(Arbitrum Orbit L2)。 |
starknet | starknet-mainnet、starknet-sepolia |
solana | solana-mainnet、solana-devnet |
允许列表包含的是明确列出的方法名称,而非前缀:受支持命名空间中未列入列表的方法(例如未列出的 debug_* 或 trace_* 方法)会被拒绝。所有 EVM 网络共用同一份 EVM 列表,因此 Venice 会在任何 EVM 链上通过链专属方法(zks_*、linea_*、bor_*)的检查,但这些方法仅能在各自的链上游正常工作。
发送 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。 - 批量请求中只要有一个方法不受支持,整个批次都会以
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,每点数收费 $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 时不计费。
- Venice 自行拒绝的请求(
400、401、402、429)不计费。
转发前,Venice 会检查你当前消费货币的余额是否足以支付按完整等级估算的费用;否则返回 402。
响应头
这些响应头会添加到从节点转发的每个响应(任何状态)以及幂等重放的响应中;Venice 自行生成的响应(验证错误、402、429、上游获取失败 500)不包含这些响应头。
| 响应头 | 含义 |
|---|---|
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)会按(用户, 幂等键)缓存 24 小时。 - 使用相同正文重放请求时,会返回缓存的响应,并附带
Idempotent-Replayed: true,且不会再次计费。重放请求仍计入每分钟速率限制。 - 相同键 + 不同正文 ⇒
400。 - 不符合此模式的键会被静默忽略(请求会在不启用幂等性的情况下执行)——请在客户端验证键。
- 缓存尽力而为,并在响应发送后写入;如果重放请求在原请求完成前到达,则不会进行去重。
对会修改状态的方法(eth_sendRawTransaction、eth_sendUserOperation、Solana 的 sendTransaction)使用此功能,避免网络重试导致重复广播。
速率限制和并发
- 每位用户每分钟 100 个请求。所有请求都会计数,包括之后被拒绝并返回
400的请求以及幂等重放请求。 - 超出限制 ⇒ 返回
429,并附带X-RateLimit-Limit、X-RateLimit-Remaining和X-RateLimit-Reset(Unix 秒)。超限情况还会显示在GET /api_keys/rate_limits/log(仅限 ADMIN 密钥)中,格式为modelId: "endpoint:api/v1/crypto/rpc"。 - 批处理请求计为一个请求,因此批处理是提高吞吐量的方式。
- 每位用户的请求会逐个处理。并发请求会短暂等待(约 0.5 秒),否则将返回
429"Another request for this user is in flight"。请使用随机抖动后重试,或改用批处理,而不是并行发送多个请求。 - 没有每日额度上限。(规范文本仍提及 10,000,000 额度 / 24 小时的上限;该上限已不再适用。)
- 上游调用会在 30 秒后超时。
错误
| 状态 | 常见原因 |
|---|---|
400 | 未知网络 slug、正文或批处理为空、批处理超过 100 项、条目中的 method 不是字符串、不支持的方法 / WebSocket 方法 / 过滤器方法 / 跨系列方法、重复使用幂等键但正文不同。 |
401 | Bearer 密钥无效或 SIGN-IN-WITH-X 无效。 |
402 | 完全没有凭据(x402 身份验证质询中包含 authOptions);余额低于预估费用;达到每个密钥的支出限额;或 x402 钱包余额低于 $0.10(正文中包含充值说明——参见 venice-x402)。 |
429 | 超出每分钟限制、同一用户仍有其他请求正在处理、达到通用 API 错误预算,或达到 x402 的 5 个并发请求上限。 |
500 | 上游获取失败 / 超时,或服务配置错误。可以使用相同的 Idempotency-Key 安全重试。 |
| 其他 | 上游节点返回的非 2xx 状态码会原样转发(经过清理)。 |
使用模式
- 多链仪表板 — 一个 API 密钥即可覆盖所有网络,无需轮换每条链的密钥。
- 高吞吐量索引 — 每个请求最多可批量调用 100 次;每项分别计费,但在速率限制和每次仅允许一个请求的规则下,只计为一个请求。
- 基于钱包的(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 小时内重试时会重放请求,而不是再次广播。