一步步教你搭建以太坊 Gas 费实时追踪器

·

关键词:以太坊 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.py

1.2 安装核心依赖

仅引入 Web3.py,即可与以太坊主网交互:

pip install web3

2. 建立与以太坊节点的连接

我们不运行本地节点,而使用 Infura 的 HTTP Provider 作为远程节点。

2.1 获取 Infura URL

  1. 前往 infura.io 注册并创建以太坊主网项目。
  2. 复制 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): True

3. 抓取最新区块的 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 None

4.2 Burnt Fees(已销毁手续费)

def get_burnt_fees():
    base_fee = get_base_fee_per_gas()
    if base_fee is None:
        return 0
    return base_fee * gasUsed

4.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.753088

FAQ:你关心的 5 个高频疑问

问答内容
Q1:Infura 免费额度够用吗?免费账号每天 100,000 Requests,对于个人监控完全充足;高强度商用建议升级到 付费层
Q2:为什么偶发性拿不到 baseFeePerGas?区块高度 <12965000 时没有该字段,仅出现在 伦敦升级(EIP-1559) 之后。
Q3:如何定时更新数据?scheduleAPScheduler 库,每 12 秒监听新区块即可;👉 获取完整定时脚本示例
Q4:能把结果推送到手机吗?调用企业微信机器人、钉钉机器人、或自建 Telegram Bot,全部 10 行代码即可搞定。
Q5:必须写 Python 吗?No!JavaScript/TypeScript 走 ethers.js、Go 用 go-ethereum 均可,逻辑完全一致。

6. 进阶方案 vs 下限方案

自建脚本托管 API 服务
• 需写代码、部署、监控
• 自定义粒度极高
• 一键 GET /gasPrice
• 无需维护节点
• 👉 解锁免运维区块数据 API

如果你只想要开箱即用的订阅模式,第三方区块链索引平台已把“如何掐点最便宜”做到了极致。


7. 小结与下一步

通过以上教程,你已拥有:

  1. 能实时拉取 gas price、gasUsed、burnt fees 的完整代码。
  2. 可拓展为 Bot、仪表盘、移动推送 的基础设施。
  3. 以太坊 gas 费机制 的底层理解。

未来,你可以:

动手试试,祝你在 Web3 的浩瀚海洋里节省每一分 gas。