Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
5a85f13
fix(ciphernode): recover durable DKG work and document delivery
hmzakhalid Sep 13, 2026
ed7aa36
fix(dkg): index recipient checks by party ID
hmzakhalid Sep 13, 2026
a888a36
fix(dkg): preserve C3 slots when recipients lack C0 keys
hmzakhalid Sep 13, 2026
e2b48b8
chore(circuits): format non-prefix DKG test
hmzakhalid Sep 13, 2026
9ac91e7
fix(dkg): build C4 witness for recipients outside dealer roster
hmzakhalid Sep 13, 2026
d0e0f04
fix: regenerate committee proof bounds during circuit builds
hmzakhalid Sep 14, 2026
8a70ba8
feat: coordinate crash-tolerant DKG rosters
hmzakhalid Sep 14, 2026
1074f4e
fix(ci): test prover with source-aligned circuit fixtures
hmzakhalid Sep 14, 2026
9957a01
fix(ci): run source-built circuits in pull requests
hmzakhalid Sep 14, 2026
7bd787f
fix(ci): build integration fixtures on enclave runner
hmzakhalid Sep 14, 2026
9c69d4d
fix(ci): skip redundant prover fixtures in integration prebuild
hmzakhalid Sep 14, 2026
3276354
fix(circuits): refresh DKG verifiers for all committee pairs
hmzakhalid Sep 14, 2026
6e03298
fix(circuits): stabilize source hashes across committee builds
hmzakhalid Sep 14, 2026
79c406f
fix(tests): scale omission wait to secure DKG flow
hmzakhalid Sep 14, 2026
eb31ff4
fix(tests): cap C0 wait at the DKG deadline
hmzakhalid Sep 14, 2026
441f2ea
fix(support): preserve legacy Boundless guest input encoding
hmzakhalid Sep 14, 2026
a597a37
fix(ciphernode): recover DKG compute and node folds after restart
hmzakhalid Sep 14, 2026
fc4eea3
fix(ciphernode): restore C4 collection across restart
hmzakhalid Sep 14, 2026
f8deb98
fix(dkg): enforce canonical roster in circuit proofs
hmzakhalid Sep 14, 2026
fe301aa
test(dkg): refresh folded proofs for canonical roster circuit
hmzakhalid Sep 14, 2026
9e5a855
chore(sepolia): prepare six-route DKG verifier upgrade
hmzakhalid Sep 14, 2026
5430a02
fix: ignore replayed decryption share responses after progress
hmzakhalid Sep 14, 2026
09354f6
fix(testnet): bind faucet to live tokens and decimals
hmzakhalid Sep 14, 2026
a91b727
fix(crisp): discover bonded census voters deterministically
hmzakhalid Sep 14, 2026
5189ff8
test(dkg): exercise offline C0 recovery in CI
hmzakhalid Sep 14, 2026
1cb6d17
test(dkg): stage recursive circuits for offline CI
hmzakhalid Sep 14, 2026
008a68d
chore(dkg): verify standby C4 in full-proof CI
hmzakhalid Sep 14, 2026
bc1206f
feat(crisp): schedule fixed voting and availability windows
hmzakhalid Sep 14, 2026
e156787
test(dkg): allow full-proof benchmark observation budgets
hmzakhalid Sep 14, 2026
d34ff23
docs(crisp): record voting-start transaction buffer
hmzakhalid Sep 15, 2026
f666049
fix(aggregator): ignore late decryption share replays
hmzakhalid Sep 15, 2026
7b07552
fix(dkg): survive delayed roster leader timers
hmzakhalid Sep 15, 2026
51e1335
docs(dkg): record late roster timer recovery
hmzakhalid Sep 15, 2026
4afe7fc
fix(circuits): hydrate Nargo workspace targets
hmzakhalid Sep 15, 2026
8eaf195
fix: reject premature DKG roster leaders
hmzakhalid Sep 15, 2026
e66ecba
docs: constrain DKG roster leader acceptance
hmzakhalid Sep 15, 2026
e823587
fix(circuits): sync secure minimum DKG verifier
hmzakhalid Sep 15, 2026
da77dde
fix: harden node lifecycle and chain recovery
hmzakhalid Sep 15, 2026
ea3999b
fix(dkg): persist consistency state across restarts
hmzakhalid Sep 15, 2026
8d1e92e
test: follow aggregator failover in DKG benchmark
hmzakhalid Sep 15, 2026
6c117f9
ci: allow proof-backed DKG omission cutoff
hmzakhalid Sep 15, 2026
66bfd92
test: observe aggregator in canonical party order
hmzakhalid Sep 15, 2026
422ed84
test: reuse finalized committee order for failover
hmzakhalid Sep 15, 2026
e862306
fix: finish DKG failover hardening
hmzakhalid Sep 15, 2026
eb855b4
Merge remote-tracking branch 'origin/main' into feat/dkg-omission-rec…
hmzakhalid Sep 15, 2026
6bd60d8
chore: clarify test-only DKG path
hmzakhalid Sep 15, 2026
3e2297f
test: acknowledge failover event-store responses
hmzakhalid Sep 15, 2026
8c5e48e
ci: build recursive fixtures for proof-backed tests
hmzakhalid Sep 15, 2026
e2503c7
test: use neutral census fixture address
hmzakhalid Sep 15, 2026
78c13d6
Merge branch 'main' into feat/dkg-omission-recovery
hmzakhalid Sep 15, 2026
12dd533
fix(net): repair stale gossip subscriptions
hmzakhalid Sep 15, 2026
0b5b857
fix(sortition): reserve capacity before ticket submission
hmzakhalid Sep 15, 2026
57f98fc
fix(dkg): reuse aggregator for partial rosters
hmzakhalid Sep 15, 2026
5b9a9dd
test(crisp): make timestamp boundaries deterministic
hmzakhalid Sep 15, 2026
845c997
fix(runtime): harden DKG and crash recovery
hmzakhalid Sep 15, 2026
a914a53
ci: verify the full circuit release matrix
hmzakhalid Sep 15, 2026
557f006
test(zk): use secure threshold preset for pair
hmzakhalid Sep 16, 2026
5f88033
fix(dkg): retain standby rosters across failover
hmzakhalid Sep 16, 2026
e96c8cd
fix(crisp): disable unauthenticated scheduler by default
hmzakhalid Sep 16, 2026
1d12827
fix(dkg): keep viable share collection active
hmzakhalid Sep 16, 2026
fa2eaf1
fix(test): refresh E3 request windows
hmzakhalid Sep 16, 2026
b32a41a
fix(runtime): cancel terminal E3 proof backlog
hmzakhalid Sep 16, 2026
55b8c59
fix(runtime): isolate terminal proof cancellation
hmzakhalid Sep 16, 2026
b664206
fix(dkg): bound recovery snapshot storage
hmzakhalid Sep 16, 2026
d983f1e
fix(build): preserve unchanged circuit artifacts
hmzakhalid Sep 16, 2026
ae5f171
fix(test): restore full local E3 coverage
hmzakhalid Sep 16, 2026
eab9997
test: keep interfold request windows fresh
hmzakhalid Sep 16, 2026
23a0774
fix(recovery): preserve bounded durable replay
hmzakhalid Sep 16, 2026
9bfa673
fix(dkg): converge partial committee recovery
hmzakhalid Sep 16, 2026
11d4115
fix(release): enforce compatible protocol cutovers
hmzakhalid Sep 16, 2026
dbf1583
fix(net): permit stable event redelivery
hmzakhalid Sep 16, 2026
f3ec17a
fix(events): seed restart clock from durable history
hmzakhalid Sep 16, 2026
7e82a53
test(net): use gossip command constructor
hmzakhalid Sep 16, 2026
dd82efc
fix(dkg): preserve replayed share generation
hmzakhalid Sep 16, 2026
0881dc9
fix(recovery): buffer early C1 verification
hmzakhalid Sep 16, 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
77 changes: 54 additions & 23 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,9 @@ jobs:
- name: Checking code format rust
run: pnpm rust:lint

