Polygon zkEVM Arithmetic状态机
Posted mutourend
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Polygon zkEVM Arithmetic状态机相关的知识,希望对你有一定的参考价值。
1. 引言
Polygon zkEVM中将某类特定的计算表示为状态机。
Arithmetic状态机为Polygon zkEVM的6个二级状态机之一,主要由2大部分组成:
- 1)Executor部分:有2个版本,javascript版本 和 C/C++版本。https://github.com/0xPolygonHermez/zkevm-proverjs/tree/main/src/sm/sm_arith。
- 2)验证规则集(a set of verification rules)程序部分:以PIL语言实现,见 https://github.com/0xPolygonHermez/zkevm-proverjs/blob/main/pil/arith.pil。
Polygon zkEVM的Arithmetic状态机主要是基于Secp256K1椭圆曲线E( y 2 = x 3 + 7 y^2=x^3+7 y2=x3+7,基域为 p = 2 256 − 2 32 − 2 9 − 2 8 − 2 7 − 2 6 − 2 4 − 1 p=2^256-2^32-2^9-2^8-2^7-2^6-2^4-1 p=2256−232−29−28−27−26−24−1)上的如下运算:
- 1)域内加法和乘法等运算: x 1 ⋅ y 1 + x 2 = y 2 ⋅ 2 256 + y 3 x_1\\cdot y_1+x_2=y_2\\cdot 2^256+y_3 x1⋅y1+x2=y2⋅2256+y3。若 y 1 = 0 y_1=0 y1=0,则表示的是field addition运算;若 x 2 = 0 x_2=0 x2=0,则表示的是field multiplication运算。
- 2)椭圆曲线点加运算:椭圆曲线上2个不同点
P
=
(
x
1
,
y
1
)
,
Q
=
(
x
2
,
y
2
)
P=(x_1,y_1),Q=(x_2,y_2)
P=(x1,y1),Q=(x2,y2),
x
1
≠
x
2
x_1\\neq x_2
x1=x2,
P
+
Q
=
(
x
3
,
y
3
)
P+Q=(x_3,y_3)
P+Q=(x3,y3)计算为:
x 3 = s 2 − x 1 − x 2 , x_3=s^2-x_1-x_2, x3=s2−x1−x2,
y 3 = s ( x 1 − x 3 ) − y 1 y_3=s(x_1-x_3)-y_1 y3=s(x1−x3)−y1
其中 s = y 2 − y 1 x 2 − x 1 s=\\fracy_2-y_1x_2-x_1 s=x2−x1y2−y1。 - 3)椭圆曲线点倍加运算:椭圆曲线上点
P
=
(
x
1
,
y
1
)
P=(x_1,y_1)
P=(x1,y1),,
2
P
=
P
+
P
=
(
x
3
,
y
3
)
2P=P+P=(x_3,y_3)
2P=P+P=(x3,y3)计算为:
x 3 = s 2 − 2 x 1 , x_3=s^2-2x_1, x3=s2−2x1,
y 3 = s ( x 1 − x 3 ) − y 1 y_3=s(x_1-x_3)-y_1 y3=s(x1−x3)−y1
其中 s = 3 x 1 2 2 y 1 s=\\frac3x_1^22y_1 s=2y13x12。
将以上运算以约束形式表示为: 以上是关于Polygon zkEVM Arithmetic状态机的主要内容,如果未能解决你的问题,请参考以下文章
EQ
0
:
x
1
⋅
y
1
+
x
2
−
y
2
⋅
2
256
−
y
3
=
0
,
EQ
1
:
s
⋅
x
2
−
s
⋅
x
1
−
y
2
+
y
1
+
q
0
⋅
p
=
0
,
EQ
2
:
2
⋅
s
⋅
y
1
−
3
⋅
x
1
⋅
x
1
+
q
0
⋅
p
=
0
,
EQ
3
:
s
⋅
s
−
x
1
−
x
2
−
x
3
+
q
1
⋅
p
=
0
,
EQ
4
:
s
⋅
x
1
−
s
⋅
x
3
−
y
1
−
y
3
+
q
2
⋅
p
=
0
,
\\beginaligned \\textEQ_0 \\colon \\quad &x_1 \\cdot y_1 + x_2 - y_2 \\cdot 2^256 - y_3 = 0, \\\\ \\textEQ_1 \\colon \\quad &s \\cdot x_2 - s \\cdot x_1 -y_2 + y_1 + q_0 \\cdot p = 0, \\\\ \\textEQ_2 \\colon \\quad & 2 \\cdot s \\cdot y_1 - 3 \\cdot x_1 \\cdot x_1 + q_0 \\cdot p = 0, \\\\ \\textEQ_3 \\colon \\quad & s \\cdot s - x_1 - x_2 - x_3 + q_1 \\cdot p = 0, \\\\ \\textEQ_4 \\colon \\quad & s \\cdot x_1 - s \\cdot x_3 - y_1 - y_3 + q_2 \\cdot p = 0, \\endaligned
EQ0:EQ1:EQ2:<