MPT樹是如何回滾的
1,mpt樹優(yōu)于hash表,在區(qū)塊連網(wǎng)絡中,需要確認世界狀態(tài)相同 ,hash表需要校驗所有的hash
2.使用序列表會導致插入過程麻煩,插入一條數(shù)據(jù),整個鏈路都要更新
MPT樹是如何恢復的?(世界狀態(tài)中的mpt樹)
mpt樹的恢復與mpt樹的更新是有關系的,在以太坊的生命周期中,世界狀態(tài)的mpt樹是根據(jù)更新的方式來改變狀態(tài)的,具體而言,無論是對樹做增刪改,最后在數(shù)據(jù)庫中都是插入一個新的key,然后根據(jù)這個新的key去更新路徑上所有的key(更新的過程也是新建key然后插入進去,老key不會丟失)
根據(jù)節(jié)點的key-v我們可以知道,樹的構建是由下而上的,因為父節(jié)點在存儲是依賴前一節(jié)點的hash,當然分支節(jié)點中是在各個分支中寫入hash,所以分支節(jié)點中包含大量的hash。那么當整個實際狀態(tài)更新時:
例如node3發(fā)生了改變,并不會改變node3此刻對應的key-v ,而是會新建一個node,然后更新node2,node1,使得整個世界狀態(tài)指向新產(chǎn)生的node3.
那么這樣操作之后,當我們需要回滾時,我們只需要知道在需要回滾的位置的根狀態(tài)hash,那么整個世界狀態(tài)就可以根據(jù)這個過去的roothash,找回歷史裝狀態(tài),對于上面的例子而言,老的roothash最后會引導你找到老的node3 你將拿到node3被修改之前的狀態(tài)。
這也是為什么 世界狀態(tài)可以根據(jù)roothash恢復。
合約中刪除數(shù)據(jù)可以減輕合約MPT樹的負擔嗎?
那么回味一下,世界狀態(tài)能根據(jù)roothash恢復的關鍵是每一次世界狀態(tài)的更新,以太坊都會把新狀態(tài)落盤到數(shù)據(jù)庫里面去,那么對于合約的mpt樹,實際上是不影響的,也就是如果我們把合約中的數(shù)據(jù)進行刪除的確會減少mpt樹的負擔,因為刪除的過程實際上會減少mpt樹的樹枝,并且改變了mpt樹的結構。
可以參考一下這里對mpt樹的刪除操作:https://learnblockchain.cn/article/319
樹的結構確實會變簡化。

浙公網(wǎng)安備 33010602011771號