html
4.3 Modificadores de Funciones en Solidity
En Solidity, los modificadores de funciones ofrecen una manera estructurada y reutilizable para añadir lógica adicional a las funciones. Los modificadores pueden validar condiciones antes y/o después de la ejecución de una función y ayudan a reducir la repetición de código.
Concepto Básico
Un modificador de función actúa como un intermediario que ejecuta su lógica antes de llamar a la función objetivo. Si las condiciones del modificador no se cumplen, la función no se ejecutará.
Definiendo un Modificador
Para definir un modificador, utilizamos la palabra clave modifier
seguida del nombre del modificador y su lógica. Aquí un ejemplo simple:
pragma solidity ^0.8.0 contract Example { address public owner constructor() { owner = msg.sender } modifier onlyOwner() { require(msg.sender == owner, Not the contract owner) _ } function securedFunction() public onlyOwner { // Function logic here } }
Profundizando en el Uso de Modificadores
El modifier onlyOwner()
en el ejemplo anterior asegura que solo el propietario del contrato pueda llamar a securedFunction
. Si alguien más intenta llamarla, la llamada fallará.
El carácter _
en un modificador indica dónde se insertará el cuerpo de la función objetivo. Esto permite al modificador ejecutar su lógica antes y/o después de la ejecución de la función.
Ejecución antes de la Función
En el ejemplo anterior, el modificador se ejecuta antes de la función, verificando que el mensaje provenga del dueño del contrato:
modifier onlyOwner() { require(msg.sender == owner, Not the contract owner) _ }
Ejecución después de la Función
modifier executeAfter() { _ // Lógica que se ejecuta después de la función }
Ejemplo Completo
En este contrato, combinamos ambos tipos de ejecuciones:
pragma solidity ^0.8.0 contract AdvancedExample { address public owner uint public lastAccess constructor() { owner = msg.sender } modifier onlyOwner() { require(msg.sender == owner, Not the contract owner) _ } modifier updateLastAccessTime() { _ lastAccess = block.timestamp } function securedFunction() public onlyOwner updateLastAccessTime { // Function logic here } }
En este ejemplo, onlyOwner
se asegura de que solo el propietario pueda llamar a securedFunction
, y updateLastAccessTime
actualiza el tiempo de acceso después de ejecutar la función.
Modificadores con Parámetros
Los modificadores también pueden aceptar parámetros para personalizar su comportamiento:
pragma solidity ^0.8.0 contract ParameterExample { address public owner constructor() { owner = msg.sender } modifier onlyAfter(uint _time) { require(block.timestamp >= _time, Function called too early) _ } function timeRestrictedFunction(uint _time) public onlyAfter(_time) { // Function logic here } }
Aquí, onlyAfter
verifica que el tiempo actual sea mayor o igual que el tiempo especificado como parámetro antes de permitir la ejecución de la función timeRestrictedFunction
.
Conclusiones
Los modificadores de funciones en Solidity son herramientas poderosas que permiten añadir lógica de manera modular y reutilizable. Facilitan la implementación de controles de acceso, validaciones y cualquier lógica que necesite ser ejecutada en varios puntos del contrato sin duplicar código.
Deja una respuesta