【问题标题】:how to call solidity fallback function from react front end client app如何从反应前端客户端应用程序调用solidity后备功能
【发布时间】:2021-09-18 02:08:33
【问题描述】:

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

contract MyContract {
//rest of contract
...

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

在我的反应客户端应用程序中,我有以下代码 sn-p:

... 
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" });

【问题讨论】:

    标签: reactjs solidity


    【解决方案1】:

    您可以构建一个缺少 data 字段的 tx,而不是创建 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

    【讨论】:

    • 非常感谢您的回答,还有一件事,我如何从可靠性测试脚本中调用回退函数。我可以从 javascript 测试脚本中调用它,但我不知道如何从可靠性测试脚本中调用它。
    • @MohammadMomtaz 在 Solidity 测试中,您可以使用 address 类型的低级 .call() 成员。示例:externalContractAddress.call("")(空字符串为空数据字段)... 文档:docs.soliditylang.org/en/v0.8.6/types.html#members-of-addresses
    猜你喜欢
    • 2018-09-06
    • 2021-06-11
    • 2018-12-10
    • 2021-06-20
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 2018-12-20
    • 2021-11-19
    相关资源
    最近更新 更多