ZK压缩主题演讲:breakpoint 2024

  • Helius
  • 发布于 2024-11-27 17:29
  • 阅读 75

本文概述了在Breakpoint 2024大会上关于ZK Compression的主题演讲,重点解释了ZK压缩的原理、工作机制及其对Solana未来的重要性。ZK压缩通过将账户成本降低到传统解决方案的千分之一,提供了一种高效的状态增量解决方案,并改善了应用的可组合性和灵活性。

以下是第Breakpoint 2024大会中由Light Protocol联合创始人Swen Schaeferjohann和Helius联合创始人Nicolas Pennie进行的ZK压缩主题演讲和问答环节的概述和要点。该演讲探讨了ZK压缩,包括它是什么、如何工作,以及最重要的,它对Solana未来的重要性。

Breakpoint 2024:主题演讲:ZK压缩(Swen Schaeferjohann,Nicolas Pennie) - YouTube

ZK压缩:发送至零

在Solana上工作时,开发人员很快会发现,尽管计算相对便宜,但数据存储成本却很高。例如,以150美元的SOL价格计算,创建1000个代币账户需约300美元,而创建100万个账户则需30万美元。这使得将应用程序扩展到大型用户群体在经济上变得不可行,因为这些成本随着SOL价格的上涨而增加。此外,状态增长是所有有状态区块链面临的挑战。随着新账户的创建,必须支付租金费用以维持它们,这很昂贵。目前,Solana上有超过5亿个账户,每天大约增加100万个新账户。

ZK压缩通过提供以下解决方案来解决这些问题:

  • 账户成本降低千倍
  • 解决状态增长问题
  • 为Solana的ZK计算奠定基础

ZK压缩解决方案

状态压缩 + ZK

要理解ZK压缩,首先让我们分解状态压缩,它围绕五个关键阶段展开:

  1. 数百万账户 → “指纹”
  2. 在链上存储指纹
  3. 在Solana账本上存储账户历史
  4. 用索引器缓存最新账户状态
  5. 通过链上的“指纹”验证压缩账户状态

我们首先通过压缩数百万个Solana账户并将其哈希为一个紧凑的“指纹”。这个指纹存储在一个链上账户中,而完整的基础账户数据仍然可以在Solana账本中访问。为了确保这些链下账户的有效性,我们使用一个证明机制,通过在链上指纹验证其完整性。这一过程的最后一步是利用零知识SNARKs,这为验证这些账户的完整性提供了证明系统。

为什么ZK压缩?

几个关键特性使得ZK压缩成为状态压缩的理想解决方案。例如,压缩账户的行为与标准Solana账户类似,允许开发人员利用他们现有的技能和开发技术,具有较低的学习曲线。这确保了进入门槛更低,使得开发人员更容易采用ZK压缩。

RPC API比较

索引器所暴露的API与现有RPC调用非常相似。例如,getAccountInfo 方法直接映射到 getCompressedAccount,这种一对一映射在整个RPC API中都有延伸。这种一致性简化了ZK压缩与现有Solana工具和工作流的集成。

压缩PDA

该系统的一个主要特性是支持压缩的程序派生地址(PDA)。PDA是可以使用特定程序地址和种子一致派生的可确定账户地址。压缩PDA有助于消除诸如竞争条件、地址冲突或意外为相同的程序地址和种子组合创建多个账户等问题。这一增强是从现有SPL账户压缩系统转向ZK压缩的主要原因之一。

压缩PDA

通过全面支持ZK压缩,对Solana的潜在影响是显著的。PDA和将程序组合在一起来创建涉及多个程序和不同PDA的更复杂架构的能力,反映了创建传统应用程序时的熟悉开发体验。这可以以极低的成本实现,将账户开支减少高达千倍。这种巨大的成本降低将解锁以前由于成本 prohibitive 而无法接触的新用例。

可组合性改进

一切都是直接在Solana上运行——它既不是L2也不是validium。数据可用性由Solana账本自动提供,确保执行是可验证并且完全可组合的。

可组合性改进

零知识证明将证明大小减少到恒定的128字节,为每个交易中的其他操作腾出更多空间,从而使可组合性更容易,额外活动的灵活性更大。无论在单个交易中更新、读取或写入多少账户,或需要证明多少包括或排除,证明大小都是一致的。这一点至关重要,因为Solana的交易大小本质上很小(1.2千字节)。为了实现快速的证明时间,需要一种不同的哈希函数来处理状态默克尔树,这就是我们无法使用原始SPL账户压缩程序的原因。

解压缩

