solidity - 我如何从 UI 中调用实心发射
问题描述
我这里有这个功能
function reinvest() onlyDivis public {
address _customerAddress = msg.sender;
uint256 _dividends = myDividends(false);
payoutsTo_[_customerAddress] += (int256) (_dividends * magnitude);
_dividends += referralBalance_[_customerAddress];
referralBalance_[_customerAddress] = 0;
uint256 _tokens = purchaseTokens(0x0, _customerAddress, _dividends);
emit onReinvestment(_customerAddress, _dividends, _tokens);
我可以从我的 UI 调用 reinvest 函数,但是如何使用 emit (函数)以便我可以使用它来更新我的 UI 上的信息?
解决方案
发出事件实际上是一种非常好的方法,可以稍后搜索一些东西。
太好了,以至于有些人开发了ethql,甚至还有TheGraph。
但是,虽然这两个一开始可能看起来有点复杂,但您可以通过使用ethers轻松地做您想做的事情。
这是一个例子
let tx = await contractWithSigner.setValue("I like turtles.");
contract.on("ValueChanged", (author, oldValue, newValue, event) => {
// Called when anyone changes the value
console.log(author);
// "0x14791697260E4c9A71f18484C9f997B308e59325"
console.log(oldValue);
// "Hello World"
console.log(newValue);
// "Ilike turtles."
// See Event Emitter below for all properties on Event
console.log(event.blockNumber);
// 4115004
});
await tx.wait();
使用以下合约
pragma solidity ^0.4.24;
contract SimpleStorage {
event ValueChanged(address indexed author, string oldValue, string newValue);
string _value;
constructor(string value) public {
emit ValueChanged(msg.sender, _value, value);
_value = value;
}
function getValue() view public returns (string) {
return _value;
}
function setValue(string value) public {
emit ValueChanged(msg.sender, _value, value);
_value = value;
}
}
推荐阅读
- amazon-web-services - AWS Lambda 函数会重试多少次以异步调用?
- laravel - rest api 登录资源的最佳实践
- domain-driven-design - 提醒 - DDD
- git - Git 日志获取真正的提交作者
- angularjs - 在按钮中自动添加 ng-hide
- java - RxJava2 - 合并流中的值和副作用
- apache - 将整个子目录设为 410
- c++ - boost 1.72 为 icmp::resolver 获取 icmp::socket io_service
- python - Python:合并 io.BytesIO 形式的音频文件
- javascript - 解析 Promise 数组