Polygon zkEVM的pil-stark Fibonacci状态机代码解析
Posted mutourend
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Polygon zkEVM的pil-stark Fibonacci状态机代码解析相关的知识,希望对你有一定的参考价值。
1. 引言
前序博客有:
开源代码见:
中的test/sm_fibonacci/
Fibonacci状态机,对应的序列为:
1
,
2
,
5
,
29
,
⋯
1,2,5,29,\\cdots
1,2,5,29,⋯
对应的逻辑为:
a
i
+
2
=
a
i
2
+
a
i
+
1
2
a_i+2=a_i^2+a_i+1^2
ai+2=ai2+ai+12。需要判定第
2
10
=
1024
2^10=1024
210=1024个元素是否为
74469561660084004
74469561660084004
74469561660084004。
将其execution trace表示为:具有寄存器
A
=
(
A
0
,
A
1
,
A
2
,
…
,
A
1023
)
\\mathbfA = ( A_0, A_1, A_2, \\dots , A_1023 )
A=(A0,A1,A2,…,A1023)和
B
=
(
B
0
,
B
1
,
B
2
,
…
,
B
1023
)
\\mathbfB = ( B_0, B_1, B_ 2, \\dots , B_1023 )
B=(B0,B1,B2,…,B1023)的状态机,第
i
i
i个状态为
(
A
i
,
B
i
)
(A_i,B_i)
(Ai,Bi),初始状态为
A
0
=
i
n
1
=
1
,
B
0
=
i
n
2
=
2
A_0=in_1=1,B_0=in_2=2
A0=in1=1,B0=in2=2。相应的约束为:
- 1)Transition constraints: A i + 1 = B i , B i + 1 = A i 2 + B i 2 A_i+1=B_i,B_i+1=A_i^2+B_i^2 Ai+1=Bi,Bi+1=Ai2+Bi2( i = 0 , ⋯ , 1022 i=\\0,\\cdots,1022\\ i=0,⋯,1022)
- 2)Boundary constraints: A 0 = 1 , B 0 = 2 , A 1023 = o u t = 74469561660084004 A_0=1,B_0=2,A_1023=out=74469561660084004 A0=1,B0=2,A1023=out=74469561660084004
为了便于设置STARK的polynomial identities,需额外再引入2个常量寄存器
i
s
I
n
i
t
i
a
l
=
(
1
,
0
,
0
,
⋯
,
0
)
,
i
s
L
a
s
t
=
(
0
,
0
,
0
,
⋯
,
1
)
\\mathbfisInitial=(1,0,0,\\cdots,0), \\mathbfisLast=(0,0,0,\\cdots,1)
isInitial=(1,0,0,⋯,0),isLast=(0,0,0,⋯,1),将以上transition和boundary约束表示为:(
i
=
0
,
⋯
,
1022
i=\\0,\\cdots,1022\\
i=0,⋯,1022)
(
A
i
+
1
−
B
i
)
∗
(
1
−
isLast
i
)
=
0
(A_i+1-B_i)*(1-\\textisLast_i)=0
(Ai+1−Bi)∗(1−isLasti)=0
(
B
i
+
1
−
(
A
i
2
+
B
i
2
)
)
∗
(
1
−
isLast
i
)
=
0
(B_i+1-(A_i^2+B_i^2))*(1-\\textisLast_i)=0
(Bi+1−(Ai2+Bi2))∗(1−isLasti)=0
isInitial
i
∗
(
A
i
−
i
n
1
)
=
0
\\textisInitial_i*(A_i-in_1)=0
isInitiali∗(Ai−in1)=0
isInitial
i
∗
(
B
i
−
i
n
2
)
=
0
\\textisInitial_i*(B_i-in_2)=0
isInitiali∗(Bi−in2)=0
isLast
i
∗
(
A
i
−
o
u
t
)
=
0
\\textisLast_i*(A_i-out)=0
isLasti∗(Ai−out)=0
将寄存器 A , B , i s I n i t i a l , i s L a s t \\mathbfA, \\mathbfB, \\mathbfisInitial, \\mathbfisLast A,B,isInitial,isLast 分别插值为多项式 l 2 , l 1 , L 1 , L L A S T l2,l1,L1,LLAST l2,l1,L1,LLAST表示。
序号 | A \\mathbfA A( l 2 l2 l2多项式) | B \\mathbfB B( l 1 l1 l1多项式) | i s I n i t i a l \\mathbfisInitial isInitial( L 1 L1 L1多项式) | i s L a s t \\mathbfisLast isLast( L L A S T LLAST LLAST多项式) |
---|---|---|---|---|
0 | 1 | 2 | 1 | 0 |
1 | 2 | 5 | 0 | 0 |
2 | 5 | 29 | 0 | 0 |
⋮ \\vdots ⋮ | ⋮ \\vdots ⋮ | 以上是关于Polygon zkEVM的pil-stark Fibonacci状态机代码解析的主要内容,如果未能解决你的问题,请参考以下文章
Polygon zkEVM FFT和多项式evaluate计算的circom约束 Polygon zkEVM Merkle tree的circom约束 |