Solidität - Fehlerbehandlung

Solidity bietet verschiedene Funktionen zur Fehlerbehandlung. Wenn ein Fehler auftritt, wird der Status im Allgemeinen auf seinen ursprünglichen Status zurückgesetzt. Andere Überprüfungen sollen den unbefugten Zugriff auf Code verhindern. Im Folgenden finden Sie einige wichtige Methoden zur Fehlerbehandlung:

  • assert(bool condition)- Falls die Bedingung nicht erfüllt ist, verursacht dieser Methodenaufruf einen ungültigen Opcode und alle am Status vorgenommenen Änderungen wurden zurückgesetzt. Diese Methode ist für interne Fehler anzuwenden.

  • require(bool condition)- Falls die Bedingung nicht erfüllt ist, kehrt dieser Methodenaufruf in den ursprünglichen Zustand zurück. - Diese Methode ist für Fehler in Eingängen oder externen Komponenten zu verwenden.

  • require(bool condition, string memory message)- Falls die Bedingung nicht erfüllt ist, kehrt dieser Methodenaufruf in den ursprünglichen Zustand zurück. - Diese Methode ist für Fehler in Eingängen oder externen Komponenten zu verwenden. Es bietet eine Option zum Bereitstellen einer benutzerdefinierten Nachricht.

  • revert() - Diese Methode bricht die Ausführung ab und setzt alle am Status vorgenommenen Änderungen zurück.

  • revert(string memory reason)- Diese Methode bricht die Ausführung ab und setzt alle am Status vorgenommenen Änderungen zurück. Es bietet eine Option zum Bereitstellen einer benutzerdefinierten Nachricht.

Beispiel

Versuchen Sie den folgenden Code, um zu verstehen, wie die Fehlerbehandlung in Solidity funktioniert.

pragma solidity ^0.5.0;

contract Vendor {
   address public seller;
   modifier onlySeller() {
      require(
         msg.sender == seller,
         "Only seller can call this."
      );
      _;
   }
   function sell(uint amount) public payable onlySeller { 
      if (amount > msg.value / 2 ether)
         revert("Not enough Ether provided.");
      // Perform the sell operation.
   }
}

Wenn "Zurücksetzen" aufgerufen wird, werden die hexadezimalen Daten wie folgt zurückgegeben.

Ausgabe

0x08c379a0                     // Function selector for Error(string)
0x0000000000000000000000000000000000000000000000000000000000000020 // Data offset
0x000000000000000000000000000000000000000000000000000000000000001a // String length
0x4e6f7420656e6f7567682045746865722070726f76696465642e000000000000 // String data