4、连接以太坊节点:使用 Infura 或 Alchemy 获取 RPC 节点、通过 Web3.py 建立连接、查询区块信息

好,咱们正式开始动手了。

前面几章聊的都是概念和工具选型,说白了都是「纸上谈兵」。从这一章开始,我们要真正把代码跑起来,让数据从链上流到你的屏幕上。

连接以太坊节点,是所有链上数据工作的第一步。你想想看,没有节点,你连区块都看不到,更别提分析什么交易、地址、Gas 费了。我个人习惯把这一步叫做「打通数据管道」——管道通了,后面的事就顺了。

4.1 为什么需要 RPC 节点?

以太坊是一个去中心化的网络,由成千上万个节点组成。每个节点都保存着完整的区块链数据。但问题来了——你不可能自己跑一个全节点吧?

全节点需要同步几百 GB 的数据,还要保持 24 小时在线。对于做数据分析的我们来说,这成本太高了。所以,我们选择「借力」——使用第三方提供的 RPC 节点服务。

RPC 的全称是 Remote Procedure Call,远程过程调用。说白了,就是通过 HTTP 请求,让远程的节点帮你查数据,然后把结果返回给你。

核心要点: RPC 节点就是你的「数据代理」。你不需要自己跑节点,只需要一个 URL 和 API Key,就能查询链上数据。

4.2 选择 Infura 还是 Alchemy?

目前市面上最主流的两个 RPC 服务商,就是 Infura 和 Alchemy。我两个都用过,说说我的感受。

对比项 Infura Alchemy
免费额度 每日 10 万次请求 每月 3 亿计算单元(约 30 万次请求)
稳定性 老牌,稳定 较新,但性能更好
数据丰富度 基础 RPC 方法 额外提供交易回放、日志解析等高级 API
上手难度 简单 稍复杂,但文档更友好

我个人建议:如果你是初学者,先从 Infura 开始。注册简单,API Key 一拿就能用。等你做复杂分析时,再考虑 Alchemy 的高级功能。

小技巧: 注册 Infura 时,创建一个项目,选择「Ethereum」网络,然后复制你的「Project ID」。这个 ID 就是你的 API Key。

4.3 获取 RPC 节点地址

拿到 API Key 之后,RPC 节点地址的格式是这样的:

# Infura 主网节点
https://mainnet.infura.io/v3/你的ProjectID

# Alchemy 主网节点
https://eth-mainnet.g.alchemy.com/v2/你的APIKey

嗯,这里要注意:千万不要把 API Key 硬编码在代码里,更不要上传到 GitHub。我曾经见过有人把 Key 直接写在 Jupyter Notebook 里,结果被爬虫扫到,一夜之间被刷了几十万次请求,直接欠费。

避坑指南: 使用环境变量或配置文件来存储 API Key。永远不要硬编码。

4.4 安装 Web3.py

Web3.py 是 Python 生态里最流行的以太坊交互库。它封装了 RPC 调用,让你用 Python 代码就能查询链上数据。

安装很简单:

pip install web3

如果你用的是 Anaconda 环境,建议先创建一个新的虚拟环境:

conda create -n web3_env python=3.9
conda activate web3_env
pip install web3

为什么推荐用虚拟环境?因为 Web3.py 依赖的库版本比较敏感,搞不好会和你的其他项目冲突。我吃过这个亏,后来就老老实实每次新建项目都开虚拟环境。

4.5 建立连接:从代码到节点

好,现在我们来写第一行真正的代码。

from web3 import Web3

# 你的 Infura RPC 地址
infura_url = "https://mainnet.infura.io/v3/你的ProjectID"
w3 = Web3(Web3.HTTPProvider(infura_url))

# 检查是否连接成功
if w3.is_connected():
    print("✅ 连接成功!")
    print(f"当前区块高度: {w3.eth.block_number}")
else:
    print("❌ 连接失败,请检查 RPC 地址和网络")

运行这段代码,如果看到「连接成功」和区块高度,恭喜你——你已经成功打通了数据管道。

为什么会失败?常见原因有三个:

  • API Key 写错了(检查一下有没有多余的空格)
  • 网络问题(有些公司内网会屏蔽外部 RPC)
  • Infura 服务暂时不可用(概率很低,但遇到过)
调试技巧: 如果连接失败,试试用 curl 命令测试 RPC 地址是否可达:
curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' https://mainnet.infura.io/v3/你的ProjectID

4.6 查询区块信息:第一个数据点

连接成功后,我们来查一下最新的区块信息。这是最基础的操作,也是后续所有分析的起点。

# 获取最新区块
latest_block = w3.eth.get_block('latest')

print("最新区块信息:")
print(f"区块号: {latest_block['number']}")
print(f"时间戳: {latest_block['timestamp']}")
print(f"交易数量: {len(latest_block['transactions'])}")
print(f"矿工地址: {latest_block['miner']}")
print(f"Gas 使用量: {latest_block['gasUsed']}")
print(f"Gas 上限: {latest_block['gasLimit']}")

输出大概长这样:

最新区块信息:
区块号: 19876543
时间戳: 1712345678
交易数量: 152
矿工地址: 0x95222290DD7278Aa3Ddd389Cc1E1d165CC4BAfe5
Gas 使用量: 14987654
Gas 上限: 30000000

这些字段是什么意思?我简单解释一下:

  • 区块号:区块在链上的序号,从 0 开始
  • 时间戳:区块被挖出的 Unix 时间戳,可以转换成人类可读的时间
  • 交易数量:这个区块里包含多少笔交易
  • 矿工地址:谁挖出了这个区块
  • Gas 使用量:实际消耗的 Gas,反映网络拥堵程度

你还可以查询指定区块号的信息:

# 查询指定区块
block_number = 19000000
block = w3.eth.get_block(block_number)

print(f"区块 {block_number} 的交易数: {len(block['transactions'])}")

4.7 知识体系:连接节点的完整流程

为了让你更直观地理解整个流程,我画了一张图:

连接以太坊节点:数据管道流程图 1. 注册 RPC 服务 Infura / Alchemy 2. 获取 API Key Project ID / API Key 3. 安装 Web3.py pip install web3 4. 建立连接 Web3(Web3.HTTPProvider(rpc_url)) 5. 查询区块信息 w3.eth.get_block('latest') 整个流程只需 5 步,10 分钟内就能跑通

4.8 实战小练习

光看不练可不行。我建议你立刻动手做这三件事:

  1. 注册一个 Infura 账号,拿到你的 Project ID
  2. 用 Web3.py 连接主网,打印出最新区块的区块号和时间戳
  3. 把时间戳转换成人类可读的时间格式(提示:用 Python 的 datetime 模块)

做完这些,你就已经迈出了链上数据分析的第一步。后面的事,咱们慢慢来。

本章核心收获:
  • RPC 节点是连接链上数据的桥梁
  • Infura 和 Alchemy 是主流选择,初学者推荐 Infura
  • Web3.py 是 Python 操作以太坊的标准库
  • 连接成功后,用 get_block() 就能查询区块信息

嗯,这一章就到这儿。记住,数据管道打通了,后面的事就顺了。


公众号:蓝海资料掘金营,微信deep3321