如何使用 web3 Api Python 获得智能合约的所有权?
Posted
技术标签:
【中文标题】如何使用 web3 Api Python 获得智能合约的所有权?【英文标题】:How to get ownership of smart contract using web3 Api Python? 【发布时间】:2021-12-20 01:45:24 【问题描述】:我正在练习使用 web3 API 和 Python。我想提取特定智能合约的所有权,将合约地址(或智能合约)作为输入,并将合约的所有权作为输出。
例如,如果我检查此合约 0x2A9718defF471f3Bb91FA0ECEAB14154F150a385
on BscScan 在第 n.11 点阅读合约,我可以看到所有权归此地址 0x42997cf4fc165ebb8269cffc54a3198984367f02
所有。如何使用 python 上的 web3 API 自动化这个过程?或者您知道除了 selenium webdriver 之外的其他获取方法吗?
【问题讨论】:
首先您应该检查文档是否具有此功能。某些 API 可能只提供部分数据,其余部分可能需要付费 - 或者您必须使用Selenium
来获取它而无需付费。
【参考方案1】:
我没有使用web3
和bitcoins
,而是在互联网上挖掘(使用Google
)我
找到了类似的门户,其中包含有关 Ethereum 和问题 web3js - How to get value of a contract public property using web3.eth 的问题,代码在 javascript
中
在互联网上挖掘 Python 示例我用 Python 创建了版本
from web3 import Web3
bsc = "https://bsc-dataseed.binance.org/"
web3 = Web3(Web3.HTTPProvider(bsc))
print("connected:", web3.isConnected())
abi = '''[
"constant": true,
"inputs": [],
"name": "owner",
"outputs": [
"name": "",
"type": "address"
],
"payable": false,
"type": "function"
,
"inputs": [],
"payable": false,
"type": "constructor"
]'''
contract = web3.eth.contract(address="0x2A9718defF471f3Bb91FA0ECEAB14154F150a385", abi=abi)
owner = contract.functions.owner().call()
print("owner:", owner)
这给了我0x42997cf4fc165ebb8269cffc54a3198984367f02
【讨论】:
您的解决方案运行良好。谢谢你。如果我想在以太坊主网上获得合约所有者,如何更改“bsc”变量?谢谢。 我没有对其进行测试,但请参阅文档中的快速示例:Provider: Infura。它使用mainnet.infura.io 尝试使用此mainnet.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161 并收到此错误:web3.exceptions.ContractLogicError: execution reverted 我试过你的网址,它给了我InsufficientDataBytes: Tried to read 32 bytes. Only got 0 bytes
。也许它需要abi
中的不同文字
我该如何解决这个问题?应该做另一个问题吗?还是需要就您之前提到的问题询问 python-version?非常感谢您的帮助。以上是关于如何使用 web3 Api Python 获得智能合约的所有权?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Python 和 Web3.py 获取 ETH 智能合约的数量?
再深刻理解下web3.js中estimateGas如何计算智能合约消耗的gas量