Blockchain Smart Contracts with Solidity · Lección

Variables de estado y distribución del almacenamiento

Comprenda la diferencia entre storage, memory y calldata, y cómo persisten las variables de estado en la blockchain.

Lección 1 de 412 pasos

Variables de estado y distribución del almacenamiento es una lección gratuita de Blockchain Smart Contracts with Solidity en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Blockchain Smart Contracts with Solidity, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Blockchain Smart Contracts with Solidity incluye 4 lecciones en total.

What are State Variables?

¡Bienvenido a comprender cómo viven los datos en la cadena de bloques! En Solidity, las variables de estado son variables especiales cuyos valores se almacenan permanentemente en el almacenamiento del contrato en la cadena de bloques.

Piense en ellas como la memoria persistente de su contrato inteligente. Sus valores se guardan incluso después de que una función termina de ejecutarse y a través de diferentes transacciones.

Data Locations in Solidity

Solidity utiliza diferentes ubicaciones de datos para gestionar dónde se almacena la información durante la ejecución del contrato. Estas ubicaciones tienen un gran impacto en los costes de gas y en cómo se comportan tus variables.

  • storage: Estado permanente en la cadena de bloques (blockchain).
  • memory: Datos temporales para la ejecución de funciones.
  • calldata: Datos de solo lectura para argumentos de funciones externas.

Deep Dive into `storage`

Las variables declaradas a nivel de contrato (fuera de cualquier función) se asignan automáticamente a storage. Estas son las variables de estado de su contrato.

Los datos en storage son costosos de modificar porque cada cambio se escribe en la cadena de bloques, haciéndolo permanente e inmutable (en el sentido de su historial).

`storage` in Action

Este contrato almacena un número en una variable de estado. Observe cómo myNumber mantiene su valor entre las llamadas a setNumber y getNumber.

pragma solidity ^0.8.0;

contract StorageExample {
    uint public myNumber; // This is a state variable, lives in storage

    function setNumber(uint _num) public {
        myNumber = _num;
    }

    function getNumber() public view returns (uint) {
        return myNumber;
    }
}

Understanding `memory`

memory es una ubicación de datos temporal. Se utiliza para variables que existen solo durante la llamada a una función y se descartan una vez que esta termina su ejecución.

Es más económico que storage para datos temporales, lo que lo hace ideal para arrays, cadenas o structs que se crean y utilizan dentro de una misma función.

`memory` in Action

Esta función crea una cadena en memoria, la modifica y la devuelve. La cadena solo existe durante la duración de la llamada a la función.

pragma solidity ^0.8.0;

contract MemoryExample {
    function greet(string memory _name) public pure returns (string memory) {
        string memory greeting = "Hello, ";
        // Use abi.encodePacked for simple string concatenation
        return string(abi.encodePacked(greeting, _name, "!"));
    }
}

Introducing `calldata`

calldata es una ubicación de datos especial de solo lectura utilizada exclusivamente para los parámetros de funciones externas. Es incluso más económica que memory porque los datos no se copian en la memoria, sino que solo se hace referencia a ellos.

No se puede modificar calldata. Normalmente se utiliza para grandes cantidades de datos que se pasan a funciones externas, ahorrando gas al evitar copias.

`calldata` in Action

Esta función externa toma una cadena como calldata. Ten en cuenta que es de solo lectura y eficiente para llamadas externas.

pragma solidity ^0.8.0;

contract CalldataExample {
    // This function can only be called externally
    function processData(bytes calldata _data) external pure returns (uint) {
        // You cannot modify _data directly, but can read its properties
        return _data.length; // Returns the byte length of the data
    }

    // Another example returning calldata directly
    function echoString(string calldata _message) external pure returns (string calldata) {
        return _message;
    }
}

Comparing Data Locations

Elegir la ubicación de datos correcta es crucial para la optimización del gas y el comportamiento correcto del contrato:

  • Storage: Permanente, costoso, estado del contrato.
  • Memory: Temporal, más económico, variables dentro de funciones.
  • Calldata: De solo lectura, el más económico, argumentos de funciones externas.

Utilice siempre la opción más restrictiva y económica posible.

How Storage is Organized

Solidity empaqueta variables de estado en espacios de almacenamiento (storage slots) de 256 bits (32 bytes) para ahorrar espacio y gas. Los tipos más pequeños (como uint8, bool) pueden empaquetarse juntos en un solo espacio.

Sin embargo, este empaquetado puede ser complejo y depende del orden de las declaraciones de las variables. Comprenderlo ayuda a optimizar los costes de gas, especialmente con structs y arrays.

Data Location Quiz

¿Qué ubicación de datos se utiliza para el almacenamiento permanente de las variables de estado de un contrato en la cadena de bloques?

Summary of Data Locations

¡Buen trabajo! Has aprendido sobre las ubicaciones de datos fundamentales en Solidity: storage, memory y calldata.

  • Las variables de estado residen en storage, lo que las hace persistentes.
  • memory se utiliza para datos temporales durante la ejecución de funciones.
  • calldata es para argumentos de funciones externas eficientes y de solo lectura.

Comprender esto te ayudará a escribir contratos inteligentes más eficientes y correctos. ¡A continuación, exploraremos estructuras de datos complejas como Mappings y Dynamic Arrays!

Gratis para empezar

Aprende Blockchain Smart Contracts with Solidity con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
12
Lecciones
48

Preguntas frecuentes

¿La lección «Variables de estado y distribución del almacenamiento» es gratis?

Sí — el texto completo de «Variables de estado y distribución del almacenamiento» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Blockchain Smart Contracts with Solidity, actualiza a CoddyKit PRO. El curso de Blockchain Smart Contracts with Solidity incluye 4 lecciones en total.

¿Qué aprenderé en «Variables de estado y distribución del almacenamiento»?

Comprenda la diferencia entre storage, memory y calldata, y cómo persisten las variables de estado en la blockchain. Practicas Blockchain Smart Contracts with Solidity con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Blockchain Smart Contracts with Solidity?

No se requiere experiencia previa. Blockchain Smart Contracts with Solidity en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Variables de estado y distribución del almacenamiento»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Blockchain Smart Contracts with Solidity?

Sí. Cada lección de Blockchain Smart Contracts with Solidity incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Variables de estado y distribución del almacenamiento
  2. Mappings y arrays dinámicos
  3. Eventos y registro de datos
  4. Slots de almacenamiento y optimización de gas
← Volver a Blockchain Smart Contracts with Solidity