以太坊 RPC 节点 URL 获取方法
一、Alchemy(推荐,面板最友好)
打开 https://alchemy.com → Sign Up
登录后点击 “Create App”
Chain 选 Ethereum
Network 选 Mainnet(或 Goerli/Sepolia)
进入 App 详情,直接复制 HTTPS 链接:
https://eth-mainnet.g.alchemy.com/v2/<你的 32 位 key>
免费额度:每天 100 M CU(约 3–4 万次 call)
二、Infura(老牌,文档全)
打开 https://infura.io → Register
Dashboard 左侧 “Create New Key” → 选 Ethereum Mainnet
得到两种地址,常用 HTTPS:
https://mainnet.infura.io/v3/<你的 32 位 key>
免费层:每天 100 k 请求,支持 WebSocket
三、QuickNode(节点分布多,延迟低)
打开 https://quicknode.com → Sign Up
点击 “Create Endpoint” → Blockchain 选 Ethereum,Network 选 Mainnet
复制 HTTP Provider URL:
https://solitary-xxx-xxx.quiknode.pro/
免费层:3 M 请求/月,支持归档数据
四、GetBlock(支持 50+ 链,按量计费)
打开 https://getblock.io → 注册
控制台 “Create new access token” → 选 ETH Mainnet
复制 Shared RPC URL:
https://eth.getblock.io/<你的 key>/mainnet
免费层:40 k 请求/天,足以上课演示
五、Ankr(去中心化 infra,一键开关)
打开 https://ankr.com/rpc → 无需注册,直接显示公共端点:
https://rpc.ankr.com/eth
无密钥即可用(限速 60 RPS);注册后拿 Private RPC 更高配额
六、本地节点(Geth / Reth / Nethermind)
安装 Geth:
geth --http --http.addr 0.0.0.0 --http.port 8545 --http.api eth,net,web3
默认 RPC 即:http://localhost:8545
优点:完全私有、无速率限制;缺点:需 1 TB+ SSD 与 8 GB+ 内存同步区块。
七、公共免费节点(无需注册,临时测试)
| 提供商 |
Mainnet RPC URL |
备注 |
| Cloudflare |
https://cloudflare-eth.com |
无密钥,60 RPS |
| MyCrypto |
https://api.mycryptoapi.com/eth |
偶尔限速 |
| Rivet |
https://eth.rpc.rivet.cloud |
需注册拿高配 |
| 官方 Ethereum-org 列表 |
https://ethereumnodes.com |
实时更新 |
公共节点无账号体系,适合 1-2 分钟快速验证,生产请用带密钥的私有端点。
以太坊技术基础(RPC 调用、合约交互、交易结构、Uniswap 机制)





调用以太坊节点的方案(Rust SDK 对比)
简介:ethers-rs vs alloy
- ethers-rs = 把以太坊节点当成“数据库”来读写的 Rust 工具箱:连接 RPC、查余额、编交易、调合约、签名上链,一步到位。
- alloy = 官方从头重写的“下一代” ethers,结构更模块化、性能更高、ABI 在编译期就检查,长期看会取代 ethers。
使用说明
Ethers-rs 简介与示例

Alloy 简介与示例

对比与推荐




