Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Split ConstraintSystem into a builder type and a verifying key type #781

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

str4d
Copy link
Contributor

@str4d str4d commented Jun 6, 2023

This is an initial refactor performed during Halo 2 Office Hours, to explore the effects of this split on the wider codebase.

At the end, we discussed the result, and noted that the verifying key type still contains data in sub-types that is irrelevant to the actual verifying key. The verifying key type is also never exposed in the public API of the verifying key; ConstraintSystem was only public for its use in Circuit::configure.

The likely next steps are:

  • Rework PinnedConstraintSystem to be the verifying key type, only storing the data needed for the transcript, but being an owned type that exposes immutable references via methods instead of its fields being pub(crate).
  • Undo the ConstraintSystemBuilder rename, so we are just removing parts of the ConstraintSystem API.
  • Rework ConstraintSystem::pinned and VerifyingKey::from_parts to instead become the builder method for the verifying key type along with the data that is cached alongside it inside VerifyingKey.
  • Refactor the very few methods that we identified as only relevant to the verifying key type, as they are only used redundantly.

This is an initial refactor performed during Halo 2 Office Hours, to
explore the effects of this split on the wider codebase.

At the end, we discussed the result, and noted that the verifying key
type still contains data in sub-types that is irrelevant to the actual
verifying key. The verifying key type is also never exposed in the
public API of the verifying key; `ConstraintSystem` was only public for
its use in `Circuit::configure`.

The likely next steps are:
- Rework `PinnedConstraintSystem` to be the verifying key type, only
  storing the data needed for the transcript, but being an owned type
  that exposes immutable references via methods instead of its fields
  being `pub(crate)`.
- Undo the `ConstraintSystemBuilder` rename, so we are just removing
  parts of the `ConstraintSystem` API.
- Rework `ConstraintSystem::pinned` and `VerifyingKey::from_parts` to
  instead become the builder method for the verifying key type along
  with the data that is cached alongside it inside `VerifyingKey`.
- Refactor the very few methods that we identified as only relevant to
  the verifying key type, as they are only used redundantly.
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