原文作者:Yihan Xu
简单概括,KZG Ceremony 是实现 EIP-4844 不可绕过的一个初始化环节,而 EIP-4844 是实现以太坊 sharding 过程中的先行版本。
Sharding 从数据可用性角度扩容,而 rollup 主要从执行层面扩容,一起缓解主网拥堵问题;我认为 sharding 可能是突破区块链不可能三角的一次尝试。
下面这张以太坊区块大小的走势图可以从另一个角度说明数据层面扩容的必要性。从创世区块开始,以太坊从底层架构到上层应用都在不断地快速迭代,但平均区块大小仍为 90 Kb 左右,最高点也没有质的突破。虽然 Rollup 从计算层切入,解决以太坊拥堵问题,但性能仍然受制于 layer 1 的数据存储能力。
由于实现过程的复杂度和安全性考虑,以太坊开发团队将 sharding 分成了多个阶段,其中就包括最近提到的 proto-danksharding 和 danksharding。整个过程将会是一个历时数年的更新;
在目前的以太坊的数据存储模式下,只有少数特定高配置的机器可以加入网络成为节点,而 full sharding 之后 ethereum 不再需要每个节点都保存全部数据,在降低主网数据存储成本的同时加强了安全性(成为节点的门槛降低,去中心化程度进一步提升,同时降低被攻击的风险)。
EIP-4844 = Proto-Danksharding;
Proto 来自以太坊研究者的名称
由于实现 danksharding(下一节会分析)的复杂度很高,开发周期至少是以年为单位的。因此 proto-danksharding 是实现 danksharding 前对以太坊的扩容方案,主要实现了 danksharding 中的交易格式、precompile 等设计;
每个 transaction 最多挂 2 个 blob;
每个 block 理想状态包含 8 个 blob,约为 1 MB,最多包含 16 个 blob,约为 2 MB;
Blob 不需要像 calldata 一样作为 history log 被永久存储;
相比 danksharding,节点还是需要对完整的 DA 进行验证。
给 transaction 挂上 blob(数据单元)
作用
参考 Vitalik 在提案中给出的图,Data blob 和当前的 calldata 相似,rollup 可以将交易、证明等数据通过 blob 上传到 layer 1 来保证 data availability。
成本
Data blob 的设计初衷是支持 rollup高通量的交易,相比同等大小的 calldata(使用链上存储),blob 的成本将会降低很多(不需要永久存储)。因此,rollup 在维持数据可用性上花费的 gas 相比之前会显著降低。
容量
每个 blob 的大小约为 125 kB(fact: 当前平均 block size 只有~ 90 kB)。
价值
可以把 blob 看成一种缓存,rollup 提交的交易数据从此以缓存的形式存在。降低对存储硬件的要求,为以太坊提供额外的数据扩容并降低 gas 成本。
挑战:对以太坊节点硬件性能的要求
Ethereum 当前平均区块大小只有~ 90 kB,但是一个 blob 就有~ 125 kB
根据 EIP-4844 的设计,每个 slot 正常情况下约为 1 MB,因此每年增加的数据量为: 1 MB/block * 5 block/min * 43200 min/month * 12 month/year = 2.47 TB per year
每年增加的数据大小远超过了以太坊数据总量,这样的存储方案显然是不高效的。
解决方案
从短期扩容效果看,由于每个节点仍然需要储存全量历史数据,在实现 EIP-4844 的同时,对一段时间窗以外的 blob(具体的 limit time 还没有最终确定,可能是 1 个月或是 1 年)进行自动删除;
从 sharding 的长期利益看,实现 EIP-4444 ,即节点不需要存储全量历史数据,而是只需要参照 history expiry,存储特定时间之后的数据;
这两种解决方案从不同程度上缓解了 blob-carrying transaction 在存储空间上的 tradeoff。
KZG Commitment 是 EIP-4844 中采用的多项式承诺方案
解析 KZG commitment
KZG 是作者 Aniket Kate, Gregory M. Zaverucha 和 Ian Goldberg 姓氏的缩写,他们在 2010 年发表了多项式承诺方案论文“Constant-Size Commitments to Polynomials and Their Applications” ,并且这个方案在 plonk-style 的 zk-snark 协议中有很广泛的应用。
参考 Dankrad Feist 演讲中的示意图,KZG root 类似 Merkle root,区别在于 KZG root 承诺一个多项式,即所有 position 都在这个多项式上。基于 proto-danksharding 的场景,KZG root 承诺了一堆数据,其中的任何一个数据都可以被验证属于这个整体。
这也是为什么 KZG commitment 在兼容性上对后面实现 DAS 更友好。
KZG commitment 的流程如下:
Prover:提供证明,计算 data 的 commitment,prover 无法改变给定的多项式,并且用于证明的 commitment 只对当前这一个多项式有效;
Verifier:接收 prover 发送的 commitment value 并进行验证,确保 prover 提供了有效的证明。
KZG Commitment 的优势
我认为主要出于对成本和安全性的思考,可以归纳但不局限于以下几点:
成本
KZG commitment 具备快速验证、复杂度相对更低、简洁的特点;
不需要提交额外的 proof,因此成本更低、更省 bandwidth;
数据触达所需的 Point evaluation precompile 可以获得更低的成本。
安全
假设出现了 failure,也只会影响 commitment 对应的 blob 中的数据,而不会其他深远的影响。
更兼容
纵观 sharding 的整体方案,KZG commitment 对 DAS 方案兼容,避免了重复开发的成本。
KZG Ceremony 是为 KZG Commitment 提供 trust setup,目前吸引了超过 20, 000 participants 的参与和贡献,已经成为历史上最大规模的 trust setup。
最近社区参与热情高涨的 KZG Ceremony 就是为 EIP-4844 采用的 KZG commitment 提供 trust setup;
KZG Ceremony 的流程
参考 Vitalik 的流程图,任何人都可以作为 participants 贡献 secret 并与之前的结果进行混合产生一个新的 result,以此类推,通过套娃的形式获得最终的 SRS,并协助完成 KZG commitment 的 trust setup
trust setup
EIP-4844 中采用了一种常见的 multi-participant trust setup,即 powers-of-tau;
遵循 1-of-N 可信模型,不管多少人参与 generating setup 的过程,只要有一个人不泄漏自己的生成方式,可信初始化就是有效的;
必要性
KZG commitment 的 trust setup 可以简单理解为:生成一个在每次执行 cryptographic protocol 时需要依赖的一个参数,类似于 zk-snark 需要可信初始化;
Prover 在提供证明时,KZG commitment C = f(s)g 1 。其中 f 是评估函数,s 就是 KZG trusted setup 最终获得的 final secret;
可以看出 final secret 是生成多项式承诺的核心参数,而作为获取这个核心参数的可信流程,这次 KZG Ceremony 对于整个 sharding 的实现非常重要。
Rollup
参考 ethresear 上给出的示意图,rollup 需要将 state delta、KZG commitment 的 versioned hash 包含在 calldata 中进行提交(zk-rollup 还需要提交 zk proof)
可以发现不同的是,calldata 只包含一些数据量小的,比如 state delta、KZG commitment,而将包含大量交易数据的 transaction batch 放到了 blob 里。
有效降低成本,放 calldata 里很贵;
降低对区块空间的占用
安全性
Data availability: Blob 存储在信标链上,等同于 layer 1 的安全性;
历史数据:节点不会只会将 blob 存储一段时间,需要 layer 2 rollup 做永久数据存储,因此安全性依赖于 rollup。
成本
Proto-Danksharding 引入了新的交易类型,低成本数据格式 blob 的加入无疑会让 rollup 的成本进一步降低,取决于实际链上应用和实现进展,优化后 rollup 的成本可能降低 x 10 甚至 x 50 ;
同时 EIP-4844 引入了 blob fee;
Gas 和 blob 将会分别有可调节的 gas price 和 limit;
Blob 的收费单元还是 gas,gas amount 随 traffic 变动,以此维持每个 block 平均挂 8 个 blob 的目标(限制额外增加的数据量)
Precompile 的实现
Blob 中的数据本身无法被直接触达,EVM 只能获取 data blob 的 commitment。因此需要 rollup 提供 precompile 来验证 commitment 的有效性.
下面分析两种 EIP-4844 中提到的 precompile 算法
Point evaluation precompile(对数学原理感兴趣参考 vitalik 的解析)
证明多个 commitments 指向同一数据;
主要针对 zk-rollup,rollup 需要提供 2 种 commitments: 1. KZG commitment; 2. zk-rollup 本身的 commitment;
对于 optimistic rollup,大多数已经采用了 multi-round fraud proof 的机制,final round fraud proof 所需的数据量较小。因此,采用 point evaluation precompile 能达到更低的成本
Blob verification precompile
证明 versioned hash 和 blob 是有效对应的;
optimistic rollup 在提交欺诈证明时需要 access 全量数据,因此先验证 versioned hash 和 blob 合法,再进行 fraud proof verification
Danksharding 的命名来自以太坊研究员 Dankrad Feist
在 proto-danksharding 实现后,由于新的交易格式引入了 blob,每个区块可以平均额外获得 1 MB 的缓存空间。Danksharking 实现后,每个区块额外 16 MB,最大允许 32 MB。
相比 proto-danksharding 要求全节点下载全量数据,Danksharking 实现后以太坊节点只需要对 blob 抽样。Sampling 后的数据会分布在全网节点中,并可以组成完成的 data blob。
DAS:高效抽样检查
通过纠缠码(erasure coding)帮助全网节点在下载部分数据的情况下更容易发现原始数据的丢失的概率,从而提升安全性
由于每个节点不再保存全量历史数据,从数据可用性、备份和抽样检查的角度出发,安全性由至少一个节点保存全量数据变为多个节点存储部分数据,并最终还原完整数据。
虽然乍一看对单点的依赖安全性远高于对多点的依赖,但是以太坊网络中的节点数量够多,完全可以保证数据备份的需求,因此安全性并不会有很大变化。
虽然验证者不需要下载并保留全量历史数据,对 bandwidth 和存储硬件的要求得到了缓解,但是区块创建者仍然需要上传包含全量 transaction data 的 blob 数据。
这里简单介绍一下 PBS(proposer/builder separation),参考 Dankrad 给出 PBS 在 danksharding 方案中的应用图:
将负责出块负责人的角色拆分为 proposer 和 builder。最初是为了做 anti-MEV 设计的提案,在 danksharding 的设计中为了降低区块创建时对bandwidth 的要求。
Shardeum 是 EVM 兼容的 layer 1 公链, 与以太坊的 static sharding 方案不同,shardeum 通过dynamic state sharding的方案提升底层可扩展性和安全性,同时,天然地保证较高的去中心化程度;
优势
Dynamic state sharding 带来最直观的优势在于 linear scaling,接入网络的节点可以非常高效的被 sharding 算法动态分组,并快速响应,提升区块链网络的 TPS。在 dynamic state sharding 的设计中,每个节点会覆盖不同 range 的 address,并且覆盖范围又会有冗余设计以保证高效的 sharding 和安全性。
场景内实现
抛开生态的复杂度,单从两种技术实现的角度看,dynamic state sharding 的难度大于 static sharding。可以看出 Shardeum 的技术团队在 sharding 的技术层面有很深的积累,团队之前在 Shardus technology 上的研发也对这条公链的底层技术做出了很大贡献,甚至在项目早期阶段很好的展示了 dynamic state sharding 所带来的 linear scaling。
产品
将节点划分到不同的 group,参考 divide and conquer 的思路,把计算和存储的 workload 进行分流,从而允许更高程度的并行处理。因此,可以容纳更多节点加入,进一步提升公链的 throughput 和去中心化程度。
团队
市场经验丰富,叙事能力超强,对动态分片研究很深。
技术
针对自己的场景设计了合适的 sharding 方案(dynamic state sharding)和共识的设计(Proof of Stake Proof of Quorum),以提升可扩展性为第一目标,保证更高程度的去中心化和安全性。
进度
将在 2023-02-02 launch betanet,值得关注。
Sharding 是以太坊扩容的长久之计,也是一个价值巨大、意义深远的长期方案。实现 sharding 的过程中,现有所有方案都可能被不断迭代,包括现在提到的 proto-danksharding、danksharding 等,值得持续关注;
对 sharding 大方向的理解很重要,但是每一个实现 full sharding 过程中的提案所采纳的技术方案(PBS、DAS、multidimensional fee market)同样值得关注,并且我相信也会涌现很多相关的优秀团队和项目;
Sharding 是对一种扩容技术的统称,但具体落地的方案并不是只有一种。需要认识到不同的公链会有适合自己场景的 sharding 方案。比如 danksharding 中的一些设计也只适合以太坊网络,安全性的 tradeoff 需要大量的节点来抵消;
Sharding 和其他扩容方案的合理结合对于可扩展性的提升 1 1>2 。目前的 Danksharding 并不是自成一派的扩容方案,而是和以太坊生态的其他实现相辅相成的。比如 Danksharding 和 rollup 一起,为以太坊扩容达成更好的效果。