Verbrauchen von require()-Fehlern im web3.js-Client

Die Verwendung requirehilft 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 requirees tatsächlich zurückkehrt false. Das in dieser Antwort erwähnte Beispiel verwendet Ereignisse, die nach dem Testen einer ifBedingung 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 falseErgebnis zu konsumieren? Oder kann es in ein Ereignis geleitet werden, das in einem web3.jsClient verwendet werden kann?

Von einem web3,jsClient aus können Sie sehr einfach einen Funktionsaufruf aufrufen und verarbeiten, der auslöst require(<false condition>), wenn Sie das meinen. Ich mache das die ganze Zeit (als Teil des Testens und Verifizierens).

Antworten (2)

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)

Ok. Angenommen, ein Vertrag hängt von einem anderen Vertrag ab, der requirefehlgeschlagen ist. Dies kann nicht vom Frontend verarbeitet werden. Wie geht man mit einem solchen Szenario um?
Du kannst einfach nicht. Die Ausführung schlägt fehl und der Benutzer weiß nicht warum. Das Beste, was Sie tun können, ist, so gut wie möglich zu erklären, unter welchen Bedingungen eine bestimmte Funktion ausfallen könnte.

Fehlerursachen-Strings für revert und require wurden in solidity 0.4.22 eingeführt. Sie können den Grund für revertund 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

Wie können Sie jedoch von web3 aus auf diese Fehler zugreifen?
@Makaronodentro das ist noch nicht möglich, daran wird gearbeitet. Obwohl Sie auf Remix die Zeichenfolge für die Fehlerursache sehen können.
Ist es jetzt möglich, auf die Fehler von web3 zuzugreifen? @Aniket
@deju Es wird auch von truffle unterstützt, aber web3 scheint es in der stabilen Version 1.0 zu unterstützen, die auf den 30. Juni abzielt. Folgen Sie diesem für Updates: github.com/ethereum/web3.js/issues/1707