15. Modificadores

Son fragmentos de código que se ejecutarán antes que las funciones. Una de las aplicaciones más populares es la control de acceso para que sólo direcciones específicas puedan ejecutar una función.

# Declarando un modificador

En nuestro ejemplo, vamos a crear un modificador que verificará si la dirección que está llamando a la función es la dirección que está guardada como administrador en la variable admin. Si la instrucción require devuelve un True, entonces se ejecutará el código _; que significa: ejecutar lo que viene después.

Esto significa que si el código se detiene en require, no ejecutará la declaración underline, por lo tanto, no ejecutará el código de la función que viene después.

function saqueEth() external onlyAdmin {
  //...
}

modifier onlyAdmin() {
  require(msg.sender == admin);
  _; //Llamará a la función en la que esté contenido.
}

# Pasando parámetros

Para que los modificadores reciban parámetros, deben pasarse a las funciones en las que están insertados y tener nombres de variables idénticos.

//El valor de _a recibido por la función será encaminado para el modificador
function foo(uint _a) external miModificador(_a) {
  //...
}

modifier miModificador(uint a) {
  require(a == 10, "Mensaje de error");
  _; //Placeholder qie representa la función.
}

# Combinando más de un Modifier

Incluso es posible encadenar modificadores y pasar datos entre ellos, debiendo seguir la misma nomenclatura para los parámetros que se van a pasar.

function bar(uint _a) external modificador1(_a) modificador2(_a){
  //...
}

modifier modificador1(uint a) {
  require(a == 10);
  _; //Llamará al modificador 2.
}

modifier modificador2(uint a) {
  require(a == 10);
  _;
}

Los modificadores son verificaciones, por lo que para tener más de una verificación/condición para que una función pueda ejecutarse, simplemente inserte más modificadores.

Last Updated: 9/10/2022, 4:27:54