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?