Substrate使用简单的Key-Value存储数据,该存储是个数据库(RocksDB)支持的修改过的Merkle树(又称为“trie”)结构。更多关于trie的信息,参见:
-
paritytech/trie
-
Patricia-Tree
trie允许有效存储和共享历史区块的状态。trie root可以用来表示trie中的数据。也就是说,两个拥有不同数据的trie将始终具有不同的trie root。因此,两个区块链节点可以通过比较它们的trie root来验证它们是否具有相同的状态。
基于Substrate的链只有一个状态树(State Trie),其根哈希值放置在每个区块头中,用于验证区块链的状态,并为轻量级客户端验证证据提供基础。
Substrate还提供了子状态树(Child Trie),可以在runtime中使用。子trie与主状态trie相同,不同的是,子trie的根作为node(节点)被存储并更新,而主状态trie的根是在区块头中。
在Substrate中,可以使用Runtime Storage将数据存储在区块链中。同时通过Substrate的存储API,runtime模块可以容易地这些数据可以从runtime逻辑中访问,并被持久化在区块中。