假设 MPT 有 100 亿账户(超过世界人口!),我们预计状态大小将为 150G(以太坊状态大小)/0.18B(以太坊唯一地址)* 10B = 8.3 TB 将这些数字放在一起,我们很容易得出一个结论,这是大多数普通配置计算机将 无法承受的要求! 优化 为了优化存储成本,我们必须将限制放宽为兼容 EVM 而不是兼容以太坊。即,我们必须构建/运行另一个支持 EVM 的链,而不是高度优化的以太坊客户端。 状态存储优化 我们提出的第一个优化是使用普通的 KV 而不是 MPT。当 MPT 很大时,MPT 中的所有内部节点可能非常昂贵。而我们的优化将去掉 MPT 中的所有内部节点。假设每个账户的数据大约是 50 字节(20 个地址 + 2 个nonce + 12 个账户 + 其他),我们可以节省下100亿账户的数据为:
虽然使用普通 KV 会带来巨大的好处,但一个主要问题是我们无法在如此短的区块间隔内计算每个区块的状态后哈希,这意味着我们将失去以太坊的以下好处:
为了启用快速同步,我们有一个周期性的快照区块(快照间隔 = epoch = 例如,14 周)。一个快照区块包含前状态哈希这一附加信息,即前一个快照区块的后状态哈希(执行交易之后的状态哈希):
计算状态前哈希的流程如下: 1. 当一个快照区块被接收并最终确定时,它的 KV 状态被快照,并创建一个后台线程来迭代所有 KV 条目(地址 => 帐户)并计算哈希。 2. 当下一个快照区块被创建时,计算出的状态前哈希值将存储在该区块中。同样,节点将创建 KV 的另一个快照并在后台计算其哈希。 (责任编辑:admin) |