概念辨析:Web3-Alloy 与 Etherscan
-
Web3-Alloy 的本质与用途:本质是 Rust 语言里对接以太坊节点的开发包,和 ethers-rs 同赛道,是“下一代”官方实现。用途是在你的本地代码里发交易、查余额、编解码 ABI、模拟调用。
- 跟 MetaMask 的关系:可以配合使用 —— MetaMask 只负责签名+广播;Web3-Alloy 负责构造交易、估算 Gas、编码 calldata。
- 典型流程:Alloy 拼好 tx 结构 → 通过 MetaMask 提供的 “signTypedData” 或 WalletConnect 让 MM 签名 → 拿到签名后再用 Alloy 的 send_raw_transaction 上链(也可直接让 MM 广播)。因此“查询”可以完全用 Alloy+公开 RPC;“写链”若想让用户自己保管私钥,就弹 MetaMask 签名即可。
-
Etherscan 的本质与用途:本质是以太坊的区块浏览器+链上数据 API 服务商。用途:网页端查哈希、看合约源码、验证合约;提供 HTTP API(https://api.etherscan.io)拿账户余额、事件日志、Gas 价格、合约 ABI 等——只读,不能帮你发交易。
以太坊的消息返回方案(MCP 服务器实现)

最小代码骨架:rmcp 版本(30 行起跳)
use rmcp::{ServerHandler, tool};
use serde_json::Value;
#[tool]
async fn get_balance(addr: String) -> Result<String, String> {
// 这里调 ethers/alloy 查链上余额
Ok(format!("{} has 1.23 ETH", addr))
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let server = ServerHandler::new()
.with_tool::<get_balance>()
.serve(rmcp::transport::stdio()); // stdin/stdout
server.waiting().await?
Ok(())
}
运行:
cargo run --example rmcp_server
即可被任何 MCP 客户端(Claude Desktop、Cursor)自动发现工具。
手写 JSON-RPC 版本(约120行)
use serde::{Deserialize, Serialize};
use tokio::io::{stdin, stdout, AsyncBufReadExt, AsyncWriteExt, BufReader};
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize)]
struct JsonRpcReq {
jsonrpc: String,
id: Option<serde_json::Value>,
method: String,
params: Option<serde_json::Value>,
}
#[derive(Debug, Serialize, Deserialize)]
struct JsonRpcResp {
jsonrpc: String,
id: Option<serde_json::Value>,
result: Option<serde_json::Value>,
error: Option<JsonRpcErr>,
}
#[derive(Debug, Serialize, Deserialize)]
struct JsonRpcErr {
code: i32,
message: String,
}
async fn handle(req: JsonRpcReq) -> JsonRpcResp {
match req.method.as_str() {
"initialize" => JsonRpcResp {
jsonrpc: "2.0".into(),
id: req.id,
result: Some(serde_json::json!({
"capabilities": {
"tools": { "listChanged": false }
}
})),
error: None,
},
"tools/list" => JsonRpcResp {
jsonrpc: "2.0".into(),
id: req.id,
result: Some(serde_json::json!([{
"name": "get_balance",
"description": "Query ETH balance",
"type": "string",
"inputSchema": { "type": "object", "properties": { "addr": {} } }
}])),
error: None,
},
"tools/call" => {
let addr = req.params["arguments"].as_str().unwrap_or("");
JsonRpcResp {
jsonrpc: "2.0".into(),
id: req.id,
result: Some(serde_json::json!({ "content": format!("I has 1.25 ETH, addr: {}", addr) })),
error: None,
}
},
_ => JsonRpcResp {
jsonrpc: "2.0".into(),
id: req.id,
result: None,
error: Some(JsonRpcErr { code: -32601, message: "Method not found".into() }),
},
}
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let mut reader = BufReader::new(stdin());
let mut line = String::new();
loop {
line.clear();
if reader.read_line(&mut line).await? == 0 { break; }
let req: JsonRpcReq = serde_json::from_str(&line)?;
let resp = handle(req).await;
let json = serde_json::to_string(&resp) + "\n";
stdout.write_all(json.as_bytes()).await?;
Ok(())
}
}

选型建议(结合作业场景)
- 只求快速交作业、且想展示对 MCP 规范的理解 → rmcp 30 行就能跑通,README 里写一句“基于官方 SDK,类型安全且向后兼容”即可。
- 想刻意体现“我能手写协议”加分 → 用 手写 JSON-RPC 2.0,但务必把 initialize/initialized/tools/list/tools/call 四步全实现,再补单元测试,否则评审一握手就挂。
- 团队项目/生产化 → 直接 rmcp,后续官方升级 0.3、0.4 只需改一行 Cargo.toml;手写维护成本远高于收益。
高精度小数库(Rust 金融计算选型)




一句结论
- 支付、订单、链上金额、代币数显 → 用 rust_decimal (28 位,性能最好,生态最全)。
- 总账、报表、科学计算 → 用 bigdecimal-rs (任意精度,慢一点但能算到几百位)。
- 嵌入式/游戏 → 可考虑 decimal-rs (12 位,最小最快)。
绝大多数 Ethereum-Trading-MCP-Server 场景(余额、价格、滑点、Gas 费) rust_decimal 已完全覆盖,直接 cargo add rust_decimal --features serde,db-postgres 即可开写。
希望这篇整合了 RPC 节点获取、核心技术原理、Rust SDK 深度对比与高精度计算选型的指南,能为你构建 Web3 应用提供清晰的路线图。更多类似的实战解析和技术文档,欢迎在云栈社区交流探讨。