Un modifier es un fragmento de código que se define fuera de las funciones y se aplica a estas mediante su nombre. Antes de ejecutar el cuerpo de la función a la que se aplica, el modifier realiza acciones específicas como validar condiciones, restringir accesos o establecer permisos.
pragma solidity ^0.8.0;
contract Ejemplo {
address public owner;
// Inicialización del propietario en el constructor
constructor() {
owner = msg.sender;
}
// Definición de un modifier
modifier soloPropietario() {
require(msg.sender == owner, "No autorizado");
_; // Marca el lugar donde continuará la ejecución de la función
}
// Función que usa el modifier
function cambiarPropietario(address nuevoPropietario) public soloPropietario {
owner = nuevoPropietario;
}
}
_
en los modifiers:
El carácter _
indica el punto en el que se ejecutará el código de la función principal dentro del modifier. Todo el código del modifier que se encuentra antes de _
se ejecuta antes que la función, y el código después de _
se ejecuta después de la función.
contract AccesoRestringido {
address public owner;
constructor() {
owner = msg.sender;
}
modifier soloPropietario() {
require(msg.sender == owner, "Acceso denegado");
_;
}
function funcionRestrictiva() public soloPropietario {
// Lógica accesible solo para el propietario
}
}
contract Validacion {
uint public limite;
modifier validarLimite(uint valor) {
require(valor <= limite, "Valor excede el limite");
_;
}
function setLimite(uint _limite) public {
limite = _limite;
}
function actualizarValor(uint nuevoValor) public validarLimite(nuevoValor) {
limite = nuevoValor;
}
}
contract Pagos {
address public propietario;
constructor() {
propietario = msg.sender;
}
modifier requierePago() {
require(msg.value > 0, "Se requiere un pago");
_;
}
function realizarAccion() public payable requierePago {
// Lógica que solo se ejecuta si se realiza un pago
}
}
1. Código más limpio: Al encapsular lógica repetitiva en un modifier, las funciones son más legibles y concisas.
2. Reutilización: Un único modifier puede aplicarse a múltiples funciones, reduciendo redundancias.
3. Mantenibilidad: Al centralizar las condiciones de validación, es más fácil actualizar o corregir errores.
Para más detalles sobre los modifiers en Solidity, consulta la documentación oficial de Solidity.
Jorge García
Fullstack developer