Mir状态缩减
本文提出Mir状态空间缩减方法,对于每个有效账户,验证者只需要存储5个bit。
无状态区块链
目前, 以太坊客户端存储了约50G数据,虽然目前可用,但未来需要新的方法提升可扩展性。
对于大部分区块链,例如以太坊,验证每个交易都需要访问和当前交易相关的账户的状态。为便于快速验证,节点需要存储所有有效账户的状态,需要昂贵的存储代价。
无状态区块链将账户放在链下存储,即每个人各自存储其账户信息。对于共享的账户,可以存在IPFS或其它存储层上。Mir验证者不必存储任何账户的数据,也不需要知道它们存在哪儿。
验证者不需要存储账户状态,他们需要验证账户状态,Mir采用一种新Merkle树实现。
避免失效的状态
通常的方法是让用户存储他们自己账户的Merkle Witness
, 作为交易的一部分。然后当产生新的区块时,Merkle树易被修改,Merkle witness
也将失效。
为了避免这个问题,Mir采用 Merkle Moutain Range
(MMR)结构,如下所示:
采用MMR,只需要每个mountain
的根进行认证,由于 mountain
是不可变的,其中的witness
不会失效。由于MMR是只增的,采用MMR记录历史账户的状态,而不仅是目前的账户状态。我们称这个结构为 Commitment Log
。
状态活性
Commitment Log
允许用户证明它们的账户在指定点的状态,但并不是目前的状态,需要另一个结构:Liveness Mask
, 用于确认 Commitment Log
每个状态目前是否是活跃的。
一个简单的方法是存储每个位向量,其第 表示Commitment Log
中第 个账户是否有效,
为了证明Liveness Mask
的有效性,Mir采用一种标准Merkle树,每个叶子节点为0或1, 用于表明Commitment Log
对应的叶子节点是否有效,由于大部多节点值为0, 所以采用SMT(Sparse Merkle Tree)。
混合结构
Mir采用变形的Merkle树结构,将Liveness Mask
分成大小的块,每个块采用修改的Huffman编码。只需存储Merkle树上面 层的数据,计算下面 层。为了验证Merkle证明的有效性,需要分解第个块,重新计算Merkle树数所据。