建议和反馈

请填写你的反馈内容

问答 > 以太坊 > 问答详情

ERC20代币余额如何存储在以太坊区块链上10LK

我对ERC20代币余额如何存储在链上感到非常困惑。似乎所有余额数据都存储为成员映射变量:

contract TestCoin is ERC20Interface {
    ...
    mapping(address => uint) balances;
    ...

我想知道区块链上存储了多少副本。假设balances包含10K条记录,最大块数为100。现在我进行令牌转移,并balances更改了2条记录,我们得到了new balances,并且此转移由新的块101确认。

 <------- [Block 100] <------- [Block 101]
              ^                    ^
              |                    |
           balance1             balance2

余额存储在哪里?在方框100中可以取回余额吗?(我想我们必须能够这样做,因为区块链可能会回滚)。

我正在使用geth / web3 / eth,如果您可以将我定向到相关的文档页面,那就太好了。


2020-11-02
0
请先登陆或注册

witcher2020-11-02

以太坊区块链具有“状态”的概念,其中每个合约(和地址)都有一个状态,并且每个区块都会为该状态创建增量(变化)。为了获得当前余额,您必须扫描整个区块链。

因此,如果我向您发送了50个以太币,则包含此交易的区块将有效地导致我的帐户中产生-50 Eth,给您的帐户中产生50 Eth。

同样适用于您在此处显示的映射。当发生相关事务时,在每个块中向它们发送令牌时,映射仅包含相关地址(所涉及的地址)和这些地址中的增量。

这就是以太坊使用的“会计模型”和比特币使用的UTXO模型之间的区别。


投一票
评论(0)
赞赏(0)

求助中

解决了这个问题,预计可以帮助到

  • 0
  • 1
  • 7
  • 8
  • 7
邀请

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励