本博客探讨了以太坊为何使用MPT树及其在世界状态中的恢复机制,并解释了合约数据删除对MPT树负担的影响,强调了MPT树如何通过更新与回滚机制保障以太坊的状态管理。
为什么以太坊要用MPT数
1,mpt树优于hash表,在区块连网络中,需要确认世界状态相同 ,hash表需要校验所有的hash
2.使用序列表会导致插入过程麻烦,插入一条数据,整个链路都要更新
MPT树是如何恢复的?(世界状态中的mpt树)
mpt树的恢复与mpt树的更新是有关系的,在以太坊的生命周期中,世界状态的mpt树是根据更新的方式来改变状态的,具体而言,无论是对树做增删改,最后在数据库中都是插入一个新的key,然后根据这个新的key去更新路径上所有的key(更新的过程也是新建key然后插入进去,老key不会丢失)
根据节点的key-v我们可以知道,树的构建是由下而上的,因为父节点在存储是依赖前一节点的hash,当然分支节点中是在各个分支中写入hash,所以分支节点中包含大量的hash。那么当整个实际状态更新时:
例如node3发生了改变,并不会改变node3此刻对应的key-v ,而是会新建一个node,然后更新node2,node1,使得整个世界状态指向新产生的node3.
那么这样操作之后,当我们需要回滚时,我们只需要知道在需要回滚的位置的根状态hash,那么整个世界状态就可以根据这个过去的roothash,找回历史装状态,对于上面的例子而言,老的roothash最后会引导你找到老的node3 你将拿到node3被修改之前的状态。
这也是为什么 世界状态可以根据roothash恢复。
合约中删除数据可以减轻合约MPT树的负担吗?
那么回味一下,世界状态能根据roothash恢复的关键是每一次世界状态的更新,以太坊都会把新状态落盘到数据库里面去.
那么对于合约的mpt树,实际上是不影响的,也就是如果我们把合约中的数据进行删除的确会减少mpt树的负担,因为删除的过程实际上会减少mpt树的树枝,并且改变了mpt树的结构。
但是删除合约中的数据并不会减轻以太坊的存储容量,合约中的所有数据都是一直保存的,删除只是在更新之后mpt数不指向被删除的数据.
可以参考一下这里对mpt树的删除操作:https://learnblockchain.cn/article/319
树的结构确实会变简化。