首页 > 解决方案 > 如何从反应前端客户端应用程序调用solidity后备功能

问题描述

在我的solidity智能合约中,有一个后备功能如下:

contract MyContract {
//rest of contract
...

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

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

... 
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 is not a function

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

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

标签: reactjssolidity

解决方案


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

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


推荐阅读