O que é mapping em Solidity?
Escrito por Alchemy
Mappings em Solidity são tabelas hash que armazenam dados como pares chave-valor, onde a chave pode ser qualquer um dos tipos de dados nativos suportados pela Ethereum. Mappings são um conceito fundamental para entender ao aprender desenvolvimento em Solidity.
Este artigo explica o que são mappings, como funcionam, as diferenças entre mappings e arrays, e apresenta exemplos de mappings para que você possa desenvolver os melhores smart contracts na Ethereum e em blockchains compatíveis com Solidity, como Optimism e Arbitrum.
O que é uma tabela hash?
Uma tabela hash é uma estrutura de dados que armazena dados de forma associativa. Os dados são mantidos em formato de array em uma tabela hash, com cada valor de dado tendo seu próprio valor de índice único. Tabelas hash usam um array como meio de armazenamento e empregam a técnica de hash para estabelecer um índice a partir do qual um elemento será inserido ou localizado.

Quando o índice do dado necessário é conhecido, ele pode ser retornado extremamente rápido. Como resultado, tabelas hash são estruturas de dados nas quais as operações de inserção e busca são extremamente rápidas, independentemente da quantidade de dados.
O que é mapping em Solidity?
Mapping é uma tabela hash em Solidity que armazena dados como pares chave-valor, onde a chave pode ser qualquer um dos tipos de dados nativos, excluindo tipos de referência, e o valor do tipo de dado pode ser qualquer tipo.
Mappings são geralmente usados em Solidity e na blockchain Ethereum para conectar um endereço Ethereum único a um valor correspondente.
Em qualquer outra linguagem de programação, um mapping equivale a um dicionário.
Qual é a diferença entre tabelas hash e mappings em Solidity?
Mappings funcionam como tabelas hash, com pares de tipos de chave e tipos de valor correspondentes, e são valiosos porque podem conter um grande número de _KeyTypes para _ValueTypes. Mappings não têm comprimento, nem têm o conceito de definir uma chave ou um valor. Mappings só se aplicam a variáveis de estado que servem como tipos de referência de armazenamento. Quando mappings são inicializados, eles incluem todas as chaves possíveis, mapeadas para valores cuja representação em bytes é toda zero.
Mappings são definidos em Solidity da mesma forma que qualquer outro tipo de variável:
Qual é a diferença entre arrays e mappings em Solidity?
Arrays em Solidity são melhores para iterar por um grupo de dados (por exemplo, usando um loop for), em comparação com mappings, que são melhores quando você consegue obter valores com base em uma chave conhecida (ou seja, você não precisa percorrer os dados).
Como iterar sobre um array em Solidity pode ser caro em comparação com buscar dados em mappings, e os desenvolvedores podem querer armazenar tanto um valor quanto sua chave dentro de um smart contract, às vezes os desenvolvedores criam um array de chaves que serve como referência para dados que podem então ser recuperados de dentro de um mapping.
Desenvolvedores nunca devem deixar um array em Solidity crescer demais, pois iterar por um array grande pode custar mais em taxas de gas em Solidity do que o valor da transação, tornando os mappings uma implementação de smart contract mais eficiente em termos de gas.
Aqui estão algumas características adicionais sobre mappings:
- Mappings não têm comprimento.
- Mappings também não entendem o conceito de uma chave ou um valor sendo definidos.
- Mappings só podem ser usados para variáveis de estado que servem como tipos de referência de armazenamento.
O que é um nested mapping?
Nested mapping é um mapping de um mapping para outro. Por exemplo, se tivermos um nome de usuário e uma idade e quisermos armazenar essa informação com a ajuda de um ID especial, de modo que outros só possam obtê-la com o auxílio desse ID, isso é conhecido como double mapping em Solidity.
Aqui está um exemplo de nested mapping:
Neste contrato, construímos um nested mapping, chamado de User. Nesse mapping, ligamos dois mappings:
- um para registrar a informação sobre o id do usuário específico
- um para armazenar o nome e a idade do usuário específico.
O bloco de código abaixo é uma função getter simples, que retorna informações do usuário.
Como usar mappings em Solidity
Aqui está um exemplo de uso de mappings em Solidity. As funções do trecho de código a seguir são:
- Mapping de address para uint, garantindo que o mapping sempre retorne um valor
- Se o valor nunca foi definido, ele retornará o valor padrão.
- Atualizar o valor no endereço mapeado
- Redefinir o valor para o valor padrão.
- Criar um nested mapping de address para outro mapping
- Obter valores de um nested mapping mesmo quando ele não foi inicializado
Exemplos de mapping em Solidity
Aqui estão três exemplos de mappings em Solidity:
- Saldos de tokens ERC20
- Uso de lógica booleana
- Consulta de membros de uma DAO
1. Saldos de usuários ERC20
Este trecho de código mapeia endereços de usuários com seus respectivos saldos ERC20.
2. Exemplo de mapping bool em Solidity
Este trecho de código foi projetado para listar nomes de candidatos e retornar quantos votos cada candidato recebeu. Este exemplo tem casos de uso em DAOs, onde espera-se que os membros votem em decisões organizacionais.
3. É membro (DAOs)
Este exemplo é do smart contract da Dominion DAO, que mapeia raisedProposals, stakeholderVotes, votedOn, contributors e stakeholders.
Este exemplo de código lista campos para duas structs em Solidity: ProposalStruct e VotedStruct.
Mapping de string em Solidity
Vamos tentar adicionar alguns valores ao mapping enquanto ele é construído, para melhor entendimento. No exemplo a seguir, nós:
- Criamos um contrato
- Definimos uma estrutura
- Declaramos diferentes elementos da estrutura
- Criamos um mapping
- Adicionamos valores ao mapping
FAQs sobre mapping em Solidity
Aqui estão algumas perguntas frequentes sobre mappings em Solidity:
- Qual é o comprimento de um mapping em Solidity?
- Quais são os valores padrão dos mappings em Solidity?
- Como você pode ver mappings em Solidity publicamente?
Qual é o comprimento de um mapping em Solidity?
Mappings não têm comprimento. Os dados de uma chave não são salvos em um mapping, mas sim seu hash keccak256 é usado para armazenar o valor ao qual os dados da chave se referem. Não existe o conceito de uma chave e um valor "por si só".
Quais são os tipos de valores padrão de mapping em Solidity?
Aqui estão os tipos de valores padrão para mappings em Solidity:
- int/uint - tipo de chave = sim; tipo de valor = sim
- string - tipo de chave = sim; tipo de valor = sim
- byte/bytes - tipo de chave = sim; tipo de valor = sim
- address - tipo de chave = sim; tipo de valor = sim
- struct - tipo de chave = não; tipo de valor = sim
- mapping - tipo de chave = não; tipo de valor = sim
- enum - tipo de chave = não; tipo de valor = sim
- contract - tipo de chave = não; tipo de valor = sim
- array de tamanho fixo - tipo de chave = sim; tipo de valor = sim
- array de tamanho dinâmico - tipo de chave = não; tipo de valor = sim
- array multidimensional - tipo de chave = não; tipo de valor = sim
- variable - tipo de chave = não; tipo de valor = não
Como ver mappings em Solidity publicamente?
Como a propriedade é pública, você pode usar a função getter criada pelo compilador Solidity para acessá-la.
Visões gerais relacionadas
Solidity3 de dezembro de 2025
As 6 melhores IDEs de Solidity para desenvolvedores (2026)
Conheça as melhores IDEs para desenvolvimento em Solidity.
Solidity19 de novembro de 2025
Otimização de gas em Solidity: 12 técnicas para deixar seus smart contracts mais baratos e eficientes
Quer escrever código melhor e reduzir suas taxas de gas?
Solidity13 de novembro de 2025
12 boas práticas de segurança para smart contracts em Solidity
Proteja seus smart contracts com essas dicas e ferramentas de segurança de especialistas.

Construa magia blockchain
A Alchemy combina os produtos e ferramentas de desenvolvimento Web3 mais poderosos com recursos, comunidade e suporte lendário.