¿Qué es un modifier en Solidity?
Escrito por Frederik B
Solidity es un lenguaje de alto nivel orientado a objetos para implementar contratos inteligentes. Mientras aprendes Solidity, te vas a encontrar con los modifiers, un tipo especial de función que modifica el comportamiento de otras funciones.
En este artículo, explicaremos qué hace un modifier en Solidity, presentaremos los tipos de modifiers y te mostraremos cómo usarlos. Al terminar este artículo, podrás reconocer los modifiers de Solidity y entender cómo utilizarlos.
¿Qué hace un modifier en Solidity?
Un modifier es un tipo especial de función de Solidity que se usa para modificar el comportamiento de otras funciones. Por ejemplo, los desarrolladores pueden usar un modifier para verificar que se cumpla cierta condición antes de permitir que la función se ejecute.
Los modifiers son similares a las funciones, en el sentido de que pueden recibir argumentos y tener un tipo de retorno. Los modifiers también pueden encadenarse, es decir, puedes tener varios modifiers en una sola función.
Sin embargo, los modifiers solo pueden modificar la lógica del contrato, y no pueden modificar el almacenamiento de un contrato, lo cual incluye los structs. Los modifiers reducen la cantidad de código repetitivo (boilerplate) que los desarrolladores tienen que escribir, y pueden hacer que tu código Solidity sea más legible.
¿Se pueden usar varios modifiers en una función de Solidity?
Sí, los desarrolladores pueden usar varios modifiers en una sola función de Solidity. Los modifiers múltiples se separan con comas. Algo importante a tener en cuenta al usar varios modifiers es que el orden de los modifiers importa. El primer modifier de la lista se ejecutará primero, el segundo se aplicará en segundo lugar, y así sucesivamente.
Por ejemplo, si tienes un modifier que verifica si un usuario está autenticado y otro modifier que verifica si un usuario está autorizado para ver cierto recurso, el orden en que se apliquen esos modifiers determinará si el usuario puede ver el recurso o no.
¿Cuáles son los diferentes tipos de modifiers en Solidity?
Existen cuatro categorías amplias de modifiers en Solidity: gate checks, prerequisites, filters y prevención de ataques de reentrancy.
1. Gate checks
Un "gate check" es un modifier que verifica si cierta condición es verdadera antes de permitir que una función se ejecute.
Por ejemplo, podrías tener una función que permita a un usuario retirar dinero de su cuenta, pero antes de que la función se ejecute, un desarrollador podría querer verificar si el usuario tiene suficiente dinero en su cuenta para hacer el retiro. Esa verificación se considera un modifier de tipo gate check.
Otro ejemplo de gate check es una función que verifica si un usuario está autenticado antes de permitirle ver cierto recurso.
2. Prerequisites
Un "prerequisite" es un modifier que configura el entorno para que una función se ejecute, en lugar de verificar si cierta condición es verdadera.
Por ejemplo, un desarrollador de Solidity podría usar una función que requiera que se envíe cierta cantidad de Ether junto con ella para poder ejecutarse. En ese caso, el prerequisite sería la función que establece el balance de Ether.
3. Filters
Un "filter" es un modifier que verifica si cierta condición es verdadera, y, si lo es, permite que la función se ejecute. Si la condición no es verdadera, entonces la función no se ejecutará.
A diferencia de un gate check, que no permite automáticamente que la función se ejecute incluso si la condición es verdadera, un filter sí permitirá que la función se ejecute si la condición es verdadera.
4. Prevención de ataques de reentrancy
Un ataque de reentrancy es un tipo de ataque en el que un actor malicioso intenta ejecutar una función varias veces, mediante una llamada recursiva, para explotarla.
Por ejemplo, imagina que tienes una función que permite a un usuario retirar dinero de su cuenta. Un atacante de reentrancy podría intentar llamar a esa función varias veces para retirar más dinero del que realmente tiene en su cuenta.
Para prevenir ataques de reentrancy, puedes usar un modifier que verifique si la función está siendo llamada de forma recursiva. Si es así, la función no se ejecutará.
¿Cuál es la relación entre require y los modifiers en Solidity?
Require se usa a menudo de forma intercambiable con los modifiers, ya que ambos permiten** verificar si cierta condición es verdadera** antes de permitir que una función se ejecute. Si la condición especificada no es verdadera, el compilador arrojará un error.
Por ejemplo, el siguiente statement usa la palabra clave require para que solo un owner pueda interactuar con una función:
Existen algunas diferencias importantes entre require y los modifiers de Solidity:
- Los modifiers pueden usarse para configurar el entorno en el que se ejecutará una función (como en el caso de los prerequisites)
- Require solo puede usarse para verificar si cierta condición es verdadera
- Los modifiers pueden ser sobrescritos (overridden)
- Require no puede ser sobrescrito
¿Cómo maneja Solidity los modifiers en comparación con Vyper?
Vyper es un lenguaje pythónico para el desarrollo de contratos inteligentes en Ethereum que hace ciertos tradeoffs para aumentar la seguridad, incluyendo no usar modifiers. En su lugar, se espera que los desarrolladores usen verificaciones inline y asserts dentro de la función, y, al modificar contratos inteligentes, que hagan los cambios de forma explícita como parte de la función.
La decisión de Vyper de eliminar la posibilidad de usar modifiers aumenta la auditabilidad de los contratos inteligentes, porque el lector no tiene que ubicar mentalmente el modifier alrededor de la función para ver qué hará.
¿Qué es el override de modifiers?
La palabra clave "virtual" puede usarse para indicar que un modifier puede sobrescribirse en un contrato derivado. Por ejemplo, imagina que tienes un contrato "Base Contract" con un modifier "myModifier". También tienes un contrato "Derived Contract" que hereda de "Base Contract".
Si "Base Contract" está marcado como "virtual", entonces puede sobrescribirse en el contrato derivado. Esto se usa a menudo en el contexto de librerías, donde un contrato permite cierta personalización.
¿Cómo funcionan los modifiers con la herencia?
La herencia te permite extender los atributos y propiedades de un contrato, y en el contexto de los modifiers, la herencia te permite agregar nuevos modifiers, o sobrescribir los existentes. Esto puede hacerse con la palabra clave virtual, mencionada en la sección anterior.
La implementación simple a continuación muestra cómo funcionan juntos la herencia y los modifiers:
En este ejemplo, el contrato B hereda del contrato A. Ambos contratos tienen un modifier llamado "X". Sin embargo, en el contrato B, el modifier está marcado como "override", lo que indica que sobrescribe al modifier del contrato A.
Cómo usar un modifier en Solidity
Para usar un modifier, primero debes definir la función del modifier dentro de un contrato. Los modifiers usan un símbolo especial "_;" donde el cuerpo de la función se inserta solo si se cumple la condición del modifier.
El siguiente contrato muestra cómo usar un modifier:
En el ejemplo anterior, el contrato tiene dos modifiers: "onlyOwner" y "costs".
El primer modifier verifica que el msg.sender sea el owner del contrato, y el segundo modifier verifica que el msg.value sea mayor o igual a cierto precio.
Ambos modifiers pueden usarse en cualquier función del contrato.
Sigue aprendiendo sobre los modifiers en Solidity
Los modifiers son funciones que se usan para modificar el comportamiento de otras funciones. Al usar modifiers, puedes reducir la cantidad de código repetitivo que tienes que escribir, y puedes hacer que tu código Solidity sea más legible.
Para seguir aprendiendo sobre los modifiers en Solidity y cómo convertirte en desarrollador de Solidity, asegura tu lugar en el Bootcamp de Desarrollador de Ethereum de 7 semanas de Alchemy University. Creado originalmente por el equipo de ChainShot, este curso intensivo de Solidity GRATUITO es la mejor forma de aprender Solidity. Si los desarrolladores son nuevos en el desarrollo en general, el curso intensivo de JavaScript de 3 semanas de Alchemy University es un excelente prerequisito antes de empezar un bootcamp de Ethereum.
Resúmenes relacionados
Solidity3 de diciembre de 2025
Los 6 mejores IDEs de Solidity para desarrolladores (2026)
Explora los mejores IDEs para el desarrollo en Solidity.
Solidity19 de noviembre de 2025
Optimización de gas en Solidity: 12 técnicas para hacer tus smart contracts más económicos y eficientes
¿Quieres escribir mejor código y reducir tus fees de gas?
Solidity13 de noviembre de 2025
12 mejores prácticas de seguridad para smart contracts en Solidity
Protege tus smart contracts con estos consejos y herramientas de seguridad de expertos.

Construye magia blockchain
Alchemy combina los productos y herramientas de desarrollo Web3 más potentes con recursos, comunidad y un soporte legendario.