我创建了一个具有后备功能的智能合约,当在不存在的合约上调用方法时,我想调用它。但是,我没有调用后备函数,而是得到了错误:lotteryContract.methods.getPlayers()不是函数。
为什么不调用后备功能?
这是彩票合同中存在的后备功能:
function () external payable {
.... delegates call to another contract ...
}
这是测试(lotteryContract中不存在getPlayers()):
beforeEach(async () => {
accounts = await web3.eth.getAccounts(); // unlocked accounts
created automatically for us with ganache
// use accounts[0] to deploy lottery contract to the test network
lotteryContract = await new
web3.eth.Contract(JSON.parse(compiledLottery.interface))
.deploy({data: compiledLottery.bytecode})
.send({gas: '1000000', from: accounts[0]});
});
describe('Upgrading a Lottery Contract', () => {
it('allows one account to enter', async () => {
const players = await
lotteryContract.methods.getPlayers().call({
from: accounts[0]
});
})
}
我认为我可能会错误地在lotteryContract(具有后备功能)上调用方法?
答案 0 :(得分:0)
您无法执行的操作。 lotteryContract.methods
填充了ABI中提供的功能,因此您尝试调用的方法getPlayers()
不存在,因此代码甚至在调用之前都失败,并带有javascript异常。智能合约。
答案 1 :(得分:0)
如果要触发fallback
函数,最简单的方法是使用sendTransaction
。
const receipt = await web3.eth.sendTransaction({
from: accounts[0],
to: lotteryContract.options.address,
})