Skip to content

feat: add proof-backed data availability [skip-line-limit] - #1915

Open
hmzakhalid wants to merge 14 commits into
mainfrom
feat/avail-vectorx-release-candidate
Open

feat: add proof-backed data availability [skip-line-limit]#1915
hmzakhalid wants to merge 14 commits into
mainfrom
feat/avail-vectorx-release-candidate

Conversation

@hmzakhalid

Copy link
Copy Markdown
Collaborator

Summary

This change adds proof-backed data availability for secure CRISP rounds.

  • Split secure committee public keys into bounded Ethereum event chunks.
  • Reassemble each public key and verify it against the C5-proven on-chain commitment.
  • Commit each CRISP input on Ethereum before Avail publication.
  • Finalize each input only after VectorX proves availability of the exact committed bytes.
  • Publish aggregate ciphertexts through Avail and bind the VectorX receipt to the RISC Zero proof.
  • Add durable publication, recovery, indexing, SDK, and deployment support.
  • Add the secure mainnet CRISP activation and validation flow.

Input flow

  1. The voter creates the encrypted ballot and Noir proof.
  2. The CRISP service validates and stores the exact bytes.
  3. publishInput verifies the Noir proof and storage signature.
  4. The contract reserves the input leaf and records the content hash.
  5. The service publishes the bytes to Avail.
  6. finalizeInput verifies the VectorX receipt for the same content hash.
  7. Computation remains blocked while any committed input awaits finalization.

A delayed VectorX proof cannot silently remove a committed vote from the computation.

Output flow

The compute service derives the input root from the ciphertexts it processes. CRISP verifies the RISC Zero proof before it creates the Avail job. Ethereum accepts the output reference only when the compute proof and VectorX receipt bind the same output hash.

Committee public key

The DKG proof still commits the committee public key on Ethereum. Committee members publish bounded key chunks in later transactions. Consumers accept the assembled key only when its recomputed commitment matches the proven value.

Terminal E3s reject additional public-key chunks.

Mainnet activation

The activation scripts:

  • Require paused requests and drained E3 and committee state.
  • Install the secure BFV verifier routes.
  • Configure secure-8192 for supported committee sizes.
  • Register and bind the production CRISP program and data-availability verifier.
  • Update the required node protocol version.
  • Keep requests paused until validation and node readiness checks pass.

Merging this PR does not change mainnet state.

Timing and Boundless defaults

  • CRISP reserves three hours for Avail and VectorX finalization.
  • CRISP guarantees at least one hour for voting after worst-case committee setup.
  • The Interfold DAO launch uses a five-day proposal input window.
  • The default Boundless ceiling is 0.004 ETH.
  • The default prover collateral is 100 ZKC.

Operational safety

  • Runtime launchers do not place private keys or Pinata credentials in process arguments.
  • Production deployment rejects mock CRISP components on Ethereum mainnet.
  • Mainnet supports secure BFV parameters only.
  • Sepolia and local development retain secure and insecure test routes.
  • Recovery persists incomplete public-key assemblies and data-availability jobs.

Companion PRs

Validation

  • Repository pre-push validation passed.
  • Contract, Rust, SDK, documentation, invariant, address, and verifier checks passed.
  • Focused timing, recovery, and terminal-state regression tests passed.
  • Reproducible Docker guest builds produced the same ELF and RISC Zero image ID.

@vercel

vercel Bot commented Sep 2, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
crisp Ready Ready Preview Sep 3, 2026 11:10pm UTC
interfold-dashboard Ready Ready Preview Sep 3, 2026 11:10pm UTC
interfold-docs Ready Ready Preview Sep 3, 2026 11:10pm UTC

Request Review

@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 241 files, which is 141 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Team

Run ID: d4aad84c-2680-40db-8c5f-d150caad09ac

📥 Commits

Reviewing files that changed from the base of the PR and between 499146c and 723bed2.

