Estructura de un smart contract en Solidity

Resumen

Un smart contract en Solidity se construye con cuatro bloques que definen cómo interactúa con la blockchain: cabecera, declaración, variables de estado y funciones. Entender esta estructura es el primer paso para programar contratos inteligentes en redes como Celo o Ethereum y desplegarlos sin errores.

¿Cuáles son las partes de un smart contract?

Un contrato inteligente vive en una blockchain y hereda características como la irrevocabilidad de las ejecuciones y la inmutabilidad de los datos. Esa rigidez es justo lo que lo vuelve confiable para finanzas descentralizadas [1:00].

La anatomía base se divide en cuatro piezas:

  • Cabecera: contiene el pragma, que indica la versión del compilador de Solidity, y los includes para importar otros contratos y modularizar el código.
  • Declaración del contrato: define el nombre y características adicionales con la palabra clave contract.
  • Variables de estado: describen qué información maneja el contrato, desde saldos de billeteras hasta cadenas de texto o números.
  • Métodos o funciones: son la base angular de la interacción y permiten leer o modificar las variables de estado [2:30].

¿Qué es una variable de estado? Es la información persistente que el contrato guarda en la blockchain, como saldos, textos o números, y que solo se modifica invocando funciones del propio contrato.

¿Qué tipos de funciones existen y cuáles cuestan gas?

Las funciones se clasifican según cómo tocan la cadena, y eso determina si pagas o no.

Funciones view, normales y pure

  • Funciones view: solo leen el estado, se ejecutan localmente en un nodo y no requieren consenso. Su ejecución es gratis [4:30].
  • Funciones normales: escriben sobre las variables del contrato, requieren consenso entre nodos y tienen un costo en Celo Gold o Celo Dollar según la complejidad del cambio.
  • Funciones pure: ni leen ni escriben el estado. Son cálculos o verificaciones empaquetadas y tampoco generan costo en gas [5:40].

Esta diferencia importa porque cada vez que pulsas un botón en la dApp, estás eligiendo entre una operación gratis o una que te cobra cripto.

¿Por qué las funciones view no cuestan gas? Porque no modifican la blockchain. Como no hay cambio de estado, los nodos no necesitan ponerse de acuerdo y la lectura se resuelve en un solo nodo de forma local.

¿Cómo escribir un contrato Hola Mundo en Remix IDE?

Remix IDE es el entorno donde vas a compilar y probar tu código. Existe en versión web y de escritorio; te recomiendo la de escritorio porque la web consume bastantes recursos y se vuelve lenta [7:30].

El primer contrato siempre es el clásico Hola Mundo. Su esqueleto incluye:

  1. El pragma que fija la versión del compilador. Este detalle es fundamental porque Solidity está madurando y los saltos entre versiones, por ejemplo de 0.5 a 0.6, traen cambios significativos [9:00].
  2. La declaración contract HolaMundo seguida de llaves. Los nombres siguen las reglas comunes: letras sin acentos, números y guiones, sin espacios ni caracteres especiales.
  3. Una variable de estado tipo string llamada frase.
  4. Un constructor, función especial que se ejecuta una sola vez cuando el contrato se instancia y que asigna el valor inicial "hola mundo".
  5. Una función getFrase marcada como view que retorna el string.

Por qué aparece la palabra memory en Solidity

En la declaración returns (string memory frase), el modificador memory le dice al compilador que ese string vivirá solo en memoria y no se escribirá en disco. Almacenar en disco tiene un costo importante en gas, así que memory evita pagar de más [11:30].

¿Cómo compilar y desplegar el contrato en la JavaScript VM?

En el ícono de compilación de Remix eliges la versión que indica el pragma y pulsas Compile hola mundo. Si olvidas un punto y coma, Remix te marca el error de inmediato.

Una vez compilado, abres el ícono de despliegue y trabajas con la JavaScript VM, una máquina virtual de Ethereum que solo existe en tu computador. Remix te entrega 15 cuentas de prueba con saldo precargado para ejecutar transacciones sin gastar cripto real [13:40].

Al pulsar deploy:

  • Se ejecuta la transacción de despliegue.
  • Corre el constructor y deja la variable frase con valor "hola mundo".
  • Aparece un ticket verde de transacción exitosa y el contrato listo en la consola.

Los botones del IDE tienen un código de color útil: azul para funciones view sin costo y naranja para transacciones que sí cobran ether o Celo Gold.

Agregar setFrase para modificar el estado

Al añadir una función setFrase, el contrato gana la capacidad de escribir. Si llamas a getFrase después del despliegue, devuelve "Hola, mundo". Pero al ejecutar setFrase con el texto "Bienvenidos a Celo" y volver a leer con getFrase, ahora obtienes el nuevo valor [16:30]. Esa es la confirmación de que el contrato escribe correctamente sobre la blockchain de prueba.

Con esta base ya tienes un contrato funcional que lee y escribe estado. ¿Qué función agregarías tú primero a este Hola Mundo? Cuéntame en los comentarios.