Skip to content

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.

2 participants