另一个关键特性是解压缩,它防止了锁定并实现了“常规”账户和压缩账户之间的无缝互操作性。任何Solana账户都可以被压缩,允许你回收租金成本。你也可以随时解压缩压缩账户,轻松在两种形式之间转换。例如,如果你有一个需要交换的压缩代币,你可以简单地解压缩它,并使用Jupiter执行交换。

解压缩使得热状态和冷状态之间的无缝过渡成为可能。例如,如果你正在开发一个包含各种压缩卡片和物品的游戏,可以在战斗中解压缩它们以允许快速状态变化,之后再进行压缩以保存最终结果,比如生命值的变化。关于在一个槽内一个树中的并发性有一些限制。如果你需要在一个区块中多次更新同一账户,则应避免压缩。在这种情况下,最好永久解压缩该特定账户,使其作为常规链上账户。例如,AMM池账户将更合适,因为其状态需要定期更新。系统的灵活性足够大,可以在同一交易中与压缩账户和解压账户进行交互。

这个完全泛化的解决方案并不局限于单个程序、业务逻辑或应用程序。Solana账户可以以低成本和内置索引支持进行压缩。它是完全开源,经过生产准备,可以适应各种用例。

压缩代币

压缩代币不与交易所和DeFi平台直接兼容,除非它们被支持。然而,这可以通过将压缩代币解压缩为标准SPL代币来轻松解决,这样就可以像任何常规代币一样在DeFi和交易所使用。这种灵活性确保没有锁定,用户可以根据需要在压缩代币和常规代币之间移动。压缩代币非常适合需要较少频繁交互的冷应用,而常规代币账户则更适合热状态或频繁使用的资产。该系统的一个主要优势是通过将冷状态数据移入压缩存储来解决状态增长问题,同时保留所有好处,以更高效地管理状态。

压缩代币

在我们最初的发布中,我们引入了使用任何支持压缩的应用程序的相同工具构建的压缩代币。压缩代币程序与Solana代币程序相同,提供千倍的成本降低,且用户体验相同。代币扩展预计将在2025年初上线。

凭借解压缩等特性,你可以空投大量代币,并在需要时快速解压它们以进行DeFi活动。尽管零知识(ZK)证明常被视为代价高昂计算的圣杯,但我们已优化该过程,使转账类似于标准SPL代币转账,将证明时间缩短至毫秒。这使得生产级消费者ZK成为焦点,显著降低了管理代币账户的成本。

ZK压缩是如何工作的?

整体系统中有五个主要组件:

  • 状态树的森林
  • Light System Program
  • 压缩代币程序
  • Forester节点
  • 索引器(Photon)

状态树的森林

首先,我们有状态默克尔树,我们称之为“状态默克尔树森林”。这个结构创建了一组账户的独特加密指纹,可以存储在链上。例如,如果你有四个账户,你可以将它们递归地哈希为一个默克尔树结构

带有四个账户的默克尔树结构

顶部的最后32字节哈希提供了对所有账户底层数据完整性的加密保证。这确保任何账户的状态可以轻松通过与状态根进行比较来验证为默克尔树的一部分。我们在这里使用“森林”这个术语,因为存在多个默克尔树,每棵树都有自己的根。

与现有SPL账户压缩的比较

ZK压缩相对于现有SPL账户压缩程序的一个主要增强是能够证明某一状态是给定默克尔树的一部分,从而确保在Solana交易大小限制内高效产生证明。这使我们能够通过管理一个地址树来证明给定地址的唯一性,类似于状态默克尔树,但具备一个附加特性:证明在叶子中的包含性也证明了特定数字范围的排除性。这允许我们处理248位地址空间,使用更小的默克尔树,以确保地址的唯一性。

M个账户可以在N棵树上被证明,同时保持恒定的128字节证明大小,因此适合Solana的1.2千字节交易大小限制。证明生成是在链下进行的,比现有的SPL账户压缩程序贵。然而,证明验证发生在链上,通常仍比现有的压缩程序便宜。

Light System和压缩代币程序

该协议涉及两个关键程序。Light System Program是一个链上合约,镜像Solana系统程序。它与默克尔树进行交互,强制执行标准Solana账户模型并验证PDA的唯一性。Compressed Token Program复制SPL代币程序,在压缩账户模型中强制执行SPL数据布局。

Forester节点

Forester节点负责管理这一轻量森林。当你更新压缩账户时,新账户状态会被附加到树上,同时旧状态被置零或无效化。

更新压缩账户

这种方法有两个关键影响。首先,任何状态的更新导致根的变化,因为修改会向上传播到反向默克尔树的顶部。其次,树会逐渐填满,最终达到容量,这就是轻树的森林发挥作用的地方。

