Back

Lock.sol

Este es un ejemplo de un contrato de bloqueo (Lock.sol) utilizando el framework HardHat. A lo largo de este tutorial, construiremos este contrato paso a paso, explicando cada componente clave.

Declaración del contrato

Primero, declaramos nuestro contrato utilizando la palabra reservada contract. Este es el bloque base de cualquier contrato en Solidity.

Licencia SPDX

Antes de comenzar con el contrato, es buena práctica agregar un comentario con el identificador de licencia SPDX, lo cual es obligatorio en Solidity para especificar la licencia del código fuente.

Versión de Solidity

Para que el compilador sepa qué versión de Solidity utilizar, debemos especificar la versión del compilador con la declaración pragma solidity. En este caso, permitimos cualquier versión igual o superior a 0.8.24, pero inferior a 0.9.0.

Variables de estado

Añadimos una variable de estado llamada unlockTime. Las variables de estado son aquellas que se almacenan en la blockchain y persisten entre las llamadas de función. En este caso, unlockTime almacenará el tiempo específico en el cual se podrá desbloquear el contrato.

Constructor del contrato

Añadimos un constructor, que es una función especial que se ejecuta solo una vez cuando se despliega el contrato. Aquí, permitimos que se pase un parámetro _unlockTime para establecer el valor de unlockTime al momento de la creación del contrato.

Propietario del contrato

Añadimos una variable de estado llamada owner para almacenar la dirección del propietario del contrato. Asignamos esta dirección en el constructor, utilizando msg.sender, que es la dirección que despliega el contrato.

Función de retiro

Añadimos una función withdraw() que permitirá al propietario retirar los fondos del contrato. En esta etapa, la función no tiene restricciones adicionales.

Validación de unlockTime

Agregamos la primera validación en el constructor. Utilizamos require para asegurarnos de que el tiempo de desbloqueo esté en el futuro. Si esta condición no se cumple, la transacción se revertirá.

Evento de retiro

Añadimos un evento llamado Withdrawal para registrar información sobre cada retiro realizado desde el contrato. Emitimos este evento dentro de la función withdraw() para que los registros sean accesibles fuera del contrato.

Restricción de tiempo en retiro

Añadimos otra validación en la función withdraw(). Utilizamos require para asegurarnos de que los fondos solo se puedan retirar después de que se haya alcanzado unlockTime.

Restricción de propietario en retiro

Finalmente, añadimos una validación adicional para asegurarnos de que solo el propietario del contrato pueda realizar el retiro.

contract Lock {
}

Lock.sol

Hemos completado el contrato Lock.sol. Este contrato es un ejemplo sencillo pero efectivo de cómo bloquear fondos en un contrato inteligente hasta un tiempo específico. Hemos cubierto las partes fundamentales de un contrato en Solidity, desde la declaración de variables y constructores hasta la implementación de funciones y eventos. Este ejemplo es una buena base para entender conceptos más avanzados en el desarrollo de contratos inteligentes.