Flyclient 究竟是个啥?

在这里,我要Diss一下这篇文章,误导的我好苦。

这篇文章里把 Flyclient 列为一种跨链技术来进行介绍,但事实上,Flyclient 和跨链其实没什么关系。Flyclient 是一项轻节点技术,但它的目的是要让节点更加轻量化,以在移动设备上运行。但 Flyclient 并没有考虑在链上构建轻节点的诸多限制因素,它并不适用于跨链。

Flyclient 作为 2019 年提出的一项针对 PoW 链的轻节点构建技术,Flyclient 可以做到将轻节点压缩到只有一个区块头的大小,轻到飘起来。Flyclient 可以做到只存储最新的区块头即可。是的,你没听错,只需要最新的一个区块头,一,即所有!

这是通过一个被称为 MMR 的创新数据结构 和 一套抽查算法实现的。

MMR数据结构

MMR 是一种特殊的Merkle 树,由高度降序的若干个二叉子树组成。例如,具有 1,000,000 个叶子的 MMR 树将由 8 个高度完美的子树组成:19、18、17、16、14、9 和 6。MMR数据结构的一个关键特点是可重用性,随着第更多新区块的增加,尽管子树的结构会发生变化,但每个新区块里的MMR根值,可以基于之前的计算结果进行叠加计算。 当新叶子插入时,如果没有相同高度的子树,则只需要将新叶子(或新子树)的根和之前的MMR叠加计算即可,当新叶子插入,有相同高度的子树,则先合并相同高度的子树,再基于合并后的MMR根值序列计算新的MMR根值。

随着链高度增长,MMR根值的推演过程可以参考这篇文章

好吧,如果你对MMR结构还是云里雾里,那么请记住一点就可以:最新区块头里如果有MMR值,那么该值可以验证所有的历史区块头。还是那句话:一,即所有。一个MMR根值包含了对所有历史区块头的承诺。

只要你有最新区块的MMR根,当你需要验证某笔交易是否存在于链上时,可以先向全节点请求该交易所在区块的区块头,然后用MMR根验证该区块头,区块头被验证后,便可用于对交易执行SPV验证。

抽查算法

Flyclient 不存储历史区块头,带来一个难题,那就是对最新的区块头的最终性验证变的复杂了。BTC链是设计非常精巧的区块链,每个区块头都包含了前一个区块头的哈希值,同时每一个区块的难度值和计算时间决定了下一个区块的难度值(Bits字段),整条链的所有历史区块是环环相扣、高度耦合在一起的。

对于存储完整区块头历史的 SPV 轻节点,可以靠等待更多有效区块的追加来确认当前区块的最终性。但对于 Flyclient 轻节点,则没有办法这么判断。因为缺乏前一个区块的计算时间和难度值,我们没法判断新区块的难度值是否合法。如果仅仅靠最长链原则来判断,恶意的全节点完全有可能在 Flyclient 轻节点看不见的腰部虚构几个无效的区块,使得它的尾巴看起来更长,以此来欺骗 Flyclient 轻节点。

或者我们也可以换个方式理解,BTC的最长链原则其实是表象,其本质是“最重链”原则,BTC遵循的其实是包含了最多 PoW 计算的链,只是由于难度值无法作假,多数时候最长链即最重链。如果只是给你一个6个合法区块的尾巴,或许他们看起来最长,但你无法判断它们是否在最重链上。

Flyclient 为了应对这个问题,提出了一套抽查算法,轻节点需要在收到新区块之后,对提供新区块的全节点进行“质询”,要求提供更多的特定区块,并进行有效性验证。Flyclient论证了:在Flyclient轻节点至少连接了1个诚实的全节点的情况下,在有限轮次的抽查后,可以让无效区块被发现的概率接近无穷大。

抽查算法的细节可以查看原论文,;论文啃不动的话,也可以阅读这篇文章。这篇文章对抽查算法阐述的非常清楚。

Flyclient 的意义

Flyclient 当中,MMR结构为轻节点的构建提供了巨大的便利,Flyclient轻节点可以只保留的包含MMR根的最新区块头即可,在此之前的区块头历史可以随时修剪掉,保持轻节点只有一个区块头的大小。不过在实践中,Flyclient轻节点会选择保留若干个关键历史区块头(一般会保留log(n)个区块头),提高抽查算法的效率。

作为一种高效的承诺机制,MMR结构给公链带来深远影响。不少公链将MMR根值采纳为区块头中的固定字段,以此来支持轻节点随时删除历史区块头,保持轻量化。

抽查算法则实现了在不了解区块头历史的条件下,任意给定一个区块头,验证其最终性的方法。

Flyclient 为什么不适用于跨链

尽管 Flyclient 将轻节点的体积压缩到只有一个区块头的大小,但对于跨链桥当中的轻客户端构建,却并不适用。

其一,抽查算法的复杂性,对于本地CPU而言没有问题,但对于计算资源更加稀缺的链上,则会带来巨大的成本。

第二,链上的轻客户端更关心的是,如何同步更少的区块头(最好可以跳跃式同步区块头,甚至是按需同步区块头)以及降低链上验证区块头的成本。修剪旧的区块头虽然可以让轻客户端保持轻盈,节约存储空间,但不断同步和验证最新区块头才是 Gas 开销的大头。

因此我们看到的链上 PoW 轻客户端(BTC、以太坊为主),依旧是逐个同步所有历史区块头的 SPV 轻节点,没有看到 Flyclient 在跨链桥中的应用。

Subscribe to 0xmiddle
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.