No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Reg铆strate

Comienza en:

3D
6H
56M
45S
Curso de Introducci贸n a Solidity

Curso de Introducci贸n a Solidity

Sebasti谩n Leonardo Perez

Sebasti谩n Leonardo Perez

Modificadores

10/21
Recursos

Aportes 9

Preguntas 4

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

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();
        _;
    }

}