Solidity: Storage vs Memory

Storage y Memory se utilizan para determinar si los tipos de re referencia (reference types) van a ser almacenados en memoria (no es persistente) o en storage (es persistente).

La máquina virtual de Ethereum (EVM) tiene tres áreas donde almacenar valores:
  • Storage: Es la zona del contrato inteligente donde se guardan de manera persistente las variables. Cada vez que se ejecute el contrato o una función los valores estarán allí. Consume muchos recursos.
  • Memory: Es la zona del contrato inteligente que mantiene las variables temporales, se borra cada vez que se ejecuta el contrato o se llama a una función diferente. Consume pocos recursos.
  • Stack: Almacena un pequeño conjunto de variables locales, no consume apenas recursos pero apenas tiene capacidad.
Solidity dispone de las palabras clave memory y storage para determinar dónde alojar la variable.

Si asignamos una variable marcada como memory a una variable storage solo estamos copiando los datos no creando una variable storage.

Sin embargo si lo hacemos al revés, o sea asignamos una variable storage a una variable memory si que estaremos creando una variable memory.

Cuando creas una variable fuera de una función la estás alojando en el storage del contrato.

Y bueno, aquí termina mi pequeño resumen, espero que os sea de utilidad.

Comentarios