Wie kann ich das Protokoll für alle Instanzen eines bestimmten Vertragstyps überwachen?

Das Anhängen eines Beobachters für jede Instanz eines Vertrags ist keine gute Idee in Bezug auf Speicher und CPU. Gibt es also eine Möglichkeit, Ereignisse aus allen Instanzen eines Vertrags zu überwachen, dh indem ein einziger Beobachter für alle Instanzen des Vertrags registriert wird?

Beachten Sie, dass ich die Adresse der Vertragsinstanzen nicht angeben möchte, da dies die gesamte DB-Suche erzwingen würde.

Ich muss die Änderungen am Vertrag in Echtzeit auf dem Client anzeigen und auch die DB in Echtzeit aktualisieren.

Können Sie nicht einen indizierten Parameter in das Ereignis einfügen, der die Art des Vertrags identifiziert, und dann auf Ereignisse lauschen, die nach diesem indizierten Parameter filtern?
@dragosb Sie können derzeit nur nach Adressen oder Arrays von Adressen filtern. Selbst wenn Sie die Art des Vertrags oder die Vertragsadresse bei Ereignissen übertragen, können Sie dieses Ereignis nicht finden, es sei denn, Sie haben sowieso die Adresse dieser Instanz beobachtet.
Das stimmt einfach nicht. Sie können Ereignisse basierend auf Themen filtern, die die indizierten Parameter sind ... oder vielleicht verstehe ich das, was Sie sagen, falsch

Antworten (4)

Eine Möglichkeit besteht darin, dass der Vertrag jederzeit einen zentralen "Beobachter"-Vertrag anrufen könnte, wenn er ein Protokoll erstellen möchte, und Sie dann nur die Protokolle dieses einen Vertrags überwachen müssen.

Um Ihre Frage zu beantworten: Nein, leider können Sie keine Ereignisse basierend auf einer Klasse/einem Vertrag erfassen, sondern nur auf Instanzen (Adressen).

Sie können in das Ereignis einen indizierten Parameter einfügen, der den Vertragstyp identifiziert, und dann nach Ereignissen lauschen, die nach diesem indizierten Parameter filtern.

Eine andere Möglichkeit besteht darin, im Ereignis Ihre Adresse als indizierten Parameter anzugeben, damit Sie alle Ihre Verträge abrufen können, und dann als einfachen Ereignisdatenparameter die Art des Vertrags anzugeben und die Kette herauszufiltern, indem Sie den Datenteil des Ereignisses analysieren.

Ein programmierbares Überwachungssystem, das außerhalb der Kette lief, wie QuickBlocks, kann dies tun. Mit QuickBlocks können Sie jeden Block beobachten, der von Ihrem lokalen Knoten kommt, und damit alles tun, was Sie wollen, einschließlich Filter basierend auf dem C++-Code, den Sie schreiben, um den Filter zu vervollständigen.