Umgang mit Ereignissen aus anderen Verträgen

Ich habe 2 Verträge. Ein Vertrag ist derjenige, mit dem ich direkt interagiere.

Das Ereignis, das ich hören möchte, wird nicht durch den Hauptvertrag ausgelöst, sondern durch den, den es intern aufruft.

Wenn ich im folgenden Beispiel die Methode „testing“ aufrufe, wie kann ich auf „MyEvent“ warten, das von dem anderen Vertrag ausgelöst wird?

contract OtherContract {

event MyEvent(uint8);
function doSomething() {
         MyEvent(1);
    }
}

contract Test {

    OtherContract constant otherContract  = OtherContract(0x0b258ee7bf483bb49a5956407702ca5b08197b4c);

    function testing() {
         otherContract.doSomething();        
    }
}

Antworten (3)

Sie könnten dies mit der Web3-JavaScript-API handhaben . Sie müssten nur auf die Instanz des Vertrags verweisen, für die Sie Ereignisse ansehen möchten.

var event = myContractInstance.MyEvent({parameters} [Filters])

// watch for changes
event.watch(function(error, result){
  if (!error)
    console.log(result);
});

Hier finden Sie Informationen zu Filtern .

Smart Contracts können keine Ereignisse sehen, aus den Dokumenten :

Protokoll- und Ereignisdaten sind nicht innerhalb von Verträgen zugänglich (nicht einmal von dem Vertrag, der sie erstellt hat).

Wenn Sie möchten, dass Verträge miteinander interagieren, müssen sie sich direkt gegenseitig aufrufen (wie Sie es mit dieser Funktion getan haben otherContract.doSomething();).

Fügen Sie im Testvertrag eine Methode und ein Ereignis hinzu. Die Methode sollte auf das Ereignis in „Anderer Vertrag“ lauschen und das Ereignis in „Testvertrag“ ausgeben. Hören Sie sich das Testvertragsereignis aus Ihrer aufrufenden Anwendung an.