Polygon zkEVM的pil-stark Fibonacci状态机初体验

Posted mutourend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Polygon zkEVM的pil-stark Fibonacci状态机初体验相关的知识,希望对你有一定的参考价值。

1. 引言

前序博客:

实操主要见:

相关代码见:

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!!
    
  • 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
    
  • 6)

附录:Polygon Hermez 2.0 zkEVM系列博客

以上是关于Polygon zkEVM的pil-stark Fibonacci状态机初体验的主要内容,如果未能解决你的问题,请参考以下文章

Polygon zkEVM FFT和多项式evaluate计算的circom约束

Polygon zkEVM中的Merkle tree

Polygon zkEVM Merkle tree的circom约束

Polygon zkEVM中Goldilock域元素circom约束

Polygon zkEVM交易解析

Polygon zkEVM Prover