如何使用 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】:

我没有使用web3bitcoins,而是在互联网上挖掘(使用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如何使用web3py与以太坊投资智能合约交互

如何通过 Python 和 Web3.py 获取 ETH 智能合约的数量?

再深刻理解下web3.js中estimateGas如何计算智能合约消耗的gas量

使用 web3.py 解码智能合约的返回值?

Solana Rust 智能合约如何获得区块高度或 Unix 时间?

Python Flask如何开发以太坊智能合约