Infura节点URL(替换为你的项目ID)
深入浅出调用JSON-RPC接口实战指南
以太坊作为全球第二大区块链平台,其核心功能——智能合约的部署与调用、账户余额查询、交易发送等,都离不开与区块链网络的交互,而JSON-RPC接口,正是以太坊节点(如Geth、Nethermind等)提供的标准化通信桥梁,让开发者能够通过简单的HTTP请求实现对以太坊网络的读写操作,本文将详细介绍如何调用以太坊JSON-RPC接口,从基础概念到实战代码,助你轻松掌握以太坊数据交互的核心技能。
什么是以太坊JSON-RPC接口?
JSON-RPC(Remote Procedure Call)是一种基于JSON格式的轻量级通信协议,它允许客户端通过网络向服务器发送请求并接收响应,以太坊节点通过JSON-RPC接口暴露了丰富的API方法,覆盖了账户管理、区块查询、交易处理、智能合约交互等核心功能。
无论是开发者构建Dapp(去中心化应用)、钱包工具,还是进行数据分析,JSON-RPC都是与以太坊区块链交互最直接、最灵活的方式之一,它不依赖特定编程语言,只要能发送HTTP请求并解析JSON响应,即可实现对以太坊的操作。

环境准备:搭建交互基础
在调用JSON-RPC接口前,需确保具备以下环境:
以太坊节点
JSON-RPC接口由以太坊节点提供,因此需要运行一个节点,根据需求选择:
- 本地节点:下载并运行Geth(以太坊官方客户端)或Nethermind,启动时开启HTTP-RPC服务(如
--http参数)。 - 远程节点:使用第三方服务(如Infura、Alchemy),注册后获取节点URL(无需本地部署,适合快速开发)。
开发工具
- HTTP客户端:Postman(接口测试)、curl(命令行工具)或编程语言库(如Python的
requests、JavaScript的axios)。 - 以太坊辅助库:如
web3.js(JavaScript)或web3.py(Python),它们封装了JSON-RPC接口,简化调用流程(但底层仍依赖JSON-RPC)。
核心接口方法详解
以太坊JSON-RPC接口包含数十种方法,以下分类介绍最常用的功能:
网络与节点信息
-
eth_blockNumber:获取最新区块号。
{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}响应示例:
{"jsonrpc":"2.0","id":1,"result":"0x1a2b3c"} // 十六进制区块号 -
eth_chainId:获取当前网络链ID(如以太坊主网为1,测试网Ropsten为3)。

{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}
账户与余额查询
- eth_getBalance:查询指定地址的ETH余额。
参数:地址(address)、区块号(可选,默认最新区块)。{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x742d35Cc6634C0532925a3b8D5c2B5b6B6e8c7e8","latest"],"id":1}响应示例(余额为wei,需转换为ETH):
{"jsonrpc":"2.0","id":1,"result":"0x1a05f200"} // 十进制:1000000000000000000 wei = 1 ETH
交易相关
-
eth_getTransactionByHash:根据交易哈希查询交易详情(发送方、接收方、金额、状态等)。
{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0xabc123..."],"id":1} -
eth_sendRawTransaction:发送原始交易(需先签名)。
参数:已签名的交易数据(RLP编码)。{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0xf86d8085027c000000000000000000000000..."],"id":1}
智能合约交互
-
eth_call:调用智能合约的读函数(不修改链上状态,无需Gas)。
参数:交易对象(包含to合约地址、data调用数据)、区块号。{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0x123456...","data":"0x06fdde03..."},"latest"],"id":1}响应示例:函数返回值(如
0x0000000000000000000000000000000000000000000000000000000000000001)。 -
eth_sendTransaction:调用智能合约的写函数(修改链上状态,需Gas)。
参数:交易对象(from、to、data、value、gas等)。
{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{"from":"0x742d...","to":"0x123456...","data":"0x06fdde03...","gas":"0x5208"}],"id":1}
实战:Python调用JSON-RPC接口
以Python为例,使用requests库调用Infura远程节点,实现“查询地址余额”功能。
准备工作
- 安装
requests库:pip install requests - 获取Infura项目ID(注册Infura创建项目,获取HTTPS节点URL)。
代码实现
import requests
import json
INFURA_URL = "https://mainnet.infura.io/v3/YOUR_PROJECT_ID"
def get_eth_balance(address):
# 构造JSON-RPC请求
payload = {
"jsonrpc": "2.0",
"method": "eth_getBalance",
"params": [address, "latest"],
"id": 1
}
headers = {"Content-Type": "application/json"}
# 发送POST请求
response = requests.post(INFURA_URL, data=json.dumps(payload), headers=headers)
result = response.json()
if "error" in result:
raise Exception(f"RPC Error: {result['error']}")
# 将十六进制余额转换为ETH(1 ETH = 10^18 wei)
balance_hex = result["result"]
balance_eth = int(balance_hex, 16) / 10**18
return balance_eth
# 查询以太坊创始人Vitalik地址余额
address = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
balance = get_eth_balance(address)
print(f"Address: {address}")
print(f"Balance: {balance:.4f} ETH")
运行结果
Address: 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 Balance: 1234.5678 ETH
注意事项
-
安全性:
- 私钥和签名交易数据切勿泄露,避免使用HTTP明文传输(推荐HTTPS)。
- 本地节点需配置防火墙,限制外部访问。
-
Gas与费用:
- 发送交易(写操作)需支付Gas,需预估Gas价格(
eth_gasPrice查询)和Gas限制(eth_estimateGas预估)。 - 以太坊网络拥堵时,Gas价格可能飙升,需动态调整。
- 发送交易(写操作)需支付Gas,需预估Gas价格(
-
节点稳定性:
- 本地节点同步可能耗时较长,开发建议使用Infura、Alchemy等远程节点。
- 高频调用时注意API速率限制(如Infura免费版有调用次数上限)。
-
数据格式:
- 地址、交易哈希、Gas等参数需为十六进制字符串(以
0x开头)。 - 区块号可用
latest(最新)、pending(待打包)、earliest(创世区块)或具体十六进制编号。
- 地址、交易哈希、Gas等参数需为十六进制字符串(以
进阶:封装JSON-RPC工具类
为提高代码复用性,可封装一个EthRPC类,简化常用方法调用:
class EthRPC:
def __init__(self, url):
self.url =
本文 原创,转载保留链接!网址:https://licai.bangqike.com/bixun/1367447.html
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。






