Solidità - Gestione degli errori

Solidity fornisce varie funzioni per la gestione degli errori. In genere, quando si verifica un errore, lo stato viene ripristinato al suo stato originale. Altri controlli servono per impedire l'accesso non autorizzato al codice. Di seguito sono riportati alcuni dei metodi importanti utilizzati nella gestione degli errori:

  • assert(bool condition)- Nel caso in cui la condizione non venga soddisfatta, questa chiamata al metodo causa un codice operativo non valido e tutte le modifiche apportate allo stato vengono ripristinate. Questo metodo deve essere utilizzato per errori interni.

  • require(bool condition)- Nel caso in cui la condizione non venga soddisfatta, questa chiamata al metodo torna allo stato originale. - Questo metodo deve essere utilizzato per errori negli ingressi o nei componenti esterni.

  • require(bool condition, string memory message)- Nel caso in cui la condizione non venga soddisfatta, questa chiamata al metodo torna allo stato originale. - Questo metodo deve essere utilizzato per errori negli ingressi o nei componenti esterni. Fornisce un'opzione per fornire un messaggio personalizzato.

  • revert() - Questo metodo interrompe l'esecuzione e ripristina tutte le modifiche apportate allo stato.

  • revert(string memory reason)- Questo metodo interrompe l'esecuzione e ripristina tutte le modifiche apportate allo stato. Fornisce un'opzione per fornire un messaggio personalizzato.

Esempio

Prova il codice seguente per capire come funziona la gestione degli errori in Solidity.

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.
   }
}

Quando viene chiamato il ripristino, restituirà i dati esadecimali come segue.

Produzione

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