Polygon zkEVM的pil-stark Fibonacci状态机初体验
Posted mutourend
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Polygon zkEVM的pil-stark Fibonacci状态机初体验相关的知识,希望对你有一定的参考价值。
1. 引言
前序博客:
- Polygon zkEVM 基本概念 第5章 “一个例子——Fibonacci state machine”
实操主要见:
- 2022年8月8日Jordi Baylina(Iden3合伙人,Polygon Hermez zkEVM技术负责人)在Zcon3分享 Tooling for building zkEVM: PIL and Circom - Jordi Baylina at Zcon3 第24分钟。
相关代码见:
pil-stark代码库的主要作用是:
- 从某状态机生成stark证明。该状态机以PIL语言编写。
测试用例见pil-stark/test
文件夹,以其中的sm_fibonacci
为例:
-
1)创建tmp文件夹,用于存储编译输出文件:
mkdir tmp
-
2)debug运行
fibonacci buildconst
:运行状态机中main_buildconst_fibonacci.js
,输出为fibonacci.const
/usr/local/bin/node --max-old-space-size=32000 test/sm_fibonacci/main_buildconst_fibonacci.js -o tmp/fibonacci.const file Generated Correctly
-
3)debug运行
fibonacci exec
:运行main_exec_fibonacci.js
,输入有fibonacci.input.json
,输出为fibonacci.commit
:/usr/local/bin/node --max-old-space-size=32000 test/sm_fibonacci/main_exec_fibonacci.js -i test/sm_fibonacci/fibonacci.input.json -o tmp/fibonacci.commit Result: 74469561660084004 file Generated Correctly
-
4)debug运行
fibonacci PIL verify
:运行node_modules/pilcom/src/main_pilverifier.js
,输入有:- 4.1)
fibonacci.commit
:为基于fibonacci.input.json
运行状态机中main_exec_fibonacci.js
获得的输出。 - 4.2)
fibonacci_main.pil
程序。 - 4.3)
fibonacci.const
:为运行状态机中main_buildconst_fibonacci.js
获得的输出。
/usr/local/bin/node --max-old-space-size=32000 node_modules/pilcom/src/main_pilverifier.js tmp/fibonacci.commit -p test/sm_fibonacci/fibonacci_main.pil -c tmp/fibonacci.const loading tmp/fibonacci.const.. 0 of 0.001953125 loading tmp/fibonacci.commit.. 0 of 0.001953125 Preparing public 1/3 calculateExpression: 0 Preparing public 2/3 Preparing public 3/3 Checking identities 1/5 calculateExpression: 1 Checking identities 2/5 calculateExpression: 3 calculateExpression: 2 Checking identities 3/5 calculateExpression: 4 Checking identities 4/5 calculateExpression: 5 Checking identities 5/5 calculateExpression: 6 PIL OK!!
- 4.1)
-
5)debug运行
fibonacci build constree
:运行main_buildconsttree.js
,输入有:- 5.i.1)
fibonacci.const
:为运行状态机中main_buildconst_fibonacci.js
获得的输出。 - 5.i.2)状态机中
fibonacci_main.pil
程序 - 5.i.3)状态机中
fibonacci.starkstruct.json
输出为:
- 5.o.1)
fibonacci.consttree
- 5.o.2)
fibonacci.verkey.json
/usr/local/bin/node --max-old-space-size=32000 src/main_buildconsttree.js -c /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.const -p /Users/lanyu/zyd/0xPolygonHermez/pil-stark/test/sm_fibonacci/fibonacci_main.pil -s /Users/lanyu/zyd/0xPolygonHermez/pil-stark/test/sm_fibonacci/fibonacci.starkstruct.json -t /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.consttree -v /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.verkey.json loading /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.const.. 0 of 0.001953125 Interpolating reverse.... Layer ifft0 start block 10 0 end block 10 0 Interpolating prepare.... linear interpolatePrepare start.... 0/0 linear interpolatePrepare end.... 0/0 Bit reverse.... Layer fft 0 start block 11 0 end block 11 0 interpolation terminated pool terminated Start merkelizing.. slicing buff 0 creating thread 0 waiting.. linear hash start.... 0/2048 merkelizing hash start.... 0/1024 merkelizing hash end.... 0/1024 merkelizing hash start.... 0/512 merkelizing hash end.... 0/512 merkelizing hash start.... 0/256 merkelizing hash end.... 0/256 merkelizing hash start.... 0/128 merkelizing hash end.... 0/128 merkelizing hash start.... 0/64 merkelizing hash end.... 0/64 merkelizing hash start.... 0/32 merkelizing hash end.... 0/32 merkelizing hash start.... 0/16 merkelizing hash end.... 0/16 merkelizing hash start.... 0/8 merkelizing hash end.... 0/8 merkelizing hash start.... 0/4 merkelizing hash end.... 0/4 merkelizing hash start.... 0/2 merkelizing hash end.... 0/2 merkelizing hash start.... 0/1 merkelizing hash end.... 0/1 writting tree.. 0 / 4096 writting tree.. 0 / 16380 files Generated Correctly
- 5.i.1)
-
6)
附录:Polygon Hermez 2.0 zkEVM系列博客
- ZK-Rollups工作原理
- Polygon zkEVM——Hermez 2.0简介
- Polygon zkEVM网络节点
- Polygon zkEVM 基本概念
- Polygon zkEVM Prover
- Polygon zkEVM工具——PIL和CIRCOM
- Polygon zkEVM节点代码解析
以上是关于Polygon zkEVM的pil-stark Fibonacci状态机初体验的主要内容,如果未能解决你的问题,请参考以下文章
Polygon zkEVM FFT和多项式evaluate计算的circom约束
Polygon zkEVM Merkle tree的circom约束