Replies: 7 comments 3 replies
-
1 Lasso查找、R1CS和离线内存检查的协同工作机制: 2 Jolt-with-curves的优化机制: 3 Jolt与Binius的结合: 4 关于Schnorr签名验证的内存消耗问题: 建议的优化方案: |
Beta Was this translation helpful? Give feedback.
-
Proving
R1CSThe whole VM process (fetch-decode-execute) is correct by gluing and constraining the steps involved via an R1CS.
|
Beta Was this translation helpful? Give feedback.
-
(1)How does Lasso lookup, R1CS, and offline memory checking work together? Why Jolt need R1CS? 一个VM通常需要完成两件事:
对应到Jolt,Jolt zkVM设计了三个相互协同的组件(Lasso lookup, R1CS, and offline memory checking),以确保VM从指令执行到内存状态转变的整体正确性。 首先,Lasso lookup主要用于解决Fetch-Decode-Execute逻辑中的Execute部分,每一条RISC‑V指令的“执行”过程不是通过传统的大量算术约束来验证,而是通过预先构造的巨大查找表来完成。为此,Jolt将RISC-V指令集预编译为庞大的结构化查找表,每个RICS-V的指令对应表中的某个或某几个Items。 总结一下,为何需要R1CS? (2) Why Jolt-with-curves is fast in proving elliptic curve operations? How Jolt prove elliptic curve operations? Jolt‐with‐curves 能够快速证明椭圆曲线运算,主要归功于其将复杂的椭圆曲线操作转换为table lookup问题。其基本思路是基于Lookup Singularity: Jolt采用Lasso lookup argument,将原本复杂的椭圆曲线运算预先构造为一个巨大但结构化的lookup table,这个lookup table包含了在椭圆曲线的base field上预先计算好的运算结果,Prover只需证明execution trace中的查找结果与lookup table中预期的结果一致。同时,利用查找表的分解性,Jolt将对整个查找表的查询拆分成对若干个小子表的查找,通过查找验证这些小部分,再合成整体结果,就可以高效地证明运算的正确性 --> 通过这一思路,Jolt大幅降低Prover的计算负担。 Jolt如何证明椭圆曲线运算:
(3) How Jolt combined with Binius? Jolt最初的方案采用的是基于椭圆曲线的Hyrax多项式承诺方案,这一方案在证明时需要执行大量的椭圆曲线运算,而这些运算虽然在验证侧较为高效,但对证明者来说却开销较大。为了解决这一瓶颈,Jolt正在向Binius承诺方案转型。 Jolt combined with Binius主要体现在以下几个方面: (4) I tried to verify Schnorr signature using Jolt, it requires 500GB+ memory. why does Jolt consume such a large memory? 在Jolt的论文《Jolt: SNARKs for Virtual Machines via Lookups》的摘要中提到:“Although size-$2^{128}$ tables are vastly too large to materialize in full, the tables arising in Jolt are structured, avoiding costs that grow linearly with the table size.” Jolt的设计核心在于利用Lasso lookup argument来验证虚拟机的执行,而lookup argument本质上需要定义一个非常巨大的查找表,其理论规模远超实际可存储的大小。 基于上述原理,当我们需要验证Schnorr signature时,使用的内存超过500GB,有可能是实现中没有充分利用查找表的decomposition技术,结果就是,系统尝试materialize过多的lookup table内容,从而导致内存需求暴涨。 |
Beta Was this translation helpful? Give feedback.
-
首先从high-level给出一个基于jolt范式ZKVM的证明过程直觉,即三个部件分别执行不同的证明任务: R1CS补充了那些不适合或者无需用lookup证明的约束关系,同时将各个部件“整合”在了一起(比如存储和指令内的一致性等等)。
因为jolt-with-curve采用的是基于椭圆曲线的PCS,使得证明的任何elliptic curve operations都是native field arithmetization,不需要对其进行范围约束。jolt证明椭圆曲线操作的算术与普通的算术操作类似,例如计算一个scalar multiplication,s*G,即构造一个大查找表包含所有scalar和group element及相应结果(?)。
本身Jolt仍然采用PIOP+PCS的设计范式,同时其PIOP的核心为sum-check protocol,其为一multilinear多项式。而基于Binius的多项式承诺方式,工作在二进制域及其扩域上,正好与multilinear多项式不谋而合。同时,Binius改造了Ligero/Brakedown式的PCS,其二进制域的特性使得其能很好适配用于构建Merkle tree的哈希函数(如keccak),因为主流的哈希函数都涉及位运算。
正如之前提到的,Schnorr signature设计大量椭圆曲线上的运算,例如scalar multiplication和field operation。因此,对于这种field specific PS.个人理解,欢迎讨论。 |
Beta Was this translation helpful? Give feedback.
-
How does Lasso lookup, R1CS, and offline memory checking work together? Why Jolt need R1CS? Why Jolt-with-curves is fast in proving elliptic curve operations? How Jolt prove elliptic curve operations? How Jolt combined with Binius? I tried to verify Schnorr signature using Jolt, it requires 500GB+ memory. why does Jolt consume such a large memory? |
Beta Was this translation helpful? Give feedback.
-
Why Jolt-with-curves is fast in proving elliptic curve operations? How Jolt prove elliptic curve operations?椭圆曲线运算涉及大量大数运算,而Jolt
Jolt如何证明椭圆曲线运算:
|
Beta Was this translation helpful? Give feedback.
-
1. Lasso lookup、R1CS 和 offline memory checking 是如何协同工作的?Jolt 为什么需要 R1CS?
2. Jolt-with-curves 为什么能高效证明 elliptic curve 运算?Jolt 是如何证明这些运算的?
4. 为什么我用 Jolt 验证 Schnorr signature 时需要超过 500GB 的内存?
简单说,Jolt 用内存换计算,Schnorr 这类操作查表维度大、中间变量多,最终导致了 500GB+ 的内存需求。 |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
第二节课程结束后留下几个问题思考,希望对大家的学习有帮助。(可以任选回答)
Beta Was this translation helpful? Give feedback.
All reactions