Skip to content

Commit 85e53fb

Browse files
authored
Merge pull request #3062 from ProvableHQ/feat/dynamic-dispatch
[Feature] Dynamic dispatch.
2 parents 41a7fc6 + 5093e5a commit 85e53fb

File tree

294 files changed

+38360
-3635
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

294 files changed

+38360
-3635
lines changed

.circleci/config.yml

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ commands:
8888
parameters:
8989
cache_key:
9090
type: string
91-
default: v4.5.0-rust-1.88.0-snarkvm-cache
91+
default: v4.5.1-rust-1.88.0-snarkvm-cache
9292
steps:
9393
- run:
9494
name: Prepare environment variables and install dependencies
@@ -132,8 +132,8 @@ commands:
132132
clang llvm-dev llvm lld pkg-config xz-utils make libssl-dev libssl-dev
133133
- restore_cache:
134134
keys:
135-
- v4.5.0-rust-1.88.0-deps-{{ checksum "Cargo.lock" }}-
136-
- v4.5.0-rust-1.88.0-deps-
135+
- v4.5.1-rust-1.88.0-deps-{{ checksum "Cargo.lock" }}-
136+
- v4.5.1-rust-1.88.0-deps-
137137
- restore_cache:
138138
keys:
139139
- << parameters.cache_key >>
@@ -143,11 +143,11 @@ commands:
143143
parameters:
144144
cache_key:
145145
type: string
146-
default: v4.5.0-rust-1.88.0-snarkvm-cache
146+
default: v4.5.1-rust-1.88.0-snarkvm-cache
147147
steps:
148148
- run: set +e
149149
- save_cache:
150-
key: v4.5.0-rust-1.88.0-deps-{{ checksum "Cargo.lock" }}
150+
key: v4.5.1-rust-1.88.0-deps-{{ checksum "Cargo.lock" }}
151151
paths:
152152
- /home/circleci/.cache/sccache
153153
- /home/circleci/.cargo/registry
@@ -186,7 +186,7 @@ commands:
186186
condition: << parameters.use_cache >>
187187
steps:
188188
- setup_environment:
189-
cache_key: v4.5.0-rust-1.88.0-<< parameters.workspace_member >><< parameters.cache_key_suffix >>-cache
189+
cache_key: v4.5.1-rust-1.88.0-<< parameters.workspace_member >><< parameters.cache_key_suffix >>-cache
190190

191191
- run:
192192
name: Install debian packages (always)
@@ -434,7 +434,7 @@ commands:
434434
condition: << parameters.use_cache >>
435435
steps:
436436
- clear_environment:
437-
cache_key: v4.5.0-rust-1.88.0-<< parameters.workspace_member >><< parameters.cache_key_suffix >>-cache
437+
cache_key: v4.5.1-rust-1.88.0-<< parameters.workspace_member >><< parameters.cache_key_suffix >>-cache
438438

439439
install_rust_nightly:
440440
description: "Install Rust nightly toolchain"
@@ -870,7 +870,8 @@ jobs:
870870
steps:
871871
- run_test:
872872
workspace_member: snarkvm-parameters
873-
flags: -- --test-threads=2 --ignored test_load_bytes_mini
873+
flags: --run-ignored ignored-only -- --test-threads=2
874+
use_cache: false
874875
cache_key_suffix: -v-{{ epoch }}
875876
no_output_timeout: 20m
876877
timeout: 30m
@@ -1051,7 +1052,7 @@ jobs:
10511052
steps:
10521053
- checkout
10531054
- setup_environment:
1054-
cache_key: v4.5.0-rust-1.88.0-snarkvm-wasm-cache
1055+
cache_key: v4.5.1-rust-1.88.0-snarkvm-wasm-cache
10551056
- run:
10561057
no_output_timeout: 30m
10571058
command: |
@@ -1072,7 +1073,7 @@ jobs:
10721073
# Run the tests
10731074
cd wasm && wasm-pack test --node
10741075
- clear_environment:
1075-
cache_key: v4.5.0-rust-1.88.0-snarkvm-wasm-cache
1076+
cache_key: v4.5.1-rust-1.88.0-snarkvm-wasm-cache
10761077

