# 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树的底层节点数据被篡改后，自它以上的节点数据散列值都将存在偏差。

<figure><img src="https://402733873-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Ft7Yq0wZVG1pJ3PiTzoaE%2Fuploads%2FaLVzUJ09GY06aIFZxJbV%2Fimage.png?alt=media&#x26;token=127e1f22-7410-4239-b558-39175ad8dd50" alt=""><figcaption><p>图9：交易数据篡改前后的MPT树</p></figcaption></figure>
