mcpField
V
venice-crypto-rpc

venice-crypto-rpc

github.com/veniceai开发160131 次安装5 天前更新
代码仓库

关于 venice-crypto-rpc

Venice Crypto RPC 是面向区块链开发者的 JSON-RPC 代理,支持多个网络。它以统一的 HTTP 接口模式处理单次或批量调用,并提供方法白名单和幂等重试。

主要功能

  1. 01通过 HTTP 提供多链 JSON-RPC
  2. 02单次调用及最多 100 项批处理
  3. 03支持 EVM、Starknet 和 Solana 方法
  4. 04按链族限制方法白名单
  5. 05支持 24 小时幂等键重放

适用场景

  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 加密货币 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)。
starknetstarknet-mainnet、starknet-sepolia
solanasolana-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)。

基础点数链
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 时不计费。
  • Venice 自行拒绝的请求(400、401、402、429)不计费。

转发前,Venice 会检查你当前消费货币的余额是否足以支付按完整等级估算的费用;否则返回 402。

响应头

这些响应头会添加到从节点转发的每个响应(任何状态)以及幂等重放的响应中;Venice 自行生成的响应(验证错误、402、429、上游获取失败 500)不包含这些响应头。

响应头含义
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)会按 (用户, 幂等键) 缓存 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 方法 / 过滤器方法 / 跨系列方法、重复使用幂等键但正文不同。
401Bearer 密钥无效或 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 的响应,因为这些响应未计费);按方法汇总,查看积分的去向。账本条目使用 SKU crypto-rpc-<network>。
  • 安全提交交易 — 使用 eth_sendRawTransaction 时,务必发送 Idempotency-Key,这样客户端在 24 小时内重试时会重放请求,而不是再次广播。

评论

支持 Markdown