Back

ERC20.sol

Este es un ejemplo de un contrato ERC20 (ERC20.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. En este caso, el contrato implementará la interfaz estándar de ERC20.

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. Este comentario no afecta el código ejecutable, pero es necesario para la conformidad legal.

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. Esto asegura que el contrato se compile correctamente solo con versiones compatibles del compilador.

Importar la implementación estándar de ERC20

Aquí importamos la implementación estándar de ERC20 desde OpenZeppelin. Esto nos permite utilizar todas las funciones y propiedades que conforman el estándar ERC20 en nuestro contrato, como transfer, balanceOf, etc.

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í, inicializamos el nombre y el símbolo del token utilizando el constructor de ERC20, y realizamos la asignación inicial de tokens al msg.sender, que es la cuenta que despliega el contrato.

Función de mint interna

La función _mint es una función interna utilizada para crear nuevas unidades del token. Aquí, se está utilizando en el constructor para asignar una cantidad inicial de tokens al desplegador del contrato. La cantidad de tokens se especifica en función del decimals, que es típicamente 18 para un token ERC20.

Restricción de minting

Añadimos una función pública llamada mint, que permite crear nuevos tokens. Para evitar que cualquier usuario cree tokens arbitrariamente, esta función está restringida al owner del contrato, utilizando la biblioteca Ownable de OpenZeppelin.

Transferencia de tokens

El contrato ya tiene implementada la funcionalidad de transferencia de tokens porque hereda de ERC20. Aquí, los usuarios pueden transferir tokens entre cuentas usando la función transfer, que está disponible de manera predeterminada en el contrato ERC20.

Añadir capacidad de pausado

Añadimos la capacidad de pausar las funciones del contrato en caso de emergencia, utilizando el contrato Pausable de OpenZeppelin. Esto nos permite detener las transferencias de tokens en situaciones críticas.

Modificar transferencias con capacidad de pausado

Modificamos la función interna _beforeTokenTransfer para incluir la verificación de que el contrato no esté pausado antes de permitir transferencias de tokens. Esto se realiza anulando la función de ERC20 e incluyendo la verificación de whenNotPaused.

contract MyToken {
}

ERC20.sol

Hemos completado el contrato ERC20.sol. Este contrato es un ejemplo detallado de cómo implementar un token ERC20 siguiendo el estándar más utilizado en Ethereum. Hemos cubierto las partes fundamentales y progresivas del contrato, desde la inicialización del token hasta la implementación de funciones adicionales como mint, pause y transfer. Este ejemplo proporciona una base sólida para construir funcionalidades más avanzadas en contratos de tokens.