Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
131 commits
Select commit Hold shift + click to select a range
c79bc82
Remove old files
winderica Feb 5, 2026
5c2632b
Refactor: new crate for traits
winderica Oct 5, 2025
2b5ebb6
Refactor: new crate for primitives
winderica Oct 5, 2025
59d3abe
Refactor: port circuit traits, and more
winderica Oct 9, 2025
af476ef
Refactor: A unifed absorb trait for native and nonnative
winderica Oct 10, 2025
f22a1c2
Refactor: move `FCircuit`'s field bound to associated type
winderica Oct 10, 2025
19e36f2
Refactor: move various traits to their dedicated submodules
winderica Oct 24, 2025
e684054
Remove referenceable
winderica Oct 24, 2025
f4291aa
Cleanup
winderica Oct 25, 2025
615b223
Better design & convenient traits and utils
winderica Oct 27, 2025
de0599f
More polynomial and power utils
winderica Nov 17, 2025
c95a117
Prefer ark_std over std
winderica Nov 17, 2025
08b5188
Cleanup & reduce verbosity
winderica Nov 17, 2025
e63dda9
Allow step circuit to have states of any shape
winderica Nov 20, 2025
11400e6
Separate VC and FS into Def and Ops
winderica Nov 21, 2025
1886efa
Cleanup
winderica Nov 23, 2025
2576f14
FCircuit now allows external outputs
winderica Nov 23, 2025
1afbefc
Refactor code for in-circuit relation checks
winderica Nov 24, 2025
2130699
Adjust the naming of traits for gadgets
winderica Feb 5, 2026
ec40773
Clean up
winderica Feb 5, 2026
8a066c7
Discussion about `Absorbable`'s design
winderica Feb 5, 2026
8c2b6b8
Specify MSRV
winderica Feb 5, 2026
2e9ff82
Improve naming and API design
winderica Feb 6, 2026
6ec10e4
Fix CI
winderica Feb 6, 2026
f30e971
Fix clippy
winderica Feb 6, 2026
423a038
Actually test wasm targets
winderica Feb 6, 2026
f9f26c0
Add docs for primitives
winderica Feb 9, 2026
c1f820c
Bring back R1CS and CCS tests
winderica Feb 13, 2026
defb4e9
fmt
winderica Feb 13, 2026
bb03596
Fix missing trait bounds when enabling parallel feature
winderica Feb 13, 2026
ecbfdbd
Reorganize cargo.toml
winderica Feb 13, 2026
4daef2a
Fix and test emulated integers with negative limbs
winderica Feb 17, 2026
6cabcaf
Fix broken images in readme
winderica Feb 5, 2026
dbab02b
New CI
winderica Feb 6, 2026
5ccccc7
Actually test wasm targets
winderica Feb 6, 2026
e6b7828
Notes on terminology
winderica Feb 13, 2026
fd2a253
Refactor: initialize revamped folding scheme impl
winderica Oct 9, 2025
2f81747
Refactor: improve test template
winderica Oct 10, 2025
f7f46a5
Refactor: initialize revamped IVC
winderica Oct 10, 2025
c275554
Refactor: skeleton for cyclefold compiler
winderica Oct 24, 2025
cfacb05
Refactor: dedicated types for plain instance & witness
winderica Oct 24, 2025
70edc08
Initialize augmented circuit
winderica Oct 25, 2025
7517511
Fully implement augmented circuit for CycleFold
winderica Oct 27, 2025
c96086d
Finish unified CycleFold compiler
winderica Nov 8, 2025
c0d4411
Convenience trait for group based folding schemes
winderica Nov 16, 2025
23fe288
Correctly update CF running instance & witness
winderica Nov 16, 2025
ccf63b6
Prefer ark_std over std
winderica Nov 17, 2025
cdf86e0
Decider key now contains pk and vk
winderica Nov 18, 2025
4a4ae73
Use generic hash function in CF
winderica Nov 19, 2025
2c2750c
Initial redesign of decider trait
winderica Nov 19, 2025
31b2c14
Introduce tagged vector for plain instance & witness
winderica Nov 20, 2025
6b0e71f
Make fields of CF key and proof visible
winderica Nov 20, 2025
1aecf36
Allow step circuit to have states of any shape
winderica Nov 20, 2025
0acc752
We only need 1 public input for primary instances in CF
winderica Nov 20, 2025
494e2a7
Separate VC and FS into Def and Ops
winderica Nov 21, 2025
9265cd9
Improve trait design for group based FS
winderica Nov 23, 2025
8ef8788
Add trait bounds for in-circuit challenges
winderica Nov 24, 2025
8557122
Further split FS Ops
winderica Nov 24, 2025
c322d53
Stateful prover no longer owns pk and step circuit
winderica Dec 26, 2025
05e8c38
Adjust the naming of traits for gadgets
winderica Feb 5, 2026
2f2170a
Move trait definitions to their dedicated files
winderica Feb 21, 2026
6c3ec50
Clean up
winderica Feb 5, 2026
5f58bcb
Fix CI
winderica Feb 6, 2026
daf3bdf
Fix clippy
winderica Feb 6, 2026
91ddd27
Declare `wasm-bindgen-test` as dev-dependency
winderica Feb 6, 2026
c2db87f
Add FS & IVC docs
winderica Feb 13, 2026
2afff6e
Fmt
winderica Feb 13, 2026
b80f07e
Refactor: start porting Nova
winderica Oct 9, 2025
db2c7cc
Refactor: Allow Nova to have any transcript field
winderica Oct 10, 2025
806b000
Prepare for cyclefold
winderica Oct 10, 2025
92ba938
Accumulation scheme compatible interface
winderica Oct 24, 2025
1106020
In circuit variables for Nova instances and witnesses
winderica Oct 25, 2025
b020550
Implement more traits for Nova instances & witnesses
winderica Nov 8, 2025
876cfd7
Nova CycleFold adapter
winderica Nov 16, 2025
27c36e0
Hide cross term commitment in Nova
winderica Nov 20, 2025
6c82d65
FS<2, 0> for Nova
winderica Nov 21, 2025
745013c
Circuits for 2+0 Nova
winderica Nov 21, 2025
69d3ad6
Cleanup
winderica Nov 23, 2025
46f750e
Split impls into separate submodules
winderica Nov 24, 2025
2d96c1a
Clean up
winderica Feb 5, 2026
bb6f4fd
Actually test wasm targets
winderica Feb 6, 2026
f418991
Add FS & IVC docs
winderica Feb 9, 2026
7af1d5b
Less buggy emulated field equality checks
winderica Feb 19, 2026
ef739d8
Fix bound limits
winderica Feb 19, 2026
e1f0c67
Further clean up Nova FS and IVC
winderica Feb 19, 2026
19c220f
Compute digest of public parameters for strong Fiat-Shamir
winderica Feb 19, 2026
6795b89
Use `hash_to_field` for griffin param generation as well
winderica Feb 19, 2026
842b45a
Minor improvements to docs
winderica Feb 21, 2026
3e06174
Include `joint_scalar_mul` so we no longer need a fork
winderica May 17, 2026
c36dee7
Arkworks 0.6
winderica May 17, 2026
4330540
Don't ignore lock file
winderica May 17, 2026
3a86594
Fix clippy
winderica May 17, 2026
4403e20
Include state size in augmented circuit and verifier
winderica Apr 28, 2026
cab289e
Ensure Poseidon's alpha and `F::MODULUS - 1` are coprime
winderica Apr 28, 2026
0e7dae0
Generate Poseidon round numbers in the same way as paper's
winderica May 17, 2026
f9f6492
Add the missing check of in-circuit state against initial state for i=0
winderica Apr 28, 2026
aee2abc
Format
winderica May 17, 2026
ba7683d
Don't enforce equality if `should_enforce` is a constant false
winderica Apr 28, 2026
2c6c4d7
Fix incorrect bounds of quotient `q` in `enforce_congruent`
winderica Apr 28, 2026
ccc7c90
Don't override the default impl of `enforce_not_equal`
winderica Apr 28, 2026
5cac275
Use `kary_and` in `is_eq` for better efficiency
winderica Apr 28, 2026
5049592
Use `G::MODULUS - 1` as the upper bound when allocating a `G` element
winderica Apr 28, 2026
4d19a9d
Fix clippy
winderica May 17, 2026
f9b8232
Fix the issue where chunked values are larger than the field capacity
winderica Apr 28, 2026
13ead24
Fix unsafe `zip`s
winderica Apr 28, 2026
9ffbde3
Refactor `ArithConfig` to allow modifying the number of public inputs
winderica Apr 28, 2026
157495a
Bump dependencies
winderica May 23, 2026
29b3ce4
Check R1CS validity by default
winderica May 26, 2026
3e766a1
Implement recording and replaying transcripts so we don't need to ret…
winderica May 26, 2026
dec2ccc
Fix typos
winderica May 26, 2026
568dd04
Absorb full field elements rather than repacked field elements
winderica Jun 1, 2026
a038427
Fix grammar
winderica Jun 1, 2026
0f35c77
Remove the unused `FpVar::from_bounded_bits_le` implementation
winderica Jun 25, 2026
de25096
Fix the off by one bug when enforcing equality of unaligned emulated …
winderica Jun 24, 2026
e6fb5de
Revert to arkworks' unoptimized but sound scalar multiplication gadge…
winderica Jun 24, 2026
590d780
Fmt
winderica Jun 25, 2026
417a21f
Fix state inconsistency again
winderica Jun 24, 2026
6364d04
Absorb domain separator's length consistently across different platforms
winderica Jun 24, 2026
cf62d65
Ensure challenges order consistency when creating replay transcript v…
winderica Jun 24, 2026
7f5a6c7
Improve the robustness of poseidon config generation
winderica Jun 25, 2026
f89b262
Fix off by one when chunking the domain separator
winderica Jun 25, 2026
6cb7766
Manually implement R1CS deserialization for custom validity check
winderica Jun 25, 2026
7383e00
Check state shape for i = 0 as well
winderica Jun 27, 2026
c562bd1
Preliminary decider abstraction & implementaiton
winderica May 23, 2026
1caf183
Fold the final running & incoming pairs before compression
winderica May 24, 2026
096a18d
Cleanup
winderica May 24, 2026
43a587b
Reduce numbers of lc and constraints
winderica May 26, 2026
7b15877
Remove unused methods
winderica May 26, 2026
dc211e1
Fix doc tests
winderica May 30, 2026
68681a2
Reorganize traits
winderica Jun 7, 2026
243391e
EVM verifier
winderica Jul 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[target.wasm32-unknown-unknown]
runner = 'wasm-bindgen-test-runner'

