I am someone new to Solidity and going through the custom errors part with REVERT I have found examples where the word "ERROR" is thrown inside CONTRACT
pragma solidity 0.8.18;
contract EjercicioSemana4 {
// definir address 'admin' con valor de 0x08Fb288FcC281969A0BBE6773857F99360f2Ca06
address public admin = 0x08Fb288FcC281969A0BBE6773857F99360f2Ca06;
// definir boolean public 'pausado' con valor de false
bool public pausado;
error SaldoInsuficiente();
...
function transferir(address _destinatario, uint256 _cantidad) public {
if (_cantidad >= balances[msg.sender]) {
revert SaldoInsuficiente();
} else {
balances[msg.sender] -= _cantidad;
balances[_destinatario] += _cantidad;
emit Transfer(msg.sender, _destinatario, _cantidad);
}
}
On the other hand, reviewing examples on the web as well as in the Solidity documentation I see that they declare the ERROR outside CONTRACT
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
/// Insufficient balance for transfer. Needed `required` but only
/// `available` available.
/// @param available balance available.
/// @param required requested amount to transfer.
error InsufficientBalance(uint256 available, uint256 required);
contract TestToken {
mapping(address => uint) balance;
function transfer(address to, uint256 amount) public {
if (amount > balance[msg.sender])
revert InsufficientBalance({
available: balance[msg.sender],
required: amount
});
balance[msg.sender] -= amount;
balance[to] += amount;
}
// ...
}
Are there any relevant differences in the definition of the ERROR statement outside or inside of CONTRACT?
Best Answer
If it's defined outside you can share it among your contracts and maintain consistency in your code, other than that I don't think there are any other relevant differences in deployment or execution costs