- name: Check repository invariants
run: pnpm check:invariants

- name: Compile contracts for ABI catalog tests
run: pnpm evm:build

Expand Down Expand Up @@ -277,6 +280,7 @@ jobs:
- name: Stage source-aligned circuit fixtures
run: |
chmod +x .ci-noir/bin/bb
test -f .ci-noir/circuits/insecure-512/minimum/default/recursive_aggregation/c2ab_fold/c2ab_fold.json
mkdir -p dist/circuits/insecure-512
cp -R .ci-noir/circuits/insecure-512/minimum dist/circuits/insecure-512/

Expand All @@ -286,14 +290,34 @@ jobs:
E3_CUSTOM_BB: ${{ github.workspace }}/.ci-noir/bin/bb
run: 'cargo test --test integration -- --nocapture'

- name: Run offline DKG integration test with full proofs
timeout-minutes: 20
env:
BENCHMARK_MODE: insecure
BENCHMARK_OFFLINE_AFTER_C0_PARTY_ID: '1'
BENCHMARK_DKG_WINDOW_SECS: '1200'
E3_ENCRYPTION_KEY_COLLECTION_TIMEOUT_SECS: '60'
E3_THRESHOLD_SHARE_COLLECTION_TIMEOUT_SECS: '180'
E3_CUSTOM_BB: ${{ github.workspace }}/.ci-noir/bin/bb
run: 'cargo test -p e3-tests --test integration test_trbfv_actor -- --exact --nocapture'

