Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
6cf4ce3
I5 r44: batched non-recursive c3 fold PoC circuits (n2/n3) + wall-clo…
Aug 17, 2026
c9f7ea6
i5/r44: register C3FoldBatchN2/N3 CircuitNames + expose kernel genesi…
Aug 17, 2026
4606694
I5 r4.4: RAN wall clock — batched c3 fold (n3) vs serial c3_fold chai…
Aug 18, 2026
6571528
I5 r4.x: final canonical batch PoC circuits (kernel-anchor semantics,…
Aug 18, 2026
06992da
I5 r8: generate_batched_c3_fold drop-in API (crate-level batched c3 f…
Aug 18, 2026
667779f
I5 r8: import generate_batched_c3_fold into the existing wall-clock t…
Aug 18, 2026
8d48393
I5 r9: production-fit batched c3 fold (drop-in PoC for the production…
Aug 19, 2026
883337f
I3 housekeeping: commit the round-6 shipped C3 sponge de-raw patch
Aug 19, 2026
7164fc0
I5 r9: apples-to-apples fold-layer wall accounting in the r9 test (se…
Aug 19, 2026
bcaee8b
I5 r10: crate-level generate_batched_c3_fold_b2 (production-ABI, CHAI…
Aug 19, 2026
f9e0ca6
I5 r11: re-publish c3_fold_batch_b3 at the 4-prefix production ABI + …
Aug 19, 2026
bdb6c9d
I5 r11 housekeeping: persist r11 wall-clock run log (poc/r11_b3_dropi…
Aug 19, 2026
3bcfc5c
C3 I14: bind ciphertext via ct_commitment in transcript, drop raw ct …
Aug 20, 2026
f6e36b6
C3 I15: drop e0is/e0_quotients CRT auxiliaries, use range-checked e0 …
Aug 22, 2026
7a01444
circuits: add c3_fold_batch_b6 / c3_fold_batch_b10 (I5a r51 re-anchor…
Aug 25, 2026
fa7fb14
zk: wire c3_fold_batch_b10 into the crate + r52 b10-prove/equivalence…
Aug 25, 2026
5b8d935
circuits: c3 fold MERGE tiers M0/M1/M2 + production M7 (I5a r53 item …
Aug 26, 2026
b4d3042
zk: wire production M7 merge (5xB10+2xB2 over kernel genesis) — I5a i…
Aug 26, 2026
9dc2763
fix(zk): b2 batch gate injected undeclared slot2 param (M7 leg witnes…
Aug 26, 2026
8d74fd9
fix(zk): M7 b2 block-6 stride (50+j -> 50+2j) + r55 tail_field layout…
Aug 27, 2026
889feb8
feat(zk): public generate_batched_c3_fold_b6 + r59 b6 leg test (kerne…
Aug 27, 2026
561f711
feat(zk): M7x production-schedule merge (I5a-fix r61) — parameterized…
Aug 28, 2026
9f4b1f6
fix(zk): M7x c3_fold-EXACT 4-pub prefix (r62) — restore the 175-field…
Aug 28, 2026
9eaaa39
test(zk): r63 fail-fast C3_SLOTS=57 guard on the staged c3_fold base …
Aug 28, 2026
22bd49e
feat(zk): wire the M7x merge into prove_node_dkg_fold's C3b arm + c3a…
Aug 29, 2026
abab995
test(zk): r67 P=0 (anchor=3) seam arm — production c3b=M7x merge + c3…
Aug 29, 2026
7620f2b
r68: N=19 secure-8192 DKG wall table on disk (RAN-runnable model + RE…
Aug 29, 2026
3b3ddc5
r69: correct the N=19 DKG wall table to PRODUCTION c3 geometry (RAN-s…
Aug 29, 2026
8d187b0
r69 landing: production per-node c3-bulk wall LANDED RAN (5321.6 s @4…
Aug 29, 2026
9b168e7
test(zk): r70 I70 PoC — c3a lane through the M7x merge (production N=…
Aug 30, 2026
044a78d
model(r70): add the r70 I70 RAN anchor — c3a lane through the M7x mer…
Aug 30, 2026
b0b803c
r71 wiring: I71-wiring — production c3a arm through the M7x merge + p…
Aug 30, 2026
1e296f9
test(zk): r72 inners-concurrency boundary probe — 4c RAN: serial 42.9…
Aug 30, 2026
3a92e51
test(zk): r74 function leg — prove_node_dkg_fold END-TO-END at insecu…
Aug 31, 2026
f8e3921
test(zk): r75 function leg — prove_node_dkg_fold END-TO-END at secure…
Aug 31, 2026
58339f8
poc(model): r76 - non-c3 remainder RAN-anchored from the r75 min func…
Aug 31, 2026
7bc6157
test(zk): r78 function leg (c) DRAFT — prove_node_dkg_fold END-TO-END…
Sep 1, 2026
08f3662
poc(model): r80 - C2 committee curve min->micro COMPLETED RAN (recove…
Sep 1, 2026
aa32b21
poc(model): r81 - C2a/C2b secure-8192/micro compile legs RAN (wall 91…
Sep 1, 2026
196b3c9
test(zk): r82 C2 micro PROVE leg — the C2 per-recipient PROVE curve's…
Sep 1, 2026
1ee0cd4
poc(model): r82 - C2 micro PROVE legs RAN (c2a 44.3 s / c2b 58.5 s @4…
Sep 1, 2026
4cbe9e8
poc(zk-prover): r83 - C4 micro (secure-8192, H=5) PROVE wall leg (DRA…
Sep 2, 2026
0dace23
poc(model): r83 - C4 micro (secure-8192, H=5) PROVE 25.4/25.2 s + COM…
Sep 2, 2026
40614ee
test(zk): r84 secure-8192/micro full-function leg (DRAFT until the r8…
Sep 2, 2026
0f87efe
r85: fix the node_fold publics assert typo (r84: 128->104 RAN leg evi…
Sep 2, 2026
2307f44
poc(model): r84 - secure-8192/micro (N=9/T=4/H=5) whole-node FUNCTION…
Sep 2, 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
4 changes: 0 additions & 4 deletions circuits/bin/dkg/share_encryption/src/main.nr
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@ fn main(
ct1is: [Polynomial<N>; L],
u: Polynomial<N>,
e0: Polynomial<N>,
e0is: [Polynomial<N>; L],
e0_quotients: [Polynomial<N>; L],
e1: Polynomial<N>,
message: Polynomial<N>,
r1is: [Polynomial<(2 * N) - 1>; L],
Expand All @@ -41,8 +39,6 @@ fn main(
ct1is,
u,
e0,
e0is,
e0_quotients,
e1,
message,
r1is,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[package]
name = "c3_fold_batch_b10"
type = "bin"
authors = ["Gnosis Guild / Interfold (I5 r9 PoC)"]

[dependencies]
lib = { path = "../../../lib" }
c3_fold_batch_lib = { path = "../c3_fold_batch_lib" }
bb_proof_verification = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v5.1.0", directory = "barretenberg/noir/bb_proof_verification" }
99 changes: 99 additions & 0 deletions circuits/bin/recursive_aggregation/c3_fold_batch_b10/src/main.nr
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
// SPDX-License-Identifier: LGPL-3.0-only
//
//! I5a r51 (box-2): B=10-leaf production-fit c3 fold gate (execution-card step 3).
//! Public ABI == `c3_fold` return: 3 x C3_SLOTS pub fields + acc_key_hash /
//! is_first_step / slot0 / slot1 pub (rest private). Same 4-prefix ABI
//! as c3_fold_batch_b3; shared `c3_fold_batch_lib::c3_batch` gate untouched.

use bb_proof_verification::{
UltraHonkProof, UltraHonkVerificationKey, UltraHonkZKProof,
};
use lib::configs::default::dkg::L_THRESHOLD;
use lib::configs::default::N_PARTIES;
use c3_fold_batch_lib::{c3_batch, C3Inner};

pub global C3_SLOTS: u32 = N_PARTIES * L_THRESHOLD;
pub global C3_FOLD_PUBLIC_LEN: u32 = 4 + (3 * C3_SLOTS);

fn main(
vk0: UltraHonkVerificationKey,
proof0: UltraHonkZKProof,
c3a: [Field; 3],
kh0: Field,
vk1: UltraHonkVerificationKey,
proof1: UltraHonkZKProof,
c3b: [Field; 3],
kh1: Field,
vk2: UltraHonkVerificationKey,
proof2: UltraHonkZKProof,
c3c: [Field; 3],
kh2: Field,
vk3: UltraHonkVerificationKey,
proof3: UltraHonkZKProof,
c3d: [Field; 3],
kh3: Field,
vk4: UltraHonkVerificationKey,
proof4: UltraHonkZKProof,
c3e: [Field; 3],
kh4: Field,
vk5: UltraHonkVerificationKey,
proof5: UltraHonkZKProof,
c3f: [Field; 3],
kh5: Field,
vk6: UltraHonkVerificationKey,
proof6: UltraHonkZKProof,
c3g: [Field; 3],
kh6: Field,
vk7: UltraHonkVerificationKey,
proof7: UltraHonkZKProof,
c3h: [Field; 3],
kh7: Field,
vk8: UltraHonkVerificationKey,
proof8: UltraHonkZKProof,
c3i: [Field; 3],
kh8: Field,
vk9: UltraHonkVerificationKey,
proof9: UltraHonkZKProof,
c3j: [Field; 3],
kh9: Field,
acc_vk: UltraHonkVerificationKey,
acc_proof: UltraHonkProof,
acc_public_inputs: [Field; C3_FOLD_PUBLIC_LEN],
acc_key_hash: pub Field,
is_first_step: pub bool,
slot0: pub u32,
slot1: pub u32,
slot2: u32,
slot3: u32,
slot4: u32,
slot5: u32,
slot6: u32,
slot7: u32,
slot8: u32,
slot9: u32,
) -> pub ([Field; C3_SLOTS], [Field; C3_SLOTS], [Field; C3_SLOTS]) {
let inners: [C3Inner; 10] = [
C3Inner { vk: vk0, proof: proof0, c3_public_inputs: c3a, key_hash: kh0 },
C3Inner { vk: vk1, proof: proof1, c3_public_inputs: c3b, key_hash: kh1 },
C3Inner { vk: vk2, proof: proof2, c3_public_inputs: c3c, key_hash: kh2 },
C3Inner { vk: vk3, proof: proof3, c3_public_inputs: c3d, key_hash: kh3 },
C3Inner { vk: vk4, proof: proof4, c3_public_inputs: c3e, key_hash: kh4 },
C3Inner { vk: vk5, proof: proof5, c3_public_inputs: c3f, key_hash: kh5 },
C3Inner { vk: vk6, proof: proof6, c3_public_inputs: c3g, key_hash: kh6 },
C3Inner { vk: vk7, proof: proof7, c3_public_inputs: c3h, key_hash: kh7 },
C3Inner { vk: vk8, proof: proof8, c3_public_inputs: c3i, key_hash: kh8 },
C3Inner { vk: vk9, proof: proof9, c3_public_inputs: c3j, key_hash: kh9 },
];
let slots: [u32; 10] = [
slot0, slot1, slot2, slot3, slot4, slot5, slot6, slot7, slot8, slot9,
];
c3_batch(
inners,
acc_vk,
acc_proof,
acc_public_inputs,
acc_key_hash,
is_first_step,
slots,
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[package]
name = "c3_fold_batch_b2"
type = "bin"
authors = ["Gnosis Guild / Interfold (I5 r9 PoC)"]

[dependencies]
lib = { path = "../../../lib" }
c3_fold_batch_lib = { path = "../c3_fold_batch_lib" }
bb_proof_verification = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v5.1.0", directory = "barretenberg/noir/bb_proof_verification" }
50 changes: 50 additions & 0 deletions circuits/bin/recursive_aggregation/c3_fold_batch_b2/src/main.nr
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// SPDX-License-Identifier: LGPL-3.0-only
//
//! I5 r9 PoC bin: B=2-leaf production-fit c3 fold gate.
//! Public ABI == `c3_fold` return: 3 x C3_SLOTS pub fields + acc_key_hash /
//! is_first_step / slots pub params (key-hash chain preserved).

use bb_proof_verification::{
UltraHonkProof, UltraHonkVerificationKey, UltraHonkZKProof,
};
use lib::configs::default::dkg::L_THRESHOLD;
use lib::configs::default::N_PARTIES;
use c3_fold_batch_lib::{c3_batch, C3Inner};

pub global C3_SLOTS: u32 = N_PARTIES * L_THRESHOLD;
pub global C3_FOLD_PUBLIC_LEN: u32 = 4 + (3 * C3_SLOTS);

fn main(
vk0: UltraHonkVerificationKey,
proof0: UltraHonkZKProof,
c3a: [Field; 3],
kh0: Field,
vk1: UltraHonkVerificationKey,
proof1: UltraHonkZKProof,
c3b: [Field; 3],
kh1: Field,
acc_vk: UltraHonkVerificationKey,
acc_proof: UltraHonkProof,
acc_public_inputs: [Field; C3_FOLD_PUBLIC_LEN],
acc_key_hash: pub Field,
is_first_step: pub bool,
slot0: pub u32,
slot1: pub u32,
) -> pub ([Field; C3_SLOTS], [Field; C3_SLOTS], [Field; C3_SLOTS]) {
let inners: [C3Inner; 2] = [
C3Inner { vk: vk0, proof: proof0, c3_public_inputs: c3a, key_hash: kh0 },
C3Inner { vk: vk1, proof: proof1, c3_public_inputs: c3b, key_hash: kh1 },
];
let slots: [u32; 2] = [
slot0, slot1,
];
c3_batch(
inners,
acc_vk,
acc_proof,
acc_public_inputs,
acc_key_hash,
is_first_step,
slots,
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[package]
name = "c3_fold_batch_b3"
type = "bin"
authors = ["Gnosis Guild / Interfold (I5 r9 PoC)"]

[dependencies]
lib = { path = "../../../lib" }
c3_fold_batch_lib = { path = "../c3_fold_batch_lib" }
bb_proof_verification = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v5.1.0", directory = "barretenberg/noir/bb_proof_verification" }
62 changes: 62 additions & 0 deletions circuits/bin/recursive_aggregation/c3_fold_batch_b3/src/main.nr
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// SPDX-License-Identifier: LGPL-3.0-only
//
//! I5 r9 PoC bin (r11: 4-prefix production ABI): B=3-leaf production-fit c3 fold gate.
//! Public ABI == `c3_fold` return: 3 x C3_SLOTS pub fields + acc_key_hash /
//! is_first_step / slot0 / slot1 pub params (key-hash chain preserved).
//!
//! r11: `slot2` is a private param now (was `pub`, 5-prefix ABI). `c3_batch` takes the
//! slot list privately and asserts in-range + pairwise-distinct + zero-covered-in-anchor
//! in-circuit, so nothing is lost in soundness by not pinning it further; the emitted
//! public tuple is `c3_fold`'s `([SLOTS];[SLOTS];[SLOTS])` — the same public ABI
//! `c3ab_fold` binds against (4 + 3*C3_SLOTS fields, slot array at offset 4).

use bb_proof_verification::{
UltraHonkProof, UltraHonkVerificationKey, UltraHonkZKProof,
};
use lib::configs::default::dkg::L_THRESHOLD;
use lib::configs::default::N_PARTIES;
use c3_fold_batch_lib::{c3_batch, C3Inner};

pub global C3_SLOTS: u32 = N_PARTIES * L_THRESHOLD;
pub global C3_FOLD_PUBLIC_LEN: u32 = 4 + (3 * C3_SLOTS);

fn main(
vk0: UltraHonkVerificationKey,
proof0: UltraHonkZKProof,
c3a: [Field; 3],
kh0: Field,
vk1: UltraHonkVerificationKey,
proof1: UltraHonkZKProof,
c3b: [Field; 3],
kh1: Field,
vk2: UltraHonkVerificationKey,
proof2: UltraHonkZKProof,
c3c: [Field; 3],
kh2: Field,
acc_vk: UltraHonkVerificationKey,
acc_proof: UltraHonkProof,
acc_public_inputs: [Field; C3_FOLD_PUBLIC_LEN],
acc_key_hash: pub Field,
is_first_step: pub bool,
slot0: pub u32,
slot1: pub u32,
slot2: u32,
) -> pub ([Field; C3_SLOTS], [Field; C3_SLOTS], [Field; C3_SLOTS]) {
let inners: [C3Inner; 3] = [
C3Inner { vk: vk0, proof: proof0, c3_public_inputs: c3a, key_hash: kh0 },
C3Inner { vk: vk1, proof: proof1, c3_public_inputs: c3b, key_hash: kh1 },
C3Inner { vk: vk2, proof: proof2, c3_public_inputs: c3c, key_hash: kh2 },
];
let slots: [u32; 3] = [
slot0, slot1, slot2,
];
c3_batch(
inners,
acc_vk,
acc_proof,
acc_public_inputs,
acc_key_hash,
is_first_step,
slots,
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[package]
name = "c3_fold_batch_b6"
type = "bin"
authors = ["Gnosis Guild / Interfold (I5 r9 PoC)"]

[dependencies]
lib = { path = "../../../lib" }
c3_fold_batch_lib = { path = "../c3_fold_batch_lib" }
bb_proof_verification = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v5.1.0", directory = "barretenberg/noir/bb_proof_verification" }
75 changes: 75 additions & 0 deletions circuits/bin/recursive_aggregation/c3_fold_batch_b6/src/main.nr
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
// SPDX-License-Identifier: LGPL-3.0-only
//
//! I5a r51 (box-2): B=6-leaf production-fit c3 fold gate (execution-card step 3).
//! Public ABI == `c3_fold` return: 3 x C3_SLOTS pub fields + acc_key_hash /
//! is_first_step / slot0 / slot1 pub (rest private). Same 4-prefix ABI
//! as c3_fold_batch_b3; shared `c3_fold_batch_lib::c3_batch` gate untouched.

use bb_proof_verification::{
UltraHonkProof, UltraHonkVerificationKey, UltraHonkZKProof,
};
use lib::configs::default::dkg::L_THRESHOLD;
use lib::configs::default::N_PARTIES;
use c3_fold_batch_lib::{c3_batch, C3Inner};

pub global C3_SLOTS: u32 = N_PARTIES * L_THRESHOLD;
pub global C3_FOLD_PUBLIC_LEN: u32 = 4 + (3 * C3_SLOTS);

fn main(
vk0: UltraHonkVerificationKey,
proof0: UltraHonkZKProof,
c3a: [Field; 3],
kh0: Field,
vk1: UltraHonkVerificationKey,
proof1: UltraHonkZKProof,
c3b: [Field; 3],
kh1: Field,
vk2: UltraHonkVerificationKey,
proof2: UltraHonkZKProof,
c3c: [Field; 3],
kh2: Field,
vk3: UltraHonkVerificationKey,
proof3: UltraHonkZKProof,
c3d: [Field; 3],
kh3: Field,
vk4: UltraHonkVerificationKey,
proof4: UltraHonkZKProof,
c3e: [Field; 3],
kh4: Field,
vk5: UltraHonkVerificationKey,
proof5: UltraHonkZKProof,
c3f: [Field; 3],
kh5: Field,
acc_vk: UltraHonkVerificationKey,
acc_proof: UltraHonkProof,
acc_public_inputs: [Field; C3_FOLD_PUBLIC_LEN],
acc_key_hash: pub Field,
is_first_step: pub bool,
slot0: pub u32,
slot1: pub u32,
slot2: u32,
slot3: u32,
slot4: u32,
slot5: u32,
) -> pub ([Field; C3_SLOTS], [Field; C3_SLOTS], [Field; C3_SLOTS]) {
let inners: [C3Inner; 6] = [
C3Inner { vk: vk0, proof: proof0, c3_public_inputs: c3a, key_hash: kh0 },
C3Inner { vk: vk1, proof: proof1, c3_public_inputs: c3b, key_hash: kh1 },
C3Inner { vk: vk2, proof: proof2, c3_public_inputs: c3c, key_hash: kh2 },
C3Inner { vk: vk3, proof: proof3, c3_public_inputs: c3d, key_hash: kh3 },
C3Inner { vk: vk4, proof: proof4, c3_public_inputs: c3e, key_hash: kh4 },
C3Inner { vk: vk5, proof: proof5, c3_public_inputs: c3f, key_hash: kh5 },
];
let slots: [u32; 6] = [
slot0, slot1, slot2, slot3, slot4, slot5,
];
c3_batch(
inners,
acc_vk,
acc_proof,
acc_public_inputs,
acc_key_hash,
is_first_step,
slots,
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[package]
name = "c3_fold_batch_lib"
type = "lib"
authors = ["Gnosis Guild / Interfold (I5 r9 PoC)"]

[dependencies]
lib = { path = "../../../lib" }
bb_proof_verification = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v5.1.0", directory = "barretenberg/noir/bb_proof_verification" }
Loading
Loading