我试图使用合约地址查找创世块编号,当使用 web3.py 部署合约地址时,有没有办法找到创世块编号?
您还可以通过尝试调用合约上的视图函数来执行二分搜索。
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 次调用。
好吧,您可以使用 ** web3.py ** 做两件事,并且可以使用 etherscan (或 etherscan 组中的任何其他浏览器)做一件事
1)网络3:
您不仅需要地址,还需要创建交易的哈希值,因此您可以执行以下操作:
web3.eth.getTransactionReceipt(*hash*)
结果对象将包含一个 blockNumber。
2)web3:
这将花费大量的时间和精力,但是您可以创建一个脚本来检查来自区块0(或您确定位于合约创建区块之前的区块)的每笔交易并检查每笔交易中的所有数据以找到正确的区块
3)以太扫描:
您可以调用 etherscan API - 请参阅 etherscan.io/apis#accounts 上的“获取交易列表”