Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
4fd4472
Refactor: port sumcheck, circuit traits, and more
winderica Oct 9, 2025
5e8d378
Refactor: A unifed absorb trait for native and nonnative
winderica Oct 10, 2025
4d01dfe
Refactor: move `FCircuit`'s field bound to associated type
winderica Oct 10, 2025
644d11c
Refactor: move various traits to their dedicated submodules
winderica Oct 24, 2025
bded872
Remove referenceable
winderica Oct 24, 2025
7df4760
Cleanup
winderica Oct 25, 2025
3101c7f
Better design & convenient traits and utils
winderica Oct 27, 2025
638f248
More polynomial and power utils
winderica Nov 17, 2025
44d6628
Prefer ark_std over std
winderica Nov 17, 2025
7317892
Cleanup & reduce verbosity
winderica Nov 17, 2025
a3ad72b
Allow step circuit to have states of any shape
winderica Nov 20, 2025
5f693fd
Separate VC and FS into Def and Ops
winderica Nov 21, 2025
3e8206b
Cleanup
winderica Nov 23, 2025
f750548
FCircuit now allows external outputs
winderica Nov 23, 2025
3f1ed97
Refactor code for in-circuit relation checks
winderica Nov 24, 2025
f7a73b3
Adjust the naming of traits for gadgets
winderica Feb 5, 2026
5c9a8c4
Clean up
winderica Feb 5, 2026
a4c5000
Discussion about `Absorbable`'s design
winderica Feb 5, 2026
a36bf46
Specify MSRV
winderica Feb 5, 2026
ebae8c4
Improve naming and API design
winderica Feb 6, 2026
1dbdf21
Fix CI
winderica Feb 6, 2026
da29e88
Fix clippy
winderica Feb 6, 2026
11fb8b1
Actually test wasm targets
winderica Feb 6, 2026
0f4a90d
Add docs for primitives
winderica Feb 9, 2026
79e578b
Bring back R1CS and CCS tests
winderica Feb 13, 2026
6f918ba
fmt
winderica Feb 13, 2026
1229c5c
Fix missing trait bounds when enabling parallel feature
winderica Feb 13, 2026
df327df
Reorganize cargo.toml
winderica Feb 13, 2026
5e186c7
Fix and test emulated integers with negative limbs
winderica Feb 17, 2026
bd33ed0
Fix broken images in readme
winderica Feb 5, 2026
226f961
New CI
winderica Feb 6, 2026
9b7f4d6
Actually test wasm targets
winderica Feb 6, 2026
44fa229
Notes on terminology
winderica Feb 13, 2026
7fdcd86
Refactor: initialize revamped folding scheme impl
winderica Oct 9, 2025
9982261
Refactor: improve test template
winderica Oct 10, 2025
c608afe
Refactor: initialize revamped IVC
winderica Oct 10, 2025
b4f50d9
Refactor: skeleton for cyclefold compiler
winderica Oct 24, 2025
35b0459
Refactor: dedicated types for plain instance & witness
winderica Oct 24, 2025
9383495
Initialize augmented circuit
winderica Oct 25, 2025
2e50af4
Fully implement augmented circuit for CycleFold
winderica Oct 27, 2025
18b24b0
Finish unified CycleFold compiler
winderica Nov 8, 2025
ec8e739
Convenience trait for group based folding schemes
winderica Nov 16, 2025
a57c9b6
Correctly update CF running instance & witness
winderica Nov 16, 2025
2cb766f
Prefer ark_std over std
winderica Nov 17, 2025
86a9415
Decider key now contains pk and vk
winderica Nov 18, 2025
867220a
Use generic hash function in CF
winderica Nov 19, 2025
ea6cb01
Initial redesign of decider trait
winderica Nov 19, 2025
09b8075
Introduce tagged vector for plain instance & witness
winderica Nov 20, 2025
0d6f6a1
Make fields of CF key and proof visible
winderica Nov 20, 2025
5b33e69
Allow step circuit to have states of any shape
winderica Nov 20, 2025
d63173f
We only need 1 public input for primary instances in CF
winderica Nov 20, 2025
85b5023
Separate VC and FS into Def and Ops
winderica Nov 21, 2025
c4ab18e
Improve trait design for group based FS
winderica Nov 23, 2025
dbc9fe6
Add trait bounds for in-circuit challenges
winderica Nov 24, 2025
0fca7de
Further split FS Ops
winderica Nov 24, 2025
c723942
Stateful prover no longer owns pk and step circuit
winderica Dec 26, 2025
d0ec531
Adjust the naming of traits for gadgets
winderica Feb 5, 2026
d715587
Move trait definitions to their dedicated files
winderica Feb 5, 2026
727ba2d
Clean up
winderica Feb 5, 2026
461c0ef
Improve naming and API design
winderica Feb 6, 2026
81a47c6
Fix CI
winderica Feb 6, 2026
4792dc4
Fix clippy
winderica Feb 6, 2026
1c6a8b2
Declare `wasm-bindgen-test` as dev-dependency
winderica Feb 6, 2026
0b64900
Add FS & IVC docs
winderica Feb 13, 2026
3fb63b5
Fmt
winderica Feb 13, 2026
a692460
Refactor: start porting Nova
winderica Oct 9, 2025
c9e7dce
Refactor: Allow Nova to have any transcript field
winderica Oct 10, 2025
e294f00
Prepare for cyclefold
winderica Oct 10, 2025
086df2e
Accumulation scheme compatible interface
winderica Oct 24, 2025
0fb6ede
In circuit variables for Nova instances and witnesses
winderica Oct 25, 2025
d9214ee
Implement more traits for Nova instances & witnesses
winderica Nov 8, 2025
b4de64f
Nova CycleFold adapter
winderica Nov 16, 2025
f2be215
Hide cross term commitment in Nova
winderica Nov 20, 2025
c1fc8ff
FS<2, 0> for Nova
winderica Nov 21, 2025
d9f2cb4
Circuits for 2+0 Nova
winderica Nov 21, 2025
9ea5b52
Cleanup
winderica Nov 23, 2025
461720b
Split impls into separate submodules
winderica Nov 24, 2025
796ed35
Clean up
winderica Feb 5, 2026
ec71a50
Actually test wasm targets
winderica Feb 6, 2026
0e51dca
Add FS & IVC docs
winderica Feb 9, 2026
5f8724e
Refactor: start porting Ova
winderica Oct 9, 2025
46330a4
Refactor: allow Ova to have any transcript field
winderica Oct 10, 2025
51d3057
Prepare for cyclefold
winderica Oct 10, 2025
a8a459a
In circuit variables for Ova instances and witnesses
winderica Oct 24, 2025
2c1602e
Ova adapter
winderica Nov 8, 2025
681faf4
Split impls into separate submodules
winderica Nov 19, 2025
493d8fa
Actually test wasm targets
winderica Feb 6, 2026
749e2a4
Add Ova docs
winderica Feb 13, 2026
814a6e0
Refactor: start porting HyperNova
winderica Oct 9, 2025
a3a90a3
Test HyperNova with different `M` and `N`
winderica Oct 10, 2025
ba59a9e
Accumulation scheme compatible interface for HyperNova
winderica Oct 24, 2025
0625721
In circuit variables for HyperNova instances and witnesses
winderica Oct 25, 2025
55ff315
HyperNova CycleFold adapter
winderica Nov 16, 2025
b3df52d
Split impls into separate submodules
winderica Nov 24, 2025
72f3be4
Actually test wasm targets
winderica Feb 6, 2026
9c4e61f
Add HyperNova docs
winderica Feb 13, 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
99 changes: 42 additions & 57 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,10 +1,50 @@
[workspace]
members = [
"crates/primitives",
"crates/traits",
"crates/fs",
"crates/ivc",
]
resolver = "2"

