Gibt es eine Möglichkeit, Ereignisse aus mehreren Verträgen mit nur einer Watch-Anweisung (so etwas wie [contract1.event, contract2.event, ...].watchAll()
) in Javascript zu beobachten?
Code dient nur zur Veranschaulichung:
var event = contract.EventName({from: address}); // watching multiple contracts/events possible?
event.watch(function(err, result) {
...
});
Es gibt eine eingebaute Funktion, um alle Ereignisse in einer Watch-Anweisung abzuhören
var events = myContractInstance.allEvents([additionalFilterObject]); // auf Änderungen achten events.watch(function(error, result){ wenn (! Fehler) console.log (Ergebnis); });
additionalFilterObject
kann verwendet werden, um die Ergebnisse zu filtern; Beispiel wäre das Hinzufügen einer Adresse{address: myAddress}
Auf der anderen Seite scheint es nicht möglich zu sein, die Ereignisse anhand der Namen zu filtern, es sei denn, Sie geben die Themen an, wobei additionalFilterObject
die Themenadressen der Ereignis-/Funktions-Hash sind (keccak256 Ihres Ereignisnamens, z. B. keccak256('EventName1(uint)')
), dann hätten Sie so etwas wie:
var events = myContractInstance.allEvents({Adresse: myAddress, Themen: [['0x1234...', '0x5678...']]}); // auf Änderungen achten events.watch(function(error, result){ wenn (! Fehler) console.log (Ergebnis); });
Sie können jedoch das Ereignisergebnis überprüfen und den Ereignisnamen nach den Ereignissen filtern, die Sie anhören möchten:
var events = myContractInstance.allEvents([additionalFilterObject]); // auf Änderungen achten events.watch(function(error, result){ wenn (! Fehler) { if(['Ereignisname1', 'Ereignisname2'].includes(result.event)) { //Tun } } });
und das wäre vielleicht besser lesbar. Eine andere weniger elegante Lösung könnte sein
var event1 = Vertrag.EventName1({von: Adresse}); var event2 = Vertrag.EventName2({von: Adresse}); event1.watch(meinRückruf); event2.watch(meinRückruf); Funktion myCallback(err, result) { }
Methode allEvents() funktioniert nicht für "web3": "^1.0.0-beta.36".
Dies wird einen Fehler auslösen
allEvents is not a function
Dies funktioniert nicht einmal für einige andere Versionen. Siehe hier https://github.com/ethereum/web3.js/issues/989 Es hat auch bei mir nicht funktioniert, ich verwende "web3": "^1.0.0-beta.36". Wenn jemand eine Alternative hat, teile sie.
AirUp
mirg