4.7 MPT + LevelDB

DxChain使用了MPT树(Merkle Patricia Trie)作为数据组织形式,不仅可用来组织并管理用户的账户状态、交易信息、区块信息等重要数据,还能达到区块链数据高性能存储、不可篡改的目的。MPT是一种加密认证的数据结构,它融合了Merkle树和Trie树(前缀树)两种数据类型的优点。在MPT树中,数据节点的Key值通常存储着从根节点到Value所在子节点的路径。

在DxChain中,该Key值由节点数据的RLP编码(Recursive length prefix encoding,递归长度前缀编码)的SHA3散列值产生,Value值由节点数据的RLP编码产生,整个MPT树的数据存储在内置LevelDB数据库中。想要获得一个数据节点的内容,只需要根据该数据节点的散列值访问数据库以获得节点的RLP编码,然后进行RLP解码即可。

结合Merkle树的优点,MPT树允许区块的数据零散的传送,避免固定顺序传送带来的传输效率低下,允许节点从不同的P2P节点同步区块数据,确保来自不同源同步数据的准确性。同时由于MPT树是自下向上扩散的结构,如果节点数据被恶意篡改,MPT树中该数据节点后的所有节点数据都将发生偏差,DxChain区块验证机制将无法验证该区块数据,并不会记录在区块链网络中,以此防止恶意区块的产生。

下图展示了一个MPT树的底层节点数据被篡改后,自它以上的节点数据散列值都将存在偏差。

Last updated