Brownie调用Contract.from_abi()加载合约时info()函数命名空间冲突如何解决
解决方案
你遇到的是Brownie内置Contract类的成员方法和合约ABI定义的方法命名冲突问题,可通过以下两种方式解决:
- 最推荐:通过
functions命名空间访问合约方法
Brownie的所有合约实例都内置了functions属性,存储了合约对外暴露的全部原始方法,不会和Brownie自带类成员产生命名冲突,调用代码如下:
该方式不需要修改任何原有逻辑,也不会影响其他方法的正常调用。# 调用只读方法 result = contract.functions.info().call() # 若为需要上链的写入方法,传入账户参数即可 # tx = contract.functions.info({"from": your_account}) - 手动重命名冲突方法
如果需要简化后续调用,可以在加载合约后为冲突方法绑定别名:contract = Contract.from_abi(contract_name, address, abi_json) # 手动绑定别名 contract.contract_info = contract.functions.info # 后续直接调用别名即可 result = contract.contract_info().call()
内容的提问来源于stack exchange,提问作者Peteris
相关产品推荐
相关产品推荐

