¿Qué guarda State Trie cuando se inserta en la matriz?

Estoy interesado/preocupado por el tamaño del State Trie a lo largo del tiempo

Supongamos que tengo un contrato con dos vars:

uint myNumber;
uint[] myArray;

Según tengo entendido, si cambio el valor de "myNumber", se agregará una nueva copia al árbol de estado (ocupando así más espacio en el disco duro), lo cual está bien y es necesario porque si alguna vez queremos reconstruir el historial de datos de un estado anterior lo necesitamos (y tal vez por razones de rendimiento de reescritura).

Pero, ¿qué pasa si presiono (aumento la longitud y establezco el valor) un nuevo uint en "myArray"? ¿Se copiará toda la matriz en el nuevo árbol estatal? ¿O solo se agregará el nuevo "uint" al árbol y la matriz se reconstruirá iterando sobre State Tree/DB?

No estoy preguntando acerca de las asignaciones porque asumo que solo son variables independientes distribuidas en la memoria. ¿Son las matrices el mismo tipo de "magia"?

¡Gracias!

Respuestas (1)

Bueno... se ve raro que me responda en 10 minutos, pero mientras escribía la pregunta me di cuenta de que mi última frase podría pasar. Y luego lo busqué en Google...

Según la documentación de Solidity:

Debido a su tamaño impredecible, el mapeo y los tipos de matrices de tamaño dinámico utilizan un cálculo sha3 para encontrar la posición inicial del valor o los datos de la matriz. Estas posiciones iniciales son siempre espacios de pila completa.

Así que supongo que eso responde un poco a mi pregunta:/. Según tengo entendido, cada [i]/posición de mi matriz será una palabra independiente en el espacio de memoria de EVM, por lo que cada vez que se agregue una posición, solo cambiará/será el cambio en la palabra de "longitud" de la matriz y mi nueva "palabra". replicado en el estado trie.

Entonces, básicamente, las matrices son básicamente asignaciones con una variable de longitud donde la clave es la posición

¿Tengo razón?