You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python的web3 API查询智能合约的所有权归属地址

实现方案

完全不需要用到Selenium,有两种更稳定高效的实现方式,核心逻辑都是调用合约公开的读方法,不需要爬取页面。

前置准备

先安装Python的web3依赖:

pip install web3

方案1:直接通过Web3调用合约owner()方法

绝大多数符合OpenZeppelin Ownable标准的合约都会内置一个公开的owner()无参方法,直接返回合约所有者地址,你只需要对应链的RPC节点地址即可调用,不需要全量合约ABI,只需要用到这个方法的ABI片段即可。

示例代码(以BSC链为例)

from web3 import Web3

# 连接BSC公开RPC节点,也可替换为自有节点或其他链的RPC地址
w3 = Web3(Web3.HTTPProvider('https://bsc-dataseed1.binance.org/'))

# 待查询的合约地址
contract_address = '0x2A9718defF471f3Bb91FA0ECEAB14154F150a385'
# owner()方法的最小ABI片段,无需获取全合约ABI
abi = [
    {
        "inputs": [],
        "name": "owner",
        "outputs": [{"internalType": "address", "name": "", "type": "address"}],
        "stateMutability": "view",
        "type": "function"
    }
]

# 实例化合约对象
contract = w3.eth.contract(address=w3.to_checksum_address(contract_address), abi=abi)
# 调用读方法获取所有者地址
owner_address = contract.functions.owner().call()

print(f"合约所有者地址:{owner_address}")

运行上述代码会直接输出你示例中的结果 0x42997cf4fc165ebb8269cffc54a3198984367f02。

方案2:通过区块浏览器API实现(无需自行维护RPC节点)

如果你需要适配更多非标准命名的权限方法,或者不想依赖RPC节点,可以用对应链的区块浏览器公开API,先拉取合约的完整ABI,再遍历匹配所有者相关的方法(比如getOwner、admin、governor等)后调用即可,只需要申请对应浏览器的免费API密钥即可使用。

注意事项

  • 如果目标合约没有采用标准的Ownable模式,而是自定义权限逻辑,你需要先确认合约中对应查询所有者的方法名和参数,调整ABI片段即可。
  • 两种方案的性能和稳定性都远高于Selenium爬取页面,不会被反爬策略限制,响应速度也快几个数量级。

内容的提问来源于stack exchange,提问作者giacomomaraglino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:54:05