zkPorter是一种新的L2扩展技术,结合了zkRollup和分片,提供了高度可扩展且原子组合的区块链网络。文章详细介绍了zkPorter的工作原理、数据可用性问题、跨分片互操作性以及其在DeFi、微交易等领域的应用案例。
我们提出 zkPorter:一种新的 L2 扩展技术,结合了 zkRollup 和分片,在一个高度可扩展且原子可组合的区块链网络中。
吞吐量是通过网络处理的总交易量。扩展性是单个节点处理的交易量。zkRollup 可以说是关于安全性和可用性方面的 终极 L2 扩展解决方案。然而,zkRollup 相对于主网仅提供约 100 倍的扩展性,因为交易数据仍然必须传播到所有完整节点。可以说,zkRollup 线性增加吞吐量,但没有提供指数级扩展的方式。
zkRollup 在 Eth1 上可以处理高达 3000 TPS,并且根据 Eth2 的实现细节,在一个分片的 Eth2 上保守地至少可以支持 2万 TPS。这已经是一个巨大的成就,媲美 Visa 的最高 2.4万 TPS 的容量,但由于我们希望容纳目前不被现有银行基础设施支持的亿万用户,我们渴望做到更多。
DeFi 的惊人崛起表明,可组合性是成功的关键。可组合的 “货币乐高” DeFi 应用展示了通过将无信任协议叠加在一起可以释放的潜在价值。将自己限制在自己的扩展解决方案的项目会发现自己孤立于社区共享的、可组合的扩展机制的安全性和网络效应之外。
在这篇文章中,我们呈现了一种基于 zk 的扩展新方法,能够解决上述两个问题:zkPorter。
zkPorter 是一种基于账户的、无信任的扩展协议,通过简洁的零知识证明确保安全。类似于 zk 家族中的其他扩展技术(如 zkRollup 和 Validium),zkPorter 的计算在扩展性上呈指数级增长:可以在大约 恒定成本 下验证任意数量的交易。每一笔交易都会由 L1 上的智能合约验证,因此 zkPorter 中账户状态的正确性具有与 L1 相同的安全保证。
另一方面,zk 基于扩展的方法无法直接解决的是数据可用性问题:如果状态数据变得不可用,则资金会被冻结。zkRollup 和 Validium 以不同的方式处理数据可用性问题 有不同的方式。
zkPorter 通过混合的方法,结合了 zkRollup 和分片的思想,来处理数据可用性。它可以支持 任意数量的分片,每个分片都有自己的数据可用性策略,由分片的智能合约定义。分片的选择在个别账户级别进行控制。
zkPorter 将状态有效性和数据可用性的问题分开。状态有效性——即从一个状态到下一个状态的过渡始终是有效的——通过零知识证明均匀地强制执行,可以提供指数级的扩展性,同时继承基础 L1 的安全保证。相比之下,数据可用性委托给个别分片,分片可以自由尝试不同的解决方案。在必要时团结,在不确定时自由!
同步跨分片(或跨区块链)的互操作性 被认为是极其困难的。这就是为什么大多数现有的分片解决方案(Cosmos、Polkadot、Eth2)选择了通过 交易收据 实现简单的异步互操作性。同步互操作性向异步互操作性的过渡将导致协议互操作性和用户体验方面的重大挑战,尤其对于那些相对时间敏感的应用(例如 Aave 的 15 秒闪电贷)。
请迎接 zkPorter!所有 zkPorter 中的账户共享相同的地址空间,可以通过 zkPorter 的基础分片 shard 0 中运行的 zkRollup 无缝互操作。具有大量流量和/或特定数据可用性需求的协议可以将其协议接口提升到 zkPorter 的自有分片中。有关将协议提升到自己的分片所涉及的安全性、成本和吞吐量权衡将在下一节中讨论。
zkPorter 使任意多个协议的平滑互操作成为可能。一个原子交易可以调用不同 zkPorter 分片上的任意数量智能合约。此外,分片内交易将访问整个 zkPorter 状态——包括任何其他分片中的数据。这可以用于读取预言机数据。
你可以将 zkPorter 模型视为一个增强版区块链互联网。
zkPorter 的分片 0 是一个简单的 zkRollup,具有与基础以太坊 L1 相同的数据可用性和安全保证。分片 0 将是 zkPorter 内部操作最昂贵的分片,约为主网交易成本的 1/100。
分片 0 之外的分片在其各自的智能合约上定义自己的数据可用性策略。zkPorter 的分片以换取进一步的 10-100 倍的交易成本降低和超出基础分片的吞吐量提升来交换链上数据可用性。zkPorter 引入了一种可选的验证者机制,我们称之为“zkPorter Guardians”,这将使协议邀请协议利益相关者作为该协议分片的数据可用性担保人。启用 Guardian 的分片将运行出一种权益证明共识,分片的用户可以选择在参与的至少 1/3 的验证者保持诚实的情况下退出并带走他们的数据。
协议可以自由地实施他们自己的数据可用性策略,纳入或排除 zkPorter Guardians。协议选择的数据可用性策略的效率将影响吞吐量和交易成本值。
灵活的数据可用性是 zkPorter 的核心设计目标。通过允许协议设计自己的政策,zkPorter 使各种可能的解决方案得以实现,以适应每种情况。安全假设承认可信的集中方作为担保人的应用程序可以实现权威证明共识。具有治理代币的应用程序可以选择实施自己的权益证明共识以保护其分片——但必须避免允许分片存款量超过质押量。擦除编码 机制可用于证明验证者的非删除行为。考虑到比特币网络的相对简单和低交易量,zkPorter 分片的验证者甚至可以在其分片内部创建一个运行在中本聪工作量证明基础上的比特币实现。所有这些都可以与 zkPorter Guardians 验证者设置一起使用,也可以独立运行。
zkPorter 是以规模为规划的。zkPorter 协议将数据可用性和正确性证明减少到每个分片的小开销。提升新分片的边际成本与在基础 zkRollup 中包含嵌套数据的成本成对数关系。这将允许 zkPorter 高效地扩展以支持数亿个账户。
最后,用户隐私随零知识协议而来。使用 zkRollup 作为 L2 基础要素的优点在于,可以证明状态过渡的有效性,而不会泄露这些交易的内容。
在底层,zkPorter 与 zkRollup 和 Validium 类似。L1 上的一个合约持有一些资金和账户状态的默克尔根记录。实际的状态数据通过 zkPorter 验证者和每个分片的数据保持者在链下维护:我们称之为 状态树。
一个分片的智能合约定义了其接受 zkPorter 块的规则。当块被接受时,该块执行一个状态转换:在 L1 的一笔交易,用新的值替换默克尔根。这笔交易必须验证一个零知识证明,以证明新值是有效的:即,该块中的每笔交易都是有效的。
在 zkPorter 中,每个分片的账户必须存储在状态树的一个单独子树中。此外,每个分片子树必须包含其类型的信息以及指向定义其数据可用性策略的智能合约账户的引用。
如果分片类型是 zkRollup,那么在此分片中修改账户的任何交易必须包含必须作为 L1 calldata 发布的状态变更(与 zkRollup 相同)。
任何修改至少两个不同分片中账户的交易必须以 zkRollup 模式执行。
所有其他仅在特定分片的账户上操作的交易可以以普通分片模式执行(我们将其称为 分片交易)。如果一个块包含一些分片 S 的分片交易,则必须遵循以下规则:
我们想呈现四个案例研究,演示 zkPorter 如何与其他应用无缝组合的潜力,同时扩展交易量以满足每个应用的需求。
在 2020 年 6 月,Reddit 启动了 The Great Reddit Scaling Bake-Off,为社区提供了一种通过社区积分制度拥有自己子版块的机会,也是 L2 解决方案展示其满足使用需求能力的机会。具体来说,任何社区积分系统解决方案都需要安全、去中心化并且易于使用,同时与其他第三方应用(钱包、合约)保持互操作性,当然,还要能处理数十万笔交易。社区积分可以以三种不同的方式实现 zkPorter。
选项 1: 在 zkSync 上操作(zkPorter 分片 0)
为了将 社区积分 引入以太坊主网,Reddit 可能只需与现有的 zkRollup 功能集成 zkSync。如上所述,zkSync 在 Eth1 上具有 3000 TPS 的处理能力。假设所有 5 亿每月活跃的 Reddit 用户都积极参与。假设每月平均 1 次铸币交易、1 次销毁交易(订阅支付)以及 2 次转账,社区积分将需要平均负载:
500,000,000 * 4 / (30 * 24 * 60 * 60) ~ 700 TPS(每秒交易)。
这将占用 zkRollup 当前总容量的约 1/4(3000 TPS)。
选项 2: 提升到 Reddit 专属分片,由 zkPorter Guardians 验证
为了增加可行的交易带宽,同时降低用户成本,Reddit 可以将 Reddit 交易从基础分片提升到为其用户创建的专属分片。Reddit 有许多选择可以为其用户提供数据可用性保证。最简单的办法是利用现有的 zkSync Guardians 实现,提供基于权益证明的数据可用性保证。我们建议 Reddit 扩展 Guardians 模板,以额外在 Reddit 的服务器上托管数据。在该模型中,即使 Guardians 的三分之二攻击也可以被 Reddit 绕过,从而为 Reddit 用户提供强有力的数据可用性保证。同样,用户的数据将受到保护,免受 Reddit 服务器故障、攻击等影响。
选项 3: 提升到 Reddit 专属分片,采用 Reddit 专属的数据可用性政策
第三,Reddit 可以选择通过将 Reddit 社区提升到具有自定义数据可用性政策的 Reddit 专属分片,最大化交易吞吐量,同时最小化成本,而不使用 zkPorter Guardians。基于权益证明共识的可能方案 может rely on 以社区驱动的数据可用性为基础,结合三分之二的多签名。
在一种可能的方案实施中,Reddit 和 Reddit 的用户将提交签名,以证明每个状态转换的有效性。举例来说,Reddit 可能拥有三分之一的总签名权重,同时将剩余的三分之二分配给用户。三分之二的签名权重将足以允许在 Reddit 分片上进行状态过渡。如果用户识别出无效的状态转换,用户可能被激励去公布无效转换的证明,从而削减无效状态转换发行者的质押。
在提出的方案中,交易成本将仅覆盖 zk 证明生成(目前约 0.001 美元每笔交易,预计在未来会大幅下降)。
互操作性
在任何这些场景中,Reddit 社区积分持有者都可以:
智能钱包是与智能合约集成的钱包,可以为用户处理隐私和互操作性功能(例如,无缝集成 L2 扩展的钱包)。某些钱包(例如 Argent)甚至选择在为新用户入驻时承担一部分用户的Gas费用。以目前的 Gas价格,75 Gwei,和 以太坊价格,320 美元,这意味着简单交易的手续费为 50 美分。智能钱包可以集成他们的智能合约以调用 zkRollup 功能来降低总煤气费用。
这里是一个可能的实施,可以通过三个简单步骤实现。
步骤 1: zkRollup 分片
智能钱包账户可以在像 zkSync 这样的 zkRollup 解决方案上 今天 移动。在 zkSync 内部钱包之间的交易是便宜的,而从 zkSync 到主网的交易将在稍微昂贵些,并且需要更长时间(大约 5-10 分钟才能最终确认)。
步骤 2: zkSync Guardians + 钱包操作分片
在具有大批新用户后,运行 zkRollup 的成本可能促使钱包运营者考虑开设自己的分片。如在 Reddit 一节所述,我们详细说明这样的情况:将用户基础移动到一个单独的分片,其中数据可用性由 zkSync Guardians(Reddit 的社区成员,可能为 协议政治家)加上钱包运营商确保。只要钱包运营商或 zkSync Guardian 大多数保持不被攻陷,该分片就会是安全的。这个选择还为与钱包运营者的自然费用分享打开了一扇窗。
步骤 3: 钱包 DAO 分片
在某个时刻,用户基础可能会变得如此庞大,以至于钱包可能决定迁移到一个由治理代币持有者治理的分片。这个分片仍会是 zkSync 网络的一部分,并将可以访问所有其他分片的 zkRollup 模式服务。
隐私考虑
还应该注意的是,在以上描述的三个步骤中的任何一个都可以轻松实施隐私。没有零知识证明的整合,隐私的 实现并不容易。 zkRollup 的美在于,账户可以同时享有隐私,并显著降低参与网络的成本,而不会牺牲安全或去中心化。
为了预见扩展瓶颈,一些主要的 DeFi 协议(例如 IDEX 或 Loopring)投资于部署自己的扩展解决方案。这是一个明智的举动,因为它使他们在一方面在Gas价格飙升的时代获得了竞争优势,另一方面也更深入地了解了扩展技术/权衡。
此外,对于努力实现高频交易的 DEX,单笔交易的价格必须保持在绝对最低限度,因为关闭订单需要大量交易。
然而,这种方法突显出两个问题:
zkPorter 解决了这些问题。DeFi 协议可以构建在最先进的扩展技术之上,拥有强大的网络效应,同时保持交易成本的控制。为实现此目标,协议可以在 zkPorter 中创建自己的分片,由协议代币持有者的共识来保护。这也将为费用分享或费用补贴提供自然机会。
需要进行大量低价值转账(微交易)的协议可以实施类似 Validium 的分片(即一个数据可用性通过若干验证者简单多重签名保护的分片),将交易成本保持在最低限度,仅覆盖 ZK 证明生成(目前约 0.001 美元每笔交易,预计在未来将大幅下降)。
与微交易平台的集成可以包括选项,允许用户将其余额自动定期转移到 zkRollup 分片,或在余额超过某个金额后进行转移。
zkPorter 将作为 zkSync 路线图的一部分逐步实施。
实现这一愿景的下一步是:
zkSync 已在以太坊主网上上线,可以在无许可的 zkRollup 模式下即时使用。我们相信,它的吞吐能力将足以覆盖以太坊社区未来 2 年的扩展需求,同时网络将过渡到以太坊 2.0。但我们愿意讨论并尽早实施自定义分片解决方案,以便建立有前景的合作关系。
请 与我们联系。
zkSync 目前没有代币,并且近期没有计划进行出售或分发。请警惕诈骗者。
- 原文链接: blog.matter-labs.io/zkpo...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!