关键词:以太坊 gas 费、Gas 价格、Web3 开发、Infura、Python 编程、区块链费用监控
你是否曾在链上操作时,被突如其来的高额 gas 费吓到?对于 Web3 开发者而言,gas 价格就像燃油费,随网络拥堵程度起伏不定。本文将手把手示范:如何用不到 70 行 Python 代码,搭建一个轻量级、可扩展的【以太坊 gas 费实时追踪器】,并附赠常见问题速查,帮你在开发与交易时都心中有数。
1. 项目结构与依赖准备
1.1 初始化工作目录
在终端执行以下命令,新建文件夹与脚本文件:
mkdir Web3_Gas_Calculations
cd Web3_Gas_Calculations
touch gas_calc.py1.2 安装核心依赖
仅引入 Web3.py,即可与以太坊主网交互:
pip install web32. 建立与以太坊节点的连接
我们不运行本地节点,而使用 Infura 的 HTTP Provider 作为远程节点。
2.1 获取 Infura URL
- 前往
infura.io注册并创建以太坊主网项目。 - 复制
https://mainnet.infura.io/v3/你的ProjectID备用。
2.2 环境变量与连接测试
在本地 shell(Linux/macOS)或 PowerShell(Windows)中:
export INFURA_URL="https://mainnet.infura.io/v3/你的ProjectID"在 gas_calc.py 顶部写入:
import os
from web3 import Web3
INFURA_URL = os.getenv('INFURA_URL') # 若未配置环境变量,可直接写死
web3 = Web3(Web3.HTTPProvider(INFURA_URL))
print("Connected to ETH Node (Infura):", web3.isConnected())运行脚本验证连通性:
python gas_calc.py
# 期望输出:Connected to ETH Node (Infura): True3. 抓取最新区块的 gas 数据
3.1 调取最新区块
block_data = web3.eth.get_block('latest')3.2 提取关键 gas 指标
currentGasPrice = web3.eth.gas_price # 当前 gas price (wei)
gasUsed = block_data.gasUsed # 实际已消耗 gas
gasLimit = block_data.gasLimit # 区块 gas 上限4. 封装计算函数
4.1 Base Fee Per Gas(伦敦升级后参数)
def get_base_fee_per_gas():
try:
return web3.from_wei(block_data.baseFeePerGas, 'ether')
except AttributeError:
print("BASE FEE NOT AVAILABLE")
return None4.2 Burnt Fees(已销毁手续费)
def get_burnt_fees():
base_fee = get_base_fee_per_gas()
if base_fee is None:
return 0
return base_fee * gasUsed4.3 Gas 使用率 & Gas 目标百分比
def get_gas_used_percentage():
try:
return (gasUsed / gasLimit) * 100
except ZeroDivisionError:
return 0
def get_gas_target_percentage():
usage = get_gas_used_percentage()
return -100 + 2 * usage if usage < 50 else 100 - 2 * (100 - usage)5. 即时输出报告
print("---------------------------")
print("Current Gas Price:", currentGasPrice)
print("-------Block Gas Data------")
print("Gas Used:", gasUsed)
print("Gas Limit:", gasLimit)
print("Base Fee Per Gas:", get_base_fee_per_gas())
print("Burnt Fee:", get_burnt_fees())
print("Gas Used %:", get_gas_used_percentage())
print("Gas Target %:", get_gas_target_percentage())示例输出(2025 年的某天):
---------------------------
Current Gas Price: 32264456935
-------Block Gas Data------
Gas Used: 14136173
Gas Limit: 30000000
Base Fee Per Gas: 3.1914456935E-8
Burnt Fee: 0.451148284434209755
Gas Used %: 47.123456
Gas Target %: -5.753088FAQ:你关心的 5 个高频疑问
| 问答 | 内容 |
|---|---|
| Q1:Infura 免费额度够用吗? | 免费账号每天 100,000 Requests,对于个人监控完全充足;高强度商用建议升级到 付费层。 |
| Q2:为什么偶发性拿不到 baseFeePerGas? | 区块高度 <12965000 时没有该字段,仅出现在 伦敦升级(EIP-1559) 之后。 |
| Q3:如何定时更新数据? | 用 schedule 或 APScheduler 库,每 12 秒监听新区块即可;👉 获取完整定时脚本示例 。 |
| Q4:能把结果推送到手机吗? | 调用企业微信机器人、钉钉机器人、或自建 Telegram Bot,全部 10 行代码即可搞定。 |
| Q5:必须写 Python 吗? | No!JavaScript/TypeScript 走 ethers.js、Go 用 go-ethereum 均可,逻辑完全一致。 |
6. 进阶方案 vs 下限方案
| 自建脚本 | 托管 API 服务 |
|---|---|
| • 需写代码、部署、监控 • 自定义粒度极高 | • 一键 GET /gasPrice• 无需维护节点 • 👉 解锁免运维区块数据 API |
如果你只想要开箱即用的订阅模式,第三方区块链索引平台已把“如何掐点最便宜”做到了极致。
7. 小结与下一步
通过以上教程,你已拥有:
- 能实时拉取 gas price、gasUsed、burnt fees 的完整代码。
- 可拓展为 Bot、仪表盘、移动推送 的基础设施。
- 对 以太坊 gas 费机制 的底层理解。
未来,你可以:
- 将脚本 Dockerize,放在云服务器持续运行。
- 在前端用 React/ECharts 做图表,直观展示历史走势。
- 接入链上事件监听,为用户实时推送“最佳交易时间”。
动手试试,祝你在 Web3 的浩瀚海洋里节省每一分 gas。