ETH Kipu
  • Ethereum Developer Pack
  • Módulo 1
    • Intro a Smart Contracts
      • Fundamentos de Blockchain
        • Antecedentes
        • Bitcoin
        • Qué es Blockchain
        • Conceptos Clave en Blockchain
        • Cómo funciona la Blockchain
        • Tipos de Blockchain
        • Modelos de Consenso
      • El nuevo Internet
        • Web 3
        • Elementos Fundamentales
        • Impacto de Ethereum en Diversos Sectores
      • Wallets
        • Componentes de una wallet
        • Tipos de Wallet
        • Códigos mnemónicos
      • Ethereum 101
        • Smart Contracts
        • Cuentas
          • Tipos de cuentas
          • Contenido de cuentas
        • Transacciones
          • Componentes
          • Ciclo de vida
        • Gas
        • Solidity
        • EVM
          • La máquina de estados
          • Opcodes
          • Cómo funciona la EVM
          • Clientes de ejecución
          • DApps
      • Blockchain Explorer
        • Funciones de un blockchain explorer
        • Beneficios de utilizar un blockchain explorer
      • Remix
        • Características de Remix
        • Workspaces o espacios de trabajo
        • Cargar y compilar un contrato
        • Desplegar en la máquina virtual de Remix (Remix VM)
        • Interactuando con funciones
        • Desplegar en una red pública
      • Crea tu primer Smart Contract
  • Módulo 2
    • Fundamentos de Solidity
      • Hello World
      • Tipos de Datos
      • Funciones
      • Variables
        • Ejercicio 1
      • Operadores
        • Ejercicio 2
      • Constructor
        • Ejercicio 3
      • Convenciones de nomenclatura
      • Tipos de almacenamiento para variables
      • Estructuras de Control
        • Ejercicio 4
      • Modificadores
      • Eventos
        • Ejercicio 5
      • Tipos de Referencia
        • Arrays
          • Ejercicio 6
        • Mappings
          • Ejercicio 7
        • Structs
          • Ejercicio 8
      • Address Payable
      • Cómo reciben Ether los contratos y funciones
      • Transferencias de Ether
      • Conceptos Avanzados
        • Codificación ABI
        • Hashing
        • This
        • Herencia
        • Abstract
        • Interface
        • Llamadas entre contratos
        • EVM
        • ABI
        • Bytecode
        • Opcodes
  • Módulo 3
    • Estándares, Librerías y Patrones
      • Buenas Prácticas de Diseño
      • Patrones de Diseño
      • EIP y ERC
      • ERC-20
      • ERC-721
      • Open Zeppelin
      • Crea un Token ERC-20
      • Almacenamiento Descentralizado: IPFS
      • Crea un Token ERC-721
      • DeFi
  • Módulo 4
    • Toolkit para desarrollo en Ethereum
      • Requisitos para el módulo 4
        • Terminal
        • Git y Github
        • Node.js y npm
        • Visual Studio Code para Solidity
      • Toolkit
        • JSON-RPC
        • Ethers.js
          • Ejercicio
        • Hardhat
          • Despliegue de un contrato en Hardhat
          • Despliegue de un contrato en una red pública
        • Scaffold-ETH
          • Características
          • Cómo instalar Scaffold-ETH
  • Módulo 5
    • Seguridad, Pruebas y Auditoría
      • Pruebas
        • Importancia de realizar pruebas
        • Métodos para probar contratos inteligentes
          • Pruebas automatizadas
          • Pruebas manuales
        • Conceptos importantes en testing
        • Herramientas para testing
        • Testing con Hardhat
        • Recursos adicionales
      • Seguridad
        • Una mentalidad distinta de diseño
        • Principales vulnerabilidades en smart contracts
          • Reentrancy attack (ataque de reentrada)
          • Replay attack (ataque de repetición)
          • Price Oracle Manipulation (Manipulación de Oráculos de Precios)
          • Missing Access Control (Pérdida de Control de Acceso)
          • Reward Manipulation (Manipulación de Recompensas)
          • Failure to Initialize (Falla al Inicializar)
          • Front-running
          • Invariant Breaks (Ruptura de invariantes)
          • Mishandling of ETH (Mal manejo de ETH)
          • Denial of Service (DoS - Denegación de Servicio)
          • Integer overflow and underflow (desbordamiento y subdesbordamiento de enteros)
          • Phishing y Typosquatting
        • Recursos adicionales
      • Auditoría de smart contracts
        • Proceso de Auditoría
        • Herramientas
        • Cómo prepararse para una auditoría
        • El test Rekt
        • Retos
        • Recursos adicionales
  • Contribuye
    • Kipu Explorer
Powered by GitBook
On this page

Was this helpful?

  1. Módulo 2
  2. Fundamentos de Solidity

Modificadores

Los modificadores en Solidity son una característica poderosa que permite a los desarrolladores cambiar o ampliar la semántica de las funciones en contratos inteligentes. Proporcionan una forma reutilizable y flexible de controlar el comportamiento de las funciones. Los modificadores pueden ser utilizados para añadir requisitos previos a la ejecución de una función o para modificar su comportamiento de alguna manera.

Propósito de los Modificadores

El principal propósito de los modificadores es añadir una lógica común a varias funciones de un contrato inteligente, lo que ayuda a reducir la redundancia del código y mejora su mantenibilidad. Por ejemplo, se pueden usar para:

  • Restringir el acceso a funciones específicas solo a ciertos usuarios (como el propietario del contrato).

  • Validar entradas a las funciones.

  • Guardar condiciones o estados específicos antes y después de la ejecución de una función.

Cómo Funcionan los Modificadores

Un modificador es definido de manera similar a una función, pero se utiliza para envolver la lógica de otra función. Dentro del cuerpo del modificador, el código especial _; indica dónde se debe insertar el código de la función modificada. Cuando una función se llama, primero se ejecuta el código del modificador, hasta que se encuentra el _;, momento en el cual se ejecuta el código de la función, y después, si es necesario, el código restante del modificador.

Ejemplo Básico

Consideremos un modificador simple que restringe el acceso a una función solo al dueño (owner) del contrato:

pragma solidity ^0.8.0;

contract MyContract {
    address public owner;

    constructor() {
        owner = msg.sender; // Establece el dueño del contrato al ser desplegado
    }

    // Definición del modificador
    modifier onlyOwner() {
        require(msg.sender == owner, "Solo el propietario puede ejecutar esta función.");
        _; // Continúa con la ejecución de la función modificada
    }

    // Uso del modificador en una función
    function myRestrictedFunction() public onlyOwner {
        // Lógica de la función aquí
    }
}

Características Importantes

  • Composición: Los modificadores pueden ser aplicados a una función en secuencia, permitiendo componer diferentes comportamientos y restricciones de manera flexible.

  • Parámetros: Al igual que las funciones, los modificadores pueden recibir parámetros. Esto permite crear modificadores más dinámicos y reutilizables que pueden operar basándose en argumentos pasados durante la llamada a la función.

  • Visibilidad: Los modificadores pueden ser declarados como public o internal. Esto afecta cómo pueden ser utilizados dentro del mismo contrato o en contratos derivados.

PreviousEjercicio 4NextEventos

Last updated 8 months ago

Was this helpful?