[workspace.package]
edition = "2024"
license = "MIT"
repository = "https://github.com/privacy-scaling-explorations/sonobe/"
rust-version = "1.85.1"

[workspace.dependencies]
num-bigint = { version = "0.4.3" }
num-integer = { version = "0.1" }
num-traits = { version = "0.2" }
sha3 = { version = "0.10" }
rayon = { version = "1" }
thiserror = { version = "2.0.16" }
wasm-bindgen-test = { version = "0.3" }

# Arkworks family
ark-crypto-primitives = { git = "https://github.com/arkworks-rs/crypto-primitives", default-features = false }
ark-ec = { git = "https://github.com/arkworks-rs/algebra", default-features = false }
ark-ff = { git = "https://github.com/arkworks-rs/algebra", default-features = false }
ark-groth16 = { git = "https://github.com/arkworks-rs/groth16", default-features = false }
ark-poly = { git = "https://github.com/arkworks-rs/algebra", default-features = false }
ark-poly-commit = { git = "https://github.com/arkworks-rs/poly-commit", default-features = false }
ark-r1cs-std = { git = "https://github.com/arkworks-rs/r1cs-std", default-features = false }
ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false }
ark-serialize = { git = "https://github.com/arkworks-rs/algebra", default-features = false }
ark-snark = { git = "https://github.com/arkworks-rs/snark", default-features = false }
ark-std = { git = "https://github.com/arkworks-rs/std", default-features = false }