10771078
check-fmt:
10781079
executor: rust-docker
@@ -1081,21 +1082,21 @@ jobs:
10811082
- checkout
10821083
- install_rust_nightly
10831084
- setup_environment:
1084-
cache_key: v4.5.0-rust-1.88.0-snarkvm-fmt-cache
1085+
cache_key: v4.5.1-rust-1.88.0-snarkvm-fmt-cache
10851086
- run:
10861087
name: Check style
10871088
no_output_timeout: 35m
10881089
command: cargo +nightly fmt --all -- --check
10891090
- clear_environment:
1090-
cache_key: v4.5.0-rust-1.88.0-snarkvm-fmt-cache
1091+
cache_key: v4.5.1-rust-1.88.0-snarkvm-fmt-cache
10911092

10921093
check-unused-dependencies:
10931094
executor: rust-docker
10941095
resource_class: << pipeline.parameters.medium >>
10951096
steps:
10961097
- checkout
10971098
- setup_environment:
1098-
cache_key: v4.5.0-rust-1.88.0-machete-cache
1099+
cache_key: v4.5.1-rust-1.88.0-machete-cache
10991100
- run:
11001101
name: Check for unused dependencies
11011102
no_output_timeout: 10m
@@ -1106,23 +1107,23 @@ jobs:
11061107
fi
11071108
cargo machete
11081109
- clear_environment:
1109-
cache_key: v4.5.0-rust-1.88.0-machete-cache
1110+
cache_key: v4.5.1-rust-1.88.0-machete-cache
11101111

11111112
check-cargo-audit:
11121113
executor: rust-docker
11131114
resource_class: << pipeline.parameters.medium >>
11141115
steps:
11151116
- checkout
11161117
- setup_environment:
1117-
cache_key: v4.5.0-rust-1.88.0-cargo-audit-cache
1118+
cache_key: v4.5.1-rust-1.88.0-cargo-audit-cache
11181119
- run:
11191120
name: Check for security vulnerabilities
11201121
no_output_timeout: 10m
11211122
command: |
11221123
cargo install cargo-audit@0.22.0 --locked --force
11231124
cargo audit -D warnings
11241125
- clear_environment:
1125-
cache_key: v4.5.0-rust-1.88.0-cargo-audit-cache
1126+
cache_key: v4.5.1-rust-1.88.0-cargo-audit-cache
11261127

11271128
check-cargo-semver-checks:
11281129
executor: rust-docker
@@ -1131,22 +1132,22 @@ jobs:
11311132
- checkout:
11321133
method: full
11331134
- setup_environment:
1134-
cache_key: v4.5.0-rust-1.88.0-cargo-semver-checks-cache
1135+
cache_key: v4.5.1-rust-1.88.0-cargo-semver-checks-cache
11351136
- run:
11361137
name: Check for semver violations
11371138
no_output_timeout: 15m
11381139
command: |
11391140
bash ./.circleci/semver-checks.sh
11401141
- clear_environment:
1141-
cache_key: v4.5.0-rust-1.88.0-cargo-semver-checks-cache
1142+
cache_key: v4.5.1-rust-1.88.0-cargo-semver-checks-cache
11421143

11431144
check-clippy:
11441145
executor: rust-docker
11451146
resource_class: << pipeline.parameters.xlarge >>
11461147
steps:
11471148
- checkout
11481149
- setup_environment:
1149-
cache_key: v4.5.0-rust-1.88.0-snarkvm-clippy-cache
1150+
cache_key: v4.5.1-rust-1.88.0-snarkvm-clippy-cache
11501151
- run:
11511152
name: Check Clippy (default features)
11521153
timeout: 20m
@@ -1158,21 +1159,21 @@ jobs:
11581159
command: |
11591160
cargo clippy --workspace --all-targets --all-features -- -D warnings
11601161
- clear_environment:
1161-
cache_key: v4.5.0-rust-1.88.0-snarkvm-clippy-cache
1162+
cache_key: v4.5.1-rust-1.88.0-snarkvm-clippy-cache
11621163

