为什么「数据可用性」对区块链扩容来说至关重要?( 三 )


我们首先可以要求由序列器转储的交易数据块进行擦除编码处理 , 而这也就意味着原始数据的规模将变大一倍 , 之后新的以及额外的数据则被编码为冗余数据(这就是我们所说的擦除代码) 。 擦除数据编码之后 , 我们便可以用任意50%擦除编码的数据来恢复原始数据的全部内容 。
为什么「数据可用性」对区块链扩容来说至关重要?
文章图片
擦除代码技术和游戏《堡垒之夜》中能让你在那次吓到猫以后继续欺负你那个讨人厌的表弟和他的朋友 , 使用的是一个技术 。
不过请注意 , 交易数据块进行了擦除编码处理以后 , 序列器要想做出不当行为必须扣留该区块50%以上的数据 。 但如果该区块没有被擦除编码的话 , 那么序列器只留存1%的数据就可以做出不当行为了 。 所以说 , 通过对数据进行擦除编码处理 , 全节点就更能确保序列器能够实现数据可用性了 。
尽管如此 , 我们也想尽可能确保序列器能提供全部数据 。 在理想情况下 , 我们希望序列器能达到的可靠性与我们直接下载整个交易数据块一样高 , 而事实上 , 这是完全可以实现的:全节点可以随机从该区块下载一些数据 。 如果序列器行为不端 , 全节点将有小于50%的几率被欺骗 , 即在序列器试图扣留数据时随机下载一部分数据 。 这是因为 , 如果序列器意图行为不当、扣留数据 , 那么它们必须扣留大于50%擦除编码的数据才行 。
与此同时 , 这也就意味着 , 如果全节点可以两次进行该操作的话 , 就可以大幅降低被欺骗的可能性 。 全节点通过随机选择另一块数据进行第二次下载 , 就可以把被欺骗的概率降到25%以下 。 事实上 , 全节点第七次随机下载数据时 , 其未能检测到序列器扣留数据的几率将小于1% 。
这一过程被称为使用数据可用性证明的抽样 , 或者也可以直接称为数据可用性抽样 。 它的效率非常高 , 因为该抽样可以让节点在只下载序列器于主链上发布的一小部分数据的情况下 , 就可以保证其效果与下载并检查整个区块相一致(节点可以使用主链上的merkle根来找到要采样的内容和区域) 。 为了让大家有一个更直观的感受 , 你可以想象一下 , 如果你在小区散步10分钟就能消耗和跑步10公里一同样多的热量 , 是不是就能感受到数据可用性抽样的强大了 。
如果主链全节点可以进行数据可用性采样的话 , 我们就能确保Rollup序列器不出现错误行为 。 我们现在都应该感到高兴 , 因为我们已经可以确信Rollup的确能够扩展我们最喜爱的区块链 。 但在你想退出这个网页之前 , 是否还记得我们仍需要找到一种方法来扩展数据可用性本身?如果我们想让世界上所有人都加入到区块链当中 , 从而挣到更多的钱 , 那我们就需要建设Rollup;如果我们想用Rollup来扩展区块链 , 那我们不仅需要限制序列器做出不当行为 , 而且我们还必须扩展数据空间的吞吐量 , 从而降低序列器转储交易数据的成本 。
数据可用性证明也是扩展数据空间吞吐量的关键
近期 , 一个有着专注于扩展数据空间吞吐量路线图的layer1便是Ethereum了 。 它希望通过数据分片来扩展数据空间的吞吐量 , 这也就意味着不是每个验证器都会像目前的节点那样继续下载相同的交易数据(验证器也能运行节点) 。 相反 , Ethereum将从本质上把它的验证器网络分为不同的分区 , 该操作也被称为「分片」 。 假设你有1000个验证器 , 并且它们都用来存储相同的数据 , 那么如果你把它们分成4组 , 每组250个验证器 , 你一瞬间就将Rollup转储数据的空间增加了4倍 。 这看起来很简单 , 对吗?