⛔ Files ignored due to path filters (6)
  • Cargo.lock is excluded by !**/*.lock
  • crates/support/Cargo.lock is excluded by !**/*.lock
  • crates/support/methods/guest/Cargo.lock is excluded by !**/*.lock
  • examples/CRISP/Cargo.lock is excluded by !**/*.lock
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • templates/default/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (241)
  • .gitignore
  • Cargo.toml
  • README.md
  • agent/INVARIANTS.md
  • agent/flow-trace/00_INDEX.md
  • agent/flow-trace/03_E3_REQUEST_AND_COMMITTEE.md
  • agent/flow-trace/04_DKG_AND_COMPUTATION.md
  • agent/flow-trace/05_FAILURE_REFUND_SLASHING.md
  • agent/flow-trace/06_DEACTIVATION_AND_COMPLETION.md
  • agent/flow-trace/08_DATA_AVAILABILITY.md
  • crates/Dockerfile
  • crates/aggregator/src/ext.rs
  • crates/bfv-client/src/client.rs
  • crates/bfv-client/src/lib.rs
  • crates/ciphernode-builder/src/ciphernode_builder.rs
  • crates/ciphernode-builder/src/event_system.rs
  • crates/compute-provider/src/compute_input.rs
  • crates/compute-provider/src/merkle_tree_builder.rs
  • crates/config/protocol-release.toml
  • crates/config/src/chain_config.rs
  • crates/config/src/network.rs
  • crates/config/src/program_config.rs
  • crates/data-availability/Cargo.toml
  • crates/data-availability/src/avail.rs
  • crates/data-availability/src/lib.rs
  • crates/entrypoint/src/nodes/process_manager.rs
  • crates/events/src/interfold_event/ciphertext_output_reference_published.rs
  • crates/events/src/interfold_event/committee_public_key_chunk_published.rs
  • crates/events/src/interfold_event/e3_failed.rs
  • crates/events/src/interfold_event/mod.rs
  • crates/events/src/store_keys.rs
  • crates/evm-helpers/src/contracts.rs
  • crates/evm-helpers/src/events.rs
  • crates/evm/Cargo.toml
  • crates/evm/src/actors.rs
  • crates/evm/src/ciphernode_registry/effects.rs
  • crates/evm/src/ciphernode_registry/events.rs
  • crates/evm/src/ciphernode_registry/handlers.rs
  • crates/evm/src/contracts.rs
  • crates/evm/src/data_availability/actor.rs
  • crates/evm/src/event_decoding/catalog.rs
  • crates/evm/src/event_decoding/error.rs
  • crates/evm/src/interfold/events.rs
  • crates/evm/src/interfold_writing/actor.rs
  • crates/evm/src/interfold_writing/effects.rs
  • crates/evm/src/interfold_writing/handlers.rs
  • crates/evm/src/interfold_writing/workflow.rs
  • crates/evm/src/publication_writing/workflow.rs
  • crates/evm/src/repo.rs
  • crates/indexer/src/indexer.rs
  • crates/indexer/src/models.rs
  • crates/indexer/src/repo.rs
  • crates/keyshare/src/threshold_keyshare/effects/recovery.rs
  • crates/keyshare/src/threshold_keyshare/tests.rs
  • crates/multithread/src/effect_gate.rs
  • crates/multithread/src/multithread.rs
  • crates/request/src/routing/effects/recovery.rs
  • crates/request/src/routing/workflow.rs
  • crates/request/src/routing/workflow_tests.rs
  • crates/safe/Cargo.toml
  • crates/safe/src/lib.rs
  • crates/safe/src/poseidon2_accel.rs
  • crates/sortition/src/sortition/node_registry.rs
  • crates/sortition/src/sortition/node_registry_tests.rs
  • crates/support-scripts/ctl/container
  • crates/support-scripts/ctl/start
  • crates/support-scripts/ctl/upload
  • crates/support-scripts/src/program_risc0.rs
  • crates/support-scripts/src/utils.rs
  • crates/support-scripts/tests/container.sh
  • crates/support/Cargo.toml
  • crates/support/README.md
  • crates/support/app/src/main.rs
  • crates/support/contracts/ImageID.sol
  • crates/support/host/src/lib.rs
  • crates/support/methods/build.rs
  • crates/support/methods/guest-builder.Dockerfile
  • crates/support/methods/guest/Cargo.toml
  • crates/support/methods/guest/src/bin/program.rs
  • crates/support/program/Cargo.toml
  • crates/support/program/src/lib.rs
  • crates/support/scripts/container/start.sh
  • crates/support/scripts/container/upload.sh
  • crates/sync/src/sync/service.rs
  • crates/tests/tests/integration.rs
  • crates/wasm/init_node.mjs
  • crates/wasm/package.json
  • dappnode/README.md
  • dappnode/config.template.yaml
  • dappnode/docker-compose.yml
  • dappnode/entrypoint.sh
  • dappnode/tests/test-hardening.sh
  • deploy/cn1.yaml
  • deploy/cn2.yaml
  • deploy/cn3.yaml
  • deploy/cn4.yaml
  • docs/pages/CRISP/introduction.mdx
  • docs/pages/computation-flow.mdx
  • docs/pages/governance.mdx
  • docs/pages/sdk.mdx
  • docs/pages/tutorials/custom-zk-circuits.mdx
  • examples/CRISP/Cargo.toml
  • examples/CRISP/Readme.md
  • examples/CRISP/client/src/context/voteManagement/VoteManagement.context.tsx
  • examples/CRISP/client/src/context/voteManagement/VoteManagement.types.ts
  • examples/CRISP/client/src/hooks/generic/useFetchApi.tsx
  • examples/CRISP/client/src/hooks/interfold/useInterfoldServer.ts
  • examples/CRISP/client/src/hooks/voting/useVoteCasting.ts
  • examples/CRISP/client/src/model/vote.model.ts
  • examples/CRISP/client/src/pages/Landing/components/DailyPoll.tsx
  • examples/CRISP/client/src/utils/directVote.ts
  • examples/CRISP/crates/evm_helpers/src/lib.rs
  • examples/CRISP/interfold.config.yaml
  • examples/CRISP/packages/crisp-contracts/.env.example
  • examples/CRISP/packages/crisp-contracts/README.md
  • examples/CRISP/packages/crisp-contracts/contracts/CRISPProgram.sol
  • examples/CRISP/packages/crisp-contracts/contracts/Mocks/MockHonkVerifier.sol
  • examples/CRISP/packages/crisp-contracts/contracts/Mocks/MockInterfold.sol
  • examples/CRISP/packages/crisp-contracts/contracts/test/MockCrispDataAvailabilityVerifier.sol
  • examples/CRISP/packages/crisp-contracts/deploy/crisp.ts
  • examples/CRISP/packages/crisp-contracts/hardhat.config.ts
  • examples/CRISP/packages/crisp-contracts/package.json
  • examples/CRISP/packages/crisp-contracts/tests/census-mode.test.ts
  • examples/CRISP/packages/crisp-contracts/tests/crisp.contracts.test.ts
  • examples/CRISP/packages/crisp-contracts/tests/fixtures/input-tree-append.json
  • examples/CRISP/packages/crisp-contracts/tests/fixtures/input-tree-revote.json
  • examples/CRISP/packages/crisp-contracts/tests/fixtures/input-tree.json
  • examples/CRISP/packages/crisp-contracts/tests/input-availability-flow.test.ts
  • examples/CRISP/packages/crisp-contracts/tests/input-leaf.test.ts
  • examples/CRISP/packages/crisp-contracts/tests/input-tree-e2e.test.ts
  • examples/CRISP/packages/crisp-contracts/tests/onchain-census.test.ts
  • examples/CRISP/packages/crisp-contracts/tests/utils.ts
  • examples/CRISP/packages/crisp-sdk/src/api.ts
  • examples/CRISP/packages/crisp-sdk/src/constants.ts
  • examples/CRISP/packages/crisp-sdk/src/sdk.ts
  • examples/CRISP/packages/crisp-sdk/src/types.ts
  • examples/CRISP/packages/crisp-sdk/src/utils.ts
  • examples/CRISP/packages/crisp-sdk/src/vote.ts
  • examples/CRISP/packages/crisp-sdk/tests/utils.test.ts
  • examples/CRISP/program/Cargo.toml
  • examples/CRISP/program/README.md
  • examples/CRISP/program/src/lib.rs
  • examples/CRISP/program/tests/input_leaf.rs
  • examples/CRISP/program/tests/secure_process.rs
  • examples/CRISP/server/.env.example
  • examples/CRISP/server/Cargo.toml
  • examples/CRISP/server/Dockerfile
  • examples/CRISP/server/src/cli/commands.rs
  • examples/CRISP/server/src/config.rs
  • examples/CRISP/server/src/deployments.rs
  • examples/CRISP/server/src/server/data_availability.rs
  • examples/CRISP/server/src/server/indexer.rs
  • examples/CRISP/server/src/server/mod.rs
  • examples/CRISP/server/src/server/models.rs
  • examples/CRISP/server/src/server/rate_limit.rs
  • examples/CRISP/server/src/server/repo.rs
  • examples/CRISP/server/src/server/routes/rounds.rs
  • examples/CRISP/server/src/server/routes/state.rs
  • examples/CRISP/server/src/server/routes/voting.rs
  • examples/CRISP/test/crisp.spec.ts
  • packages/interfold-contracts/README.md
  • packages/interfold-contracts/artifacts/contracts/interfaces/IBondingRegistry.sol/IBondingRegistry.json
  • packages/interfold-contracts/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json
  • packages/interfold-contracts/artifacts/contracts/interfaces/IInterfold.sol/IInterfold.json
  • packages/interfold-contracts/artifacts/contracts/interfaces/ISlashingManager.sol/ISlashingManager.json
  • packages/interfold-contracts/artifacts/contracts/token/InterfoldTicketToken.sol/InterfoldTicketToken.json
  • packages/interfold-contracts/contracts/Interfold.sol
  • packages/interfold-contracts/contracts/interfaces/ICiphernodeRegistry.sol
  • packages/interfold-contracts/contracts/interfaces/IDataAvailabilityVerifier.sol
  • packages/interfold-contracts/contracts/interfaces/IE3.sol
  • packages/interfold-contracts/contracts/interfaces/IE3Program.sol
  • packages/interfold-contracts/contracts/interfaces/IInterfold.sol
  • packages/interfold-contracts/contracts/interfaces/external/IAvailBridge.sol
  • packages/interfold-contracts/contracts/lib/InterfoldLifecycle.sol
  • packages/interfold-contracts/contracts/lib/InterfoldPricing.sol
  • packages/interfold-contracts/contracts/lib/RegistrySortitionLib.sol
  • packages/interfold-contracts/contracts/registry/CiphernodeRegistryOwnable.sol
  • packages/interfold-contracts/contracts/test/MockAvailBridge.sol
  • packages/interfold-contracts/contracts/test/MockCiphernodeRegistry.sol
  • packages/interfold-contracts/contracts/test/MockDataAvailabilityVerifier.sol
  • packages/interfold-contracts/contracts/test/MockE3Program.sol
  • packages/interfold-contracts/contracts/test/MockE3ProgramHarness.sol
  • packages/interfold-contracts/contracts/verifiers/AvailVectorXDataAvailabilityVerifier.sol
  • packages/interfold-contracts/scripts/dataAvailability.ts
  • packages/interfold-contracts/scripts/index.ts
  • packages/interfold-contracts/scripts/protocol/actions.ts
  • packages/interfold-contracts/scripts/protocol/files.ts
  • packages/interfold-contracts/scripts/protocol/nodeRelease.ts
  • packages/interfold-contracts/scripts/protocol/types.ts
  • packages/interfold-contracts/scripts/upgrade/nodeRelease.ts
  • packages/interfold-contracts/scripts/upgrade/resumeSecureCrisp.ts
  • packages/interfold-contracts/scripts/upgrade/safeProxyUpgrade.ts
  • packages/interfold-contracts/scripts/upgrade/secureCrisp.ts
  • packages/interfold-contracts/scripts/upgrade/validateSecureCrisp.ts
  • packages/interfold-contracts/scripts/upgrade/vrfSortition.ts
  • packages/interfold-contracts/tasks/committeePublicKey.ts
  • packages/interfold-contracts/tasks/interfold.ts
  • packages/interfold-contracts/tasks/mockDataAvailability.ts
  • packages/interfold-contracts/tasks/program.ts
  • packages/interfold-contracts/test/DataAvailability/AvailVectorX.spec.ts
  • packages/interfold-contracts/test/DataAvailability/CommitteePublicKeyTask.spec.ts
  • packages/interfold-contracts/test/DataAvailability/MockDataAvailabilityTask.spec.ts
  • packages/interfold-contracts/test/Deployment/ProtocolDeployment.spec.ts
  • packages/interfold-contracts/test/E3Lifecycle/E3Integration.spec.ts
  • packages/interfold-contracts/test/Interfold.spec.ts
  • packages/interfold-contracts/test/MockE3Program.spec.ts
  • packages/interfold-contracts/test/Pricing/DustRotation.spec.ts
  • packages/interfold-contracts/test/Pricing/Pricing.spec.ts
  • packages/interfold-contracts/test/Pricing/PullPaymentsAndAllowlist.spec.ts
  • packages/interfold-contracts/test/Registry/CiphernodeRegistryOwnable.spec.ts
  • packages/interfold-contracts/test/Slashing/CommitteeExpulsion.spec.ts
  • packages/interfold-contracts/test/fixtures/helpers.ts
  • packages/interfold-dashboard/src/lib/e3.ts
  • packages/interfold-sdk/README.md
  • packages/interfold-sdk/src/committee-public-key.ts
  • packages/interfold-sdk/src/contracts/contract-client.ts
  • packages/interfold-sdk/src/contracts/types.ts
  • packages/interfold-sdk/src/events/event-listener.ts
  • packages/interfold-sdk/src/events/index.ts
  • packages/interfold-sdk/src/events/types.ts
  • packages/interfold-sdk/src/index.ts
  • packages/interfold-sdk/src/interfold-sdk.ts
  • packages/interfold-sdk/src/types.ts
  • packages/interfold-sdk/tests/committee-public-key.test.ts
  • packages/interfold-sdk/tsup.config.js
  • scripts/check-ciphernode-docker-members.py
  • scripts/check-invariants.sh
  • scripts/generate-provenance-manifest.ts
  • templates/default/client/src/pages/steps/RequestComputation.tsx
  • templates/default/contracts/MyProgram.sol
  • templates/default/interfold.config.yaml
  • templates/default/program/src/lib.rs
  • templates/default/scripts/test_integration.sh
  • templates/default/server/index.ts
  • templates/default/server/testHandler.ts
  • templates/default/tests/integration.spec.ts
  • tests/integration/base.sh
  • tests/integration/fns.sh
  • tests/integration/interfold.config.yaml
  • tests/integration/lib/mock-data-availability.mjs
  • tests/integration/persist.sh

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@hmzakhalid hmzakhalid changed the title feat: add proof-backed data availability feat: add proof-backed data availability [skip-line-limit] Sep 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant