Ereignis in Ansichtsfunktion ausgeben oder

Ist es möglich, ein Ereignis in der Ansichtsfunktion (über Ereignis oder Logi) auszugeben? Oder ist es möglich, einen Wert an Javascript zurückzugeben, ohne (vor) in einer Transaktionsfunktion zu minen? Mein Ziel ist es, Wartezeiten aufgrund von Mining mit Ereignisprotokollierung zu vermeiden.

Antworten (3)

Ist es möglich, ein Ereignis in der Ansichtsfunktion (über Ereignis oder Logi) auszugeben?

Da Ereignisprotokolle in Transaktionsbelegen gespeichert werden, glaube ich nicht, dass es möglich ist, ein Ereignis innerhalb einer Ansichtsfunktion auszugeben, da keine Transaktion stattfindet.

Oder ist es möglich, einen Wert an Javascript zurückzugeben, ohne (vor) in einer Transaktionsfunktion zu minen?

Ich glaube auch nicht, dass dies möglich ist. Der Rückgabewert einer Funktion, die eine Transaktion erstellt, ist die Transaktionsquittung. Innerhalb der Quittung finden Sie alle Ereignisse, die innerhalb dieser Funktion ausgegeben wurden.

Der Empfang erfordert jedoch das Mining des Blocks, und daher müssen wir warten. Ich schreibe eine zeitkritische Funktion mit Protokollen.
Sie können die Funktion lokal über Call in web3 ausführen. Ich denke, der zweite Teil Ihrer Antwort ist nicht richtig. Siehe meine Antwort unten.
Nach meiner Beobachtung gibt die Transaktionsübermittlung den Transaktions-Hash zurück und die Transaktionsbestätigung gibt die Transaktionsquittung mit den ausgegebenen Ereignisdetails zurück.

Q1: Ein Ereignis ist eine Zustandsänderung. Es ist nicht möglich, sie von viewoder pureFunktionen oder constantin der alten Syntax auszugeben.

F2: Es ist nicht möglich, Antwortwerte von einer signierten Transaktion zu erhalten. Sie erhalten immer eine Transaktionsquittung.

Die Muster sind etwas gewöhnungsbedürftig. Ich glaube fest daran, überprüfbare Ereignisprotokolle für jede wichtige Zustandsänderung auszugeben. Wenn Transaktionen abgebaut werden, kommen die relevanten Informationen mit der Bestätigung als Ereignisprotokollargumente an. Diese sind für Off-Chain-Kunden.

Die returnWerte oder noch wichtig. Sie sind die Antwortwerte, wenn die Funktion von einer anderen Funktion oder einem anderen Vertrag aufgerufen wird.

Zum Beispiel:

bool result = myOtherContract.insertSomething(); // expecting "true"/success

Wenn das für einen Kunden wichtig ist, so etwas wie:

emit LogResult(msg.sender, result);

Ich hoffe es hilft.

Die erste Frage, Es ist nicht möglich, weil das Ereignis den Zustand ändert. In Remix sehen Sie dafür eine Warnung.

Die zweite Frage. Sie können die Funktionen lokal ausführen, ohne eine Transaktion mit Call an das Netzwerk zu senden, sie verbraucht kein Gas und wird sofort ausgeführt.

Wenn Sie jedoch darauf abzielen, Transaktionen von Benutzern Ihres Systems zu veranlassen, bevor die Transaktionen abgebaut werden, ist dies nicht möglich.

Hoffe das hilft