Mehrere Verträge/Ereignisse ansehen?

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) {
         ...
   });

Antworten (2)

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);
});

additionalFilterObjectkann 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 additionalFilterObjectdie 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) {
}
Danke für die Antwort, ich nehme daraus, dass es nicht möglich ist, verschiedene Verträge und deren Ereignisse zu beobachten (nur jeweils alle Ereignisse aus einem Vertrag).
sorry ich habe deine frage falsch verstanden. Ich habe es zu schnell gelesen und finde erst jetzt heraus, dass Sie von verschiedenen Verträgen gesprochen haben. In diesem Fall können Sie einen Blick auf web3.eth.filter werfen. Vielleicht hilft dir github.com/ethereum/wiki/wiki/JavaScript-API#web3ethfilter

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.