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 callsrevert
with an appropriate error message. - In the
mint
function, it checks that theamount
to mint is greater than 0. If not, it reverts with an error message. - In the
revert
0 function, it checks both that theamount
is greater than 0 and that it does not exceed therevert
2. 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.