reactjs - 如何从反应前端客户端应用程序调用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" });
解决方案
您可以构建一个缺少字段的 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
推荐阅读
- python - Calling foreign key object several times in Django without several DB requests
- dns - iRedmail:电子邮件进入 Hotmail 的垃圾邮件
- java - 如何在 Android 的 RGB 轮中找到特定颜色的 X、Y 坐标
- javascript - uikit 框架 - 进度条动画零到值
- r - R Markdown 文档中是否可以有通用常量?
- c++ - 当我们可以更有效地使用向量来实现优先级队列时,为什么使用堆来实现它
- database - ORACLE - 在 FORALL 中使用 INSERT seq 进行更新
- mysql - 自引用关系
- django - 在 Django 中具有多种选择的对象过滤器
- node.js - 为什么 JSDOM 与 Sinon 假定时器一起使用时会进入无限循环?