En resumen
- Desplegar un contrato con 6.000 bytes de initcode (1.000 a cero) y 5.000 bytes de código cuesta 1.137.376 de gas.
- De ese gas, 1.000.000 es el depósito del código (200 por byte) y 137.376 es la entrada de la transacción.
- A 10 gwei son 0,0114 ether, unos 34,12 con el ether a 3.000.
- El initcode no puede pasar de 49.152 bytes ni el código desplegado de 24.576.
¿Cuánto gas cuesta desplegar un contrato en Ethereum?
Desplegar un contrato es enviar una transacción de creación. Su coste en gas es la suma de la entrada de la transacción, el depósito del código que queda guardado y lo que gaste el constructor al ejecutarse. Con los valores de ejemplo salen 1.137.376 de gas.
El gas se paga en gwei por unidad. Cuanto más pesa el contrato, más gas cuesta, sobre todo por el depósito del código.
¿Qué se paga al desplegar?
- Gas fijo: 21.000 por cualquier transacción.
- Creación: 32.000 más por crear un contrato.
- Calldata: el initcode viaja como datos de la transacción. Cada byte cero cuesta 4 de gas y cada byte distinto de cero, 16.
- Initcode: 2 de gas por cada palabra de 32 bytes, redondeando hacia arriba (EIP-3860).
- Depósito del código: 200 de gas por cada byte del código desplegado.
- Constructor: el gas que gaste al ejecutarse. Depende del código y lo escribes tú.
- Suelo de calldata (EIP-7623): el total nunca baja de 21.000 + 10 de gas por cada unidad de calldata (1 por byte cero, 4 por byte distinto de cero). Solo se nota si el código desplegado es muy pequeño frente al initcode.
Fórmula
calldata = 4 × bytes cero + 16 × bytes no cero
initcode = 2 × palabras de 32 bytes (hacia arriba)
entrada = 21.000 + 32.000 + calldata + initcode
depósito = 200 × bytes del código desplegado
gas total = el mayor entre (entrada + depósito + constructor)
y (21.000 + 10 × (bytes cero + 4 × bytes no cero))
ether = gas total × gwei ÷ 1.000.000.000
¿Cómo usar la calculadora?
- Escribe el tamaño del initcode en bytes.
- Indica cuántos de esos bytes son cero.
- Escribe el tamaño del código desplegado.
- Pon el precio del gas en gwei y el precio del ether.
En opciones avanzadas puedes añadir el gas del constructor y cambiar el gas fijo y el de creación.
Ejemplo con los valores por defecto
Initcode de 6.000 bytes (1.000 a cero), código de 5.000 bytes, 10 gwei y ether a 3.000:
| Concepto | Gas |
|---|---|
| Gas fijo y de creación (21.000 + 32.000) | 53.000 |
| Calldata (1.000 × 4 + 5.000 × 16) | 84.000 |
| Initcode (188 palabras × 2) | 376 |
| Entrada de la transacción | 137.376 |
| Depósito (5.000 × 200) | 1.000.000 |
| Total | 1.137.376 |
El total son 0,0114 ether: 1.137.376 × 10 ÷ 1.000.000.000. Con el ether a 3.000, unos 34,12. De cada 100 de gas, 87,9 van al depósito del código.
Límites del tamaño
- Initcode: máximo 49.152 bytes, el doble del límite de código. Si lo supera, la transacción no es válida.
- Código desplegado: máximo 24.576 bytes.
En el extremo, con 49.152 bytes de initcode sin ceros y 24.576 de código, el gas es de 5.757.704. A 10 gwei son 0,0576 ether. Si ese mismo initcode desplegara un código vacío, mandaría el suelo de EIP-7623: 21.000 + 10 × 196.608 = 1.987.080 de gas, en lugar de los 842.504 de la suma normal.
Errores comunes
- Olvidar el depósito: es la mayor parte del coste. Reducir el tamaño del código ahorra más que ahorrar ceros.
- Contar mal las palabras: 33 bytes ya son 2 palabras.
- Fijar el gas del constructor a cero: si guarda datos, su coste se suma y puede ser grande.
- Tomar el precio del gas como fijo: cambia a cada bloque.
- Ignorar el suelo de calldata: con mucho initcode y casi nada de código, el total sube hasta ese suelo y no basta con sumar las partes.
Las fuentes son EIP-3860 y EIP-7623. Es una estimación educativa: no envía ni firma transacciones.
Preguntas frecuentes
¿Cuánto cuesta desplegar un contrato pequeño?
Con 1 byte de initcode y sin código, 53.018 de gas. Un contrato real pesa mucho más y su coste lo domina el depósito del código. Piensa en cuántas funciones necesitas: cada byte de código desplegado suma 200 de gas, así que un contrato con pocas funciones sale mucho más barato.
¿Por qué un byte cero cuesta menos?
Porque el protocolo cobra 4 de gas por un byte cero y 16 por uno distinto de cero. Por eso el initcode con muchos ceros sale más barato.
¿Qué pasa si el initcode pasa de 49.152 bytes?
La transacción de creación no es válida. Tendrías que reducir el initcode o repartir el código en varios contratos.
¿El gas del constructor está incluido?
Solo si lo escribes en opciones avanzadas. Por defecto es 0 porque depende del código de cada contrato.
¿Dónde veo el precio del gas real?
En tu billetera o en un explorador de bloques. El 10 gwei de la calculadora es solo un ejemplo.
