我真的很困惑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,如果您可以将我引导至相关文档页面,那将会很不错。
非常感谢!
答案 0 :(得分:0)
以太坊区块链具有&#34; state&#34;的概念,其中每个合同(和地址)都有一个状态,每个块都会为此状态创建一个delta(更改)。要获得当前余额,您必须扫描整个区块链。
因此,如果我向您发送50以太,那么包含此交易的块将有效地在我的帐户中产生-50 Eth,并为您提供50 Eth。
同样适用于您在那里展示的地图。映射仅包含相关地址(涉及的地址),以及当相关事务发生时,在每个块中将令牌发送给它们时这些地址中的增量。
这是以太网使用的&#34;会计模型&#34;和比特币使用的UTXO模型之间的区别。