Storage y Memory en Ethereum

Words
352
Reading
2 min
9y
Listen to this post
~2 min

En los SmartContracts de Ethereum existen dos tipos de memoria o almacenamiento: "Storage" y "Memory".

Storage: Hace referencia a todos los datos guardados permanentemente en la blockchain. ¿Pero cuáles son esos datos? Las variables de nuestro contrato que hayan sido declaradas en el scope global fuera de cualquier método (función del contrato), a esto se le denomina el ESTADO de nuestro SmartContract. Puedes entenderlo como los datos del disco duro de tu ordenador, solo que están en la blockchain, esto es, descentralizados en millones de discos duros u otros dispositivos de almacenamiento persistente (nodos).

Memory: Hace referencia a los datos NO persistentes, piensa en ello como la memoria RAM de tu ordenador. ¿Pero cuáles son esos datos? Las variables de nuestro contrato que hayan sido declaradas dentro de un scope local, esto es, dentro de un método o función de nuestro contrato. Solo viven en tiempo de ejecución durante la llamada a la función, pero no se guardan en la blockchain. Una vez ejecutada la función, dichos valores/datos desaparecen por completo y son irrecuperables. Aunque sí podemos ejecutar eventos en el cuerpo de la función, pasando los valores como parámetros.

Una vez hecho el deploy de un contrato en la blockchain, no se podrá modificar nunca en lo referente a la declaración y definición de sus variables y métodos, sí en la asignación de valores dependiendo de los permisos asignados previamente. Es por ello que nunca una variable de tipo "memory" podrá ser incluida en la blockchain.

  • El compilador de Solidity suele atribuir estos dos tipos de memoria de forma eficiente y por default, pero en ocasiones podemos necesitar hacer una atribución manual a través de las keywords "storage" y "memory".

Ejemplo:

  • He usado "view" en la primera función porque solo leo los datos del estado del contrato, no los manipulo. Sin embargo, en la segunda función sí que modifico el valor de la variable de estado y por eso no puedo usar "view". Esto tiene repercusiones a nivel de Coste de Gas.

(IMPORTANTE) - La gestión manual de "storage" y "memory" debe usarse únicamente para datos de tipo "struct" y "array".

Storage y Memory en Ethereum | Ecency