Recently, I have been revisiting Solidity, consolidating the finer details, and writing "WTF Solidity" tutorials for newbies.
Twitter: @0xAA_Science | @WTFAcademy_
Community: Discord|Wechat|Website wtf.academy
Codes and tutorials are open source on GitHub: github.com/AmazingAng/WTF-Solidity
In this section, we will introduce the hash table in Solidity: mapping
type.
Mapping
With mapping
type, people can query the corresponding Value
by using a Key
. For example, a person's wallet address can be queried by their id
.
The format of declaring the mapping
is mapping(_KeyType => _ValueType)
, where _KeyType
and _ValueType
are the variable types of Key
and Value
respectively. For example:
Rules of mapping
- Rule 1: The
_KeyType
should be selected among default types insolidity
such asuint
,address
, etc. No customstruct
can be used. However,_ValueType
can be any custom type. The following example will throw an error, because_KeyType
uses a custom struct:
-
Rule 2: The storage location of the mapping must be
storage
: it can serve as the state variable or thestorage
variable inside the function. But it can't be used in arguments or return results ofpublic
function. -
Rule 3: If the mapping is declared as
public
then Solidity will automatically create agetter
function for you to query for theValue
by theKey
. -
Rule 4:The syntax of adding a key-value pair to a mapping is
_Var[_Key] = _Value
, where_Var
is the name of the mapping variable, and_Key
and_Value
correspond to the new key-value pair. For example:
Principle of mapping
-
Principle 1: The mapping does not store any
key
information or length information. -
Principle 2: Mapping use
keccak256(key)
as offset to access value. -
Principle 3: Since Ethereum defines all unused space as 0, all
key
that are not assigned avalue
will have an initial value of 0.
Verify on Remix (use Mapping.sol
as an example)
-
Deploy
Mapping.sol
-
Check the initial value of map
idToAddress
. -
Write a new key-value pair
Summary
In this section, we introduced the mapping
type in Solidity. So far, we've learned all kinds of common variables.