如果代币的总余额超过代币的总供应量会怎样?

问题描述

据我所知,totalSupply 只是一个用于提供信息的数字。
它不会对所有余额的总数施加硬性限制,或者是吗?

示例:

function transfer(address receiver,uint numTokens) public returns (bool) {
  require(numTokens <= balances[msg.sender]);
  balances[msg.sender] = balances[msg.sender] — numTokens;//Remove This
  balances[receiver] = balances[receiver] + numTokens;
  emit Transfer(msg.sender,receiver,numTokens);
  return true;
}

如果我去掉减去余额的那一行,代币只会出现在接收者的余额上,而发送者的余额不会改变。
如果发生这种情况,存在的总代币将比以前更多。是真的吗?
我的理解是否正确,余额映射只是一个余额列表(类似于 C# 字典)?

这对区块链程序员有什么影响吗?

解决方法

如果我去掉减去余额的那一行,代币只会出现在接收者的余额上,而发送者的余额不会改变。

没错。

如果发生这种情况,现有的代币总数将比以前更多。

更正现有令牌的总和。

但是 - 代币标准(ERC-20、ERC-721 等)还希望您计算现有代币的总量(通常存储在名为 totalSupply 的属性中)。由于您的代码段未更新此 totalSupply,因此其值将变为不真实。

总供应量主要由 Etherscan 等区块链浏览器用于统计目的(计算代币的最大持有者、他们的所有权百分比等)。

其他系统,例如一般的去中心化交易所或 dapp,当 totalSupply() 输出与实际总供应量不匹配时,可能会出现意外行为。但这完全取决于他们的实施,因此没有通用的答案。