Tipos de datos
Value types
Los value types son tipos que no toman mas de 32 bytes de memoria como tamaño. En solidity se encuentran los siguientes value types:
bool: es el valor que puede mantener los valores true o false
uint: son enteros sin signo, es decir de cero (0) y valores enteros positivos
int: contienen enteros positivos y negativos
address: representan y almacenan los address de una cuenta en el ambiente ethereum
byte: representa el tamaño fijado de un array
enum: son enumeraciones que almacenan valores constantes
Passing by value
Cuando una variable es asignada a otra o cuando una variable es enviada como argumento a una function, EVM crea una nueva variable y el valor es copiado desde la variable original. Cambiando los valores de una variable no afecta la otra, mantienen su independencia, pueden cambiar de valor sin que la otra se afecte.
Reference types
A diferencia de value types no almacenan los valores en las variables por si mismas, en lugar del el valor estas almacenan la dirección donde esta localizada el valor en la EVM, es decir almacenan el apuntador a la localización en memoria que mantiene la data actual. Estos tipos pueden tomar mas de 32 bytes de tamaño en memoria. En solidity se encuentran los siguientes reference types:
Arrays: son arreglos de tamaños fijos o dinámicos
Structs: Son tipos definidos por el usuario
String: Son secuencias de carácteres, es solidity strings son eventualmente almacenados como bytes
Mappings: Estos son similares a hash tablas o diccionarios de otros lenguajes de programación. En realidad almacenan pares de clave-valor
Passing by reference
Cuando un reference type es asignado a otra variable o cuando es enviado como argumento de una function, el EVM crea una nueva instancia de variable y copia el apuntador de memoria de la variable original.
Cambiando el valor de la variable original o cambiando el valor de la variable asignada cambiaria el valor para las dos, es decir ambas variables comparten el mismo valor por lo tanto el cambio del valor en una afecta la otra.
Storage and memory data locations
Cada variable declarada dentro de un smart contract tiene un data location:
Storage: Es la memora global disponible para todas las funciones dentro de un contrato. Este es un almacenamiento permanente que EVM mantiene en todos los nodos de la blockchain
Memory: Es un tipo de memoria local disponible también para todas las funciones de un contrato. esta es de corta vida ya que se mantiene mientras la ejecución de la función, apenas termine la ejecución esta memoria es derribada.
la data location de una variable depende de los siguientes factores:
ubicación de la variable
tipo de dato de la variable
basados en los anteriores factores las reglas que definen la ubicación de la data almacenada en las variables son:
regla 1
Las variables declaradas como variables de estado son siempre almacenadas en storage data location
regla 2
las variables declaradas como parámetros de una función son siempre almacenadas en memory data location
regla 3
Las variables declaradas dentro de una función, por defecto son siempre almacenadas en memory data location
Last updated
Was this helpful?