Forester节点负责维护状态根。它们异步地更新状态根并处理满状态树的切换。为你自己的状态树操作Forester节点是无许可的,并且其操作类似于运行RPC,任何人都可以管理自己的状态更新。作为应用程序开发人员,你有维护自己压缩状态的既得利益,从而自然地产生了确保你的状态树得到妥善管理的激励。你可以选择为自己运行节点进行自托管,或者选择支付提供商为你处理。

Photon

Photon索引器是一个开源解决方案,旨在跟踪和管理与链上压缩账户相关的更新、创建、变更和其他事件。它监听链上活动并缓存这些账户的当前状态。此外,它生成可以用于验证或数据变更的加密证明。

Photon概述

‍成熟的Photon索引器在压缩的早期版本获得的洞见基础上进行了重要改进。其目标是用户友好且易于访问,无论你是个人开发者、企业还是RPC提供商。

本地开发变得显著更简单。它具有一键CLI工具,可以与你的本地设置无缝集成。还可用一个面向开发者的探测器,提供可视界面查看压缩账户、跟踪其变化和检查交易历史。

Photon生成每日快照,加速开发和部署。开发者可以从快照开始,而不是从创世块重新索引,减少启动时间到15分钟或更少。这些快照还增强其复制性,确保如果RPC提供商停止支持压缩,你可以轻松获得快照并独立运行索引器。通过快照,数据丢失的风险被降到最低,快照可以存储在诸如FileCoin这样的去中心化解决方案中。

使用Photon,你可以仅索引一部分数据,这显著降低了硬件需求和数据库大小。这可以通过SQLite使用单个CLI命令完成。此外,如果你是RPC提供商,可以选择索引整个数据集。Photon适用于任何Helius计划,你还可以选择独立运行或请求其他提供商提供其支持。

由开发者,为开发者

我们的关注完全在开发人员身上,我们正在积极进行三个主要改进,专门针对提升开发者体验。

用于压缩的Web3.js

该SDK设计与Solana web3.js类似,但全面支持压缩。要发起压缩代币转账,你首先获取你的压缩代币账户,然后使用这些账户从你的RPC或专用证明节点获得有效性证明。之后,你就像使用SPL代币程序一样构建指令,指定要发送的内容、数量、铸币和接收者,从而创建一个常规Solana交易。

ZK压缩JSON RPC方法

完整本地开发设置

我们提供一个测试验证器,预配置了本地开发所需的一切,包括所有必要的程序、Photon索引器和本地证明节点。这确保了开发人员的设置过程顺利进行。

Anchor宏

对于熟悉使用Anchor进行Solana程序开发的人,我们的目标是让与压缩账户的工作像处理常规账户一样无缝。如果你以前编写过Anchor程序,你会立即认识到这种熟悉的开发体验。Anchor宏目前正在开发中。

light_sdk_macros与Anchor的示例用法

Airship

Airship使开发者能够立即利用ZK压缩,通过一个既简单又经济的批量代币空投工具。它提供用户界面和CLI,而且由于完全开源,开发者可以进行分叉和修改以满足他们的需求。随着越来越多的开发者空投压缩代币,生态系统将开始在各种应用中采用它们。然而,如果需要立即转换,开发人员也可以立刻解压代币,确保Airship是一个可以立即用于常规代币的空投工具。

什么是Airship?

‍该工具自动支持向Solana mobile持有者、特定代币持有者或NFT收藏持有者进行空投。如果你有一个预生成的收件人列表,还可以导入一个CSV文件并指定要空投的代币和数量。无论是CLI还是UI,都允许你从上次保存的状态重置空投,如果在空投过程中遇到诸如失去互联网连接等问题。这在处理大型空投时特别有用,这可能需要30到45分钟来向大量地址分发代币。

应用的新设计空间

ZK压缩通过仅在活动验证器的内存中存储所有账户的最终根哈希来解决状态增长问题。这种方法有效地缓解了状态增长问题。此外,ZK压缩为应用程序打开了新的设计可能性。以下是一些潜在用例:

  • SPL代币压缩器
  • 十亿个memes代币
  • 推特帖子预测市场
  • DePin网络节点的标识符PDA
  • 可验证的奖励计算和分配
  • 可信最小化的桥接
  • ZK身份协议

更多创意 在文档中提供。

ZK压缩现已在主网和开发网上线!你可以通过阅读我们的文档并完成示例来开始。此外,我们正在举办一场黑客松活动,奖金高达45,000美元。

如果你有兴趣深入研究ZK,请查看我们之前的Helius博客文章,以深入了解零知识证明的基本原理及其在Solana上的应用

  • 原文链接: helius.dev/blog/zk-compr...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Helius
Helius
https://www.helius.dev/