Introducción a Ethereum. Contratos inteligentes

Ethereum se ha convertido en una prueba de concepto para el futuro de la comunicación web, principalmente debido a su característica principal, el contrato inteligente. Explicación de cómo funciona.

Ethereum Sphere as a Crystal
Visualisation an abstract concept of Ethereum smart contracts

¿Qué es Ethereum?

Primordialmente, Ethereum es una plataforma para crear servicios en línea descentralizados, que operan sobre la base de la tecnología blockchain. Solo secundariamente es una criptomoneda. La principal distinción entre Ethereum y, por ejemplo, Bitcoin, son los contratos inteligentes. Estos permiten programar dentro de la blockchain. Esto permite la integración de mecanismos más complejos en Ethereum, como los NFT.

Gracias a los contratos inteligentes, podemos explorar nuevas formas de hacer negocios, instituciones financieras transparentes, patentes transparentes, votaciones transparentes y la creación de contratos transparentes. De hecho, el ámbito de aplicación de los contratos inteligentes es extremadamente amplio, y nuevas ideas continúan surgiendo diariamente.

Contratos Inteligentes

En esencia, un contrato es un archivo de texto con código escrito en el lenguaje de programación Solidity. Proporciona una cierta API, en forma de funciones y desencadenantes, que pueden ser utilizados dentro del contrato inteligente.

La Lógica de Ejecución de los Contratos Inteligentes en Ethereum

La ejecución de un contrato en Ethereum ocurre en varias etapas:

  1. Creación de una Transacción

    Todo comienza con la creación y envío de una transacción por parte del usuario. Esta transacción contiene instrucciones para llamar a las funciones del contrato inteligente y también puede incluir datos y ETH para transferir al contrato.

  2. Difusión de la Transacción

    La transacción enviada se difunde a través de la red de nodos de Ethereum. Espera en el pool de transacciones hasta que un minero (o validador en PoS) la seleccione para ser incluida en un nuevo bloque.

  3. Procesamiento de la Transacción por los Mineros

    El minero selecciona la transacción del pool y comienza el procesamiento. Esto incluye verificar la autenticidad de la transacción (firma) y la suficiencia de fondos para pagar el gas.

  4. Ejecución del Contrato

    Después de la verificación, el minero (o validador) ejecuta el código del contrato inteligente. Esta ejecución ocurre en la Máquina Virtual de Ethereum (EVM), un entorno aislado donde cada operación cuesta una cierta cantidad de gas.

  5. Cambio de Estado

    Como resultado de la ejecución del contrato, puede ocurrir un cambio en el estado de la blockchain. Por ejemplo, esto podría ser la transferencia de tokens, cambiar datos en el contrato, etc.

  6. Confirmación del Bloque

    Después de que el minero completa la formación del bloque con las transacciones, difunde este bloque a través de la red. Otros nodos verifican el bloque y, tras una verificación exitosa, lo añaden a su copia de la blockchain.

  7. Pago del Gas

    El usuario que envió la transacción paga una tarifa de gas en ETH. Esta tarifa va al minero (o validador) como recompensa por procesar la transacción y mantener la red.

  8. Finalización

    Después de la confirmación del bloque, la transacción y todos sus resultados (incluida la ejecución del contrato) se consideran finales e irreversibles.

¿Quién Paga por los Cálculos de los Contratos Inteligentes?

Los cálculos asociados con la ejecución de contratos inteligentes en la red Ethereum son pagados por los usuarios que envían transacciones. Estos usuarios pagan una tarifa de gas, que compensa los recursos necesarios para procesar las transacciones y ejecutar los contratos inteligentes.

¿Qué Afecta la Tarifa de Gas?

La tarifa de gas depende de varios factores:

  1. Complejidad Computacional

    Las operaciones más complejas requieren más recursos computacionales y, por lo tanto, son más costosas.

  2. Congestión de la Red

    Durante períodos de alta congestión de la red, el precio del gas puede aumentar a medida que los usuarios compiten para que sus transacciones sean incluidas rápidamente en un bloque.

  3. Límite de Gas

    El usuario establece la cantidad máxima de gas que está dispuesto a gastar en la ejecución de la transacción. Si el límite es demasiado bajo, la transacción puede no ejecutarse.