[target.wasm32-wasip2]
runner = 'wasmtime'
30 changes: 0 additions & 30 deletions .github/scripts/wasm-target-test-build.sh

This file was deleted.

184 changes: 60 additions & 124 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
name: CI Check
on:
workflow_dispatch:
merge_group:
pull_request:
push:
Expand Down Expand Up @@ -36,44 +37,45 @@ concurrency:
jobs:
test:
if: github.event.pull_request.draft == false
name: Test
name: Test ${{ matrix.target }} (${{ matrix.features }})
runs-on: ubuntu-latest
strategy:
matrix:
feature_set: [basic]
include:
- feature_set: basic
features: --features default,light-test
# x64: both parallel and no-parallel
- target: x86_64-unknown-linux-gnu
features: parallel
args: "--features parallel"
- target: x86_64-unknown-linux-gnu
features: no-parallel
args: ""
# wasm: no-parallel only
- target: wasm32-unknown-unknown
features: no-parallel
args: ""
- target: wasm32-wasip2
features: no-parallel
args: ""
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
- uses: noir-lang/noirup@v0.1.3
with:
toolchain: 0.36.0
- name: Download Circom
run: |
mkdir -p $HOME/bin
curl -sSfL https://github.com/iden3/circom/releases/download/v2.1.6/circom-linux-amd64 -o $HOME/bin/circom
chmod +x $HOME/bin/circom
echo "$HOME/bin" >> $GITHUB_PATH
- name: Download solc
run: |
curl -sSfL https://github.com/ethereum/solidity/releases/download/v0.8.4/solc-static-linux -o /usr/local/bin/solc
chmod +x /usr/local/bin/solc
- name: Execute compile.sh to generate .r1cs and .wasm from .circom
run: ./experimental-frontends/src/circom/test_folder/compile.sh
- name: Execute compile.sh to generate .json from noir
run: ./experimental-frontends/src/noir/test_folder/compile.sh
- name: Run tests
uses: actions-rs/cargo@v1
with:
command: test
args: --release --workspace --no-default-features ${{ matrix.features }}
- name: Run Doc-tests
uses: actions-rs/cargo@v1
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
command: test
args: --doc
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v2
- name: Install wasm-bindgen-cli
if: matrix.target == 'wasm32-unknown-unknown'
run: cargo install wasm-bindgen-cli
- name: Install wasmtime-cli
if: matrix.target == 'wasm32-wasip2'
run: cargo install wasmtime-cli
- name: Test sonobe-primitives
run: cargo test --release -p sonobe-primitives --target ${{ matrix.target }} ${{ matrix.args }}
- name: Test sonobe-fs
run: cargo test --release -p sonobe-fs --target ${{ matrix.target }} ${{ matrix.args }}
- name: Test sonobe-ivc
run: cargo test --release -p sonobe-ivc --target ${{ matrix.target }} ${{ matrix.args }}
- name: Test documentation examples
run: cargo test --doc --target ${{ matrix.target }} ${{ matrix.args }}

