Solidity
處理來自其他合約的事件
我有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();
)