如何使用 web3 Api Python 获得智能合约的所有权?

我正在使用 web3 API 和 Python 进行练习。我想提取特定智能合约的所有权,将合约地址(或智能合约)作为输入,并将合约的所有权作为输出。

例如,如果我在第 n.11 点检查此合同 0x2A9718defF471f3Bb91FA0ECEAB14154F150a385 on BscScan 阅读合同,我可以看到所有权归此地址 0x42997cf4fc165ebb8269cffc54a3198984367f02 所有。如何使用 python 上的 web3 API 自动化这个过程?或者你知道除了 selenium webdriver 之外的任何其他方法吗?

stack overflow How to get ownership of smart contract using web3 Api Python?
原文答案

答案:

作者头像

我不使用 web3 和比特币,但我在用 JavaScript 编写的 Ethereum Stack Exchange 网站上发现了一个类似的问题。

深入研究互联网上的 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