据我所知,有两种方法可以平衡某个地址。
address firstAddress;
"firstAddress.balance"
这将获得地址“firstAddress”的余额。address firstAddress;
mapping ( address => uint) balanceFirstAddress;
balanceFirstAddress[firstAddress]
这将获得地址“firstAddress”的余额。我知道第一个就是去一个地址并取得平衡。我不明白为什么mapping(address => uint)
将获得该地址的平衡。是不是mapping
只是一个散列函数将函数从十六进制散列到一些可以进行数学操作的二进制值?
此外,如果两个函数都获得了地址的平衡,那么它们之间的区别是什么,我何时应该使用哪个?
提前致谢!
答案 0 :(得分:3)
我认为值得注意的是,默认情况下mapping (address => uint256) balanceFirstAddress
不会返回地址的余额。您必须首先初始化该映射以获得余额,然后在适当时添加到该映射。如果您没有将值映射到某个键,则它只会返回零。
什么是映射?
映射用于构造值类型,并由链接到_KeyType
的{{1}}组成。
宣布如此_ValueType
例如:mapping(_KeyType => _ValueType) mappingName;
mapping (address => uint256) balanceOf;
是address
,_KeyType
是uint256
。在这种情况下,_ValueType
表示与uint256
相关联的余额。
您可以将address
视为您将通过的密钥,以返回address
值。
uint256
根据to the documentation,默认情况下,映射为空,并且必须将新uint256 balance = balanceOf[address]; /// balance would be a uint256 value.
映射到_keyType
。
因此,要在您输入的地址中添加余额:
_ValueType
您应该使用哪一个?
这取决于您尝试实现的目标,如果您只想要地址的总体以太平衡,则可以使用uint256 balanceToAdd = 200;
balanceOf[address] += balanceToAdd;
/// balanceOf[address] is 200 (address = 200)
。如果您的合同想要跟踪ERC20令牌的发送和接收,您可以将该令牌余额的增加和减少映射到一个地址。
以下是一个例子:
address.balance