Solidity
觀看多個契約/事件?
[contract1.event, contract2.event, ...].watchAll()
有沒有辦法在 Javascript 中僅使用一個監視語句(類似於 )來監視來自多個合約的事件?程式碼僅用於說明目的:
var event = contract.EventName({from: address}); // watching multiple contracts/events possible? event.watch(function(err, result) { ... });
有一個內置函式可以在一個監視語句中偵聽所有事件
var events = myContractInstance.allEvents ([additionalFilterObject]); // 觀察變化 events.watch(函式(錯誤,結果){ 如果(!錯誤) 控制台.log(結果); });
additionalFilterObject
可用於過濾結果;添加地址的範例是{address: myAddress}
另一方面,似乎不可能使用名稱過濾事件,除非您在
additionalFilterObject
主題地址是事件/函式雜湊(例如,您的事件名稱的 keccak256keccak256('EventName1(uint)')
)上指定主題,那麼您將有類似的內容:var events = myContractInstance.allEvents({address: myAddress, topic: [['0x1234...', '0x5678...']]}); // 觀察變化 events.watch(函式(錯誤,結果){ 如果(!錯誤) 控制台.log(結果); });
但是您可以檢查事件結果並根據要偵聽的事件過濾事件名稱:
var events = myContractInstance.allEvents ([additionalFilterObject]); // 觀察變化 events.watch(函式(錯誤,結果){ 如果(!錯誤){ if(['EventName1', 'EventName2'].includes(result.event)) { //做 } } });
這可能更具可讀性。另一個不太優雅的解決方案可能是
var event1 = contract.EventName1({from: address}); var event2 = contract.EventName2({from: address}); event1.watch(myCallback); event2.watch(myCallback); 函式我的回調(錯誤,結果){ }