Los mineros o validadores (dependiendo de si la red utiliza prueba de trabajo o prueba de participación) seleccionan transacciones con tarifas de gas más altas, ya que esto aumenta sus ingresos. Estas tarifas sirven como incentivo para mantener el funcionamiento de la red Ethereum.

¿Qué Rango de Funciones Está Disponible en un Contrato?

Los contratos inteligentes en Ethereum pueden realizar una amplia gama de cálculos, pero hay ciertas limitaciones y características a considerar:

  1. Turing Completo

    Los lenguajes de programación de contratos inteligentes, como Solidity y Vyper, son Turing completos, lo que teóricamente les permite realizar cualquier cálculo similar a los lenguajes de programación convencionales.

  2. Recursos Limitados

    Cada operación en un contrato cuesta una cierta cantidad de gas, y la cantidad de gas que se puede utilizar en una sola transacción es limitada. Esto significa que cálculos muy complejos o que consumen muchos recursos pueden no ser prácticos debido a los altos costos de gas o límites de bloque.

  3. Determinismo

    Los cálculos en los contratos inteligentes deben ser deterministas, lo que significa que, dadas las mismas entradas, siempre deben producir las mismas salidas. Esto es necesario para mantener la consistencia del estado de la blockchain.

  4. Sin Solicitudes de Red Externas

    Los contratos inteligentes no pueden hacer solicitudes directas a servidores externos o API. Se utilizan oráculos para obtener datos externos.

  5. Almacenamiento de Datos

    Los contratos pueden almacenar datos en su estado, pero debido a los costos de gas, almacenar grandes cantidades de datos puede ser costoso.

  6. Operaciones Matemáticas y Lógicas

    Los contratos pueden realizar varias operaciones matemáticas y lógicas, gestionar el flujo de ejecución (bucles, estructuras condicionales), crear e interactuar con otros contratos.

  7. Manejo de Funciones Criptográficas

    Ethereum admite ciertas funciones criptográficas, como hashing y verificación de firmas digitales.

  8. Limitaciones de Tiempo de Ejecución

    Debido al límite de gas para cada transacción, los contratos inteligentes no son adecuados para cálculos que requieren largos tiempos de ejecución.

Estas limitaciones y capacidades definen qué tipos de aplicaciones y cálculos pueden implementarse de manera efectiva utilizando contratos inteligentes en Ethereum.

Acceso a Recursos Externos desde la Blockchain, como la API de un Sitio Web

Directamente en el código de los contratos inteligentes de Ethereum, no es posible realizar una solicitud a un sitio web externo o llamar a una API externa. Sin embargo, para interactuar con datos externos y API en los contratos inteligentes de Ethereum, se utilizan oráculos. Los oráculos son servicios de terceros que proporcionan datos del mundo exterior a la blockchain. Actúan como intermediarios, recopilando los datos necesarios por los contratos inteligentes y proporcionándolos a la blockchain de una forma confiable y verificada.

Ejemplos de uso de oráculos incluyen obtener información sobre precios de activos, datos meteorológicos, resultados de eventos deportivos y mucho más. Sin embargo, el uso de oráculos requiere confianza en el proveedor de datos y una gestión adecuada de los riesgos asociados con la centralización de este aspecto de las aplicaciones descentralizadas.

Esto está relacionado con varias características clave de la blockchain y los contratos inteligentes:

  1. Determinismo

    La blockchain requiere que cada transacción y ejecución de contrato sea determinista. Esto significa que cada nodo en la red debe llegar al mismo resultado al ejecutar el código del contrato. Las solicitudes externas podrían conducir a resultados diferentes en momentos diferentes, violando este principio.

  2. Seguridad y Aislamiento

    Incorporar datos o solicitudes externas en la blockchain podría crear vectores de ataque y vulnerabilidades en la seguridad de la red.

  3. Sincronización y Velocidad

    La blockchain de Ethereum opera en un modo sincrónico, y agregar dependencia a solicitudes externas asincrónicas podría ralentizar o interrumpir significativamente el proceso de minería y verificación de transacciones.

Almacenamiento de Datos en Contratos Inteligentes

