询问Geth:快照加速度
*这是A的第1部分 系列 任何人都可以问有关Geth的问题,我将尝试每周用迷你文章回答最高投票的问题。本周的最高投票问题是: 您能否分享平面DB结构与旧结构的不同? 以太坊的状态 在深入加速结构之前,让我们回顾一下以太坊所说的 状态 以及如何将其存储在目前的各种抽象水平上。 以太坊维持两种不同类型的状态:帐户集;以及每个合同帐户的一组存储插槽。来自 纯粹的抽象观点这两个都是简单的密钥/价值映射。一组帐户地图地址为其nonce,余额等。单个合同的存储区域映射任意键(合同定义和使用)到任意值。 不幸的是,尽管将这些键值对存储为平面数据将非常有效,但验证其正确性在计算上变得棘手。每次进行修改时,我们都需要从头开始哈希所有数据。 我们可以将其拆分为小连续的块,并在顶部建造一棵树!原始有用的数据将在叶子中,每个内部节点都将是其下方所有内容的哈希。这将使我们只能在修改事物时重新计算对数数量的哈希数。这种数据结构实际上有一个名称,这是著名的 默克树。 不幸的是,我们仍然对计算复杂性有些不足。上述默克尔树布局非常有效地纳入现有数据的修改,但是插入和删除会改变块边界并无效 全部 计算出的哈希。 我们可以使用钥匙本身将数据本身组织成基于常见前缀的树格式!这样一来,插入或删除就不会改变所有节点,而是将对数路径从根部变为叶子。该数据结构称为 帕特里夏树。 结合两个想法 -...
阅读更多