ERC20令牌余额如何存储在以太坊区块链

时间:2018-03-31 00:53:17

标签: blockchain ethereum smartcontracts web3 go-ethereum

我真的很困惑ERC20令牌余额如何存储在链上。似乎所有余额数据都存储为成员映射变量:

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

我想知道Blockchain上存储了多少份副本。假设balances包含10K记录,最高的块编号为100.现在我进行了令牌转移,balances中的2条记录发生了变化,我们得到一个新的balances,此转移由一个新的块101.

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

存储余额在哪里?是否可以在块100中检索余额? (我想我们必须能够这样做,因为区块链可以回滚)。

我正在使用geth / web3 / eth,如果您可以将我引导至相关文档页面,那将会很不错。

非常感谢!

1 个答案:

答案 0 :(得分:0)

以太坊区块链具有&#34; state&#34;的概念,其中每个合同(和地址)都有一个状态,每个块都会为此状态创建一个delta(更改)。要获得当前余额,您必须扫描整个区块链。

因此,如果我向您发送50以太,那么包含此交易的块将有效地在我的帐户中产生-50 Eth,并为您提供50 Eth。

同样适用于您在那里展示的地图。映射仅包含相关地址(涉及的地址),以及当相关事务发生时,在每个块中将令牌发送给它们时这些地址中的增量。

这是以太网使用的&#34;会计模型&#34;和比特币使用的UTXO模型之间的区别。