¿Qué tan grande puede ser un contrato?

Estoy tratando de averiguar qué tan grande podría ser un contrato. ¿Es posible tener 10k funciones? ¿Un millón? ¿Más?

¿Hay alguna restricción en el tamaño del cuerpo de la función?

¿Un contrato más grande necesita más gas para desplegarse?

¿Es un contrato más grande más lento que uno más pequeño?

Puede distribuir su código en varios contratos. No necesita implementar el código en una sola transacción.
Ahora existe el estándar Diamond que resuelve el problema del tamaño máximo: github.com/ethereum/EIPs/issues/2535

Respuestas (2)

Los contratos de solidez se compilan en el código de bytes EVM. El código de bytes del contrato cuesta 200 gas por byte de código de byte, y dado que el límite de gas del bloque es de 8 millones en este momento, teóricamente podría obtener un contrato de ~ 40,000 bytes (un poco menos ya que hay un extra para implementación/datos de tx) implementado. Sin embargo, es poco probable que pueda crear un contrato de este tamaño, ya que los bloques generalmente no tienen tanto espacio adicional. Con respecto a la velocidad de ejecución, esto depende totalmente de su implementación.

Editar: como señaló @Ismael, en realidad hay un límite de 32 kb por transacción como se explica aquí . Esa página también dice que también hay un límite de 24576 bytes para el tamaño del contrato, ¡así que estoy corregido! El EIP para el límite de bytes del contrato se puede encontrar aquí .

Edit2: si está buscando una explicación formal para el límite de tamaño del contrato, consulte la definición 97 del papel amarillo :

Definición de papel amarillo 97

Es decir, el tamaño de salida del código del cuerpo final no debe ser superior a 24576 bytes.

También tiene un límite estricto de 32 kb por transacción ethereum.stackexchange.com/a/46612 .

Puede eludir la limitación del tamaño del contrato utilizando el Estándar de contrato transparente: https://github.com/ethereum/EIPs/issues/1538