随着以太坊生态的日渐繁荣,长久以来亏绕生态的一大问题就是:交易速度和费用。这也是以太坊挥之不去的问题,因此扩容也是最被广泛讨论的问题。这里简单介绍下历史。
扩容之路#
Pos:区块提议者和区块验证者分离,pos 工作流程是:
- 在分片提交交易
- 验证者将交易添加到分片区块中
- 信标链选择验证器以提出新的块
- 其余的验证者组成随机的委员会验证分片上的提议
提出区块和证明提议都需要在一个 slot 内完成,一般是 12s。每 32 个 slot 组成一个周期 epoch,每个 epoch 将打乱验证者排序重新选举委员会。
合并后,以太坊将为共识层实现提议者 - 构建者分离。Vitalik 认为,所有区块链的终局是拥有中心化的区块生产和去中心化的区块验证。由于分片后的以太坊区块数据非常密集,出于对数据可用性的高要求,区块生产的中心化是必要的。同时,必须有一种方法来维护一个去中心化的验证者集,它可以验证区块并执行数据可用性抽样。
什么是分片?是水平分割数据库以分散负载的过程#
分片是一种分区方式,可以在 P2P 网络中分散计算任务和存储工作负载,经过这种处理方式,每个节点不用负责处理整个网络的交易负载,只需要维护与其分区(或分片)相关的信息就可以了。每个分片都有自己的验证器网络或者节点网络。分片的安全性问题:
例如整个网络有 10 条分片链,破坏整个网络需要 51% 的算力,那么破坏单个分片之需要 5.1% 的算力。
信标链,负责生成随机数,将节点分配给分片,捕捉单个分片的快照,处理握手权益和其他各种功能,负责完成分片间的通信,协调网络的同步。
分片的一个很大问题是跨分片。因为在分片中,每个节点群只处理该分片内的交易,交易在分片间会相对独立,那么 AB 两用户处于不同分片上,相互转账如何处理呢?
区块存在被舍弃的情况,因此如果 A,B 被接受处理,在 #2 中选择接受 W,X 交易,那么整个交易就无法进行下去。尽管发生分叉的概率非常小。
过去的方式是数据可用性层分片,每个分片都有独立的 proposers 和 committee。在验证者集合中,每个验证者轮流验证分片的数据,他们将数据全部下载下来进行验证。
缺点是:
- 需要严密的同步技术来保证验证者之间能够在一个 slot 内同步。
- 验证者需要收集所有的 committee 的投票,这里也会出现延迟。
- 而且验证者完全下载数据对其压力也很大。
第二种方法是放弃完全的数据验证,而是采用数据可用性抽样的方法。这里又分为两种随机抽样方式:
- 区块随机抽样,对部分分片抽样,如果验证通过后,验证者进行签名。但是这里的问题是,可能会出现遗漏交易的情况。
- 通过纠删码将数据重新解释为多项式,再利用特定条件下多项式能够恢复数据的特点,来确保数据的完整可用性。
多项式的性质:能够从四个点去恢复数据
那么只要保持 50% 以上的被编码的数据是可用的,整个数据就是可用的。
当我们进行多次抽样时,数据不可用的概率只有 2^-n
逻辑就是我们将数据进行纠删码变为多项式,再进行拓展,拓展能够恢复数据。
这里的问题就被转移到了:在多项式拓展的过程中,是否被正确的拓展。
因为本身数据有问题,那么拓展后,重新恢复数据也是错误的。那么如何确保数据被正确的拓展呢?
- celestia 使用欺诈证明,这里有一个同步问题
- ethereum 和 polygon avail 使用 kzg 承诺,这里不需要诚实少数和同步问题。但 kzg 承诺不具备抗量子计算攻击的能力,未来以太坊可能转向 zkstarks 的技术,其抗量子算法攻击。
在这个赛道里面,最火热的当属采用零知识证明的 zksync 和 starkware 了。后续讲详细介绍他们。
什么叫抗量子攻击:就是该算法不依赖大量的数学安全假设。#
Kzg 承诺:证明多项式在特定位置的值与指定的数值一致。
KZG 承诺无非就是多项式承诺中的一种,能够在不给定具体消息的情况下验证消息。具体流程如下图:
与 merkel 树进行对比:#
整个流程就是:将数据通过纠删码化为多项式,将其拓展。使用 KZG 承诺确保我们的拓展是有效的,且原数据是有效的。然后利用拓展可以 reconstruct 数据,最后进行数据可用性抽样。
Celestia 要求验证者下载整个区块,现在的 danksharding 则利用数据可用性抽样技术。
由于区块存在部分可用的情况,因此任何时候我们都需要重构区块的时候保证同步。在区块确实部分可用时,节点之间通信,将区块拼凑出来。
KZG 承诺和数据欺诈证明的比较:#
可以看到 KZG 承诺能确保拓展和数据是正确的,而欺诈证明引入第三方进行观察。最明显的区别是,欺诈证明需要一个时间间隔来给观察者进行反应,从而报告欺诈,这时候需要满足节点直接的同步,以整个网络能够及时收到欺诈证明。KZG 则明显的比欺诈证明更快,其使用数学方法来确保数据的正确,而不需要一个等待时间。
Celestia 自身的缺陷在于使用大区块,要求验证者下载全部数据,这个也是以太坊 danksahrding 的 proto 方案。那么为了解决会出现的问题,celestia 未来也会选择数据可用性抽样的方法,那么就需要用到 kzg 承诺。
无论是 kzg 还是欺诈证明都需要同步。因为存在概率发生区块不可用的情况。