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
  3. Tipos de Referencia

Mappings

Los mappings en Solidity son una estructura de datos de tipo “key - value” (clave-valor) que proporciona una forma eficiente y flexible de almacenar y acceder a datos dentro de contratos inteligentes. Son comparables a los diccionarios o mapas en otros lenguajes de programación, donde cada clave única se asocia con un valor. Los mappings son particularmente útiles en el desarrollo de aplicaciones descentralizadas (DApps) para gestionar conjuntos de datos como balances de cuentas, relaciones entre entidades, y otros tipos de datos estructurados.

Características de los Mappings

  • Claves Únicas: Cada clave en un mapping debe ser única y se utiliza para acceder a un valor específico. Las claves pueden ser de cualquier tipo primitivo como address, uint, bytes, etc. No se permiten tipos de datos complejos como arrays o structs como claves.

  • Valores Dinámicos: Los valores almacenados en un mapping pueden ser de cualquier tipo, incluyendo tipos primitivos, arrays, structs, e incluso otros mappings.

  • Inicialización por Defecto: Los mappings no tienen un tamaño fijo y no se puede obtener su longitud. Todos los posibles valores están virtualmente presentes y se inicializan por defecto al valor por defecto de su tipo (por ejemplo, 0 para uint, false para bool, etc.).

  • Privacidad: No se puede iterar sobre los mappings ni obtener una lista de sus claves directamente en Solidity. Cada acceso a un valor debe hacerse mediante una clave conocida.

Declaración

Un mapping se declara especificando el tipo de las claves y el tipo de los valores. La sintaxis general es:

mapping(tipoClave => tipoValor) public nombreMapping;

Ejemplo Básico

pragma solidity ^0.8.0;

contract MyContract {
    // Declaración de un mapping que asocia direcciones con balances
    mapping(address => uint) public balances;

    // Actualiza el balance de la address que solicita la actualización
    function updateBalance(uint newBalance) public {
        balances[msg.sender] = newBalance;
    }

    // Lee el balance de una dirección
    function getBalance(address user) public view returns (uint) {
        return balances[user];
    }
}

En el ejemplo anterior creamos un mapping denominado balances conformado por pares donde la clave es un address y el valor es un entero sin signo.

Para actualizar el balance de una address específica utilizamos la expresión

Uso común de Mappings en contratos inteligentes

  • Balances de Tokens: Para llevar un registro de los balances de criptomonedas o tokens ERC-20 de cada dirección.

  • Permisos y Roles: Para gestionar permisos o roles específicos asignados a diferentes direcciones.

  • Relaciones entre Entidades: Para mapear relaciones uno-a-uno o uno-a-muchos entre diferentes entidades, como usuarios y sus activos o tareas.

Consideraciones de Seguridad

Al trabajar con mappings, es crucial gestionar correctamente el acceso y las actualizaciones a los datos para prevenir vulnerabilidades de seguridad. Por ejemplo, cuando se actualiza un valor en un mapping, asegúrate de que solo las entidades autorizadas puedan realizar dicha actualización, utilizando modificadores de acceso o verificaciones de permisos adecuadas.

PreviousEjercicio 6NextEjercicio 7

Last updated 8 months ago

Was this helpful?