build:
if: github.event.pull_request.draft == false
Expand All @@ -82,121 +84,55 @@ jobs:
strategy:
matrix:
target:
- x86_64-unknown-linux-gnu
- wasm32-unknown-unknown
- wasm32-wasip1
# Ignoring until clear usage is required
# - wasm32-unknown-emscripten

steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
override: false
default: true
- name: Add target
run: rustup target add ${{ matrix.target }}
- name: Wasm-compat experimental-frontends build
uses: actions-rs/cargo@v1
with:
command: build
args: -p experimental-frontends --no-default-features --target ${{ matrix.target }} --features "wasm, parallel"
- name: Wasm-compat folding-schemes build
uses: actions-rs/cargo@v1
with:
command: build
args: -p folding-schemes --no-default-features --target ${{ matrix.target }} --features "default,light-test"
- name: Run wasm-compat script
run: |
chmod +x .github/scripts/wasm-target-test-build.sh
.github/scripts/wasm-target-test-build.sh
shell: bash

examples:
if: github.event.pull_request.draft == false
name: Run examples & examples tests
runs-on: ubuntu-latest
- wasm32-wasip2
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
- uses: noir-lang/noirup@v0.1.3
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: 0.36.0
- name: Download Circom
run: |
mkdir -p $HOME/bin
curl -sSfL https://github.com/iden3/circom/releases/download/v2.1.6/circom-linux-amd64 -o $HOME/bin/circom
chmod +x $HOME/bin/circom
echo "$HOME/bin" >> $GITHUB_PATH
- name: Download solc
run: |
curl -sSfL https://github.com/ethereum/solidity/releases/download/v0.8.4/solc-static-linux -o /usr/local/bin/solc
chmod +x /usr/local/bin/solc
- name: Execute compile.sh to generate .r1cs and .wasm from .circom
run: ./experimental-frontends/src/circom/test_folder/compile.sh
- name: Execute compile.sh to generate .json from noir
run: ./experimental-frontends/src/noir/test_folder/compile.sh
- name: Run examples tests
run: cargo test --examples
- name: Run examples
run: cargo run --release --example 2>&1 | grep -E '^ ' | xargs -n1 cargo run --release --example

