The revert statement in Solidity is used to stop the execution of a function and revert any changes made during the transaction. It is commonly used for error handling and to provide a way to return an error message when a condition is not met. When revert is called, the state of the contract is rolled back to what it was before the transaction started, and any gas that is not consumed during the execution is refunded to the caller.

Purpose of the Revert Statement

  • Error Handling: To handle errors gracefully and revert the state of the contract to a valid state.
  • Input Validation: To ensure that the inputs to functions meet certain criteria before proceeding with execution.
  • Providing Error Messages: To communicate the reason for the failure back to the caller, making it easier to debug issues.

Syntax

revert("Error message");

Sample Code for Revert Statement


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract RevertExample {
uint256 public totalSupply;

constructor(uint256 initialSupply) {
if (initialSupply == 0) {
revert("Initial supply must be greater than 0"); // Ensure initial supply is valid
}
totalSupply = initialSupply;
}

function mint(uint256 amount) public {
if (amount <= 0) {
revert("Amount must be greater than 0"); // Validate that amount is positive
}
totalSupply += amount; // Update total supply
}

function burn(uint256 amount) public {
if (amount <= 0) {
revert("Amount must be greater than 0"); // Validate that amount is positive
}
if (amount > totalSupply) {
revert("Amount exceeds total supply"); // Ensure we don't burn more than available
}
totalSupply -= amount; // Update total supply
}
}

How It Works

In the above example, the RevertExample contract uses the revert statement in several places:

  • In the constructor, it checks that initialSupply is greater than 0. If not, it calls revert with an appropriate error message.
  • In the mint function, it checks that the amount to mint is greater than 0. If not, it reverts with an error message.
  • In the revert0 function, it checks both that the amount is greater than 0 and that it does not exceed the revert2. If either condition fails, it reverts with a relevant message.

Key Points to Remember

  • The revert statement is a powerful tool for error handling and validation in Solidity.
  • When revert is called, all state changes made during the transaction are undone.
  • It is a good practice to provide a descriptive error message to help identify the cause of the failure.
  • Use revert for input validation and to ensure that the contract remains in a valid state.

Conclusion

The revert statement is essential for managing errors and ensuring that contracts behave as expected. By using revert effectively, developers can create robust contracts that handle invalid inputs gracefully and provide clear feedback on errors.