tutorial smart remix programador español curso ethereum

remix - smart contracts ethereum



En Ethereum Solidity, ¿cuál es el propósito de la palabra clave "memoria"? (1)

Sin la palabra clave de memoria , Solidity intenta declarar variables en el almacenamiento .

Lead Solidity dev chriseth: "Puedes pensar en el almacenamiento como una matriz grande que tiene una estructura virtual ... una estructura que no puedes cambiar en tiempo de ejecución, está determinada por las variables de estado en tu contrato".

Es decir, la estructura de almacenamiento se establece en piedra en el momento de la creación del contrato en función de las declaraciones de variables a nivel de contrato y no se puede cambiar mediante llamadas a métodos futuros. PERO - el contenido de ese almacenamiento se puede cambiar con llamadas sendTransaction. Tales llamadas cambian el "estado", que es la razón por la cual las variables de nivel de contrato se denominan "variables de estado". Entonces una variable uint8 storagevar; declarado en el nivel de contrato puede cambiarse a cualquier valor válido de uint8 (0-255) pero ese "espacio" para un valor de tipo uint8 siempre estará allí.

Si declara variables en funciones sin la palabra clave de memoria , la solidez intentará usar la estructura de almacenamiento, que actualmente se compila, pero que puede producir resultados inesperados. la memoria le dice a la solidez que cree una porción de espacio para la variable en el tiempo de ejecución del método, garantizando su tamaño y estructura para uso futuro en ese método.

la memoria no puede usarse a nivel de contrato. Solo en métodos.

Vea la entrada "¿Qué es la palabra clave de memoria? ¿Qué hace?" en las preguntas frecuentes Lo cito aquí:

La máquina virtual Ethereum tiene tres áreas donde puede almacenar artículos.

El primero es "almacenamiento", donde residen todas las variables de estado del contrato. Cada contrato tiene su propio almacenamiento y es persistente entre llamadas a funciones y bastante costoso de usar.

El segundo es "memoria", esto se usa para mantener valores temporales. Se borra entre llamadas a funciones (externas) y es más económico de usar.

El tercero es la pila, que se usa para mantener pequeñas variables locales. Es de uso casi gratuito, pero solo puede contener una cantidad limitada de valores.

Para casi todos los tipos, no puede especificar dónde se deben almacenar, ya que se copian cada vez que se utilizan.

Los tipos en los que la denominada ubicación de almacenamiento es importante son estructuras y matrices. Si, por ejemplo, pasa tales variables en las llamadas a funciones, sus datos no se copian si pueden permanecer en la memoria o permanecer almacenados. Esto significa que puede modificar su contenido en la función llamada y estas modificaciones aún serán visibles en la persona que llama.

Hay valores predeterminados para la ubicación de almacenamiento según el tipo de variable que concierna:

  • las variables de estado siempre están almacenadas
  • los argumentos de función están siempre en la memoria
  • variables locales de almacenamiento de referencia de estructura, matriz o mapeo de forma predeterminada
  • las variables locales del tipo de valor (es decir, ni array, ni struct ni mapping) se almacenan en la pila

Al observar contratos de muestra, a veces las matrices se declaran en métodos con "memoria" y otras no. ¿Cual es la diferencia?