- name: Run full-proof DKG integration with standby node
timeout-minutes: 20
env:
BENCHMARK_MODE: insecure
BENCHMARK_DKG_WINDOW_SECS: '1200'
E3_ENCRYPTION_KEY_COLLECTION_TIMEOUT_SECS: '60'
E3_THRESHOLD_SHARE_COLLECTION_TIMEOUT_SECS: '120'
E3_CUSTOM_BB: ${{ github.workspace }}/.ci-noir/bin/bb
run: 'cargo test -p e3-tests --test integration test_trbfv_actor -- --exact --nocapture'

zk_prover_integration:
needs: [detect_changes]
needs: [detect_changes, integration_prebuild]
if: needs.detect_changes.outputs.zk_prover_integration == 'true'
timeout-minutes: 30
timeout-minutes: 60
runs-on:
${{ github.repository == 'theinterfold/interfold' && github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' ||
github.ref == 'refs/heads/dev') && format('runs-on={0}-{1}-{2}/runner=4cpu-linux-x64/ram=16', github.run_id, github.run_attempt,
'zk_prover_integration') || 'ubuntu-latest' }}
group: enclave-ci
labels: [enclave-ci-runner]
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6

Expand Down Expand Up @@ -321,21 +345,19 @@ jobs:
- name: 'Install the dependencies'
run: 'pnpm install --frozen-lockfile'

- name: Download source-aligned ZK fixtures
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: integration-noir-artifacts
path: .ci-noir/

- name: Prepare source-aligned circuit archive
run: |
SOURCE_HASH=$(pnpm tsx scripts/build-circuits.ts hash)
git fetch origin circuit-artifacts
ARTIFACT_SOURCE_HASH=$(git show origin/circuit-artifacts:SOURCE_HASH)
if [ "$ARTIFACT_SOURCE_HASH" != "$SOURCE_HASH" ]; then
echo "::error::Circuit artifacts do not match this source tree."
exit 1
fi
test -f .ci-noir/circuits/insecure-512/minimum/default/dkg/pk/pk.json
test -f .ci-noir/circuits/secure-8192/minimum/default/dkg/pk/pk.json
mkdir -p "$RUNNER_TEMP/circuit-release"
git archive \
--format=tar.gz \
--prefix=circuits/ \
--output="$RUNNER_TEMP/circuit-release/circuits-candidate.tar.gz" \
origin/circuit-artifacts
tar -czf "$RUNNER_TEMP/circuit-release/circuits-candidate.tar.gz" \
-C .ci-noir circuits

