事件
事件是以太坊虚拟机(EVM)日志基础设施提供的一个便利接口。用于获取当前发生的事件。
事件和日志有三个用途:
- 智能合约返回值给用户接口
- 异步的带数据的触发器
- 一种比较便宜的存储
智能合约返回值给用户接口
我们可以在 dapp 的用户界面中监听事件,EVM 的日志机制可以反过来“调用”用来监听事件的 Javascript 回调函数。
contract ExampleContract {
//一些状态变量
function foo(int256 value) returns (int256) {
//改变状态
return value;
}
}
假设exampleContract就是ExampleContract的一个实例,一个前端使用web3.js,通过模拟函数的执行可以获得返回值:
var returnValue = exampleContract.foo.call(2);
console.log(returnValue);
但是一旦提交合约调用成为一个交易,则无法得到返回值
var returnValue = exampleContract.foo.sendTransaction(2,{
from: web3.eth.coinbase});
//交易的话,这里应该是一个交易哈希值
console.log(returnValue);
sendTransa