RPC 端点
X Layer 测试网的公开 Erigon 端点 testrpc.xlayer.tech/terigon 在服务端
(curl、graph-node、你的后端)正常,但不返回 CORS 头,浏览器 dapp
直接连会报 Failed to fetch。xtruth 在同源域上跑了一个代理,补上 CORS
头并转发到上游。
端点
| 环境 | URL |
|---|---|
| 生产 | https://app.xtruth.xyz/api/rpc |
| 测试(沙盒) | https://app-dev.xtruth.xyz/api/rpc |
两者代理到同一上游,返回完全相同 —— 开发期间用测试 URL。 详见 环境。
示例请求
POST https://app-dev.xtruth.xyz/api/rpc
Content-Type: application/json
请求体是普通 JSON-RPC:
{
"jsonrpc": "2.0",
"method": "eth_chainId",
"params": [],
"id": 1
}
返回:
{ "jsonrpc": "2.0", "id": 1, "result": "0x7a0" }
0x7a0 = 1952 = X Layer 测试网。
为什么要代理
不代理的话:
wagmi/viem在浏览器读链会Failed to fetch—— viem 会 误把它包成approve() reverted: Failed to fetch,极易误导。- 用户的钱包(MetaMask、OKX Wallet 等)写交易时也用自己配置的 RPC 做
eth_estimateGas/eth_sendRawTransaction。如果钱包的 RPC 是不开 CORS 的公开 endpoint,写交易也会失败。
代理跟 dapp 同源,浏览器不再做 CORS 检查。
在 viem / wagmi 里使用
import { defineChain, http } from "viem";
const xlayerTestnet = defineChain({
id: 1952,
name: "X Layer Testnet",
nativeCurrency: { name: "OKB", symbol: "OKB", decimals: 18 },
rpcUrls: {
default: { http: ["https://app.xtruth.xyz/api/rpc"] },
},
});
const client = createPublicClient({
chain: xlayerTestnet,
transport: http(),
});
在钱包里使用
dapp 里有一个一键按钮调 wallet_addEthereumChain(EIP-3085),帮你
把 X Layer 测试网加到钱包里(用我们的代理 URL)。在
oracle/new 页面如果出 Failed to fetch,
点 Use xtruth RPC in wallet 在钱包弹框里确认即可。
也可以手动配:
- 网络名:X Layer Testnet (xtruth proxy)
- RPC URL:
https://app.xtruth.xyz/api/rpc - Chain ID:1952
- 货币符号:OKB
- 区块浏览器:https://www.oklink.com/xlayer-test
限速 / 配额
目前免费,无 auth,无 rate limit。Cloudflare Workers 处理负载。如果用量
变大,会加按 IP 限速 + 方法白名单(eth_call、eth_chainId、
eth_blockNumber、eth_getLogs —— 屏蔽 eth_sendRawTransaction 让
用户走自己的钱包)。
源码
代理是一个边缘 function:见 xtruth-app/src/app/api/rpc/route.ts。 40 行,包括上游 fallback 和 CORS 头。