这通常发生在使用 eth-brownie
部署合约时。在部署合约时,需要获取合约地址并将其存储在变量中以供后续使用。但是,有时合约并不会直接以合约对象的形式返回,而是以交易收据的形式返回。
要解决这个问题,我们可以通过 eth-brownie
提供的 Contract.from_abi
方法手动创建一个合约对象。该方法需要传入三个参数:
下面是一个示例代码:
from brownie import Contract, MyContract
# 部署合约
my_contract = MyContract.deploy({'from': accounts[0]})
# 获取合约地址
contract_address = my_contract.address
# 使用 from_abi 方法手动创建合约对象
my_contract = Contract.from_abi("MyContract", contract_address, MyContract.abi)
# 现在 my_contract 变量是一个合约对象,而不是交易收据。
# 可以使用该对象调用合约方法等操作。
通过上述步骤,就能够从地址中创建合约对象,而无需依赖于部署操作返回的合约对象。