ethereumj代码走读之Repository快照功能

ethereum有个replayBlock功能,就是将块放到指定的世界状态中,重新执行一次,获取执行结果。
这个功能依赖于能够获得指定块高时的世界状态,具体就是根据块hash获取块所在的Repository快照。

这个功能是依赖于世界状态的存储方式,具体来说就是账户的状态的存储方式。账户以叶子节点的形式存储在merklePatriciaTree(MPT)中,每个账户有个地址作为节点key,账户详情作为value,所有的账户节点构成一个MPT。MPT的root每笔交易执行完后,账户发生变化,重新构造一个节点。这个节点所在整条TreePath也将重新构造,这条TreePath(新)与原来的MPT连接,复用没有修改的数据,并生成新的stateRoot(这部分要根据参考中图理解)。

旧的所有状态保留,通过旧的stateRoot找到原来的MPT,因此可以实现开头所说的根据块hash找到对应的世界状态。

参考:

你可能感兴趣的:(以太坊)