如何从 React 前端客户端应用程序调用 solidity fallback 函数

how to call solidity fallback function from react front end client app

在我的 solidity 智能合约中有一个回退函数如下:

contract MyContract {
//rest of contract
...

//**Fallback function**
    function () payable external {}
}

在我的 React 客户端应用程序中,我有以下代码片段:

... 
const instance = new web3.eth.Contract(
        MyContract.abi,
        deployedNetwork && deployedNetwork.address,
      );
...
await instance.methods.send({from:this.state.accounts[0],value:this.state.chargeValue})
...

在控制台日志中出现以下错误 TypeError: this.state.contract.methods.send 不是一个函数

在合约javascript测试脚本中,我可以使用以下代码调用回退函数:

const MyContractInstance = await MyContract.deployed();
    
await MyContractInstance .sendTransaction({value:"1000000000000000000" });

您可以构建一个缺少 data 字段的交易,而不是创建 Contract 实例并使用其辅助方法(没有辅助方法来执行回退函数)。

await web3.eth.sendTransaction({
    to: deployedNetwork.address,
    from: this.state.accounts[0],
    value: this.state.chargeValue
});

如果您不指定data字段,它将为空,这将导致执行合约回退功能。

文档:https://web3js.readthedocs.io/en/v1.3.4/web3-eth.html#sendtransaction