Solidity

如何將事件輸出分配給變數?

  • September 25, 2017

我想在我的 UI 中獲取事件結果。

這是我的契約

pragma solidity ^0.4.4;


contract T2{
uint public k;
event CheckVal(uint val);
function Test() returns (uint){        
 var temp=441;
 CheckVal(temp);
 k=32; 
 return temp;
  }    
}

在控制台中我有這個:

var eve=instance.CheckVal();
eve.watch(function(error, result){console.log( 
result.args.val.toNumber());});

每次我跑

   instance.Test({from:eth.accounts[0],gass:4200000})

441出現在控制台中,沒錯。但我想在我的 UI 中獲取值(即 441),所以我想將它分配給一個變數。

問題:如何將事件日誌的輸出分配給變數?

這個問題可能有很多不同的答案,具體取決於您想對變數做什麼(比如您想覆蓋它,還是儲存通過您的事件傳入的不斷增長的變數列表?),但最簡單的版本是像這樣。

var eve=instance.CheckVal(); var storedValue; eve.watch(function(error, result){ storedValue = result; });

現在,如果您註銷 storedValue,它將返回 441。

就這麼簡單:

var eventOutput
var eve = instance.CheckVal();
eve.watch(function(error, result){
 eventOutput = result.args.val.toNumber()
});

當然,您需要在前端以某種方式使用該輸出以使其可見,例如,如果這是一個 React 應用程序,則將其保存在狀態中。

引用自:https://ethereum.stackexchange.com/questions/27072