向以太坊节点发送RPC请求,从原理到实践的完整指南
什么是RPC与以太坊节点
RPC(Remote Procedure Call,远程过程调用)是一种允许程序通过网络请求另一台计算机上服务的技术,在以太坊生态中,RPC是与区块链交互的核心方式,无论是查询账户余额、发送交易,还是部署智能合约,本质上都是通过向以太坊节点发送RPC请求来完成的。
以太坊节点(如Geth、Erigon、Nethermind等)运行着完整的区块链数据,并通过JSON-RPC协议对外提供标准化的接口,开发者无需自己运行节点,也可以通过第三方RPC服务商(如Infura、Alchemy、QuickNode)接入以太坊网络。
JSON-RPC协议基础
以太坊采用JSON-RPC 2.0规范,一个标准的请求结构如下:
{
"jsonrpc": "2.0",
"method": "eth_blockNumber",
"params": [],
"id": 1
}
- jsonrpc:协议版本,固定为"2.0"
- method:要调用的方法名
- params:参数数组
- id:请求标识符,用于匹配响应
节点返回的响应格式:
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x4c4b40"
}
三种连接方式
向以太坊节点发送RPC请求主要有三种传输方式:
HTTP:最常用的方式,适合一次性请求,如查询余额、区块信息。
WebSocket:支持双向通信,适合订阅事件(如新区块产生、合约事件日志),实时性更强。
IPC:本机进程间通信,性能最高,但仅限于节点运行在同一台机器上的场景。
常用RPC方法一览
| 方法 | 功能说明 |
|---|---|
eth_blockNumber |
获取最新区块高度 |
eth_getBalance |
查询账户余额 |
eth_getTransactionByHash |
通过哈希查询交易 |
eth_sendRawTransaction |
发送已签名的交易 |
eth_call |
执行只读的合约调用 |
eth_gasPrice |
获取当前Gas价格 |
net_version |
获取网络ID |
代码实战
使用curl直接发送请求
curl -X POST https://mainnet.infura.io/v3/你的API密钥 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
使用Python(requests库)
import requests
import json
url = "https://mainnet.infura.io/v3/你的API密钥"
payload = {
"jsonrpc": "2.0",
"method": "eth_getBalance",
"params": ["0x你的钱包地址", "latest"],
"id": 1
}
response = requests.post(url, json=payload)
balance_wei = int(response.json()["result"], 16)
balance_eth = balance_wei / 10**18
print(f"账户余额: {balance_eth} ETH")
使用ethers.js(JavaScript)
const { ethers } = require("ethers");
const provider = new ethers.JsonRpcProvider(
"https://mainnet.infura.io/v3/你的API密钥"
);
async function main() {
const blockNumber = await provider.getBlockNumber();
console.log("最新区块高度:", blockNumber);
const balance = await provider.getBalance("0x钱包地址");
console.log("余额:", ethers.formatEther(balance), "ETH");
}
main();
安全性与最佳实践
-
保护API密钥:切勿将密钥硬编码到前端代码或公开仓库中,建议使用环境变量管理。
-
警惕
personal模块:生产环境节点应禁用personal_unlockAccount等涉及私钥管理的接口,避免资产被盗。 -
设置速率限制:自建节点时应配置限流策略,防止恶意刷接口。
-
选择合适的网络:开发阶段使用Sepolia等测试网,配合水龙头获取测试币。
-
错误处理:RPC请求可能因网络波动失败,代码中应加入重试机制与超时处理。
-
节点安全暴露:自建节点对外提供服务时,建议通过反向代理(如Nginx)加认证层,而非直接暴露8545端口。
向以太坊节点发送RPC请求是区块链开发的基石,掌握JSON-RPC协议的结构、常用方法以及各类开发库的使用,就能构建出钱包、区块浏览器、DApp后端等各类应用,随着Layer2的普及,RPC调用方式同样适用于Arbitrum、Optimism等网络,只需更换端点即可无缝迁移。
从今天开始,试着向以太坊节点发出你的第一个请求吧——区块链世界的大门,就此打开。
发布于:2026-10-18,除非注明,否则均为原创文章,转载请注明出处。
