« Back to Glossary Index

Calldata

⚡ Definición Rápida

Calldata es una región de memoria especial, de solo lectura y no persistente en la Máquina Virtual de Ethereum (EVM) que contiene los datos de entrada de una transacción o llamada a un contrato inteligente. Es la «carga útil» que especifica qué función ejecutar y con qué argumentos, y se caracteriza por ser extremadamente eficiente en costos de gas, ya que la EVM no lo copia automáticamente a su memoria interna. Su uso correcto es fundamental para optimizar el gas en contratos que procesan grandes volúmenes de datos, como los de DeFi y los rollups de capa 2.

Términos relacionados: gasEVMSolidityrollupsABI


❓ ¿Qué es el Calldata y por qué es crucial para la eficiencia en Ethereum?

El calldata es el mecanismo mediante el cual los datos externos ingresan a un contrato inteligente en Ethereum. Cada vez que una billetera o un contrato envía una transacción a otro contrato, los bytes de la transacción que contienen el selector de función y los argumentos codificados constituyen el calldata. A diferencia de la memoria volátil del contrato (`memory`), el calldata es proporcionado por el remitente y es de solo lectura para el destinatario.

Su importancia radica en que la EVM no copia automáticamente el calldata a su propio espacio de memoria. En su lugar, el contrato puede leer directamente desde esta región de datos externa. Esto es particularmente ventajoso para tipos de datos dinámicos como `bytes` y `string`, donde una copia a `memory` sería costosa. Al declarar parámetros como `calldata` en funciones `external`, los desarrolladores pueden ahorrar cantidades significativas de gas, una práctica esencial para contratos de alto rendimiento y para la viabilidad económica de las soluciones de capa 2 que publican datos en L1.

📖 Definición Técnica

Técnicamente, el calldata es la concatenación de bytes que constituye la entrada de una transacción. Se divide en dos partes principales: los primeros 4 bytes son el selector de función, que identifica qué función del contrato se va a ejecutar, y los bytes restantes son los argumentos de la función, codificados según el Application Binary Interface (ABI) de Ethereum. La ABI define un formato estricto para codificar tipos de datos básicos (uint, address, bool) y complejos (arrays, structs, strings) de manera que la EVM pueda decodificarlos sin ambigüedad.

La EVM trata el calldata como una secuencia de bytes indexable. Las instrucciones de bajo nivel como `CALLDATALOAD` (para cargar 32 bytes desde una posición específica), `CALLDATASIZE` (para obtener la longitud total) y `CALLDATACOPY` (para copiar una porción a la memoria) permiten a los contratos interactuar con él. El costo de leer el calldata es bajo: 3 gas más 3 gas por palabra de 32 bytes, más 8 gas por byte no cero en la transacción. Este costo es considerablemente menor que el de copiar datos a la memoria, que incurre en costos de expansión de memoria.


⚙️ Calldata vs. Memory vs. Storage: El Triángulo de la Eficiencia

Entender las diferencias entre estas tres áreas de datos es crucial para optimizar el gas.

AspectoCalldataMemoryStorage
PersistenciaNo persistente. Existe solo durante la ejecución de la transacción.No persistente. Se borra al finalizar la ejecución de la función.Persistente. Los datos se almacenan permanentemente en la blockchain.
ModificabilidadSolo lectura. No se puede modificar dentro del contrato.Lectura/Escritura. Se puede modificar libremente.Lectura/Escritura. Modificar es extremadamente costoso.
Costo de GasMuy bajo para acceder. El costo principal está en el envío de la transacción (4 gas/byte cero, 16 gas/byte no cero).Moderado. Tiene costos de expansión que crecen cuadráticamente con el tamaño.Muy alto para escribir (20,000+ gas por slot). Leer es moderado (~200 gas).
Caso de Uso PrincipalPasar datos de entrada a funciones `external` (arrays, strings, bytes).Variables temporales, manipulación de datos dentro de una función.Estado permanente del contrato (balances, configuraciones).
Ubicación de los DatosExterno a la EVM. Parte de la transacción.Interno a la EVM. Memoria RAM virtual.Interno a la EVM. Almacenamiento en el estado de la blockchain.

🏗️ Estructura Interna del Calldata: Más Allá de los Argumentos

El calldata no es una simple lista de parámetros; está altamente estructurado para que la EVM lo interprete correctamente.

  • Selector de Función (4 bytes): Los primeros 4 bytes son el hash Keccak-256 de la firma de la función (ej. `transfer(address,uint256)`). Este selector único le indica al contrato qué función ejecutar.
  • Argumentos Codificados en ABI: El resto del calldata contiene los argumentos, codificados según las reglas ABI. Cada argumento se «paddea» a 32 bytes. Para tipos dinámicos como `bytes` o `array`, se usan punteros (offsets) que indican dónde comienzan los datos reales dentro del calldata.
  • Ejemplo de Decodificación: Para una llamada a `transfer(address: 0xABC…, uint256: 1000)`: El calldata sería `0xa9059cbb` (selector) + `0x000…00abc…` (address paddeado) + `0x000…003e8` (1000 en hex paddeado).

