Día 5: Constantes en Solidity

Tabla de contenidos

Una vez más, estamos de vuelta con el quinto artículo de la serie #SolidityDe0a100. En esta ocasión, exploraremos el interesante mundo de las constantes en el lenguaje Solidity. Las constantes son variables especiales que se definen con un valor fijo y no pueden modificarse durante la ejecución de un contrato inteligente. Utilizar constantes en el código de Solidity no solo garantiza inmutabilidad, sino que también ayuda a optimizar los costos de gas. ¡Así que adentrémonos en el poder de las constantes! Entendiendo las constantes en Solidity.

En Solidity, las constantes desempeñan un papel crucial para fortalecer y asegurar el código, al tiempo que mejoran su eficiencia en costos. Se definen mediante la palabra clave “constant”, lo que asegura que su valor permanezca inalterable una vez asignado. Por convención, las variables constantes se escriben en mayúsculas para distinguirlas de las variables regulares.

Veamos un ejemplo de contrato inteligente que demuestra el uso de constantes:

En el fragmento de código anterior, presentamos un contrato llamado “Constants” que muestra el uso de constantes. Hemos definido dos constantes: “MY_ADDRESS” y “MY_UINT”. “MY_ADDRESS” es del tipo “address” y contiene una dirección de Ethereum fija, mientras que “MY_UINT” es del tipo “uint” y almacena el valor 123. Dado que estas constantes están declaradas como públicas, sus valores pueden ser accedidos por llamadas externas.

Utilizando constantes en tus contratos inteligentes

 

Ahora que comprendemos el papel de las constantes, exploremos sus aplicaciones y beneficios dentro de los contratos inteligentes de Solidity.

  1. Inmutabilidad: Las constantes proporcionan inmutabilidad a las variables, asegurando que sus valores no puedan cambiar accidental ni intencionalmente. Esto es especialmente útil cuando se definen valores críticos que deben permanecer constantes durante la ejecución del contrato. Al utilizar constantes, se evitan modificaciones no deseadas que podrían comprometer la integridad del código.
  1. Optimización de gas: Las constantes pueden tener un impacto significativo en el costo de gas de los contratos inteligentes. Debido a que sus valores están codificados de forma fija y no cambian, el compilador de Solidity puede optimizar el bytecode en consecuencia. Esta optimización resulta en un menor consumo de gas, lo que hace que los contratos sean más eficientes y rentables.
  1. Legibilidad del código: Las constantes mejoran la legibilidad del código al definir y separar claramente los valores que deben permanecer constantes. Siguiendo la convención de usar letras mayúsculas, las constantes son fácilmente identificables, incluso en bases de código extensas. Esto mejora el mantenimiento del código y reduce las posibilidades de errores debido a modificaciones accidentales de valores.
  1. Reusabilidad: Las constantes pueden reutilizarse en todo el contrato inteligente e incluso en varios contratos. Al definir constantes para valores comúnmente utilizados, se promueve la reutilización de código, la estandarización y la coherencia. También se simplifica el mantenimiento y las actualizaciones, ya que modificar un valor constante en un solo lugar refleja automáticamente el cambio en todos los lugares donde se utilice.

Analizando el contrato inteligente de ejemplo

 

Echemos un vistazo más de cerca al contrato “Constants” que presentamos anteriormente. Este contrato demuestra el uso de constantes a través de dos variables: “MY_ADDRESS” y “MY_UINT”.

La constante “MY_ADDRESS” es una variable de tipo “address” que contiene la dirección de Ethereum 0x777788889999AaAAbBbbCcccddDdeeeEfFFfCcCc. Este valor está codificado de forma fija y no puede cambiarse. Podría representar la dirección del propietario importante del contrato, una interfaz de contrato bien conocida o cualquier otra dirección que deba permanecer constante.

Por otro lado, la constante “MY_UINT” es una variable de tipo “uint” con un valor fijo de 123. Esta constante podría representar diversas cosas dependiendo del contexto del contrato, como un umbral predefinido, un identificador específico o un parámetro constante para una función.

