摘要:原文作者: YBB Capital Researcher Zeke前言在《潜力赛道前瞻:去中心化算力市场(上)》中我们已经了解到,AI 预期下,算力所具备的重要性,也深入探讨了构建去中心化 AGI 算力市场在目...
原文作者: YBB Capital Researcher Zeke
前言
在《潜力赛道前瞻:去中心化算力市场(上)》中我们已经了解到,AI 预期下,算力所具备的重要性,也深入探讨了构建去中心化 AGI 算力市场在目前阶段存在的两种困境。而本文将从零知识证明的基础概念开始,由浅入深,对去中心化算力市场这条朝阳赛道的更多可能性进行多维度思考。(上篇中也提到了比特币算力市场的部分,但鉴于近期比特币生态迎来了爆发式的增长,该部分将在未来我们的比特币生态相关文章中结合描述。)
零知识证明概述
20 世纪 80 年代中期,麻省理工学院的三位密码学者(Shafi Goldwasser、Silvio Micali 和 Charles Rackoff)共同发表了一篇名为《互动性证明系统的知识复杂性》的论文。文中描述了一种可以在不阐明信息的情况下验证信息真实性的创新密码学技术,作者将其称为“零知识证明”,并为此概念提供了具体的定义和框架。
而在随后的几十年里以此论文为基石的零知识证明技术在多个领域逐渐发展和完善,现如今零知识证明已成为已经成为一个包罗万象的术语,代表了许多“现代”或“先进”密码学——尤其是与区块链未来相关的密码学。
定义
零知识证明(Zero-Knowledge Proof,简称 ZKP,下文依据情况使用)是指证明者(Prover)可以向验证者(Verifier)证明某个陈述的正确性,而无需提供任何有关陈述本身的具体信息。这种方法的三大基本属性包括完整性、可靠性和零知识性。完整性保证了真实陈述的可证明性,可靠性确保了错误陈述不可被证明,而零知识性则意味着验证者无法获得除陈述真实性以外的任何信息。
零知识证明的类型
根据证明者和验证者之间的交流方式,也会产生两种不同类型的零知识证明,交互式与非交互式。在交互式中,证明者和验证者之间会进行一系列的交互。这些交互是证明过程的一部分,证明者通过回应验证者的一系列查询或挑战来证明其陈述的真实性。这个过程通常涉及多轮通信,每轮通信中验证者提出一个问题或挑战,而证明者则回应以证明其陈述的正确性。非交互式则不需要多轮交互。在这种情况下,证明者创建一个单一的、可以独立验证的证明,然后发送给验证者。验证者无需与证明者进行进一步交流,就可以独立地验证这个证明的真实性。
交互式与非交互式的通俗讲解
1.交互式:阿里巴巴与四十大盗的故事,是解释交互式零知识证明中时常提到的典例,也有非常多的版本,而下文中的故事是由我改编的一个简版。
阿里巴巴知道打开藏着财宝的山洞的咒语,却被四十大盗抓住,强迫他说出咒语。 如果阿里巴巴说出咒语,就会因为没有利用价值而被杀死。如果阿里巴巴坚持不说,强盗不会相信他真的掌握咒语,也会杀死他。但阿里巴巴想了一个好办法,现在洞穴有两个入口 A 和 B,都通向洞穴中心,但中心有一道密码门,只有知道咒语的人才能从一边走到另一边。为了证明他知道打开洞穴的秘密,而又不透露这个秘密,阿里巴巴进入洞穴并选择 A 或 B 中的一个入口,而四十大盗站在外面看不到他的选择。然后四十大盗随机喊出 A 或 B,要求阿里巴巴从他们指定的入口出来。如果阿里巴巴真的知道咒语,他就可以使用密码从中心的门通过,从指定的入口出来。这个过程重复多次,每次阿里巴巴都能成功地从四十大盗指定的入口出来,从而在不泄露秘密的情况下证明他确实知道密码。
2.非交互式:这是一个生活中的非交互式零知识证明的简单例子,想象一下,你和一个朋友都有一本“寻找沃利”的书。你声称知道沃利在某一页上的位置,但你的朋友对此表示怀疑。如果你想向朋友证明你知道沃利在图中的位置,而又不透露具体位置,可以使用一张足够大的不透明纸覆盖整个图片,并通过纸上的一个小孔露出沃利(单一的、可以独立验证的证明),这样你就能证明自己确实知道沃利的位置,但你的朋友仍然无法知道沃利在整个图片中的确切坐标。
区块链中的技术实现
零知识证明目前在区块链中有多种实现方式,其中最广为人知的主要有 zk-STARK(Zero-Knowledge Scalable Transparent Argument of Knowledge)和 zk-SNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge),正如它们名称中的“Non-Interactive”(非交互式)所示,两者都属于非交互式零知识证明。
zk-SNARK 属于一类应用广泛的通用零知识证明方案(此处需要注意,zk-SNARK 属于一种流派,并非一种单一技术),通过将任意的计算过程转化为若干门电路的形式,并利用多项式的一系列数学性质将门电路转化为多项式,进而压缩生成非常小的非交互式的证明,可实现各类复杂的业务场景的应用。zk-SNARK 的启动需要可信设置,可信设置是指在受信任的设置中,多方各自生成一个部分密钥来启动网络,然后销毁该密钥。如果用于创建信任设置的密钥的保密信息没有被销毁,那么这些保密信息可能会被利用通过虚假验证来伪造交易。
而 zk-STARK 是 zk-SNARK 的一种技术演变,解决了 SNARK 依赖可信设置的弱点,可以不依赖任何信任设置来完成区块链验证,从而降低启动网络的复杂性并消除任何串通风险。但 zk-STARK 也有生成证明较大的问题,存储、链上验证及生成时间方面都处于劣势。如果你体验过 StarkNet(采用 zk-STARK 的 Layer 2)的早期版本,应该很明显能感觉到速度与 Gas 费,对比其它 Layer 2 体验都要差很多。所以目前被采用更多的还是 zk-SNARK 方案。而除此之外还有 PLONK 以及 Bulletproofs 等稍显小众的方案,每种方式在证明大小、证明者时间以及验证时间上都有自己的优缺点。完全理想的零知识证明非常难达到,几种主流的算法通常在不同维度之间做着平衡。
而 ZK 的开发,通常需要用到两个关键组件。
ZK-friendly 表达计算的方法:这是一个特定领域语言(DSL)或底层库。底层库如 Arkworks,则提供了必要的工具和原语,允许开发者直接用较低级的语言手动重写代码。DSL 如 Cairo 或 Circom,是为 ZK 应用量身定制的编程语言。后者能编译为生成证明所需的基元。更复杂的操作导致更长的证明生成时间,而某些操作(如 SHA 或 Keccak 中使用的位运算)可能不适合 ZK,导致长时间的证明生成。
证明系统:证明系统是 ZK 应用的核心,它实现了两个基本功能:Prove(证明)和 Verify(验证)。Prove 功能允许生成一个证明(需要大量数学计算生成,证明越复杂则生成越慢),这个证明表明某个陈述是正确的,而无需透露证明细节。Verify 功能则用于验证这个证明的正确性(证明越复杂、越大,则性能越高,验证所需的时间越短)。不同的证明系统,如 Groth 16、GM 17、PLONK、Spartan 和 STARK 等,在效率、安全性和易用性上也有所不同。
ZKP 的应用地图
ZKP 跨链桥梁和互操作性:ZKP 可用于创建跨链消息传递协议的有效性证明,这些消息可以在目标链上快速验证。这与在底层L1上验证 zkRollups 的方式类似。然而,对于跨链消息传递,复杂性更高,因为源链和目标链之间的签名方案和需验证的加密函数可能不同;
ZKP 链上游戏引擎:Dark Forest 展示了 ZKP 如何能够实现信息不完全的链上游戏。这对于设计更具交互性的游戏至关重要,其中玩家的行动保持私密,直到他们决定揭示它们。随着链上游戏的成熟,ZKP 将成为游戏执行引擎的一部分。对于成功集成隐私功能的高吞吐量链上游戏引擎的初创公司来说,作用巨大;
身份解决方案:ZKP 在身份领域可以开启多个机会。它们可用于声誉证明或连接Web2和Web3身份。目前,我们的Web2和Web3身份是分开的。例如 Clique 这样的项目通过使用预言机来连接这些身份。ZKP 可以通过使Web2和Web3身份匿名链接,使这种方法更进一步。这可以实现像匿名 DAO 会员资格这样的用例,条件是他们可以使用Web2或Web3数据证明领域特定专业知识。另一个用例是基于借款人的Web2社交地位(例如 Twitter 关注者数量)的无抵押Web3贷款;
ZKP 用于监管合规:Web3使得匿名在线账户能够积极参与金融系统。从这个意义上说,Web3实现了巨大的金融自由和包容性。随着Web3监管的增加,ZKP 可用于在不破坏匿名性的情况下实现合规。ZKP 可用于证明用户不是受制裁国家的公民或居民。ZKP 还可以用于证明认可投资者身份或任何其他 KYC/AML 要求;
本土Web3私人债务融资:TradeFi 债务融资通常用于支持成长中的初创公司加速其增长或开启新的业务线,而无需增加额外的风险投资。Web3 DAO 和匿名公司的兴起为Web3本土债务融资创造了机会。例如,使用 ZKP、DAO 或匿名公司可以基于其增长指标的证明,获得无抵押贷款和竞争性利率,而无需向贷方披露借款人的信息;
隐私 DeFi:金融机构经常保持其交易历史和风险敞口的私密性。然而,在链上使用去中心化金融(DeFi)协议时,由于链上分析技术的不断进步,满足这一需求变得具有挑战性。一个可能的解决方案是开发以隐私为重点的 DeFi 产品,以保护协议参与者的隐私。尝试实现这一目标的协议之一是 Penumbra 的 zkSwap。此外,Aztec 的 zk.money 通过模糊用户在透明 DeFi 协议中的参与,提供了一些私密 DeFi 赚钱机会。通常,能够成功实施高效且注重隐私的 DeFi 产品的协议可以从机构参与者那里获得大量的交易量和收入;
针对Web3广告的 ZKP:Web3推动用户拥有自己的数据权利,例如浏览历史、私人钱包活动等。Web3还使这些数据的货币化为用户带来好处。由于数据货币化可能与隐私相矛盾,ZKP 在控制哪些个人数据可以向广告商和数据聚合商披露方面可以发挥重要作用;
私人数据的共享和货币化:我们的许多私人数据如果与正确的实体共享,可能会产生重大影响。个人健康数据可以被众包,帮助研究人员开发新药。私人财务记录可以与监管机构和监察机构共享,以识别和惩罚腐败行为。ZKP 可以实现这类数据的私密共享和货币化;
治理:随着 DAO(去中心化自治组织)和链上治理的普及,Web3正在走向直接参与式民主。当前治理模式的一个主要缺陷是参与的非隐私性。ZKP 可以是解决这个问题的基础。治理参与者可以在不透露他们的投票方式的情况下进行投票。此外,ZKP 还可以使治理提案的可见性仅限于 DAO 成员,使 DAO 能够建立竞争优势。
zkRollup:扩容是 ZKP 在区块链最重要的用例,zkRollup 技术将多个交易聚合成一个单一的交易。这些交易在链下(即区块链的主链之外)处理和计算。对这些聚合后的交易,zkRollup 利用 ZKP 来生成一个证明,这个证明可以证实这些交易的有效性,而无需透露交易的具体内容,还极大的压缩了数据的大小。生成的 ZKP 随后被提交到区块链的主链上。主链上的节点只需要验证这个证明的有效性,而不需要处理每个单独的交易。这样,就大大减轻了主链的负担。
ZKP 硬件加速
零知识证明协议虽然具备多种优势,但目前的问题主要是验证易,生成难。大部分证明系统生成的主要瓶颈是多标量乘法(MSM)或快速傅里叶变换(FFT)及其逆变换,两者的构成及优劣主要如下。
多标量乘法(MSM):MSM 是加密学中的一种关键计算,它涉及椭圆曲线加密中的点与标量的乘法。在 ZKP 中,MSM 用于构建关于椭圆曲线上点的复杂数学关系。这些计算通常涉及大量的数据点和运算,用于生成和验证证明的关键部分。MSM 在 ZKP 中尤其重要,因为它帮助构造出能够验证加密声明而不暴露私有信息的证明。MSM 可以在多个线程上执行,从而支持并行处理。然而,当处理大型元素向量时,例如 5000 万个元素,乘法运算仍然会很慢,并且需要大量的内存资源。此外,MSM 存在可扩展性方面的挑战,即使在广泛并行化的情况下也可能保持缓慢。
快速傅里叶变换(FFT):FFT 是一种高效计算多项式乘法和求解多项式插值问题的算法。在 ZKP 中,它通常用于优化多项式的计算过程,这是生成证明的重要步骤。FFT 通过将复杂的多项式运算分解为更小、更简单的部分来加速计算,这对于证明生成过程中的效率至关重要。FFT 的使用大大提高了 ZKP 系统处理复杂多项式和大规模数据集的能力。但 FFT 运算依赖于频繁的数据交换,这使得它难以通过分布式计算或硬件加速来显著提高效率。FFT 运算中的数据交换需要大量的带宽,尤其是在需要处理超过硬件内存容量的大数据集时。
虽然软件优化也是很重要的研究方向,但目前加速证明生成的最直接粗暴的方式就是通过硬件堆叠出足够高的算力来加速生成,那么在诸多算力硬件里(GPU、FPGA、ASIC),哪一个是最好的选择?由于我们在上篇部分已经简要介绍过 GPU 了,所以在此处我们主要了解 FPGA 与 ASIC 的设计逻辑与优缺点。
ASIC:ASIC(Application-Specific Integrated Circuit)是一种专门为满足特定应用需求而设计的集成电路。与通用的处理器或标准集成电路相比,ASIC 是为了执行特定任务或应用而定制的,因此在其设计的应用中通常表现出更高的效率和性能。在我们熟知的比特币挖矿领域中 ASIC 就是非常重要的算力硬件,高效性能和低功耗特性使它们成为比特币挖矿的理想选择。不过 ASIC 也有明显的两个缺点,由于是为特定应用而设计的(比如比特币的 AISC 矿机都是围绕 SHA-256 哈希算法设计的),没有大批量采用的情况下,设计和制造成本会很高,设计和验证周期也会比较长。
FPGA:FPGA 是 Field Programmable Gate Array(现场可编程门阵列)的简称,是一种可重复编程器件,是在 PAL(可编程逻辑阵列)、GAL(通用阵列逻辑)、CPLD(复杂可编程逻辑器件)等传统逻辑电路和门阵列的基础上发展起来的一种半定制电路,和 ASIC 一样都是用于电子设计和实现特定功能的集成电路,既解决了过去半定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。其重要的特点是“可重复编程、低功耗、低时延、算力强”。但 FPGA 的缺点在于其功能完全依赖于硬件实现,无法执行像分支条件跳转这样的操作,并且只能进行定点运算。成本上,FPGA 的成本在设计上比 ASIC 更低,制造上同样需要参考规模,当然两者的总体成本都要远高于 GPU。
那么再回到 ZKP 硬件加速的探讨,首先必须承认的是 ZKP 仍处于早期发展阶段。系统参数(例如 FFT 宽度或元素的位大小)或证明系统的选择(仅上文中提到的证明系统就有五种)仍然很少有标准化。我们对比三种算力硬件在这种环境下的情况:
ZK“元”的变化:我们上文中已经提到了,ASIC 上的业务逻辑是一次写入。如果任何 ZKP 逻辑发生变化,都需要从头开始。FPGA 可以在 1 秒内重新刷新任意次数,这意味着它们可以在具有不兼容证明系统的多个链上重复使用相同的硬件(例如,跨链提取 MEV),并灵活地适应 ZK “元”的变化。而 GPU 虽然不如 FPGA 那样在硬件级别上快速可重配置,但 GPU 在软件层面上提供了很大的灵活性。GPU 可以通过软件更新来适应不同的 ZKP 算法和逻辑变化。即使这种更新可能不如 FPGA 那样迅速,但仍然可以在相对短的时间内完成。
供应: ASIC 设计、制造和部署通常需要 12 到 18 个月或更长时间。相反,FPGA 供应链是相对健康的,Xilinx 等领先供应商允许从网站(即没有任何联系点)在 16 周内到达的大量零售订单。再来看 GPU,在供应上 GPU 自然有巨大的优势,自以太坊上海合并后,全网存在大量闲置的 GPU 矿机。而后续 Nvidia 与 AMD 后续开发的显卡系列,也可以大量供应。
那么从上述两点来看,除非 ZK 赛道形成共识,标准化的采用一种方案,否则 ASIC 不具备任何优势。以现在 ZKP 方案还处于多元化的发展情况来看,GPU 与 FPGA 会是我们接下来需要讨论的两种主要算力硬件。
开发周期:由于 GPU 的普及和成熟的开发工具,如 CUDA(针对 NVIDIA GPU)和 OpenCL(跨平台)。而 FPGA 的开发通常涉及更为复杂的硬件描述语言(如 VHDL 或 Verilog),需要更长的学习和开发时间;
功耗:FPGA 在能效方面通常优于 GPU。这主要是由于 FPGA 能够针对特定任务进行优化,从而减少不必要的能源消耗。而 GPU 虽然在处理高度并行化的任务时性能强大,但这也伴随着较高的功耗;
可定制性:FPGA 可以被编程来优化特定的 ZKP 算法,提高效率。而对于特定的 ZKP 算法,GPU 的通用架构可能不如专用硬件高效;
生成速度:根据 Trapdoor-Tech 关于 GPU(以 Nvidia 3090 为例)以及 FPGA(Xilinx VU 9 P 为例)的对比,在 BLS 12-381 (一种特定类型的椭圆曲线)下,采用同样的模乘/模加算法,GPU 的生成速度是 FPGA 的 5 倍。
综上所述,短期内来看,考虑到开发周期、并行性、生成速度、成本以及全网大量随时待命的闲置设备,GPU 无疑是目前最具优势的选择。而目前的硬件优化方向也是以 GPU 为主,FPGA 完全接管比赛的时间也还未到来,那么构建一个类似 PoW 挖矿的 ZKP 算力市场(我个人构想的词)是否存在可能?
构建 ZKP 算力市场的思考
在构建 ZKP 算力市场的思考上,算力硬件方面我们已经从上文得出结论。而剩下的问题是以下三点,ZKP 是否需要去中心化?市场规模上是否有吸引力?如果 ZK 系公链都选择自己构建证明生成市场,那么 ZKP 算力市场还有什么意义?
去中心化的意义:首先当今大多数 zkRollup 项目(例如 Starkware 和 zKsync)都依赖于中心化的服务器,这是因为只对以太坊扩容进行了考虑。中心化意味着用户信息依然存在被审查的风险,一定程度上牺牲了区块链最重要的无许可性质。而采用 ZK 的隐私协议则更不用多说,ZKP 生成的去中心化是极为必要的。去中心化的第二点理由是成本,这一点同上篇 AGI 部分类似,云服务以及购置硬件的成本都非常昂贵,证明生成通常只适用于大型项目。对于起步阶段的小项目来说,一个去中心化的证明市场可以大幅缓解他们启动阶段资金困难的问题,另一方面也减少了因为财力问题带来的不正当竞争。
市场规模:Paradigm 在去年曾预测 ZK 矿工/证明者市场在将来可能会增长到相当于过去 PoW 采矿市场的规模。其根本原因是 ZKP 算力的买卖方,在 ZKP 算力市场中都是极为充足的。对于那些曾经的以太坊矿工来说,ZK 系大量的公链项目和 Layer 2 项目远比 ETH 的分叉公链有吸引力。不过我们还需要考虑一种情况,大部分 ZK 系公链或者 Layer 2 也完全有能力构建自己的证明生成市场,如果要符合去中心化叙事,这一步也是必然在路线图中的(上文中的 Starkware 和 zkSync,将来也有自己的去中心化方案),那么 ZKP 算力市场是否还有构建的意义?
构建的意义:首先 ZKP 的应用及其广泛(我们在上文也已经举例多次,下文还会用一个项目做参考)。第二点是即便每条 ZK 链都有自己的证明生成市场存在,算力市场依旧还有三个作用,可以让卖方考虑出售算力。
1.将算力分成两部分,一部分用于挖矿,另一部分用于出售算力合约。这种方法可以帮助对冲加密货币市场的波动风险。当市场下跌时,出售的算力合约提供稳定收入;而市场上涨时,自己挖矿的部分能够带来额外的收益;
2.将所有算力出售,获得固定收入,是一个更为保守的做法。这样可以减少市场波动对收入的影响,保证收益的稳定性;
3.由于成本结构的差异(如电力成本),一些矿工可能会获得比市场平均水平更低的运营成本。这些矿工可以利用他们的成本优势通过出售算力合约以市场价格,并保留由于较低电力成本产生的差价,实现套利。
Proof Market
Proof Market 是由=nil;(以太坊研发公司)构建的一个去中心化的 ZKP 算力市场(据我所知也是目前唯一一个围绕 ZKP 生成构建的算力市场),本质上是一种不受信任的数据可访问性协议,使第 1 层和第 2 层区块链和协议能够在不依赖集中式中介的情况下根据无缝数据共享的需求生成零知识证明。虽然 Proof Market 并非是我想象中围绕个人 GPU 构建的市场(Proof Market 是围绕专业硬件商构建的,ZKP 的 GPU 挖矿还可以参考 Scroll 架构中的 Roller Network 或者 Aleo),但在 ZKP 算力市场如何构建与广泛应用这个问题上依然很有参考意义。Proof Market 的工作流程如下:
证明请求者(Proof requester):
请求证明的实体,可以是 zkBridge、zkRollup、zkOracle 或 zkML 这样的应用。
如果电路不存在,需要准备(Preparation)阶段,通过运行 zkLLVM 生成一个新的电路。
如果电路已经存在,则创建一个对于预定义电路的 zkProof 请求。
zkLLVM:
这个组件负责生成电路(Circuit),即编码计算任务的程序。
在准备阶段,zkLLVM 对计算执行预处理以生成电路,并提交到 Proof Market。
Proof Market:
是一个中央市场,匹配证明请求者的订单与证明生成者。
验证证明的有效性,并在证明被验证后提供奖励。
证明生成者(Proof generator):
执行计算,生成所需的零知识证明。
接收来自 Proof Market 的订单,并返回生成的证明。
奖励机制:
电路开发者奖励:每当有证明请求者使用电路生成证明时,电路的作者会得到奖励。
证明生成者奖励:一旦证明在 Proof Market 被验证,生成者根据订单条款接收奖励。
整个流程中,证明的请求、生成、验证和奖励发放都围绕着 Proof Market 展开。这个过程旨在创造一个去中心化的市场,ZKP 的生成和验证是自动化的,参与者都可以根据他们的贡献获得相应的奖励。
应用场景
自从 2023 年 1 月的测试发布以来,Proof Market 的主要应用场景是在以太坊第一层(L1)之外运作的协议:如 zkRollup、连接到以太坊的 zkBridge,以及使用 zkP 的公链。
随着以太坊端点的整合(Ethereum endpoint integration,指的是一个网关接口,允许其他系统或服务连接和融合),Proof Market 会适用于更多应用,尤其是那些需要从 EVM 应用程序直接请求证明以提供更流畅用户体验或者需要链上存储数据一起工作的应用。
以下是一些潜在的应用场景:
机器学习(ML):可以在链上向 zkML 应用发起推理请求。欺诈检测、预测分析、身份验证等应用可以部署在以太坊上。
以太坊数据处理(zkOracles):许多应用需要以太坊的历史或处理后的数据。使用 zkOracles,用户可以从共识层获取执行层的数据。
数据传输(zkBridges):用户可以直接请求数据传输并支付证明费用,无需桥梁操作者作为用户和市场之间的中介。
欺诈证明(Fraud Proof):有些欺诈证明可以在链上被轻松验证,而其他一些则不能。渔夫(Fishermen,指专注于验证主协议并寻找可能的欺诈行为的网络参与者)可以专注于验证主协议,并指向 Proof Market 提供的所需证明。
数据更新和积累:应用程序可以在第一层直接存储最新更新,并稍后将其累积到 Merkle 树中,附带正确根更新的证明。
随机数生成:应用程序可以订购通过无信任哈希基础的 VDF 生成的随机数。
证明聚合:如果应用程序独立发送它们的证明(不进行验证),将它们聚合成单一证明,然后一次性验证,可以降低证明的验证成本。
实战环节
近期我们所熟知的 LSD 项目 Lido,也正在通过 Proof Market 来构建增强 Lido Accounting Oracle&nb