solidity系列教程<四>事件

事件是與以太坊虛擬機日志工具的方便接口,我們先明確事件,日志這兩個概念。事件發(fā)生后被記錄到區(qū)塊鏈上成為了日志??偟膩碚f,事件強調(diào)功能,一種行為;日志強調(diào)存儲,內(nèi)容。

事件是以太坊EVM提供的一種日志基礎設施。事件可以用來做操作記錄,存儲為日志。也可以用來實現(xiàn)一些交互功能,比如通知UI,返回函數(shù)調(diào)用結(jié)果等

事件

當定義的事件觸發(fā)時,我們可以將事件存儲到EVM的交易日志中,日志是區(qū)塊鏈中的一種特殊數(shù)據(jù)結(jié)構。日志與合約關聯(lián),與合約的存儲合并存入?yún)^(qū)塊鏈中。只要某個區(qū)塊可以訪問,其相關的日志就可以訪問。但在合約中,我們不能直接訪問日志和事件數(shù)據(jù)(即便是創(chuàng)建日志的合約)。事件是合約和區(qū)塊鏈通訊的一種機制。你的前端應用“監(jiān)聽”某些事件,并做出反應。下面我們來看看,如何在Solidity中實現(xiàn)一個事件:

pragma solidity ^0.4.14;
contract Transfer{
// 這里建立事件
 event IntegersAdded(uint x, uint y, uint result);
 function add(uint _x, uint _y) public {
   uint result = _x + _y;
   //觸發(fā)事件,通知app
   emit IntegersAdded(_x, _y, result);
   return result;
  }
}

你的 app 前端可以監(jiān)聽這個事件。JavaScript 實現(xiàn)如下:

YourContract.IntegersAdded(function(error, result) { 
  // 干些事
}
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容