Los contratos inteligentes en Ethereum tienen la capacidad de almacenar los resultados de cálculos. Estos datos se almacenan en el estado de la blockchain y pueden ser accesibles tanto dentro del propio contrato como para otros contratos o consultas externas. Aquí están los aspectos clave del almacenamiento de datos en contratos inteligentes:

  1. Variables de Estado: Los contratos inteligentes pueden definir variables de estado que se almacenan en la blockchain y pueden ser modificadas a través de las funciones del contrato. Estas variables pueden almacenar valores como números, cadenas de texto, arreglos y estructuras de datos más complejas.

  2. Modificación de Estado: Cuando un contrato inteligente se ejecuta como resultado de una transacción y cambia sus variables de estado, estos cambios se registran en la blockchain después de la ejecución exitosa de la transacción.

  3. Almacenamiento a Largo Plazo: Dado que los datos se registran en la blockchain, son a largo plazo e inmutables, lo que significa que se almacenarán mientras exista la red Ethereum.

  4. Lectura de Datos: Los contratos inteligentes pueden incluir funciones para leer datos almacenados. Tales funciones pueden ser llamadas por usuarios externos u otros contratos sin enviar una transacción y sin gastar gas.

  5. Limitaciones de Gas y Costo: Almacenar datos en la blockchain de Ethereum requiere gas y, por lo tanto, puede ser costoso, especialmente al almacenar grandes cantidades de datos. Esto requiere optimización y uso económico del almacenamiento.

Los contratos inteligentes pueden usar el almacenamiento para diversos propósitos, incluyendo el seguimiento de saldos de criptomonedas, resultados de votaciones, identificadores únicos para NFT (tokens no fungibles) y mucho más.

Por lo tanto, los mecanismos de almacenamiento y gestión de datos son componentes clave en el diseño y funcionalidad de los contratos inteligentes en Ethereum.

Modificación de un Contrato Inteligente Después de su Despliegue en la Red

Una vez que un contrato inteligente es desplegado (implementado) en la red Ethereum, su código se vuelve inmutable. Esto significa que después del despliegue, no es posible cambiar la lógica o funcionalidad del contrato. Aquí están los aspectos clave de esta característica:

  1. Inmutabilidad del Código: El código de un contrato inteligente y todas sus operaciones se registran en la blockchain de Ethereum y se convierten en una parte integral de su historial. Después del despliegue, el código del contrato no puede ser cambiado o eliminado.

  2. Seguridad y Confianza: Esta inmutabilidad es una característica importante para garantizar la seguridad y confianza en la red. Los usuarios y partes que interactúan con el contrato pueden estar seguros de que la lógica del contrato no será cambiada después de su despliegue.

  3. Actualizaciones y Modificaciones: Si es necesario actualizar o cambiar la lógica de un contrato inteligente, los desarrolladores generalmente despliegan un nuevo contrato y, si es necesario, migran datos del contrato antiguo. En algunos casos, los desarrolladores incluyen mecanismos en el contrato para actualizar algunos de sus aspectos (por ejemplo, direcciones de otros contratos), pero la lógica central permanece sin cambios.

  4. Autodestrucción: Existe una función en Solidity, selfdestruct, que permite "destruir" un contrato, liberando espacio en la blockchain y devolviendo fondos residuales a una dirección especificada. Sin embargo, después de llamar a esta función, el contrato se vuelve no funcional, y su código aún permanece en la blockchain como historial.

  5. Arquitectura de Contratos Proxy: Para crear sistemas más flexibles que puedan ser actualizados, los desarrolladores a veces usan una arquitectura de contrato proxy, donde la lógica se almacena en un contrato separado, y el contrato proxy delega las llamadas de función a este. Esto permite actualizar la lógica actualizando solo el contrato con la lógica, pero este enfoque tiene sus matices y riesgos.

La lógica central y funcionalidad de un contrato inteligente permanecen sin cambios después de su despliegue, y generalmente se requiere la creación de un nuevo contrato para hacer cambios.

Resumen

Ethereum es mucho más que solo una criptomoneda. Plataformas como esta no solo nos ofrecen la libertad de transacciones de pago, sino que también permiten la comunicación entre diferentes negocios sin la necesidad de burocracia. La ausencia de burocracia conduce a un progreso más rápido para la humanidad.