🎯 Aplicaciones Prácticas y Patrones de Optimización

  • Optimización de Gas en Funciones `external`: Usar `calldata` en lugar de `memory` para parámetros de tipo array, `bytes` o `string` en funciones `external` es la optimización más común. Evita la copia costosa a memoria, ahorrando gas en cada llamada.
  • Multi-Call y Agregadores: Contratos como routers DEX reciben un `bytes calldata` que contiene instrucciones para múltiples llamadas. El contrato decodifica este calldata y ejecuta las llamadas en serie, todo desde una sola transacción.
  • Verificación de Firmas Off-Chain (EIP-712): En meta-transacciones, los datos firmados se pasan al contrato como `calldata` para su verificación, minimizando el costo de la ejecución on-chain.
  • Proxies Transparentes: En contratos actualizables, la llamada del usuario (con todo su `calldata`) se reenvía intacta a la implementación lógica mediante `delegatecall`. La integridad del calldata es fundamental para que este patrón funcione.

✅ Ventajas y Limitaciones del Uso de Calldata

  • ✅ Ventajas: Ahorro masivo de gas al eliminar copias a memoria, prevención de costos de expansión de memoria para arrays grandes, y claridad en la intención del código (indica que los datos no serán modificados).
  • ❌ Limitaciones: Es de solo lectura, por lo que no se puede modificar dentro de la función. Solo está disponible para parámetros de funciones `external`, no para `public` o `internal`. Su costo de envío (en la transacción) es fijo y depende del tamaño de los datos.

🔮 El Futuro: Calldata en un Ethereum Más Eficiente

  • EIP-4844 (Proto-Danksharding) y Blobs: Aunque los «blobs» son una nueva área de datos temporal para rollups, el calldata sigue siendo el método principal para la disponibilidad de datos en L1. Las propuestas para reducir el costo del calldata (como EIP-4488) siguen siendo relevantes.
  • Rollups como Principales Consumidores: Los Optimistic y zkRollups dependen del calldata de L1 para publicar lotes de transacciones. La eficiencia en el manejo del calldata es directamente proporcional al bajo costo de las transacciones en L2.
  • Mejoras en la EVM (EOF): El formato EVM Object Format podría introducir formas más eficientes de manejar los datos de entrada, pero el concepto de una región de solo lectura y externa probablemente permanecerá.

🧠 Guía Práctica: Cómo Afecta el Calldata a tu Operativa

  • Si eres desarrollador: Declara siempre los parámetros de tipo `bytes`, `string` y arrays en funciones `external` como `calldata` para optimizar el gas. Usa `memory` solo si necesitas modificar los datos dentro de la función.
  • Si eres auditor: Revisa que los contratos no estén usando `memory` innecesariamente en funciones `external`. Identificar este error es una de las optimizaciones de gas más fáciles y rentables.
  • Si eres usuario avanzado: Puedes decodificar el calldata de cualquier transacción en Etherscan para ver exactamente qué función se llamó y con qué argumentos. Esto es útil para entender interacciones complejas con contratos.
  • Si eres inversor en proyectos DeFi: Un uso eficiente del calldata por parte de un protocolo se traduce en menores costos de gas para los usuarios. Es una señal de un equipo técnico competente.
  • Si operas en L2: El calldata es la razón por la que los rollups pueden ofrecer tarifas bajas. Al publicar datos en L1 de forma eficiente, reducen el costo para los usuarios finales.

🎯 Conclusión: El Conducto de Alta Eficiencia para la Comunicación con Contratos

El calldata es un componente de diseño fundamental para la eficiencia y economía de Ethereum. Al proporcionar un canal de solo lectura y bajo costo para los datos de entrada, permite que los contratos interactúen con información compleja sin incurrir en costos prohibitivos. Dominar su uso es una marca distintiva de un desarrollador de contratos inteligentes experimentado y consciente de los costos. En un ecosistema donde la optimización del gas se traduce directamente en una mejor experiencia de usuario, el calldata se erige como una de las herramientas más potentes en la caja de herramientas del desarrollador.

❓ Preguntas Frecuentes sobre Calldata


📚 ¿Quieres profundizar en desarrollo y optimización?

Explora más recursos de La Cryptoguía sobre Ethereum y optimización de gas:

Gas en Ethereum – El sistema de costos donde el ahorro con calldata tiene el mayor impacto.

🏗️ EVM (Ethereum Virtual Machine) – El entorno de ejecución donde opera el calldata.

🔐 Solidity – El lenguaje de programación donde se usa calldata.

🛠️ Rollups – Soluciones de escalado que dependen del calldata.


🚀 ¿Empezando en Crypto?

Si eres nuevo, empieza con nuestra guía completa para principiantes para entender los fundamentos antes de adentrarte en el desarrollo.


📋 ¿Por qué confiar en esta definición? Cada término de la Cryptopedia sigue una metodología de verificación con fuentes primarias, whitepapers y legislación oficial. Conoce nuestro proceso →


⚠️ Disclaimer: Este artículo es informativo y educativo. No constituye asesoramiento financiero, legal o técnico. El desarrollo de contratos inteligentes es una actividad de alto riesgo. Los costos de gas y los comportamientos de la EVM pueden cambiar con actualizaciones del protocolo. Siempre prueba exhaustivamente tu código en redes de prueba y realiza auditorías profesionales antes de desplegar cualquier contrato en la red principal.

📅 Actualizado: Marzo 2026
📖 Categoría: Infraestructura Blockchain / Ejecución y EVM

« Volver al Glosario
Scroll al inicio