# run the benchmarks with the flag `--no-run` to ensure that they compile,
# but without executing them.
bench:
if: github.event.pull_request.draft == false
name: Bench compile
timeout-minutes: 30
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v2
- uses: actions-rs/cargo@v1
with:
command: bench
args: -p folding-schemes --no-run
- name: Build sonobe-primitives
run: cargo build -p sonobe-primitives --target ${{ matrix.target }}
- name: Build sonobe-fs
run: cargo build -p sonobe-fs --target ${{ matrix.target }}
- name: Build sonobe-ivc
run: cargo build -p sonobe-ivc --target ${{ matrix.target }}

fmt:
if: github.event.pull_request.draft == false
name: Rustfmt
timeout-minutes: 30
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
- uses: Swatinem/rust-cache@v2
- run: rustup component add rustfmt
- uses: actions-rs/cargo@v1
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
command: fmt
args: --all --check
components: rustfmt
- uses: Swatinem/rust-cache@v2
- name: Run rustfmt
run: cargo fmt --all --check

clippy:
if: github.event.pull_request.draft == false
name: Clippy lint checks
name: Clippy (${{ matrix.target }})
runs-on: ubuntu-latest
strategy:
matrix:
feature_set: [basic, wasm]
include:
- feature_set: basic
features: --features default
# We only want to test `experimental-frontends` package with `wasm` feature.
- feature_set: wasm
features: -p experimental-frontends --features wasm,parallel --target wasm32-unknown-unknown
target:
- x86_64-unknown-linux-gnu
- wasm32-unknown-unknown
- wasm32-wasip2
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v2
- name: Add target
run: rustup target add wasm32-unknown-unknown
- name: Run clippy
uses: actions-rs/cargo@v1
with:
command: clippy
args: --no-default-features ${{ matrix.features }} -- -D warnings
run: cargo clippy --workspace --all-targets --target ${{ matrix.target }} -- -D warnings

typos:
if: github.event.pull_request.draft == false
Expand Down
12 changes: 0 additions & 12 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,18 +1,6 @@
/target
Cargo.lock

# Circom generated files
experimental-frontends/src/circom/test_folder/*_js/
*.r1cs
*.sym

# Noir generated files
experimental-frontends/src/noir/test_folder/*/target/*

# generated contracts data
solidity-verifiers/generated
examples/*.sol
examples/*.calldata
examples/*.inputs
*.serialized
*/*.serialized
Loading