ethereum有个replayBlock性能,就是将块放到指定的世界状态中,从新执行一次,获取执行后果。
这个性能依赖于可能取得指定块高时的世界状态,具体就是依据块hash获取块所在的Repository快照。
这个性能是依赖于世界状态的存储形式,具体来说就是账户的状态的存储形式。账户以叶子节点的模式存储在merklePatriciaTree(MPT)中,每个账户有个地址作为节点key,账户详情作为value,所有的账户节点形成一个MPT。MPT的root每笔交易执行完后,账户发生变化,从新结构一个节点。这个节点所在整条TreePath也将从新结构,这条TreePath(新)与原来的MPT连贯,复用没有批改的数据,并生成新的stateRoot(这部分要依据参考中图了解)。
旧的所有状态保留,通过旧的stateRoot找到原来的MPT,因而能够实现结尾所说的依据块hash找到对应的世界状态。
参考:
- https://ethfans.org/toya/arti...