- name: Cache Barretenberg binary
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
Expand Down Expand Up @@ -534,11 +556,10 @@ jobs:
integration_prebuild:
needs: [detect_changes]
if: needs.detect_changes.outputs.integration_prebuild == 'true'
timeout-minutes: 30
timeout-minutes: 45
runs-on:
${{ github.repository == 'theinterfold/interfold' && github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' ||
github.ref == 'refs/heads/dev') && format('runs-on={0}-{1}-{2}/runner=4cpu-linux-x64/ram=16', github.run_id, github.run_attempt,
'integration_prebuild') || 'ubuntu-latest' }}
group: enclave-ci
labels: [enclave-ci-runner]
steps:
- name: 'Check out the repo'
uses: 'actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10' # v6
Expand Down Expand Up @@ -588,7 +609,9 @@ jobs:
- name: 'Install the dependencies'
run: 'pnpm install --frozen-lockfile'

- name: 'Run prebuild'
- name: 'Run full-proof prebuild'
env:
CIPHERNODE_SKIP_PROOF_AGGREGATION: 'false'
run: 'pnpm test:integration prebuild'

- name: 'Verify build artifacts exist'
Expand Down Expand Up @@ -1006,7 +1029,7 @@ jobs:
build_circuits:
needs: [detect_changes]
if: needs.detect_changes.outputs.build_circuits == 'true'
timeout-minutes: 30
timeout-minutes: 45
runs-on:
${{ github.repository == 'theinterfold/interfold' && github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' ||
github.ref == 'refs/heads/dev') && format('runs-on={0}-{1}-{2}/runner=4cpu-linux-x64/ram=16', github.run_id, github.run_attempt,
Expand Down Expand Up @@ -1068,6 +1091,13 @@ jobs:
- name: Build circuits
run: pnpm build:circuits

- name: Check generated circuit sources are committed
run: |
git diff --exit-code -- \
circuits/lib/src/configs \
packages/interfold-contracts/contracts/lib/ActiveCryptoConfig.sol \
packages/interfold-contracts/scripts/utils.ts

- name: Test circuit artifact validation
run: pnpm test:circuit-tooling

Expand All @@ -1083,6 +1113,7 @@ jobs:
- name: Check generated verifiers are in sync
run: pnpm check:verifiers --no-compile

# Release workflows also verify the promoted six-pair circuit matrix.
- name: Pull the complete circuit matrix
run: pnpm store:circuits pull

Expand Down
2 changes: 2 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions agent/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,9 @@ Protocol-specific invariants must be named and tested. Important examples includ
- runtime `party_id` is derived from the finalized committee normalized by ascending address;
- the active aggregator is the lowest eligible `party_id` after on-chain exclusions and the current
phase's durable unresponsive-party set;
- after enough members publish signed DKG readiness, the active aggregator proposes a canonical
`H`-member contribution roster; the existing readiness-gated failover promotes the next eligible
party if roster publication stalls;
- the DKG aggregation circuit receives exactly `H` canonical honest NodeFold proofs and exactly `N`
ordered committee addresses;
- C2a/C2b are singleton proofs, while C3a/C3b follow the configured recipient/row multiplicities;
Expand Down
2 changes: 1 addition & 1 deletion agent/CONTEXT.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ output — every step backed by ZK proofs verified on-chain.
| ------------ | ------------------------------------------------------------------------------------------------------------------------------- |
| E3 | Encrypted Execution Environment — one confidential computation instance (`e3Id`) |
| Ciphernode | Node operator running keyshare/DKG/decryption actors in a committee |
| Committee | Ciphernodes serving an E3. Sizes `(N, T, H)`: `minimum` (3,1,2), `micro` (9,4,5), `small` (19,9,10) |
| Committee | Ciphernodes serving an E3. Sizes `(N, T, H)`: `minimum` (3,1,2), `micro` (9,4,5), `small` (19,9,14) |
| DKG | Distributed key generation — joint threshold public key, no party holds the full secret |
| BFV / TrBFV | Brakerski–Fan–Vercauteren FHE scheme / its threshold (publicly verifiable) variant |
| Preset | BFV parameter set: `insecure-512` (dev/CI default) or `secure-8192` |
Expand Down
Loading
Loading