No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Introducción a Solidity

Curso de Introducción a Solidity

Sebastián Leonardo Perez

Sebastián Leonardo Perez

Uso de Modificadores en Solidity

10/21
Recursos

Aportes 9

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Modificadores

Los modificadores son funciones especiales por el usuario y que se añaden a otra función para envolver su funcionamiento

modifier <name>(<type> <parameter>..., [,...]) {
  <content>
}

El guión bajo

El guión bajo (también conocido como placeholder), es una instrucción especial del modificador que indica dónde se va a ejecutar el código de la función inicial que envuelve al modifier.

Por ejemplo

## Primero valida y luego ejecuta
modifier isOwner() {
  if(<condicion>) revert()
  _;
}

## Primero ejecuta y luego valida
modifier isOwner() {
   _;
  if(<condicion>) revert()
}

## Ejecuta, valida y vuelve a ejecutar
modifier isOwner() {
   _;
  if(<condicion>) revert()
   _;
}

La función revert() se utiliza para arrojar una excepción en nuestro smart contract y revertir la función que la llama. Se puede agregar un mensaje como parámetro describiendo el error.

modifier EsOwner() {
        if (msg.sender != owner) revert("Solo el dueño del contrato puede modificarlo.");
        _;
    }

Dentro de un modificador de función se puede añadir toda la lógica que necesitemos, no se limita a una sola validación, se pueden usar estructuras require dentro de las mismas:

require( msg.sender == owner, "Solo el propietario puede cambiar el nombre del proyecto." );

Y de este modo añadir más validaciones o mecanismos de validación diferentes, podemos ver al modificador como una función que permite la ejecución de otra función siempre y cuando todas sus validaciones sean superadas.

Esto de los modificadores termina siendo un tipo de middleware para las funciones.

PURE - NO da acceso a Información del Contrato. VIEW - SÍ da acceso a Información del Contrato PERO NO LA MODIFICA

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

// Restringir el acceso a esta funcion, que solo el que hizo el deploy del contrto tenga acceso a esta funcion suma - restringimos peermisos!
contract Modificadores {
// alamcenamos quien hizo el deply del contrato
address private owner;
// esta funcion privada guarda va a guardar el nombde del Owner que haga el deploy

string private nombreOwner;

constructor(string memory nombre) {
// mediante el sender vamos a saber quien es el owner, almacenando en una variable privada.
    owner = msg.sender;
    nombreOwner = nombre;
}

function Suma(uint numero1, uint numero2) public view EsOwner() returns (uint) {
// entes er pure y paso a view porque usa informacion de contrato
    return numero1 + numero2;
}

// EsOwner - > nombr del modificador y debe ser super descriptivo
modifier EsOwner() {
// este modificador chequea quien es el owner. este se ejecutara al principio de l funcion
    if (msg.sender != owner) revert();
    // revert nos mostrara al hacer un call que no se pudo al ser una cuenta diferente
    _;
    //si se cumple el if se interrrumpe y si o si el modificador debe tener un guion bajo ->  este indica que despues ejecutar el modificador se ejecutara el flujo normal del contrato si se cumple el if en este caso!
}

}

Los Modificadores son como los decoradores

Aquí ya tiene un poco de sentido la blockchain jejejjeje la privacidad el 100% de los autorizados, podría acceder a un array guardado en la IPFS y permitir acceso a usuarios que pagan una suscripción por ejemplo?

RESUMEN CLASE 10:
MODIFICADORES

Permiten ejecutar código al inicio de una función y en general su uso está ligado a la restricción de permisos para la llamada de las mismas.

REMIX:

Modificadores.sol

// SPDX-License-Identifier: GLP-3.0

pragma solidity >=0.7.0 <0.9.0;

contract Modificadores {

    address private owner;

    constructor() {
        owner = msg.sender;
    }

    function Suma(uint numero1, uint numero2) public view esOwner() returns (uint) {
        return numero1 + numero2;

    }

    modifier esOwner() {
        if (msg.sender != owner) revert();
        _;
    }

}