# Ark curves
ark-bn254 = { git = "https://github.com/arkworks-rs/algebra", default-features = false }
ark-grumpkin = { git = "https://github.com/arkworks-rs/algebra", default-features = false }
ark-pallas = { git = "https://github.com/arkworks-rs/algebra", default-features = false }
ark-vesta = { git = "https://github.com/arkworks-rs/algebra", default-features = false }

# Local crates
sonobe-primitives = { path = "crates/primitives", default-features = false }
sonobe-fs = { path = "crates/fs", default-features = false }
sonobe-ivc = { path = "crates/ivc", default-features = false }

[patch.crates-io]
# We depend on git versions of arkworks crates, but some of our dependencies
# depend on crates.io versions, so we need to override them here to avoid
Expand All @@ -19,64 +59,9 @@ ark-r1cs-std = { git = "https://github.com/winderica/r1cs-std", rev = "ae8283a"

# Curve crates also need git versions
ark-bn254 = { git = "https://github.com/arkworks-rs/algebra" }
ark-grumpkin = { git = "https://github.com/arkworks-rs/algebra" }

[patch."https://github.com/arkworks-rs/crypto-primitives"]
ark-crypto-primitives = { git = "https://github.com/winderica/crypto-primitives", rev = "af003fc" }

[patch."https://github.com/arkworks-rs/r1cs-std"]
ark-r1cs-std = { git = "https://github.com/winderica/r1cs-std", rev = "ae8283a" } # "sw-fix-updated" branch

[workspace.package]
edition = "2021"
license = "MIT"
repository = "https://github.com/privacy-scaling-explorations/sonobe/"

[workspace.dependencies]
acvm = { git = "https://github.com/winderica/noir", rev = "fc9e99", default-features = false } # "arkworks-next" branch
askama = { version = "0.12.0", default-features = false }
clap = { version = "4.4" }
clap-verbosity-flag = { version = "2.1" }
criterion = { version = "0.5" }
env_logger = { version = "0.10" }
getrandom = { version = "0.2" }
log = { version = "0.4" }
noname = { git = "https://github.com/dmpierre/noname", rev = "c34f17" }
num-bigint = { version = "0.4.3" }
num-integer = { version = "0.1" }
num-traits = { version = "0.2" }
pprof = { version = "0.13" }
serde = { version = "^1.0.0" }
serde_json = { version = "^1.0.0" }
sha3 = { version = "0.10" }
rand = { version = "0.8.5" }
rayon = { version = "1" }
revm = { version = "19.5.0", default-features = false }
rust-crypto = { version = "0.2" }
thiserror = { version = "1.0" }
tokio = "1.44.1"
wasmer = { version = "6.1.0", default-features = false }

# Arkworks family
ark-bn254 = { version = "^0.5.0", default-features = false }
ark-circom = { git = "https://github.com/arkworks-rs/circom-compat", default-features = false }
ark-crypto-primitives = { version = "^0.5.0", default-features = false }
ark-ec = { version = "^0.5.0", default-features = false }
ark-ff = { version = "^0.5.0", default-features = false }
ark-groth16 = { git = "https://github.com/arkworks-rs/groth16" }
ark-grumpkin = { version = "^0.5.0", default-features = false }
ark-mnt4-298 = { version = "^0.5.0" }
ark-mnt6-298 = { version = "^0.5.0" }
ark-pallas = { version = "^0.5.0" }
ark-poly = { version = "^0.5.0", default-features = false }
ark-poly-commit = { version = "^0.5.0" }
ark-r1cs-std = { version = "^0.5.0", default-features = false }
ark-relations = { git = "https://github.com/arkworks-rs/snark", default-features = false }
ark-serialize = { version = "^0.5.0" }
ark-snark = { git = "https://github.com/arkworks-rs/snark", default-features = false }
ark-std = { version = "^0.5.0", default-features = false }
ark-vesta = { version = "^0.5.0" }

# Local crates
sonobe-primitives = { path = "crates/primitives", default-features = false }
sonobe-traits = { path = "crates/traits" }
ark-r1cs-std = { git = "https://github.com/winderica/r1cs-std", rev = "ae8283a" } # "sw-fix-updated" branch
Loading