我们在这篇文章中解释了如何思考和利用PLONK中使用的算术化类型。在其最一般的形式中,我们将这种算术化称为带预处理的随机性Air,简称RAP。然而,在实践中,处理RAP的约束情况通常会变得便利,我们称之为turbo-Plonk和ultra-Plonk程序。在本文中,我们将解释以上所有这些术语!
我们的起点是AlgebraicIntermediateRepresentations-AIRs;这是?STARKWARE?使用的算术化。
AIRs
一个?AIRP?在一个域?F?有长度为?n,和宽度为?w。
P?由一组?2w?个变量,预定义阶数?d?的约束多项式?定义?{f?i??}?。
P?的执行轨迹?T?由?F?的元素长度为?w?的?n?个向量组成。我们认为是“行宽?w”。
T?是有效的,如果将任意两个连续行??的?2w?值替换为任何约束多项式?fi,则计算结果为零。
STARK可以证明我们知道有效?P?的执行轨迹与一些验证者定义的边界约束一致:例如,我们可以要求轨迹的第一行的第一个值应该为零。
数据:Rocket Pool于24日创下最大单日赎回纪录,共赎回6720枚rETH:7月27日消息,据Dune数据信息,LSD协议Rocket Pool于7月24日创下最大单日赎回纪录,共赎回6720枚rETH。链上信息显示,某位巨鲸于当日赎回约6473枚rETH(价值约合1230万美元)。该巨鲸随后将该笔资金转入Binance。[2023/7/27 16:02:24]
让我们看一个经典的例子——斐波那契数列。
我们使用宽度?w=2;作为边界条件,我们要求第一行包含两个。然后我们使用约束多项式
有效的长度轨迹?n=4看起来像这样:
也就是说,有效轨迹必须包含斐波那契数列的连续元素。因此,在第四行的第二个值21上添加边界条件将验证这确实是正确的第8个斐波那契元素。
PAIRs-带有预处理列的AIRs
在一个预处理AIR(PreprocessedAIR),或者说PAIR?T,我们有一个额外的参数?t,并且?t?预处理/预定义了列?c1,…,ct∈F^n。除了证明者提供的?w?列外,一个执行轨迹现在还包括?{ci}?。(我们将证明者提供的列称为执行轨迹的见证部分。)
币安将推出TUSD挂单零手续费活动:金色财经报道,Binance正在为TUSD现货和保证金交易对引入零挂单费用。它还将美元稳定币交易对的零交易费扩展到所有现有的和新的交易对,并将其BUSD零做市商费用再延长六个月。
值得注意的是,BTC/TUSD、TUSD/BUSD和TUSD/USDT交易对在促销期间也将实行零挂单费。[2023/6/22 21:53:07]
举例来说当?t=1,w=2,n=4,执行轨迹可能如下所示:
这个多项式约束?fi?将有?2(t+w)?个变量——换句话说,预定义值?ci,j?参与了约束。
为了说明PAIRs强大的功能,让我们看看如何使用它们来模拟AIR,其中不同行的约束不同。???一个天然的例子就是AIR,其中对于某些行,我们希望执行的行值相加;对于其他行,我们希望执行乘法。
为此,我们将PAIR?P?定义如下:我们设置?t=1,并将列?c1??定义为行中的一员,当然我们想要相加时为1,以及当我们要相乘时为0。
P的单约束多项式为:
比特币NFT市场Ordinals Market和Magic Eden已将Bitcoin Apes下架:金色财经报道,据Shilling Pixels在社交媒体上发文表示,“比特币NFT市场Ordinals Market不得不下架Bitcoin Apes,原因是Yuga Labs的法律团队采取了行动。”
此前4月12日消息,Magic Eden比特币NFT市场下架了Bitcoin Apes。
Bitcoin Apes与Yuga Labs在以太坊上的NFT项目BAYC图像一致,但不属于Yuga Labs。[2023/4/19 14:13:19]
变量?C1??是从预定义的列?c?1??分配的。
很明显,根据?c1?的值强制执行加法或乘法关系。
例如,在我们希望执行两次加法然后执行一次乘法的程序中,执行轨迹可能如下所示:
因为可以通过这种方式使用预定义的列来选择操作,所以它们通常被称为“选择器(selecors)”。???
门(gate)之间交替:
Binance发言人回应抄袭质疑:Bicasso未抄袭Chatcasso项目:3月30日消息,针对 Hunt Town 联创指控 Bicasso 产品窃取其在 BNB Chain 黑客松上提出的创意(即 Chatcasso 项目)。Binance 坚持认为相似之处并不意味着盗窃思想。Binance 发言人称,尽管有相似之处,但在进行内部审查后,我们相信 Bicasso 是在 BNB 黑客马拉松前两周独立设计和开发的,此外,Binance 和 BNB Chain 是分开运营的,Binance 开发团队不参与 BNB Chain 黑客马拉松 Bicasso 这个名字的灵感来自 OpenAI 工具Dall-E,指的是艺术家萨尔瓦多·达利。[2023/3/30 13:35:19]
上面的例子示意并建议了人们设计PAIR的典型方式:我们预定义了几组约束,将每一组视为一个“门”。然后,在设计我们的最终程序时,我们将这些门分配给每一行。如上例所示,选择器将用来为我们的程序“编译”成PAIR。
值得注意的是,除了使用选择器在门之间切换外,很多时候门本身也会使用选择器来实现更大的灵活性。一个典型的例子是通过预定义点添加椭圆曲线的门-预定义点将在选择器的值中编码。
Bitwise公布2022年8月月末加密指数重组结果:金色财经报道,Bitwise Index Services宣布了Bitwise Crypto Indexes的每月重组结果,该结果于 2022年8月31日美国东部时间下午4点进行。
由于2022年8月31日的重组,Cosmos (ATOM) 重新进入Bitwise10大盘加密指数,取代了Uniswap (UNI)。Convex Finance (CVX) 进入Bitwise Decentralized Finance Crypto Index指数,取代了 SushiSwap (SUSHI)。Cosmos (ATOM) 重新进入Bitwise 10 ex Bitcoin Large Cap Crypto Index指数,取代 Uniswap (UNI)。ApeCoin (APE) 进入Ball Multicoin Bitwise Metaverse Index指数,取代了 Somnium Space Cubes (CUBE)。
Bitwise Blue-Chip NFT Collections Index 每季度重组一次,因此截至 2022 年 8 月 31 日没有变化。[2022/9/2 13:03:26]
RAPs-插入验证者随机性的PAIRs
我们的最终模型是允许多轮交互,其中验证者发送域中随机元素,而证明者可以在看到这些域元素后随后添加更多列。
约束多项式现在可以使用验证者随机性作为附加变量。
我们将这样的程序称为RAP(RandomizedAIRwithPreprocessing)。
让我们用下面的例子来说明RAP。假设我们有一个宽度为2的AIR,并且想要检查证明者提供的列是否是彼此的排列。
假设这些列的值为?a1,…,an,b1,…,bn。
从Schwartz-Zippel引理我们知道,要检查它们是否是彼此的排列,只需检查对于统一选择的γ∈F,我们有很高的概率。
上等式右侧的因子都是非零的,在这种情况下,这相当于
一个RAP长度为n+1和总宽度为3可以很容易地检查:
证明者首先发送列?(a1,…,an,0),(b1,…,bn,0)验证者随机发送γ∈F。证明者发送第三列?(1,z1,…,zn)?这样对于每个i∈
如果?z?是这样定义的,我们的排列检查相当于检查?zn=1。我们可以将其添加为边界约束。
此外,程序必须检查?z?确实是这样定义的。
以此目的
为了说明,下面是这个程序的有效执行轨迹,是当?b?只是?a?的一个移位时:
这里可能在哲学上很有趣的是,随机性使局部约束能够验证全局属性。
turbo-PLONK和ultra-PLONK程序-便于RAPs的特别用例
RAPs比PAIRs更强大,但是对于程序设计通常想到一个PAIR是很方便的,同时允许自己将RAP的一些特殊功能使用黑盒,稍后,这个程序会编译成最后的RAP。
RAP的一种非常有用的特殊功能是强制复制约束。
这意味着强制轨迹的某些元素相等。例如“第一列的第二个元素?a?2???必须等于第二列的第40个元素?b40??”。这就赋予了程序一定的长时记忆能力。
turbo-plonk程序?是一个PAIR,具有在执行轨迹的任意两个元素之间定义复制约束的额外能力。
“在turbo-Plonk中编程”的实用方法:
复制约束使设计人员能够抽象出对执行轨迹和PAIR的明确思考,而是设计如下程序:
我们有一组见证变量,其值只能在程序中设置一次。我们在每个步骤中选择将哪个门应用于哪些变量。上面的内容可能看起来微不足道,也并没有说太多。然而,复制约束对于这种简化的设计方法至关重要的原因是,当见证变量参与两个门时,复制约束将确保两个门中确实使用相同的值,即使它们最终可能会出现在实际RAP中完全不同的行。
ultra-Plonk编程
一个ultra-Plonk程序???是一个turbo-Plonk程序,带有一个额外的、非常强大的门类型,称为查找门。
这意味着作为设计程序的一部分,我们定义了一组表?T1,...,Tk。这些表的元素是一定长度?t的域元素的元组(tuples)。
现在,在设计程序时;我们被允许使用具有以下形式的查找门:“检查这些?t?witness变量的元组是否在表?T4?中”。
在这一点上,从RAP到具有此类功能的程序的飞跃似乎有点神奇。有关如何通过我们在上一节中展示的多重集检查确实可以实现复制约束和查找表的详细信息,请参阅这篇文章。
何时使用lookupgates
启用查找门在最终的SNARK中有很大的成本;根据经验,一旦查找次数与表一样大,它就会得到回报。
总的来说:
对于程序设计者来说,使用turbo和ultra-plonk程序通常会很方便,考虑将哪些门应用于哪些见证变量。这已经很底层了,而且足够复杂和通用!然而,有时最好记住引擎盖下有一个RAP,当需要时,可以利用验证者的随机性来获得更具体/更有效的功能。
这一切与R1CS有什么关系?
如果你熟悉SNARK开发和文献,可能已经看过R1CS约束格式,其中所有约束都具有以下形式
R1CS很好地捕捉了从到Groth优化版本的一系列作品的约束格式。这项工作依赖于检查指数中秘密元素的验证者方程。正如我们目前拥有的加密货币k-线性映射仅适用于k=2个,R1CS确实是这些协议可以使用的最通用的约束形式。
然而,构建SNARK的多项式IOP方法支持更灵活的约束格式。特别是,可以使用大于二的阶数约束。
当使用GGPR方法时,R1CS有一个很好的理论优势——不需要随机预言机模型;还有一个很好的实际优势——证明者组指数的数量不依赖于加法门的数量或fan-in。然而,获得这些优势需要为每个电路的做可信设置。
假设我们正在使用Sonic、Plonk和Marlin这样的通用设置系统,可能更难说我们应该将自己限制在R1CS上。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。