算术化:将计算问题转换为有限域F上的多项式代数问题。zkSTARK算数化会构建程序的代数中间表达(AlgebraicIntermediateRepresentation,AIR),用s个多项式描述当前执行状态与下一步状态的转换约束。算术化中会得到两种witness:整个待
通过chip的eval()函数对trace表的列添加约束。本文列出每个chip的核心约束。列出如下变量/寄存器clk:每条指令运行的时间戳pc:指令指针,指向当前指令ci:当前指令,pc指向的指令mp:内存指针,执行一个内存单元mv:内存值,mp所指内存单元的值
ExecutionRecord为了实现对brainfuck程序的约束,需要将每条指令运行过程中的一些信息收集起来,放到ExecutionRecord中。ExecutionRecord中会包含多种event列表,后续会被转换为trace表.一条指令会生成多个event,每条指令
Brainfuck编程语言Brainfuck只有8条指令。假设mp为内存指针,mv为mp所指内存单元的值,最初两者都为0[:如果mv==0,则跳转到相应]指令的下一条指令处;否则,执行下一条指令。]:如果mv!=0,则跳转到相应[指令的下一条指令处;否
在zkVM中,内存访问一致性检查是证明任何读操作返回的值确实是写入该内存地址的最新值。如果能证明读取和写入的数据是置换关系,便可证明内存访问的一致性。内存一致性检查构造读集合RRR和写集合WWW,元素都是(addr,val,cnt)(addr,val,cnt)(addr,val,
Lookup(LogDerivativeLookupArgument)是一种通过预计算表(LookupTable)来验证某个值是否存在于特定集合中的技术。在ZKP中,它通常用于减少电路约束的复杂性,将复杂的算术约束(如位操作、范围检查)转换为查表操作,减少证明生成的开销。L
重心插值(Barycentricinterpolation)是拉格朗日插值的变换。有时候需要通过一组多项式点值直接计算另一个不同点处的值,例如,p(x)p(x)p(x)是一个度为2的多项式,可以在O(N)时间内用p(0),p(1),p(2)p(0),p(1),p(2)p(0),