¿Qué es mapping en Solidity?
Escrito por Alchemy
Los mappings en Solidity son tablas hash que almacenan datos como pares clave-valor, donde la clave puede ser cualquiera de los tipos de datos integrados que soporta Ethereum. Los mappings son un concepto fundamental para entender al aprender desarrollo en Solidity.
Este artículo explica qué son los mappings, cómo funcionan, las diferencias entre mappings y arrays, y ofrece ejemplos de mappings para que puedas desarrollar los mejores smart contracts en Ethereum y blockchains compatibles con Solidity como Optimism y Arbitrum.
¿Qué es una tabla hash?
Una tabla hash es una estructura de datos que almacena datos de forma asociativa. Los datos se mantienen en un formato de array en una tabla hash, y cada valor de dato tiene su propio valor de índice único. Las tablas hash usan un array como medio de almacenamiento y emplean la técnica de hash para establecer un índice desde el cual se inserta o localiza un elemento.

Cuando se conoce el índice del dato necesario, este se puede devolver de forma extremadamente rápida. Por eso, las tablas hash son estructuras de datos en las que las operaciones de inserción y búsqueda son extremadamente rápidas, sin importar la cantidad de datos.
¿Qué es un mapping en Solidity?
Un mapping es una tabla hash en Solidity que almacena datos como pares clave-valor, donde la clave puede ser cualquiera de los tipos de datos integrados, excluyendo los tipos de referencia, y el valor puede ser de cualquier tipo.
Los mappings se usan típicamente en Solidity y en la blockchain de Ethereum para conectar una dirección única de Ethereum con un valor correspondiente.
En cualquier otro lenguaje de programación, un mapping equivale a un diccionario.
¿Cuál es la diferencia entre las tablas hash y los mappings de Solidity?
Los mappings funcionan como tablas hash, con pares de tipos de clave y su correspondiente tipo de valor, y son valiosos porque pueden contener una gran cantidad de pares de _KeyTypes a _ValueTypes. Los mappings no tienen longitud, ni tienen el concepto de establecer una clave o un valor. Los mappings solo se aplican a variables de estado que sirven como tipos de referencia de almacenamiento. Cuando se inicializan los mappings, incluyen todas las claves posibles, mapeadas a valores cuya representación en bytes es toda ceros.
Los mappings se definen en Solidity de la misma forma que cualquier otro tipo de variable:
¿Cuál es la diferencia entre los arrays y los mappings en Solidity?
Los arrays de Solidity son mejores para iterar sobre un grupo de datos (por ejemplo, usando un bucle for), en comparación con los mappings, que son mejores cuando se pueden obtener valores a partir de una clave conocida (es decir, no necesitas recorrer los datos).
Debido a que iterar sobre un array en Solidity puede resultar costoso en comparación con obtener datos de un mapping, y los desarrolladores pueden querer almacenar tanto un valor como su clave dentro de un smart contract, a veces se crea un array de claves que sirve como referencia a datos que luego se pueden recuperar desde un mapping.
Los desarrolladores nunca deberían dejar que un array en Solidity crezca demasiado, porque iterar sobre un array grande podría costar más en tarifas de gas de Solidity que el valor de la transacción, lo que hace que los mappings sean una implementación de smart contract más eficiente en gas.
Aquí hay algunas cualidades adicionales de los mappings:
- Los mappings no tienen longitud.
- Los mappings tampoco entienden el concepto de que una clave o un valor esté "establecido".
- Los mappings solo se pueden usar para variables de estado que sirven como tipos de referencia de almacenamiento.
¿Qué es un nested mapping (mapping anidado)?
Un nested mapping es un mapping de un mapping a otro. Por ejemplo, si tenemos un nombre de usuario y una edad y queremos almacenar esta información con la ayuda de un ID especial para que otros solo puedan obtenerla mediante ese ID, esto se conoce como double mapping en Solidity.
Aquí hay un ejemplo de nested mapping:
En este contrato, construimos un nested mapping, al que llamamos User. Dentro de ese mapping, enlazamos dos mappings:
- uno para registrar la información sobre el id del usuario específico
- uno para almacenar el nombre y la edad del usuario específico.
El siguiente bloque de código es una función getter simple, que devuelve la información del usuario.
Cómo usar mappings en Solidity
Aquí hay un ejemplo de cómo usar mappings en Solidity. El siguiente fragmento de código realiza las siguientes funciones:
- Mapea de address a uint y garantiza que el mapping siempre devuelva un valor
- Si el valor nunca se estableció, devolverá el valor por defecto.
- Actualiza el valor en la dirección mapeada
- Restablece el valor al valor por defecto.
- Crea un nested mapping de address a otro mapping
- Obtiene valores de un nested mapping incluso cuando no está inicializado
Ejemplos de mappings en Solidity
Aquí hay tres ejemplos de mappings en Solidity:
- Balances de tokens ERC20
- Uso de lógica booleana
- Búsqueda de miembros de una DAO
1. Balances de usuarios ERC20
Este fragmento de código mapea direcciones de usuario con el balance ERC20 de esas direcciones.
2. Ejemplo de mapping bool en Solidity
Este fragmento de código está diseñado para listar nombres de candidatos y devolver cuántos votos recibió cada candidato. Este ejemplo tiene casos de uso en DAOs, donde se espera que los miembros voten sobre decisiones organizacionales.
3. Es un miembro (DAOs)
Este ejemplo proviene del smart contract de Dominion DAO, que mapea raisedProposals, stakeholderVotes, votedOn, contributors y stakeholders.
Este ejemplo de código lista campos para dos structs de Solidity: ProposalStruct y VotedStruct.
Mapping de string en Solidity
Intentemos agregar algunos valores al mapping mientras lo construimos, para entenderlo mejor. En el siguiente ejemplo:
- Creamos un contrato
- Definimos una estructura
- Declaramos distintos elementos de la estructura
- Creamos un mapping
- Agregamos valores al mapping
Preguntas frecuentes sobre mappings en Solidity
Aquí hay algunas preguntas frecuentes sobre los mappings en Solidity:
- ¿Cuál es la longitud de un mapping en Solidity?
- ¿Cuáles son los valores por defecto de los mappings en Solidity?
- ¿Cómo se pueden ver públicamente los mappings en Solidity?
¿Cuál es la longitud de un mapping en Solidity?
Los mappings no tienen longitud. Los datos de una clave no se guardan en un mapping, sino que se usa su hash keccak256 para almacenar el valor al que la clave hace referencia. No existe el concepto de una clave y un valor "por sí mismos".
¿Cuáles son los tipos de valores por defecto en los mappings de Solidity?
Aquí están los tipos de valores por defecto para los mappings en Solidity:
- int/uint - tipo de clave = sí; tipo de valor = sí
- string - tipo de clave = sí; tipo de valor = sí
- byte/bytes - tipo de clave = sí; tipo de valor = sí
- address - tipo de clave = sí; tipo de valor = sí
- struct - tipo de clave = no; tipo de valor = sí
- mapping - tipo de clave = no; tipo de valor = sí
- enum - tipo de clave = no; tipo de valor = sí
- contract - tipo de clave = no; tipo de valor = sí
- array de tamaño fijo - tipo de clave = sí; tipo de valor = sí
- array de tamaño dinámico - tipo de clave = no; tipo de valor = sí
- array multidimensional - tipo de clave = no; tipo de valor = sí
- variable - tipo de clave = no; tipo de valor = no
¿Cómo ver públicamente los mappings en Solidity?
Debido a que la propiedad es pública, puedes usar la función getter creada por el compilador de Solidity para acceder a ella.
Resúmenes relacionados
Solidity3 de diciembre de 2025
Los 6 mejores IDEs de Solidity para desarrolladores (2026)
Explora los mejores IDEs para el desarrollo en Solidity.
Solidity19 de noviembre de 2025
Optimización de gas en Solidity: 12 técnicas para hacer tus smart contracts más económicos y eficientes
¿Quieres escribir mejor código y reducir tus fees de gas?
Solidity13 de noviembre de 2025
12 mejores prácticas de seguridad para smart contracts en Solidity
Protege tus smart contracts con estos consejos y herramientas de seguridad de expertos.

Construye magia blockchain
Alchemy combina los productos y herramientas de desarrollo Web3 más potentes con recursos, comunidad y un soporte legendario.