Require

Require is a keyword in Solidity that is used to make sure that functions are called with the correct arguments.

  • require declares constraints which must be satisfied before code execution.

  • It accepts a single argument and returns a boolean value after evaluation.

  • It also has a custom error string option.

contract ExampleContract {    
    function exampleFunction(uint a, uint b) public {        
        require(a > b);    
     // require(a > b, "a is not larger than b");    
    }
}
  • If the condition evaluates to false then exception is raised and execution is terminated.

  • The unused gas is returned back to the caller and the state is reversed to its original state.

Keep error strings to be under 32 characters for gas savings

Use require() to:

  • Validate function inputs

  • Validate the response from an external contract

  • Validate state conditions prior to executing state changing operations

Require and Revert

  • Same thing, user choice.

  • revert("some error string") aborts execution and reverts state changes, providing an explanatory string.

require(amount <= msg.value, "Not enough ETH");

// or:

if (amount < msg.value){
    revert("Not enough ETH");
}

// require just seems more tidy
  • There has been a shift to using custom errors paired with revert due to gas savings.

Last updated