¿Existe un tamaño máximo para las matrices en Solidity?

En mi código de solidez, defino 3 matrices con alrededor de 700 elementos dentro. Sin embargo, cuando intento implementar el contrato usando Geth, recibo el siguiente mensaje de error:

Error: datos sobredimensionados no definidos

Cuando trato de probar el contrato en Remix, el navegador me dice que no tiene suficiente memoria.

¿Cuáles son las limitaciones de Solidity? ¿No es posible tener 3 matrices con solo 700 elementos uint?

Una de las matrices es la siguiente:

int[] array1 = [28, 28, 28, 27, 28, 28, 28, 27, 27, 28, 28, 29, 30, 31, 31, 30, 30, 31, 31, 31, 30, 29, 28, 28, 28, 27, 27, 27, 27, 27, 27, 26, 27, 25, 25, 24, 24, 23, 23, 23, 23, 26, 27, 30, 30, 30, 31, 31, 31, 31, 31, 30, 30, 30, 29, 28, 28, 28, 28, 28, 28, 28, 26, 26, 26, 25, 25, 24, 24, 24, 23, 24, 27, 29, 32, 32, 33, 34, 34, 34, 34, 33, 33, 33, 33, 32, 32, 32, 32, 31, 31, 31, 30, 29, 29, 29, 28, 29, 29, 27, 26, 28, 28, 31, 32, 35, 35, 36, 37, 36, 36, 36, 36, 36, 36, 35, 34, 33, 32, 32, 33, 33, 32, 32, 31, 31, 30, 31, 28, 28, 29, 29, 29, 29, 31, 34, 36, 36, 35, 35, 34, 33, 33, 33, 33, 32, 32, 33, 33, 32, 32, 32, 32, 32, 32, 31, 31, 31, 31, 30, 29, 30, 30, 32, 35, 38, 38, 40, 43, 44, 44, 40, 39, 38, 38, 37, 37, 37, 36, 36, 36, 37, 33, 33, 33, 34, 34, 34, 34, 33, 32, 33, 33, 35, 35, 37, 37, 39, 40, 40, 37, 37, 36, 36, 36, 33, 34, 34, 34, 33, 34, 33, 33, 33, 33, 33, 33, 32, 32, 32, 32, 31, 30, 32, 32, 34, 35, 37, 37, 38, 37, 37, 39, 39, 39, 39, 36, 36, 37, 36, 33, 33, 33, 32, 32, 32, 33, 32, 31, 31, 31, 30, 30, 30, 29, 29, 30, 30, 33, 34, 36, 36, 38, 39, 39, 39, 38, 38, 37, 37, 37, 35, 34, 33, 34, 34, 34, 34, 34, 33, 33, 33, 32, 31, 31, 30, 29, 30, 30, 32, 34, 34, 34, 34, 35, 35, 36, 38, 38, 37, 35, 34, 34, 35, 33, 33, 33, 33, 34, 34, 33, 31, 31, 31, 31, 30, 30, 30, 32, 33, 36, 36, 37, 37, 36, 36, 37, 37, 37, 37, 35, 35, 34, 34, 34, 34, 34, 34, 34, 34, 32, 33, 31, 32, 32, 30, 30, 31, 31, 33, 35, 37, 37, 39, 39, 39, 39, 39, 39, 38, 38, 35, 33, 32, 32, 33, 33, 32, 32, 32, 31, 31, 30, 31, 30, 31, 31, 34, 37, 38, 38, 40, 40, 39, 39, 39, 39, 38, 38, 38, 37, 36, 36, 35, 35, 35, 34, 34, 34, 33, 33, 32, 32, 31, 30, 30, 30, 32, 33, 35, 35, 38, 39, 36, 36, 36, 35, 35, 34, 33, 32, 32, 31, 31, 31, 31, 30, 30, 30, 28, 27, 26, 26, 26, 25, 26, 28, 31, 32, 32, 34, 35, 37, 36, 36, 35, 35, 34, 33, 32, 30, 30, 31, 31, 31, 31, 31, 31, 30, 29, 28, 28, 28, 27, 29, 29, 30, 32, 33, 33, 34, 34, 36, 35, 36, 34, 34, 34, 34, 32, 32, 31, 31, 31, 31, 31, 32, 32, 31, 30, 30, 30, 30, 30, 31, 31, 34, 36, 39, 42, 40, 40, 40, 40, 41, 40, 40, 39, 37, 36, 36, 35, 36, 35, 35, 34, 34, 33, 34, 33, 33, 33, 32, 32, 34, 38, 40, 42, 42, 42, 42, 42, 41, 41, 41, 40, 38, 36, 36, 35, 35, 34, 34, 34, 34, 34, 33, 32, 32, 32, 32, 32, 32, 35, 37, 39, 39, 42, 41, 41, 40, 39, 37, 37, 36, 35, 35, 35, 35, 35, 35, 34, 33, 33, 33, 32, 32, 31, 31, 32, 32, 35, 37, 40, 40, 41, 40, 38, 38, 38, 37, 37, 37, 36, 35, 35, 34, 34, 34, 33, 33, 32, 32, 31, 30, 30, 30, 29, 28, 28, 29, 30, 31, 33, 33, 36, 36, 36, 36, 35, 35, 35, 35, 34, 32, 32, 32, 31, 31, 31, 31, 31, 29, 29, 29, 28, 28, 28, 27, 27, 28, 28, 30, 32, 33, 33, 34, 34, 34, 34, 33, 33, 33, 32, 32, 31, 30, 30, 30, 30, 30, 29, 28, 28, 28, 27, 27, 26, 26, 26, 28, 30, 32, 32, 34, 36, 34, 34, 34, 35, 33, 33, 33, 32, 31, 30, 30, 30, 30, 29, 29, 28, 27, 26, 26, 26, 25, 26, 28, 30, 33, 36, 38, 37, 38, 37, 36, 36, 35, 33, 33, 33, 33, 33, 33, 32, 31, 30, 30, 29, 29, 29, 29, 29, 29, 30, 30, 32, 34, 37, 37, 36, 36, 36, 36, 36, 36, 35, 35, 34, 34, 34, 34, 34, 33, 33, 32, 31, 30, 30, 30, 30, 30, 30, 30, 28, 28, 31, 32, 32, 33, 33, 34, 34, 34, 33, 33, 32, 31, 30, 30, 30, 29, 29, 29, 29, 29, 27, 26, 25, 25, 25, 25, 26, 26, 28, 30, 31, 33, 33, 34, 34, 34, 33, 33, 33, 34, 33, 32, 32, 30, 30, 30, 30, 29, 29, 28, 27, 27, 26, 26, 26, 25, 26, 26, 28, 31, 31, 31, 33, 36, 37, 36, 36, 35, 34, 33, 33, 33, 32, 31, 31, 31, 31, 30, 30, 30, 29, 29, 29, 28, 28, 28, 28, 30, 32, 35, 35, 38, 37, 36, 36, 36, 37, 38, 38, 37, 36, 35, 35, 35, 35, 34, 34, 33, 33, 32, 32, 31, 30, 30, 30, 29, 29, 30, 32, 34, 36, 36, 40, 40, 40, 40, 39, 39, 39, 39, 38, 38, 37, 36, 36, 36, 36, 36, 35, 35, 35, 33, 32, 31, 31, 31, 30, 30, 32, 35, 38, 38, 39, 40, 40, 40, 38, 40, 40, 40, 40, 41, 38, 38, 36, 36, 35, 34, 34, 34, 33];
La limitación es tan grande como el almacenamiento. 2^256 palabras. Pero, ¿puedes realmente escribir todo el almacenamiento? Probablemente no, ya que SSTORE es uno de los OPCODE más caros. Lo más probable es que alcance el límite de gas del bloque.
¿Cuál es el límite de gas del bloque? ¿Son 4.700.000? ¿No hay forma de aumentarlo?
Actualmente está entre 6m y 7m iirc. Pero, ¿realmente puedes pagarlo? Es posible que desee remodelar su contrato para que no tenga que almacenar todo en cadena. ¿Quizás IPFS o Swarm pueden ayudar?

Respuestas (1)

el límite de una matriz, es 2^256-1.

en su caso, cuando intenta implementar el contrato con 3 matrices con 700 elementos, está superando los límites de gas.

en el ejemplo, la red ropsten en realidad tiene un límite de gas de 58 000 000 por bloque

también tiene un límite de gas en la transacción