如何通过Web3调用已部署Setup合约中model成员变量的函数?
解决方法
步骤1:获取Model合约的部署地址
Solidity中,public修饰的状态变量会自动生成一个同名的view类型getter函数,你可以直接调用setup_contract的model()方法获取Model合约的地址:
model_address = setup_contract.functions.model().call()
步骤2:准备Model合约的ABI
要调用Model合约的函数,你需要拥有Model合约的ABI(可从Model.sol编译产物中获取,或从部署记录里提取)。
步骤3:创建Model合约的实例
用获取到的model_address和Model的ABI,通过web3创建合约实例:
model_contract = w3.eth.contract(address=model_address, abi=model_abi)
步骤4:调用Model合约的函数
现在可以通过model_contract调用Model合约内的任意公开函数,比如如果Model里有solved()函数:
is_solved = model_contract.functions.solved().call()
额外说明
你提供的Setup.sol代码存在一处笔误:isSolved()函数里的magic.solved()应改为model.solved(),否则合约无法正常编译。
内容的提问来源于stack exchange,提问作者Divyansh
相关产品推荐
相关产品推荐

