You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
4.9 KiB

Add solidity groth16, kzg10 and final decider verifiers in a dedicated workspace (#70) * change: Refactor structure into workspace * chore: Add empty readme * change: Transform repo into workspace * add: Create folding-verifier-solidity crate * add: Include askama.toml for `sol` extension escaper * add: Jordi's old Groth16 verifier .sol template and adapt it * tmp: create simple template struct to test * Update FoldingSchemes trait, fit Nova+CycleFold - update lib.rs's `FoldingScheme` trait interface - fit Nova+CycleFold into the `FoldingScheme` trait - refactor `src/nova/*` * chore: add serialization assets for testing Now we include an `assets` folder with a serialized proof & vk for tests * Add `examples` dir, with Nova's `FoldingScheme` example * polishing * expose poseidon_test_config outside tests * change: Refactor structure into workspace * chore: Add empty readme * change: Transform repo into workspace * add: Create folding-verifier-solidity crate * add: Include askama.toml for `sol` extension escaper * add: Jordi's old Groth16 verifier .sol template and adapt it * tmp: create simple template struct to test * feat: templating kzg working * chore: add emv and revm * feat: start evm file * chore: add ark-poly-commit * chore: move `commitment` to `folding-schemes` * chore: update `.gitignore` to ignore generated contracts * chore: update template with bn254 lib on it (avoids import), update for loop to account for whitespaces * refactor: update template with no lib * feat: add evm deploy code, compile and create kzg verifier * chore: update `Cargo.toml` to have `folding-schemes` available with verifiers * feat: start kzg prove and verify with sol * chore: compute crs from kzg prover * feat: evm kzg verification passing * tmp * change: Swap order of G2 coordinates within the template * Update way to serialize proof with correct order * chore: update `Cargo.toml` * chore: add revm * chore: add `save_solidity` * refactor: verifiers in dedicated mod * refactor: have dedicated `utils` module * chore: expose modules * chore: update verifier for kzg * chore: rename templates * fix: look for binary using also name of contract * refactor: generate groth16 proof for sha256 pre-image, generate groth16 template with verifying key * chore: template renaming * fix: switch circuit for circuit that simply adds * feat: generates test data on the fly * feat: update to latest groth16 verifier * refactor: rename folder, update `.gitignore` * chore: update `Cargo.toml` * chore: update templates extension to indicate that they are templates * chore: rename templates, both files and structs * fix: template inheritance working * feat: template spdx and pragma statements * feat: decider verifier compiles, update test for kzg10 and groth16 templates * feat: parameterize which size of the crs should be stored on the contract * chore: add comment on how the groth16 and kzg10 proofs will be linked together * chore: cargo clippy run * chore: cargo clippy tests * chore: cargo fmt * refactor: remove unused lifetime parameter * chore: end merge * chore: move examples to `folding-schemes` workspace * get latest main changes * fix: temp fix clippy warnings, will remove lints once not used in tests only * fix: cargo clippy lint added on `code_size` * fix: update path to test circuit and add step for installing solc * chore: remove `save_solidity` steps * fix: the borrowed expression implements the required traits * chore: update `Cargo.toml` * chore: remove extra `[patch.crates-io]` * fix: update to patch at the workspace level and add comment explaining this * refactor: correct `staticcall` with valid input/output sizes and change return syntax for pairing * refactor: expose modules and remove `dead_code` calls * chore: update `README.md`, add additional comments on `kzg10` template and update `groth16` template comments * chore: be clearer on attributions on `kzg10` --------- Co-authored-by: CPerezz <c.perezbaro@gmail.com> Co-authored-by: arnaucube <root@arnaucube.com>
9 months ago
Add solidity verifier of the nova+cyclefold (#87) * Add solidity verifier of the nova+cyclefold, and add method to prepare the calldata from Decider's proof. Missing conversion of the point coordinates into limbs (ark compatible) * chore: adding comments linking to the contract's signature * chore: update .gitignore * chore: add num-bigint as dev dependency * fix: work with abs path for storing generated sol code * chore: update comment * feat: solidity verifier working on single and multi-input circuits * feat: multi-input folding verification working + fixing encoding of additive identity in calldata * chore: make bigint a dependency * refactor: import utils functions from utils.rs and make them available from anywhere * chore: make utils and evm available publicly * fix: pub mod instead * chore: make relevant method public and add `get_decider_template_for_cyclefold_decider` to exported objects * solidity-verifiers: move tests to their corresponding files * small update: Cyclefold -> CycleFold at the missing places * abstract nova-cyclefold solidity verifiers tests to avoid code duplication, and abstract also the computed setup params (FS & Decider) to compute them only once for all related tests to save test time * small polish after rebase to last main branch changes * rm unneeded Option for KZGData::g1_crs_batch_points * add checks modifying z_0 & z_i to nova_cyclefold_solidity_verifier test * add light-test feature to decider_eth_circuit to use it in solidity-verifier tests without the big circuit * solidity-verifiers: groth16 template: port the fix from https://github.com/iden3/snarkjs/pull/480 & https://github.com/iden3/snarkjs/issues/479 * add print warning msg for light-test in DeciderEthCircuit * solidity-verifiers: update limbs logic to nonnative last version, parametrize limbs params solidity-verifiers: * update solidity limbs logic to last nonnative impl version, and to last u_i.x impl * parametrize limbs params * add light-test feature: replace the '#[cfg(not(test))]' by the 'light-test' feature that by default is not enabled, so when running the github actions we enable the feature 'light-tests', and then we can have a full-test that runs the test without the 'light-tests' flag, but we don't run this big test every time. The choice of a feature is to allow us to control this from other-crates tests (for example for the solidity-verifier separated crate tests, to avoid running the full heavy circuit in the solidity tests) * move solidity constants into template constants for auto compute of params * polishing * revm use only needed feature This is to avoid c depencency for c-kzg which is behind the c-kzg flag and not needed. * nova_cyclefold_decider.sol header * rearrange test helpers position, add error for min number of steps * in solidity-verifiers: 'data'->'vk/verifier key' * add From for NovaCycleFoldVerifierKey from original vks to simplify dev flow, also conditionally template the batchCheck related structs and methods from the KZG10 solidity template --------- Co-authored-by: dmpierre <pdaixmoreux@gmail.com>
6 months ago
Add solidity verifier of the nova+cyclefold (#87) * Add solidity verifier of the nova+cyclefold, and add method to prepare the calldata from Decider's proof. Missing conversion of the point coordinates into limbs (ark compatible) * chore: adding comments linking to the contract's signature * chore: update .gitignore * chore: add num-bigint as dev dependency * fix: work with abs path for storing generated sol code * chore: update comment * feat: solidity verifier working on single and multi-input circuits * feat: multi-input folding verification working + fixing encoding of additive identity in calldata * chore: make bigint a dependency * refactor: import utils functions from utils.rs and make them available from anywhere * chore: make utils and evm available publicly * fix: pub mod instead * chore: make relevant method public and add `get_decider_template_for_cyclefold_decider` to exported objects * solidity-verifiers: move tests to their corresponding files * small update: Cyclefold -> CycleFold at the missing places * abstract nova-cyclefold solidity verifiers tests to avoid code duplication, and abstract also the computed setup params (FS & Decider) to compute them only once for all related tests to save test time * small polish after rebase to last main branch changes * rm unneeded Option for KZGData::g1_crs_batch_points * add checks modifying z_0 & z_i to nova_cyclefold_solidity_verifier test * add light-test feature to decider_eth_circuit to use it in solidity-verifier tests without the big circuit * solidity-verifiers: groth16 template: port the fix from https://github.com/iden3/snarkjs/pull/480 & https://github.com/iden3/snarkjs/issues/479 * add print warning msg for light-test in DeciderEthCircuit * solidity-verifiers: update limbs logic to nonnative last version, parametrize limbs params solidity-verifiers: * update solidity limbs logic to last nonnative impl version, and to last u_i.x impl * parametrize limbs params * add light-test feature: replace the '#[cfg(not(test))]' by the 'light-test' feature that by default is not enabled, so when running the github actions we enable the feature 'light-tests', and then we can have a full-test that runs the test without the 'light-tests' flag, but we don't run this big test every time. The choice of a feature is to allow us to control this from other-crates tests (for example for the solidity-verifier separated crate tests, to avoid running the full heavy circuit in the solidity tests) * move solidity constants into template constants for auto compute of params * polishing * revm use only needed feature This is to avoid c depencency for c-kzg which is behind the c-kzg flag and not needed. * nova_cyclefold_decider.sol header * rearrange test helpers position, add error for min number of steps * in solidity-verifiers: 'data'->'vk/verifier key' * add From for NovaCycleFoldVerifierKey from original vks to simplify dev flow, also conditionally template the batchCheck related structs and methods from the KZG10 solidity template --------- Co-authored-by: dmpierre <pdaixmoreux@gmail.com>
6 months ago
  1. name: CI Check
  2. on:
  3. merge_group:
  4. pull_request:
  5. push:
  6. branches:
  7. - main
  8. env:
  9. CARGO_TERM_COLOR: always
  10. # Disable incremental compilation.
  11. #
  12. # Incremental compilation is useful as part of an edit-build-test-edit cycle,
  13. # as it lets the compiler avoid recompiling code that hasn't changed. However,
  14. # on CI, we're not making small edits; we're almost always building the entire
  15. # project from scratch. Thus, incremental compilation on CI actually
  16. # introduces *additional* overhead to support making future builds
  17. # faster...but no future builds will ever occur in any given CI environment.
  18. #
  19. # See https://matklad.github.io/2021/09/04/fast-rust-builds.html#ci-workflow
  20. # for details.
  21. CARGO_INCREMENTAL: 0
  22. # Allow more retries for network requests in cargo (downloading crates) and
  23. # rustup (installing toolchains). This should help to reduce flaky CI failures
  24. # from transient network timeouts or other issues.
  25. CARGO_NET_RETRY: 10
  26. RUSTUP_MAX_RETRIES: 10
  27. # Don't emit giant backtraces in the CI logs.
  28. RUST_BACKTRACE: short
  29. # Jobs launched for a PR event cancel the ongoing one for the same workflow + PR,
  30. # Only retries (of the same run) for a Push event cancel the prior one.
  31. concurrency:
  32. group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  33. cancel-in-progress: true
  34. jobs:
  35. test:
  36. if: github.event.pull_request.draft == false
  37. name: Test
  38. runs-on: ubuntu-latest
  39. strategy:
  40. matrix:
  41. include:
  42. - feature: default
  43. steps:
  44. - uses: actions/checkout@v2
  45. - uses: actions-rs/toolchain@v1
  46. # use the more efficient nextest
  47. - uses: taiki-e/install-action@nextest
  48. - uses: Swatinem/rust-cache@v2
  49. - name: Download Circom
  50. run: |
  51. mkdir -p $HOME/bin
  52. curl -sSfL https://github.com/iden3/circom/releases/download/v2.1.6/circom-linux-amd64 -o $HOME/bin/circom
  53. chmod +x $HOME/bin/circom
  54. echo "$HOME/bin" >> $GITHUB_PATH
  55. - name: Download solc
  56. run: |
  57. curl -sSfL https://github.com/ethereum/solidity/releases/download/v0.8.4/solc-static-linux -o /usr/local/bin/solc
  58. chmod +x /usr/local/bin/solc
  59. - name: Execute compile.sh to generate .r1cs and .wasm from .circom
  60. run: ./folding-schemes/src/frontend/circom/test_folder/compile.sh
  61. - name: Build
  62. # This build will be reused by nextest,
  63. # and also checks (--all-targets) that benches don't bit-rot
  64. run: cargo build --release --all-targets --no-default-features --features "light-test,${{ matrix.feature }}"
  65. - name: Test
  66. run: |
  67. cargo nextest run --profile ci --release --workspace --no-default-features --features "light-test,${{ matrix.feature }}"
  68. - name: Doctests # nextest does not support doc tests
  69. run: |
  70. cargo test --doc
  71. examples:
  72. if: github.event.pull_request.draft == false
  73. name: Run examples & examples tests
  74. runs-on: ubuntu-latest
  75. steps:
  76. - uses: actions/checkout@v2
  77. - uses: actions-rs/toolchain@v1
  78. - name: Download Circom
  79. run: |
  80. mkdir -p $HOME/bin
  81. curl -sSfL https://github.com/iden3/circom/releases/download/v2.1.6/circom-linux-amd64 -o $HOME/bin/circom
  82. chmod +x $HOME/bin/circom
  83. echo "$HOME/bin" >> $GITHUB_PATH
  84. - name: Download solc
  85. run: |
  86. curl -sSfL https://github.com/ethereum/solidity/releases/download/v0.8.4/solc-static-linux -o /usr/local/bin/solc
  87. chmod +x /usr/local/bin/solc
  88. - name: Execute compile.sh to generate .r1cs and .wasm from .circom
  89. run: ./folding-schemes/src/frontend/circom/test_folder/compile.sh
  90. - name: Run examples tests
  91. run: cargo test --examples
  92. - name: Run examples
  93. run: cargo run --release --example 2>&1 | grep -E '^ ' | xargs -n1 cargo run --release --example
  94. fmt:
  95. if: github.event.pull_request.draft == false
  96. name: Rustfmt
  97. timeout-minutes: 30
  98. runs-on: ubuntu-latest
  99. steps:
  100. - uses: actions/checkout@v2
  101. - uses: actions-rs/toolchain@v1
  102. - uses: Swatinem/rust-cache@v2
  103. - run: rustup component add rustfmt
  104. - uses: actions-rs/cargo@v1
  105. with:
  106. command: fmt
  107. args: --all -- --check
  108. clippy:
  109. if: github.event.pull_request.draft == false
  110. name: Clippy lint checks
  111. runs-on: ubuntu-latest
  112. steps:
  113. - uses: actions/checkout@v2
  114. - uses: actions-rs/toolchain@v1
  115. with:
  116. components: clippy
  117. - uses: Swatinem/rust-cache@v2
  118. - name: Run clippy
  119. uses: actions-rs/cargo@v1
  120. with:
  121. command: clippy
  122. args: --all-targets --all-features -- -D warnings
  123. typos:
  124. if: github.event.pull_request.draft == false
  125. name: Spell Check with Typos
  126. runs-on: ubuntu-latest
  127. steps:
  128. - uses: actions/checkout@v4
  129. - name: Use typos with config file
  130. uses: crate-ci/typos@master
  131. with:
  132. config: .github/workflows/typos.toml