Mir状态缩减

2021-05-04  本文已影响0人  雪落无留痕

本文提出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每个状态目前是否是活跃的。

一个简单的方法是存储每个位向量,其第 ith 表示Commitment Log中第 i 个账户是否有效,

为了证明Liveness Mask的有效性,Mir采用一种标准Merkle树,每个叶子节点为0或1, 用于表明Commitment Log对应的叶子节点是否有效,由于大部多节点值为0, 所以采用SMT(Sparse Merkle Tree)。

混合结构

Mir采用变形的Merkle树结构,将Liveness Mask分成2^k大小的块,每个块采用修改的Huffman编码。只需存储Merkle树上面 h-k 层的数据,计算下面k 层。为了验证Merkle证明的有效性,需要分解第个块,重新计算Merkle树数所据。

参考

https://mirprotocol.org/blog/Reducing-state-size-on-Mir

上一篇下一篇

猜你喜欢

热点阅读