require()
es una función global en Solidity que evalúa una condición booleana. Si la condición es false
, la ejecución del contrato se detiene y se revierte al estado inicial. Además, permite proporcionar un mensaje de error que facilita la depuración de contratos.
require(condición, "Mensaje de error");
ue p
ara continuar la ejecución.
1. Reversión de cambios: Si la condición falla, se deshacen todos los cambios realizados en la transacción actual.
2. Devolución de gas: El gas no utilizado se reembolsa al remitente.
3. Depuración: El mensaje de error facilita la identificación del problema.
require()
pragma solidity ^0.8.0;
contract Validacion {
function establecerEdad(uint _edad) public pure returns (string memory) {
require(_edad >= 18, "La edad debe ser mayor o igual a 18");
return "Edad válida";
}
}
En este ejemplo, si _edad
es menor a 18, la ejecución se detendrá y mostrará el mensaje: "La edad debe ser mayor o igual a 18".
contract Permisos {
address public owner;
constructor() {
owner = msg.sender; // El creador del contrato es el propietario
}
function soloPropietario() public view {
require(msg.sender == owner, "No tienes permisos para ejecutar esta función");
}
}
Este contrato verifica que solo el propietario pueda ejecutar ciertas funciones. Si no lo es, la ejecución se detiene con un mensaje de error.
contract Transferencia {
address public owner;
constructor() {
owner = msg.sender;
}
// Función para recibir Ether
function recibirEther() public payable {
require(msg.value > 0, "Debe enviar una cantidad mayor a cero");
}
// Función para retirar Ether
function retirar() public {
require(msg.sender == owner, "Solo el propietario puede retirar fondos");
payable(owner).transfer(address(this).balance);
}
}
recibirEther
, se asegura que el valor enviado sea mayor a cero.
retirar
, se verifica que solo el propietario pueda retirar los fondos.
contract Estado {
bool public activo;
constructor() {
activo = true;
}
function desactivar() public {
activo = false;
}
function realizarAccion() public view {
require(activo, "El contrato está desactivado");
}
}
Este contrato permite realizar acciones solo si el estado del contrato es activo.
1. Validación de parámetros: Garantiza que las entradas sean válidas antes de proceder.
2. Restricción de acceso: Controla quién puede ejecutar funciones específicas.
3. Comprobación del estado del contrato: Asegura que el contrato esté en el estado correcto antes de realizar acciones.
4. Validación de transferencias: Confirma que las condiciones de una transferencia de Ether sean adecuadas.
require()
1. Simplicidad: Es fácil de implementar y mejora la legibilidad del código.
2. Seguridad: Permite prevenir errores y abusos mediante validaciones robustas.
3. Depuración: Los mensajes de error proporcionan contexto sobre las fallas.
Herramienta | Uso principal | Detiene ejecución | Mensaje de error |
---|---|---|---|
require()
|
Validar condiciones generales como parámetros y permisos. | Sí | Sí |
assert()
|
Detectar errores críticos en lógica interna o estados que nunca deben fallar. | Sí | No |
revert()
|
Similar a require() , pero con mayor control en lógica compleja.
|
Sí | Sí |
1. Mensajes cortos: Usa mensajes de error breves para ahorrar gas.
2. Condiciones claras: Diseña las condiciones para evitar errores comunes.
3. Evita abusar: No uses require()
para validar datos no esenciales, ya que aumenta el costo de gas.
Para más información sobre require()
, consulta la documentación oficial de Solidity.
Jorge García
Fullstack developer