Starting from Solidity v0.8.4, there is a convenient and gas-efficient way to explain to users why an operation failed through the use of custom errors. Until now, you could already use strings to give more information about failures (e.g., revert("Insufficient funds.");), but they are rather expensive, especially when it comes to deploy cost, and it is difficult to use dynamic information in them.
Source: https://blog.soliditylang.org/2021/04/21/custom-errors/
Custom Errors Should Be Used For Gas-optimization
Description
Permalinks
Mitigation
Consider using custom errors instead if the contract uses solidity version 0.8.4 or above.