我在链间协议这个方向上已经做了六年的时间了, 对于平行链之间的跨链信息区块这一个概念, 我是琢磨得最为透彻的。用一句话来总结就是, 它实际上是并行链与并行链之间进行状态传递的一个所谓的最小信封, 这个机制并不会搬运海量的全量数据, 而是只把关键的校验信息打包起来, 然后交给目标链自己去验证真伪。
平行链跨链信息区块怎么构造
它并不是把源链那一整块数据直接搬过去的。核心部分是一个由Merkle加时间戳加序列号组成的三元组。等到源链产生出块操作以后, 它会提取出跨链交易子树的根这一信息, 并且把这个子树根、以及对应的出块时间和单调递增的序列号, 一起打包发送发送到目标链上面去。
在这种情况下, 目标链并不会去验证全部量的交易内容, 它只是去核对一下这个子树根和锚点哈希这两个值是否能够对上, 只要确认对上了, 就会决定接受下来。

序列号这个东西, 必须得是强硬的单调性规定, 一旦出现空缺的号码就直接拒之门。
我本人在以前的项目里看到过一种情况,就是把这个问题给设计成了可选的字段, 结果是两条链发生分叉的情况导致数量对不上, 整个通道就陷入了死锁状态长达三天之久, 最后不得不进行返工处理, 并且增加了三轮的校验逻辑, 这样才把问题给修复好。
平行链跨链信息区块可靠吗
可靠性这个事情, 关键还是得看锚定机制是怎么搞的。大家一般这么干, 就是源链每隔 N 个区块, 就把它那个信息区块的哈希给锚到它自己的链上去, 然后目标链在进行验证的时候, 就跑去查这个锚点到底是个啥。
不过问题在于, 万一源链被攻击者给短时间去拿下了多数算力, 然后就发生了分叉的情况, 那这个锚点就可能被篡改掉。所以, 在工程上面必须加上多轮确认深度这个环节, 至少要等到有 6 个新区块出来以后, 才承认这个锚定是有效的, 要是少了可是不行的。
目标链侧还需要去做一个独立的轻客户端的存储机制, 它不能够去依赖源链是处于实时在线的状态。
在我所做过的早期项目案例里, 目标链是把那些已经经过了验证过程的区块信息给书写到了系统的本地环境中去, 在这样的情况之下, 哪怕说是源链那一边的节点全部都发生了挂掉的现象, 之前的历史数据依然是可以被进行查询而且能够发生追溯的作用。
归根结底来讲, 就是使用最小可信单元去换取最大的兼容程度。你并不需要信任另外一条区块链上的整个共识机制, 你只需要信任那个根哈希值就行。这就好比两条链各自就像是两个完全独立的法院法庭, 它们共同共享一份关于判决书的摘要内容, 在彼此互不干扰的基础之上, 同时又能够进行互相引用。
