You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用web3.py查询区块链最新部署的智能合约?支持跨链与免费API

获取以太坊及跨链最新智能合约地址(含部署时间)的方案

一、免费链上扫描器API方案

这类方案无需自行搭建节点,通过各公链官方扫描器的免费API即可实现,天然支持跨链(切换对应链的扫描器API即可)。

核心逻辑

合约部署交易的特征是:to地址为空,交易执行后会生成新的合约地址。我们可以通过获取最新区块内的交易,筛选出这类合约创建交易,提取合约地址和交易时间(即部署时间)。

示例(以以太坊Etherscan为例)

  1. 调用getBlockByNumber接口获取最新区块的交易列表,指定参数返回交易详情
  2. 遍历交易,筛选出to字段为null的交易
  3. 从符合条件的交易中提取contractAddress(合约地址)和timeStamp(部署时间,需转换为可读格式)

注意:免费API有调用频率限制,比如Etherscan免费版每分钟最多5次请求,需控制请求间隔。其他公链如Polygon、BSC可使用对应链的扫描器API(如PolygonScan、BSCScan),接口逻辑完全一致,只需更换API域名和链ID。

二、web3.py原生查询方案

如果需要更灵活的自定义逻辑,可使用web3.py连接免费节点实现,同样支持跨链。

前置准备

安装web3.py:pip install web3
连接免费节点(如Infura、Alchemy提供的以太坊/跨链节点)

代码示例

from web3 import Web3
from datetime import datetime

# 连接以太坊节点(替换为你自己的免费节点URL,跨链则用对应链的节点)
w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/你的项目ID'))

# 获取最新区块号
latest_block_num = w3.eth.block_number
# 获取区块详情(包含所有交易)
block = w3.eth.get_block(latest_block_num, full_transactions=True)

# 存储合约地址和部署时间的列表
contract_deployments = []

for tx in block.transactions:
    # 判断是否为合约创建交易(to地址为空,且creates字段存在)
    if tx['to'] is None and tx.get('creates') is not None:
        # 转换时间戳为可读格式
        deploy_time = datetime.fromtimestamp(block['timestamp']).strftime('%Y-%m-%d %H:%M:%S')
        contract_deployments.append({
            'contract_address': tx['creates'],
            'deploy_time': deploy_time
        })

# 打印结果
for item in contract_deployments:
    print(f"合约地址: {item['contract_address']}, 部署时间: {item['deploy_time']}")

跨链兼容说明

只需更换web3.py连接的节点URL为对应公链的免费节点即可,比如:

  • Polygon主网:https://polygon-mainnet.infura.io/v3/你的项目ID
  • BSC主网:https://bsc-dataseed.binance.org/
    不同公链的交易结构一致,代码逻辑无需修改,仅节点地址变化。

注意事项

  • 免费节点和API都有请求限制,若需高频查询,可考虑多个免费资源轮询,或升级付费方案
  • 部分链的扫描器API可能需要申请免费API Key,比如Etherscan需注册账号获取Key

内容的提问来源于stack exchange,提问作者Wesley Jones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:50:32