Al utilizar constantes de esta manera, se garantiza que los valores asignados no puedan modificarse, proporcionando consistencia, seguridad y optimización de gas a los contratos inteligentes de Solidity.

Este código es una versión actualizada del contrato “Constants” anterior. Incluye dos variables constantes, “MY_ADDRESS” y “MY_UINT”, junto con funciones para obtener sus valores. Estas funciones permiten que llamadas externas recuperen los valores de las constantes en modo de solo lectura.

Pasando a otro ejemplo, donde el contrato contiene dos constantes para almacenar dos números enteros y tiene funciones para realizar la suma y la resta de esos números.

En este contrato llamado “MathOperations”, hemos definido dos constantes, “NUMBER1” y “NUMBER2”, con valores 10 y 5, respectivamente. Estas constantes representan los números con los que realizaremos operaciones matemáticas.

Luego, tenemos dos funciones públicas: “sum” y “subtract”. La función “sum” devuelve la suma de los valores de “NUMBER1” y “NUMBER2”, mientras que la función “subtract” devuelve la resta de estos dos valores.

Para probar este contrato, desplegarlo en la Blockchain y llamar a las funciones “sum” y “subtract” para obtener los resultados de las operaciones matemáticas.

La inmutabilidad juega un papel crucial en la programación, asegurando que ciertas variables no puedan ser modificadas una vez que son inicializadas. Solidity, un lenguaje de programación utilizado para el desarrollo de contratos inteligentes en la cadena de bloques Ethereum, proporciona un mecanismo para definir variables inmutables. A lo largo de este artículo, investigaremos el concepto de inmutabilidad y su importancia en la programación con Solidity.

Comprendiendo la Inmutabilidad

 

En Solidity, las variables inmutables son similares a las constantes en otros lenguajes de programación, ya que una vez que se les asigna un valor, no pueden ser modificadas ni reasignadas. Esta característica las hace útiles para almacenar valores que permanecen constantes durante la ejecución de un contrato inteligente. Sin embargo, es importante destacar que existen algunas diferencias importantes entre las variables inmutables y las constantes en Solidity:

Variables Inmutables

 

  1. Asignación de valor: Las variables inmutables deben recibir su valor en el constructor del contrato y, una vez asignado, no pueden cambiar su valor durante toda la vida del contrato. Esto significa que no se pueden modificar después de la creación del contrato.
  2. Almacenamiento: Las variables inmutables se almacenan directamente en el bytecode del contrato y se reemplazan en cada dirección donde se despliega el contrato. Esto hace que el valor inmutable sea más eficiente en términos de costos de gas durante la ejecución del contrato.
  3. Acceso desde otros contratos: Las variables inmutables se pueden acceder desde otros contratos y también están disponibles en la interfaz ABI del contrato, lo que facilita la interacción con ellos desde otras partes del sistema.
  4. Uso en ensamblador: Las variables inmutables pueden usarse en el ensamblador de Solidity y también pueden ser pasadas como referencia a funciones en llamadas de bajo nivel.

Constantes

 

  1. Asignación de valor: Las constantes, también conocidas como variables constant, se definen utilizando la palabra clave constant o immutable en versiones anteriores a Solidity 0.6. Una constante puede tener su valor definido en tiempo de compilación, es decir, puede ser una expresión constante calculada en tiempo de compilación, como una suma de constantes.
  1. Almacenamiento: Las constantes no se almacenan en el bytecode del contrato, sino que su valor se sustituye directamente por el compilador en los lugares donde se usan en el código del contrato. Esto puede resultar en un aumento del tamaño del bytecode del contrato cuando se utilizan muchas constantes.
  1. Acceso desde otros contratos: Las constantes no se almacenan en la interfaz ABI del contrato, por lo que no pueden ser accedidas directamente desde otros contratos. Sin embargo, su valor puede ser utilizado por el compilador en tiempo de compilación para realizar optimizaciones.
  2. Uso en ensamblador: Las constantes no pueden ser utilizadas en el ensamblador de Solidity, ya que su valor no se almacena directamente en el bytecode del contrato.

Echemos un vistazo más detallado al código de ejemplo a continuación:

En el código anterior, tenemos un contrato llamado “Inmutable” que contiene dos variables inmutables: MI_DIRECCION y MI_ENTERO.

