默克尔山脉(Merkle Mountain Range)简称 MMR,是默克尔树(Merke Tree)的一种变体,我们将一条区块链的所有历史区块的哈希值作为叶子节点,通过 MMR 算法,生成一个 MMR 根值,并将该值写入最新的区块头,即可用该值去验证所有的历史区块头。 FlyClient 轻节点可以不断删除历史区块头,只保留最新的区块头,保持「轻盈」。当需要恢复某个区块头时,可以通过 Relayer 重新从全节点获取,并用最新区块头里的 MMR 根值,去验证恢复过来的区块头是否正确。 如果源链是概率最终性链,Flyclient 轻节点在接收 Relayer 传递的最新区块头时,会多一个验证步骤,那就是要求 Relayer 随机提供某个历史区块头,以供抽查。这样做是为了防止一种针对 Flyclient 轻节点的特有的新形式的欺诈。具体的欺诈方式和抽查算法比较复杂,本节先不做展开,在后续的案例介绍章节,将结合具体的跨链项目进行介绍。 Flyclient 轻节点真正实现了「把大象压缩成饼干」,让部署在目标链的源链轻节点合约可以轻装简行,让轻节点侧链式的跨链具有更好的经济可行性。但对于目前大部分的区块链而言,MMR 根值并不是区块头的固定部分,因此,Relayer 必须自己运行全节点,计算 MMR 根值,将 MMR 值加入区块头一并传递到轻节点中。一些较新的区块链已经将 MMR 根值作为区块头的固定部分了,现有的比较成熟的公链,也在有人提案软分叉升级,将 MMR 根值加入区块头固定结构中。区块头中固有 MMR 值的区块链,将对跨链开发更加友好。 轻节点合约的「减负」 对于轻节点合约,对最新区块头的验证是消耗 Gas 最多的环节,该环节的消耗和用户的跨链请求次数没有关系,只与源链的出块速度有关系。如果源链出块速度快,该环节的 Gas 消耗量将可能大到不可接受。 研究者们想到了通过将 Gas 消耗最多的新区块验证环节挪到链下进行。参考以太坊 layer2 的扩容方案,zkRelayer 和欺诈证明两种方案先后被提出来。zkRelayer 采用零知识证明的方法在链下生成区块验证证明,并提交到链上,欺诈证明则是通过一套经济激励机制来激励 Relayer 提交正确的区块:挑战者时刻监督 Relayer 提交的区块,如果发现有恶意 Relayer 提交了不正确的区块,经轻节点验证后,挑战者可以获得恶意 Relayer 的押金,如果 Relayer 提交的区块没有被挑战,则默认为是正确的区块,轻节点合约直接收录,不再做验证。 中继链为了建立更广泛的跨链网络,我们更多时候,需要连接的不止是两条链,而是很多链,如果在每两条链之间建立上述这种双向楔入,互为侧链的关系,其连接数和适配成本随着链的数量的增加,将会呈指数级增加,因此中继的思路被提出来:建立一条中继链,其他所有链都与中继链建立连接,就像家里的终端设备都和路由器连接一样。如此一来,成本立即从 n(n-1)/2 下降到了 n (n 为链的数量)。 (责任编辑:admin) |