ETH Kipu
  • Ethereum Developer Pack
  • Módulo 1
    • Intro a Smart Contracts
      • Fundamentos de Blockchain
        • Antecedentes
        • Bitcoin
        • Qué es Blockchain
        • Conceptos Clave en Blockchain
        • Cómo funciona la Blockchain
        • Tipos de Blockchain
        • Modelos de Consenso
      • El nuevo Internet
        • Web 3
        • Elementos Fundamentales
        • Impacto de Ethereum en Diversos Sectores
      • Wallets
        • Componentes de una wallet
        • Tipos de Wallet
        • Códigos mnemónicos
      • Ethereum 101
        • Smart Contracts
        • Cuentas
          • Tipos de cuentas
          • Contenido de cuentas
        • Transacciones
          • Componentes
          • Ciclo de vida
        • Gas
        • Solidity
        • EVM
          • La máquina de estados
          • Opcodes
          • Cómo funciona la EVM
          • Clientes de ejecución
          • DApps
      • Blockchain Explorer
        • Funciones de un blockchain explorer
        • Beneficios de utilizar un blockchain explorer
      • Remix
        • Características de Remix
        • Workspaces o espacios de trabajo
        • Cargar y compilar un contrato
        • Desplegar en la máquina virtual de Remix (Remix VM)
        • Interactuando con funciones
        • Desplegar en una red pública
      • Crea tu primer Smart Contract
  • Módulo 2
    • Fundamentos de Solidity
      • Hello World
      • Tipos de Datos
      • Funciones
      • Variables
        • Ejercicio 1
      • Operadores
        • Ejercicio 2
      • Constructor
        • Ejercicio 3
      • Convenciones de nomenclatura
      • Tipos de almacenamiento para variables
      • Estructuras de Control
        • Ejercicio 4
      • Modificadores
      • Eventos
        • Ejercicio 5
      • Tipos de Referencia
        • Arrays
          • Ejercicio 6
        • Mappings
          • Ejercicio 7
        • Structs
          • Ejercicio 8
      • Address Payable
      • Cómo reciben Ether los contratos y funciones
      • Transferencias de Ether
      • Conceptos Avanzados
        • Codificación ABI
        • Hashing
        • This
        • Herencia
        • Abstract
        • Interface
        • Llamadas entre contratos
        • EVM
        • ABI
        • Bytecode
        • Opcodes
  • Módulo 3
    • Estándares, Librerías y Patrones
      • Buenas Prácticas de Diseño
      • Patrones de Diseño
      • EIP y ERC
      • ERC-20
      • ERC-721
      • Open Zeppelin
      • Crea un Token ERC-20
      • Almacenamiento Descentralizado: IPFS
      • Crea un Token ERC-721
      • DeFi
  • Módulo 4
    • Toolkit para desarrollo en Ethereum
      • Requisitos para el módulo 4
        • Terminal
        • Git y Github
        • Node.js y npm
        • Visual Studio Code para Solidity
      • Toolkit
        • JSON-RPC
        • Ethers.js
          • Ejercicio
        • Hardhat
          • Despliegue de un contrato en Hardhat
          • Despliegue de un contrato en una red pública
        • Scaffold-ETH
          • Características
          • Cómo instalar Scaffold-ETH
  • Módulo 5
    • Seguridad, Pruebas y Auditoría
      • Pruebas
        • Importancia de realizar pruebas
        • Métodos para probar contratos inteligentes
          • Pruebas automatizadas
          • Pruebas manuales
        • Conceptos importantes en testing
        • Herramientas para testing
        • Testing con Hardhat
        • Recursos adicionales
      • Seguridad
        • Una mentalidad distinta de diseño
        • Principales vulnerabilidades en smart contracts
          • Reentrancy attack (ataque de reentrada)
          • Replay attack (ataque de repetición)
          • Price Oracle Manipulation (Manipulación de Oráculos de Precios)
          • Missing Access Control (Pérdida de Control de Acceso)
          • Reward Manipulation (Manipulación de Recompensas)
          • Failure to Initialize (Falla al Inicializar)
          • Front-running
          • Invariant Breaks (Ruptura de invariantes)
          • Mishandling of ETH (Mal manejo de ETH)
          • Denial of Service (DoS - Denegación de Servicio)
          • Integer overflow and underflow (desbordamiento y subdesbordamiento de enteros)
          • Phishing y Typosquatting
        • Recursos adicionales
      • Auditoría de smart contracts
        • Proceso de Auditoría
        • Herramientas
        • Cómo prepararse para una auditoría
        • El test Rekt
        • Retos
        • Recursos adicionales
  • Contribuye
    • Kipu Explorer
