Goldilocks域 p = 2 64 − 2 32 + 1 p= 2^{64} - 2^{32} + 1 p=264−232+1,目前用于Polygon生态的多个项目中:
以Goldilocks域 p = 2 64 − 2 32 + 1 p= 2^{64} - 2^{32} + 1 p=264−232+1 为base prime field的椭圆曲线有:
p
=
2
64
−
2
32
+
1
p= 2^{64} - 2^{32} + 1
p=264−232+1,
F
p
∗
\mathbb{F}_p^*
Fp∗的order为
p
−
1
p-1
p−1,即:
2
64
−
2
32
=
2
32
⋅
3
⋅
5
⋅
17
⋅
257
⋅
65537
2^{64}-2^{32}=2^{32}\cdot 3\cdot 5\cdot 17\cdot 257\cdot 65537
264−232=232⋅3⋅5⋅17⋅257⋅65537
即意味着该域具有
2
32
2^{32}
232-th root of unity。
相应的generator为:
g
=
7
g=7
g=7
2
32
2^{32}
232-th root of unity 为
g
(
p
−
1
)
/
2
32
=
0
x
185629
d
c
d
a
58878
c
=
1753635133440165772
g^{(p-1)/2^{32}}=0x185629dcda58878c=1753635133440165772
g(p−1)/232=0x185629dcda58878c=1753635133440165772。
相应的sage脚本为:
STARKs/SNARKs处理常规整数运算的难点在于:
Miden VM原生支持所有32-bit unsigned integers(u32)运算,从而使得相应的运算效率很高:
Goldilocks域 p = 2 64 − 2 32 + 1 p= 2^{64} - 2^{32} + 1 p=264−232+1,具有一些很好的特性:【详细见:u32 operations in Miden VM 】
Miden VM中的大多数u32运算(包括bit shifts、bit rotations、value comparison)仅需要少量的16-bit range checks。对于一些复杂的运算(如bitwise AND/OR/XOR),需要使用辅助lookup tables,但是这些复杂运算也是efficient的。
[1] twitter u32 operations in Miden VM
[2] u32 operations in Miden VM
[3] cronokirby 2022年9月1日博客 The Goldilocks Field
[4] twitter Goldilocks Field