Interaktion mit dem Smart Contract aus der Java-Anwendung (We3j)

Ich habe viele Fragen zum Arbeitsablauf (Abfolge) der Interaktion mit dem Smart Contract aus der Java-Anwendung, daher werde ich zuerst erklären, was ich getan habe, und dann meine Fragen stellen. Wenn ich etwas falsch verstehe, lassen Sie es mich bitte wissen.

1- Ich habe Smart Contract geschrieben. 2- Verwenden Sie Truffle, um den Smart Contract Java Wrapper zu erhalten. (contract.java) 3- Verwenden Sie testrpc, um den Vertrag zu testen

Ich habe 2 Klassen, die testrpc-Konten (Anmeldeinformationen) verwenden, um mit dem Smart Contract zu interagieren und seine Funktionen aufzurufen

Jede Klasse (node1.java, node2.java) ruft eine Funktion im Smart Contract namens (send) auf, um ihre Daten an die Kette zu senden.

Ich habe ein Ereignis hinzugefügt, das ausgelöst wird, wenn die 2 Knoten dort Daten gesendet haben

Was ich nicht verstehe, ist, wie ich den Java-Code (sagen wir MainProgram.class) immer auf dieses Ereignis prüfen lassen kann. Da ich überprüfen muss, ob beide Knoten ihre Daten senden, rufe ich eine andere Funktion auf, um diese Daten zu analysieren.

Wie ich verwalten, kontrollieren und überprüfen kann, welche Transaktionen durchgeführt wurden oder nicht, ich meine, wie ich die Ereignisse im Java-Code verwenden und den Code für immer laufen lassen und prüfen kann, ob dieses Ereignis eintritt, eine Aktion ausführt.

Ich hoffe, ich kann klar erklären, was ich brauche

Vielen Dank im Voraus.

Fügen Sie einfach eine weitere Sache hinzu, wenn mein Verständnis richtig ist und ich eine MainProgram-Klasse benötige, um die Ereignisse zu steuern und zu überprüfen, dann muss ich eines der testrpc-Konten verwenden, um diesen Code auszuführen. Dies bedeutet, dass dieses Programm als Knoten in der Kette betrachtet wird und als Manager für das Netzwerk fungiert, sodass der Smart Contract nicht die Kontrolle hat !!
Bin kein Java-Entwickler, aber sehen Sie, ob diese Antwort hier ethereum.stackexchange.com/a/41534/20357 Ihnen eine Vorstellung gibt.

Antworten (1)

In Ihrem Java-Wrapper für jede Art von Ereignis in Ihrem SmartContract gibt es eine Funktion, die so aussieht:

public Observable<ApprovalEventResponse> approvalEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {

            ...                

            return typedResponse;
        }
    });
}

Sie können dieses Observable von Ihrem Java-Code aus wie folgt abonnieren:

contract.approvalEventObservable(DefaultBlockParameter.valueOf("Earliest"),DefaultBlockParameter.valueOf("Latest")).asObservable().subscribe( event ->{
    System.out.prtinln(event._approver);
});

Dadurch werden alle aufgetretenen Ereignisse wiedergegeben und das Attribut vorheriger Ereignisse sowie neue Ereignisse gedruckt, wenn sie auftreten.