11631164
check-all-targets:
11641165
executor: rust-docker
11651166
resource_class: << pipeline.parameters.small >>
11661167
steps:
11671168
- checkout
11681169
- setup_environment:
1169-
cache_key: v4.5.0-rust-1.88.0-snarkvm-all-targets-cache
1170+
cache_key: v4.5.1-rust-1.88.0-snarkvm-all-targets-cache
11701171
- run:
11711172
name: Check all targets
11721173
no_output_timeout: 35m
11731174
command: cargo check --release --workspace --all-targets
11741175
- clear_environment:
1175-
cache_key: v4.5.0-rust-1.88.0-snarkvm-all-targets-cache
1176+
cache_key: v4.5.1-rust-1.88.0-snarkvm-all-targets-cache
11761177

11771178
verify-windows:
11781179
executor:
@@ -1275,7 +1276,7 @@ workflows:
12751276
or pipeline.git.branch == "canary"
12761277
or pipeline.git.branch == "testnet"
12771278
or pipeline.git.branch == "mainnet"
1278-
or pipeline.git.branch == "fix_ci"
1279+
or pipeline.git.branch == "feat/dynamic-dispatch"
12791280
jobs:
12801281
- check-unused-dependencies # This can be cleaned up before releases
12811282
- check-cargo-semver-checks # This can be cleaned up before releases

.claude/CLAUDE.md

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,5 @@ Use `--paginate` for REST, loop on `hasNextPage` for GraphQL.
3636

3737

3838
<claude-mem-context>
39-
# Recent Activity
4039

41-
### Feb 6, 2026
42-
43-
| ID | Time | T | Title | Read |
44-
|----|------|---|-------|------|
45-
| #92 | 1:20 PM | 🔵 | settings.local.json uses granular permission system for allowing specific bash commands and skills | ~472 |
4640
</claude-mem-context>

Cargo.lock

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ serial = [
161161
"snarkvm-utilities/serial",
162162
"snarkvm-ledger?/serial"
163163
]
164+
snark-print = [ "snarkvm-algorithms?/snark-print" ]
164165

