本文详细介绍了以太坊分片设计的基本原理,并解释了显式最终性如何在区块链分片中发挥作用。文章涵盖分片链的共识、验证器管理合约、跨分片通信、分叉选择规则以及显式最终性对分片机制的好处等内容。
在以太坊 Casper 101 [1]中,Jon Choi 提供了关于 Casper 的清晰概述,并解释了 为什么 显式的确定性对可扩展性是有益的。本文旨在概述以太坊分片设计,并解释 如何 显式确定性有助于区块链分片。
要完全理解以太坊分片机制提案的规范,我强烈建议深入研究 Vitalik 的分片文档 [2]。
进一步阅读:EIP 648 — 易于并行化 用于并行执行交易。
为了解决可扩展性问题,分片是一种引入链上状态分区并获得更高吞吐量的解决方案。
来源: https://pixabay.com/photo-2695569/ (CC0 Creative Commons)
首先,我们来看一下用于区分主链(你可以认为是当前主网链)或不同级别的分片链的术语:
表 1. 术语。
你可以简单地想象交易会被封装在一个“ collation ”中;类似于区块,colation 也指向链中的其父 collation——这就是我们将要讨论的分片链。成为“ collator ”意味着有资格在权益证明的分片链上提议新的 collation。
图 1. 基本 collation 数据结构的一个瞥见。
类似于侧链技术,只有 小块证据 的 collation 必须记录在主链上——这是我们如何扩展区块链的基本思路:(i) 分片链有自己的星系,拥有自己的交易,分片验证者 仅仅 必须验证他们正在关注的分片;(ii) 分片链还依赖于主链宇宙,以通过权益证明机制达到 更高水平的共识。
为了在主链上加入分片链,主链上将有一个特殊的合约,称为 验证者管理合约 (VMC)。 VMC 是这种分片机制的核心;VMC 的目的可以概述如下:
addHeader(bytes collationHeader)
函数,用于验证 collation 头并记录有效 collation 头哈希的记录。此函数提供 链上 验证。在阶段 1,VMC 将维护 100 个分片( SHARD_COUNT = 100
)。每个分片并行运行,分片 i 的客户端只需验证分片 i 上的交易。
“周期” 被定义为区块时间的时间窗口,例如, PERIOD_LENGTH = 5
表示每个周期 5 个区块。这意味着在每个周期,各分片最多只有一个有效 collation。
图 2(a)。二次分片。分片状态的证明将记录在主链 VMC 上。
一旦验证者被抽取为合格的 collation 提议者,collation 提议者必须验证最近的 collation 并发送交易以调用 addHeader
函数。请注意,如果 collation 提议者在 第10个周期 被抽取提议新的 collation,这意味着 addHeader
交易 必须被包含在第 10 个周期,即区块号为 10 * PERIOD_LENGTH
到区块号为 (10 + 1) * PERIOD_LENGTH - 1
。
图 2(b)。对于一个分片,每个周期只有一个 collation;一个区块可以包含不同分片的多个 addHeader 交易。
colation 头哈希必须在 VMC 上记录,以证明其头在全局范围内有效。另外,分片的其他验证者必须随时监控 VMC,以获取最新状态并验证交易是否有效。
在基本的分片中,分叉选择规则依赖于最长的主链。给定分片的有效头 collation 不 只是“最长有效分片链”的头 collation,而是 “在最长有效主链内的最长有效分片链”。
在图 3 中描述了一个例子:在图 3(a) 中,主链有两个分叉,第二个链是下面图表的最长有效主链。由于 block B3
是头区块,很容易看出 collation C3
是头 collation。
图 3 (a)。
然后在图 3 (b) 中block B3'
到达。假设 block B3
的得分比 block B3'
的得分高,因此上面的链仍然是最长的主链:
图 3(b)。
最后block 4
在图 3 (c) 中到达。请注意,对于这个分片,collation C3
的得分高于 collation C2
,但下面的链是 最长有效主链,因此 collation C2
现在是头 collation:
图 3 (c)。
进一步阅读:另一种设计 — Vlad Zamfir 的 分片分叉选择规则。 🦌🌲🎁
一个巧妙的设计,确保区块在被确定之前的原子性。
区块链系统最多只能具备以下三种属性中的两种:去中心化、可扩展性和安全性。
— 区块链三难问题 在 分片常见问题 [3]
可扩展性的限制基于系统的安全保证[3]。虽然我们通过将交易分配到分片来提高 TPS(每秒交易数),但因此我们也降低了 每笔交易 的计算资源。
分片机制的一个重要机制是 如何在链上产生随机性。
如果抽样过程未能高随机性地选择,那么攻击者可能在分片中发起 1% 攻击:如果有 100 个分片,攻击者可以集中攻击 一个 特定的分片,他们只需要 1% 的哈希率(PoW)/押金(PoS)来控制该分片[4]。
图 4. 传统的大多数攻击 (51 % 攻击)
图 5. 分片 1% 攻击
首先,我必须澄清,分片机制应该能够应用于工作量证明链和权益证明链;即便如此,像 Casper 这样的显式最终性工具可以增强分片机制的安全性。
在一般的工作量证明链中,最终性是概率性和隐式的[1] [5];换句话说,即使是块获得了数千次确认,链依然有可能被重写。相比之下,采用权益证明,结合 Casper 友好的最终性工具(“FFG”) 的密码经济机制,明确地强制执行在协议中 我们可以检查其是否已结束 的最终性。
[来自 Vlad 的备注] 在协议中显式最终性阈值存在经济风险:它为
2/3 + 1
和1/3 + 1
创造了理想的卡特尔规模。因此,任何不在2/3 + 1
联盟中的节点对最终性的边际贡献为 0 。 🥒
在基本的分片中,分片链依赖主链。
对于分片验证者,我们期待通过分片,区块链的容量在阶段 1 中提升到 100 倍,因此这 100 个分片的所有验证者都需要监控 VMC 状态,以获取正确的有效头 collation。对于验证者非常重要的是尽快确定他们是否为 collation 提议者;对于普通用户来说,如果我们在阶段 2 应用跨分片交易,普通用户同样需要在 VMC 中检索他们的押金信息( 凭证 ID )。
显式最终性将有助于缓解主链与大量分片链之间同步的不确定性。
无状态客户端的基本思想是 无状态客户端 不存储整个状态 Merkle 树,而是 仅存储状态 Merkle 树根。 存档客户端 存储完整状态 Merkle 树,并提供所需的 Merkle 分支。通过这些 Merkle 分支,无状态客户端能够构建 部分状态 Merkle 树 并验证 collation [6]。
一旦验证者被抽取并开始 重新洗牌(即,修改验证者关注的分片并同步分片链),同步过程将被触发。通过无状态客户端机制,重排的成本降至(接近于)零,因为他们 只需要验证最近的 collation(即,高得分的 collation)以与分片同步。
图 6. 无状态客户端模型。 (图标由 DinosoftLabs 提供,来自 www.flaticon.com 受 CC 3.0 BY 许可)
由于同步过程可以更快,无状态客户端模型使得在 每个 collation 之间重新洗牌 成为可能。这不仅减少了存储负担和开销,还使系统更安全,因为频繁的抽样提高了对自适应攻击的抵抗。
尽管同步成本大幅降低,无状态验证者仍需在一定时间内验证 尽可能多的 collation,以确认他们获得的符合条件的最佳有效 collation 具有最高得分。
Casper FFG 将在大约 2.5 个“纪元时间”后提供显式最终性阈值[1] [7],即 125 个区块时间。如果验证者在重新洗牌期间能够验证超过 125 / PERIOD_LENGTH = 25
个 collation,则分片系统可以受益于显式最终性,并更有信心这些 25 个提前的 collation 现已最终确认。
请注意,当然,如果在同步时验证更多的 collation,将会更加安全。
我希望我对当前以太坊分片设计概念以及显式最终性如何有利于分片机制进行了初步简要介绍。要深入了解协议设计,请访问 ETHResear.ch 和 分片文档。
请随时指出任何错误或不清楚的表述。 :)
特别感谢 Vitalik Buterin 的所有卓越工作,Jon Choi 推动我进行写作,Dr. Chang-Wu Chen 的完善,Brian Chen 的反馈,以及 Vlad Zamfir 分享的想法和超级酷的 Vlarding。
- 原文链接: medium.com/@icebearhww/e...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!