Powered by GitBook
On this page

Was this helpful?

  1. Módulo 2
  2. Fundamentos de Solidity

Tipos de almacenamiento para variables

PreviousConvenciones de nomenclaturaNextEstructuras de Control

Last updated 6 months ago

Was this helpful?

En Solidity, hay tres tipos de ubicaciones de almacenamiento para variables, cada una con sus propias características y usos. Estas ubicaciones son: almacenamiento (storage), memoria (memory) y área de calldata. Comprender la diferencia entre ellas es crucial para un desarrollo eficiente y seguro de contratos inteligentes en Ethereum.

  1. Storage (Almacenamiento):

    • Descripción: Las variables de almacenamiento son persistentes y se guardan en la blockchain entre transacciones. Son como el "disco duro" de un contrato inteligente.

    • Uso: Se utiliza principalmente para variables de estado, es decir, variables que necesitan persistir entre llamadas a funciones y transacciones.

    • Costo: Es la forma más costosa de almacenamiento en términos de gas, especialmente en escrituras y modificaciones.

    • Acceso: Por defecto, las variables de estado son de almacenamiento.

  2. Memory (Memoria):

    • Descripción: Las variables en memoria son temporales y solo existen mientras una función está siendo ejecutada. Son borradas entre las llamadas a funciones externas y no se almacenan en la blockchain.

    • Uso: Útil para almacenar datos temporales durante la ejecución de una función. Por ejemplo, variables dentro de funciones o argumentos pasados a funciones internas.

    • Costo: Mucho más barato que el almacenamiento en términos de gas. No tiene un costo de gas permanente ya que los datos se eliminan al final de la ejecución de la función.

    • Acceso: Debes especificar explícitamente memory para variables de función y parámetros (excepto para tipos de referencia internos como mappings).

  3. Calldata:

    • Descripción: Calldata es una ubicación de almacenamiento no modificable y temporal que contiene los datos de entrada de las transacciones y llamadas a funciones. Es similar a memory, pero solo se utiliza para datos de entrada de funciones externas.

    • Uso: Se utiliza para argumentos de función en funciones external. Es la forma más eficiente de pasar datos en términos de gas, especialmente para arrays y estructuras complejas.

    • Costo: Es generalmente más barato en términos de gas que memory porque los datos en calldata no se copian sino que se leen directamente de la transacción o llamada.

    • Acceso: Es de solo lectura y no puede modificarse.

Ejemplo en Código:

pragma solidity ^0.8.0;

contract StorageTypes {
    // Storage: persistente entre transacciones
    uint public storageVar = 10;

    function exampleFunction(uint[] calldata calldataVar) external {
        // Calldata: datos de entrada en una función external
        uint localVar = calldataVar[0];

        // Memory: temporal durante la ejecución de la función
        uint[] memory memoryArray = new uint[](5);
    }
}

En este ejemplo, storageVar es una variable de almacenamiento, calldataVar es una variable de calldata (ya que es un argumento en una función external), y memoryArray es una variable de memoria.

La comprensión de estas tres ubicaciones de almacenamiento es fundamental para optimizar el uso de gas en contratos inteligentes y evitar errores comunes en Solidity.