165166
dev-print = [
166167
"snarkvm-utilities/dev-print",

algorithms/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,4 @@ serial = [
144144
]
145145
test_exports = [ ]
146146
dev-print = [ "snarkvm-utilities/dev-print" ]
147+
snark-print = [ ]

algorithms/src/fft/domain.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ use anyhow::{Result, ensure};
4444

4545
#[cfg(feature = "serial")]
4646
use itertools::Itertools;
47-
4847
#[cfg(not(feature = "serial"))]
4948
use rayon::prelude::*;
5049

algorithms/src/snark/varuna/ahp/prover/round_functions/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ impl<F: PrimeField, SM: SNARKMode> AHPForR1CS<F, SM> {
6161
randomizing_assignments.push(circuit_assignments);
6262
}
6363

64+
if randomizing_assignments.len() != circuits_to_constraints.len() {
65+
return Err(AHPError::AnyhowError(anyhow::anyhow!(
66+
"[prover Init] Expected {} randomizing assignments, but {} were provided.",
67+
circuits_to_constraints.len(),
68+
randomizing_assignments.len()
69+
)));
70+
}
6471
let indices_and_assignments = circuits_to_constraints
6572
.iter()
6673
.zip_eq(randomizing_assignments.into_iter())

algorithms/src/snark/varuna/ahp/prover/round_functions/prepare_third.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,24 @@ impl<F: PrimeField, SM: SNARKMode> AHPForR1CS<F, SM> {
9191
// Compute lineval sumcheck witnesses
9292
let mut job_pool = ExecutionPool::with_capacity(total_instances * 3);
9393
// Iterate for each circuit in the batch.
94+
anyhow::ensure!(
95+
state.circuit_specific_states.len() == fft_precomputations.len(),
96+
"[calculate Prep Lineval Sumcheck Witness] Expected {} circuit specific states, but {} were provided.",
97+
fft_precomputations.len(),
98+
state.circuit_specific_states.len()
99+
);
100+
anyhow::ensure!(
101+
state.circuit_specific_states.len() == assignments.len(),
102+
"[calculate Prep Lineval Sumcheck Witness] Expected {} assignments, but {} were provided.",
103+
assignments.len(),
104+
state.circuit_specific_states.len()
105+
);
106+
anyhow::ensure!(
107+
state.circuit_specific_states.len() == matrix_transposes.len(),
108+
"[calculate Prep Lineval Sumcheck Witness] Expected {} matrix transposes, but {} were provided.",
109+
matrix_transposes.len(),
110+
state.circuit_specific_states.len()
111+
);
94112
for ((((&circuit, circuit_specific_state), precomp), assignments_i), matrix_transposes_i) in state
95113
.circuit_specific_states
96114
.iter()

algorithms/src/snark/varuna/ahp/prover/round_functions/third.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,24 @@ impl<F: PrimeField, SM: SNARKMode> AHPForR1CS<F, SM> {
157157
// Compute lineval sumcheck witnesses
158158
let mut job_pool = ExecutionPool::with_capacity(total_instances * 3);
159159
// Iterate for each circuit in the batch.
160+
ensure!(
161+
state.circuit_specific_states.len() == third_round_batch_combiners.len(),
162+
"[calculate Lineval Sumcheck Witness] Expected {} circuit specific states, but {} were provided.",
163+
third_round_batch_combiners.len(),
164+
state.circuit_specific_states.len()
165+
);
166+
ensure!(
167+
state.circuit_specific_states.len() == assignments.len(),
168+
"[calculate Lineval Sumcheck Witness] Expected {} assignments, but {} were provided.",
169+
assignments.len(),
170+
state.circuit_specific_states.len()
171+
);
172+
ensure!(
173+
state.circuit_specific_states.len() == matrix_transposes.len(),
174+
"[calculate Lineval Sumcheck Witness] Expected {} matrix transposes, but {} were provided.",
175+
matrix_transposes.len(),
176+
state.circuit_specific_states.len()
177+
);
160178
for ((((circuit, circuit_specific_state), batch_combiner), assignments_i), matrix_transposes_i) in state
161179
.circuit_specific_states
162180
.iter_mut()

algorithms/src/snark/varuna/ahp/selectors.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,10 @@ pub(crate) fn apply_randomized_selector<F: PrimeField>(
9494
let selector_time = start_timer!(|| "Compute selector without remainder witness");
9595

9696
let (mut h_i, remainder) = poly.divide_by_vanishing_poly(*src_domain)?;
97-
ensure!(remainder.is_zero(), "Failed to divide by vanishing polynomial - non-zero remainder ({remainder:?})");
97+
ensure!(
98+
remainder.is_zero(),
99+
"[No remainder witness] Failed to divide by vanishing polynomial - non-zero remainder ({remainder:?})"
100+
);
98101

99102
let multiplier = combiner * src_domain.size_as_field_element * target_domain.size_inv;
100103
h_i.coeffs.iter_mut().for_each(|c| *c *= multiplier);
@@ -120,7 +123,10 @@ pub(crate) fn apply_randomized_selector<F: PrimeField>(
120123
xg_i = xg_i.mul_by_vanishing_poly(*target_domain);
121124

122125
let (xg_i, remainder) = xg_i.divide_by_vanishing_poly(*src_domain)?;
123-
ensure!(remainder.is_zero(), "Failed to divide by vanishing polynomial - non-zero remainder ({remainder:?})");
126+
ensure!(
127+
remainder.is_zero(),
128+
"[Returning remainder witness] Failed to divide by vanishing polynomial - non-zero remainder ({remainder:?})"
129+
);
124130

125131
end_timer!(selector_time);
126132
Ok((h_i, Some(xg_i)))

0 commit comments

Comments
 (0)