找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

5083

积分

0

好友

705

主题
发表于 3 小时前 | 查看: 3| 回复: 0

以太坊 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 机制)


以太坊RPC调用与SDK封装对比截图

以太坊交易结构说明截图

区块链合约交互模式截图

Uniswap机制技术说明截图

区块链技术概念总结表格

调用以太坊节点的方案(Rust SDK 对比)


简介:ethers-rs vs alloy

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

使用说明

Ethers-rs 简介与示例
ethers-rs库介绍与代码示例截图

Alloy 简介与示例
alloy-rs库介绍与代码示例截图

对比与推荐

ethers-rs与alloy技术画像对比表格

ethers-rs与alloy性能对比表格

ethers-rs与alloy安全性对比表格

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 服务器实现)


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(())
    }
}

rmcp与手写JSON-RPC对比表格

选型建议(结合作业场景)

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

高精度小数库(Rust 金融计算选型)


金融级固定精度数值库对比截图

高精度任意精度数值库对比截图

SQL/JSON生态集成速查表截图

不同场景数值类型选择结论截图

一句结论

  • 支付、订单、链上金额、代币数显 → 用 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 应用提供清晰的路线图。更多类似的实战解析和技术文档,欢迎在云栈社区交流探讨。




上一篇:银狐病毒应急响应实战:从进程分析到恶意DLL排查的完整处置流程
下一篇:深入理解Rust高阶特性:从迭代器与闭包到异步并发编程实战
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-15 05:46 , Processed in 0.842509 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表