Cómo funcionan los contratos inteligentes en Ethereum (Guía 2025)

Aitana Castillo 0 Comentarios 23 septiembre 2025

¿Alguna vez te has preguntado por qué una aplicación puede ejecutarse sin un servidor central y seguir cumpliendo su promesa? La respuesta está en los contratos inteligentes y en la red Ethereum, una plataforma de código abierto que permite crear y ejecutar dichos contratos de forma descentralizada. En esta guía, desglosamos paso a paso cómo operan, qué componentes intervienen y qué cuidados debes tener si quieres lanzar tu propio proyecto en la cadena de bloques.

Resumen rápido

  • Un contrato inteligente es código auto‑ejecutable que vive en la blockchainregistro inmutable y distribuido donde se almacenan todas las transacciones de Ethereum.
  • Se despliega mediante una transacción que lleva el bytecode compilado y paga gasuna medida de recursos computacionales necesarios para ejecutar operaciones en la red.
  • La Ethereum Virtual Machine (EVM)el entorno de ejecución que interpreta el bytecode de los contratos garantiza que el código se ejecute exactamente igual en cada nodo.
  • El proceso de despliegue incluye crear la dirección de contratoun identificador único que permite interactuar con el contrato una vez publicado y registrar la transacción en la cadena.
  • Los errores comunes son: subestimar el gas, no validar entradas y confiar demasiado en la inmortalidad del código.

¿Qué es un contrato inteligente?

Un contrato inteligentees un programa informático que se almacena en la blockchain y se ejecuta automáticamente cuando se cumplen condiciones predefinidas. A diferencia de los contratos tradicionales, no necesita intermediarios ni firmas físicas; su cumplimiento está garantizado por la propia red.

Cómo funciona Ethereum

Ethereum combina dos conceptos esenciales: una blockchaincadena de bloques que registra todas las transacciones de forma cronológica y segura y la Ethereum Virtual Machine (EVM)una máquina virtual que interpreta el código de los contratos. Cada vez que envías una transacciónuna orden que se propaga a la red y, si contiene datos, puede desencadenar la ejecución de un contrato, los mineros (o validadores en Proof‑of‑Stake) verifican y añaden esa transacción a un bloque.

Desarrollador compilando Solidity y enviando la transacción de despliegue al blockchain.

Estructura de un contrato inteligente en Ethereum

Los componentes clave son:

  • Bytecode: el código binario resultante de compilar un contrato escrito en Solidityel lenguaje de programación más usado para crear contratos en Ethereum. La EVM lo interpreta directamente.
  • Gas: cada operación (por ejemplo, sumar, almacenar datos o llamar a otro contrato) consume una cantidad de gas. El emisor de la transacción define un límite y un precio (en gwei) que determina el coste total.
  • Dirección de contrato: una vez desplegado, el contrato recibe una dirección de 20bytes que actúa como su identificador en la red. Con ella, cualquier usuario o contrato puede invocar sus funciones.
  • Estado persistente: a diferencia de un programa tradicional, el contrato mantiene variables en la blockchain que perduran entre llamadas.

Pasos para desplegar un contrato inteligente

  1. Escribe el código en Solidity y compílalo con solc o un entorno como Remix. Obtendrás el bytecode y el ABI (interfaz de aplicación).
  2. Configura una cuenta de Ethereum (wallet) con suficiente saldo en ETH para cubrir el gas.
  3. Construye una transacciónque incluya el bytecode en el campo data y establezca el gas limit. Puedes usar Web3.js, ethers.js o la CLI de Hardhat.
  4. Firma y envía la transacción a la red (mainnet, Goerli o Sepolia para pruebas).
  5. Espera a que la transacción sea incluida en un bloque. Cuando se confirme, la blockchain asignará una dirección de contratola cual aparecerá en el receipt de la transacción.
  6. Interactúa con el contrato usando su ABI y dirección, llamando a sus funciones mediante transacciones o llamadas de solo lectura (call).

Ejemplo práctico: token ERC‑20 simple

El estándar ERC‑20 define una interfaz mínima para tokens fungibles. A continuación, un fragmento de Solidity que implementa un token básico:

pragma solidity ^0.8.0;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    // eventos y demás funciones omitidos por claridad
}

contract MiToken is IERC20 {
    string public name = "MiToken";
    string public symbol = "MTK";
    uint8 public decimals = 18;
    uint256 private _totalSupply = 1_000_000 * 10**18;
    mapping(address => uint256) private _balances;

    constructor() {
        _balances[msg.sender] = _totalSupply;
    }

    function totalSupply() public view override returns (uint256) { return _totalSupply; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        require(_balances[msg.sender] >= amount, "Saldo insuficiente");
        _balances[msg.sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(msg.sender, recipient, amount);
        return true;
    }
    event Transfer(address indexed from, address indexed to, uint256 value);
}

Después de compilar y desplegar, cualquier usuario podrá transferir tokens simplemente pagando el gas necesario. El contrato guarda el balance de cada dirección en su estado persistente, garantizando que la información nunca se pierda ni sea alterada sin que la red lo registre.

Comparación visual entre contrato tradicional y contrato inteligente con transferencia de tokens.

Comparación: contrato inteligente vs contrato tradicional

Diferencias clave entre contratos inteligentes y contratos tradicionales
Aspecto Contrato inteligente Contrato tradicional
Ejecutor Red de nodos Ethereum (EVM) Partes firmantes y tribunales
Inmutabilidad Una vez desplegado, no se puede modificar Puede ser enmendado o rescindido mediante acuerdos
Coste de ejecución Pago de gas por cada operación Costes legales y administrativos
Transparencia Código y estado visibles en la blockchain Generalmente confidencial
Velocidad Depende del congestionamiento de la red Puede tardar días o semanas en procesarse

Errores comunes y buenas prácticas

  • Subestimar el gas: usar estimadores como estimateGas antes de enviar la transacción.
  • No validar entradas: siempre verifica tamaños y rangos para evitar overflow o ataques de re‑entrada.
  • Descuidar la actualización: si necesitas cambiar lógica, implementa patrones de proxy o usa contratos upgradable.
  • Exponer variables críticas: marca datos sensibles como private y usa eventos para auditoría.
  • Ignorar seguridad de la EVM: revisa vulnerabilidades conocidas (re‑entrancy, underflow/overflow, timestamp dependence).

Preguntas frecuentes

¿Un contrato inteligente necesita un servidor?

No. El código se ejecuta en la Ethereum Virtual Machine, que está distribuida entre todos los nodos de la red.

¿Cuánto cuesta desplegar un contrato?

Depende del tamaño del bytecode y del gas price vigente. En la práctica, un contrato sencillo puede costar entre 0,02 y 0,1ETH en la mainnet.

¿Puedo modificar un contrato después de lanzarlo?

No directamente. Para cambios deberás usar patrones de proxy o migrar a un nuevo contrato y redirigir las interacciones.

¿Qué es el gas y por qué es necesario?

El gas mide la cantidad de recursos computacionales que consume una operación. Sirve para evitar abusos y remunera a los validadores que procesan la transacción.

¿Cuál es la mejor red para probar mis contratos antes de lanzar?

Las testnets Goerli y Sepolia son las más usadas en 2025; ofrecen ETH de prueba gratuito y replican el comportamiento de la mainnet.