Solidity

處理來自其他合約的事件

  • June 12, 2018

我有2份契約。一份契約是我直接與之互動的一份契約。

我想听的事件不是由主合約觸發的,而是它在內部呼叫的那個。

在下面的例子中,如果我呼叫“testing”方法,我如何監聽另一個合約觸發的“MyEvent”?

contract OtherContract {

event MyEvent(uint8);
function doSomething() {
        MyEvent(1);
   }
}

contract Test {

   OtherContract constant otherContract  = OtherContract(0x0b258ee7bf483bb49a5956407702ca5b08197b4c);

   function testing() {
        otherContract.doSomething();        
   }
}

您可以使用Web3 JavaScript API來處理這個問題。您只需要引用您想要監視事件的契約實例。

var event = myContractInstance.MyEvent({parameters} [Filters])

// watch for changes
event.watch(function(error, result){
 if (!error)
   console.log(result);
});

有關過濾器的資訊,請參見此處。

智能合約看不到事件,來自文件

無法從合約中訪問日誌和事件數據(甚至無法從創建它們的合約中訪問)。

如果你想讓合約相互互動,它們必須直接相互呼叫(就像你對這個函式所做的那樣otherContract.doSomething();

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