如何使用web3.py查找给定合约地址的创建块号?

问题描述 投票:0回答:2

我试图使用合约地址查找创世块编号,当使用 web3.py 部署合约地址时,有没有办法找到创世块编号?

transactions blockchain solidity web3py
2个回答
0
投票

您还可以通过尝试调用合约上的视图函数来执行二分搜索。

def test(latest_block):
    start = 0
    end = latest_block
    
    while start < end:
    block = round((start + end)/2)
    
    try:
        # You need to call a function on the contract at a specific block
        # Not sure how you do this in web3.py
        call(contract.view_fn, block);
    
        # call succeeded, meaning contract existed at that block number 
        end = block
    except e:
        # failed, meaning contract did not exist at that block number 
        start = block
    
    return end

如果当前有 1000 万个区块,这将需要对区块链进行 23 次调用。

如果有 100 亿个区块,这将需要 33 次调用。


-1
投票

好吧,您可以使用 ** web3.py ** 做两件事,并且可以使用 etherscan (或 etherscan 组中的任何其他浏览器)做一件事

1)网络3:

您不仅需要地址,还需要创建交易的哈希值,因此您可以执行以下操作:

web3.eth.getTransactionReceipt(*hash*)
结果对象将包含一个 blockNumber。

2)web3:

这将花费大量的时间精力,但是您可以创建一个脚本来检查来自区块0(或您确定位于合约创建区块之前的区块)的每笔交易并检查每笔交易中的所有数据以找到正确的区块

3)以太扫描:

您可以调用 etherscan API - 请参阅 etherscan.io/apis#accounts 上的“获取交易列表”

© www.soinside.com 2019 - 2024. All rights reserved.