Die Verwendung require
hilft bei der Validierung von Benutzereingaben, bevor eine Aktion ausgeführt werden kann. Es scheint jedoch nicht viele Optionen zu geben, um mit dem Szenario umzugehen, wenn require
es tatsächlich zurückkehrt false
. Das in dieser Antwort erwähnte Beispiel verwendet Ereignisse, die nach dem Testen einer if
Bedingung ausgelöst werden. Diese Antwort sagt unverblümt, dass es nicht möglich ist, vom Front-End aus zu handhaben revert
(obwohl die Frage über war ).require
Ist es also überhaupt möglich, ein require
false
Ergebnis zu konsumieren? Oder kann es in ein Ereignis geleitet werden, das in einem web3.js
Client verwendet werden kann?
Wenn Sie anfordern / bestätigen / zurücksetzen, wird alles, was in der Funktion getan wurde oder getan werden würde, rückgängig gemacht, einschließlich Ereignisse.
Also, nein, wenn ein require/revert/asserting auftritt, gibt es keine Möglichkeit, etwas Nützliches zu informieren oder zurückzugeben, um den Fehler zu behandeln.
Wie ich in einer anderen ähnlichen Frage erwähnt habe, müssen Sie auch clientseitig nach diesen potenziellen Fehlern suchen, damit Sie verhindern können, dass der Vertrag einen solchen Zustand erreicht. (ZB: wenn eine Funktion erfordert, dass msg.sender == Eigentümer, im Frontend, wenn der angemeldete Benutzer nicht der Eigentümer ist, deaktivieren/verbergen Sie die Schaltfläche, die diese Vertragsfunktion aufruft)
require
fehlgeschlagen ist. Dies kann nicht vom Frontend verarbeitet werden. Wie geht man mit einem solchen Szenario um?Fehlerursachen-Strings für revert und require wurden in solidity 0.4.22 eingeführt. Sie können den Grund für revert
und definieren require
. Mit einigen Fehlerbehebungen ist die neueste Version von Solidity 0.4.23.
Weitere Einzelheiten: https://medium.com/secureblocks/solidity-0-4-22-enhancements-94d2b9b8b6fe
gute Stimmung
web3,js
Client aus können Sie sehr einfach einen Funktionsaufruf aufrufen und verarbeiten, der auslöstrequire(<false condition>)
, wenn Sie das meinen. Ich mache das die ganze Zeit (als Teil des Testens und Verifizierens).