Análisis Detallado

 

  1. MI_DIRECCION: Esta variable de tipo address está declarada como public e immutable. El modificador de visibilidad public permite que otros contratos o entidades externas accedan al valor de MI_DIRECCION. La palabra clave immutable asegura que esta variable no se puede modificar después de que se le haya asignado un valor. En el constructor, MI_DIRECCION recibe el valor de msg.sender, que representa la dirección del que desplegó el contrato.
  1. MI_ENTERO: Esta variable de tipo uint (entero sin signo) también está declarada como public e immutable. Al igual que MI_DIRECCION, no se puede modificar después de su inicialización. El parámetro del constructor _miEntero se utiliza para asignar el valor de MI_ENTERO.

Al emplear la palabra clave immutable, garantizamos que estas variables conservarán sus valores asignados durante toda la vida útil del contrato. Esto es especialmente útil cuando se trata de valores que deben permanecer constantes y no pueden ser modificados.

Ejemplo de Código

Para ilustrar aún más el concepto de inmutabilidad, consideremos el siguiente ejemplo:

En este fragmento de código, tenemos un contrato llamado “EjemploInmutable” que declara una variable inmutable MI_CONSTANTE. El constructor asigna el valor pasado _valor a MI_CONSTANTE. Sin embargo, si intentamos modificar el valor de MI_CONSTANTE mediante la función actualizarConstante, se producirá un error de compilación porque las variables inmutables no pueden cambiarse una vez asignadas.

Contenido Educativo

 

La inmutabilidad es un concepto fundamental en Solidity y el desarrollo de blockchain. Garantiza que variables críticas no puedan ser alteradas, proporcionando seguridad y confianza en la ejecución de contratos inteligentes. Al entender y utilizar la inmutabilidad, los desarrolladores pueden crear aplicaciones descentralizadas robustas y confiables.

Algunos puntos clave sobre la inmutabilidad en Solidity:

  • Las variables inmutables son similares a las constantes y no pueden modificarse después de su inicialización.
  • La inmutabilidad mejora la seguridad y la confianza en la ejecución de contratos inteligentes.
  • Solidity emplea la palabra clave immutable para declarar variables inmutables.
  • Las variables inmutables reciben valores en el constructor y no pueden cambiarse posteriormente.

La inmutabilidad es una característica poderosa en Solidity que ayuda a crear contratos inteligentes, seguros y predecibles. Al definir ciertas variables como inmutables, los desarrolladores pueden asegurarse de que los valores críticos permanezcan constantes a lo largo de la vida útil del contrato. Te recomiendo probar cada uno de los fragmentos que vayamos viendo en Remix, para que puedas experimentar de primera mano su funcionamiento. Además, te sugiero que agregues nuevas variables y modifiques la funcionalidad del código proporcionado, ya que es así como realmente se aprende a programar.

Recuerda que las constantes son aliadas confiables cuando se trata de crear contratos inteligentes, seguros, eficientes y fáciles de mantener. Te recomiendo probar cada uno de los fragmentos que vayamos viendo en Remix, para que puedas experimentar de primera mano su funcionamiento. Además, te sugiero que agregues nuevas variables y modifiques la funcionalidad del código proporcionado, ya que es así como realmente se aprende a programar.

 ¡Te invito a que te unas a esta fascinante experiencia en el desarrollo de Smart Contracts en Ethereum!

Ver Video Completo

Más sobre Blockchain & Web3

You cannot copy content of this page

Scroll al inicio

Aplica para el proceso de admisión del programa master emprendimiento blockchain architecture & networks programming

¿Estas preparado para ver como tu carrera profesional se acelera más que nunca? Envíanos tus datos y agendamos tu entrevista. ¡Las plazas son muy limitadas!

Aplica para el proceso de admisión del programa MASTER INGENIERO BLOCKCHAIN FROM WEB2 TO WEB3

¿Estas preparado para ver como tu carrera profesional se acelera más que nunca? Envíanos tus datos y agendamos tu entrevista. ¡Las plazas son muy limitadas!

Próxima Promoción: Abril 2023