当合同中不存在功能时不调用回退功能

时间:2019-09-04 12:33:19

标签: mocha ethereum solidity web3

我创建了一个具有后备功能的智能合约,当在不存在的合约上调用方法时,我想调用它。但是,我没有调用后备函数,而是得到了错误: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(具有后备功能)上调用方法?

2 个答案:

答案 0 :(得分:0)

您无法执行的操作。 lotteryContract.methods填充了ABI中提供的功能,因此您尝试调用的方法getPlayers()不存在,因此代码甚至在调用之前都失败,并带有javascript异常。智能合约。

答案 1 :(得分:0)

如果要触发fallback函数,最简单的方法是使用sendTransaction

const receipt = await web3.eth.sendTransaction({
    from: accounts[0],
    to: lotteryContract.options.address,
})