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

Universalize CommitmentKey in Arecibo to save space and streamline implementation #67

Open
huitseeker opened this issue Oct 11, 2023 · 2 comments
Labels
enhancement New feature or request

Comments

@huitseeker
Copy link
Contributor

The nature of public params in Arecibo presents a key opportunity for improvement, particularly in relation to how many bases are used in the CommitmentKey, which bases are the same for any proof using the IPA PCS (i.e. before Zeromorph, all of them).

Current Behavior:

The CommitmentKey acts as a universal parameter and ideally, we'd have a single large disk copy stored for big circuits, which can then be trimmed down as needed. The key difference between two Nova proofs (and possibly, the kind of SNARK they use) should be solely based on the number of elements they require.

Desired Behavior:

Ensure a single, universal CommitmentKey is stored and utilized to trim down specifics for each proof.

Advantages:

  • This would be a crucial step towards implementing Zeromorph (arecibo/issues/19). In the PCS system of Zeromorph, which mandates a universal setup, there's a clear demarcation between Public Parameters (universal) and the Prover Key (specific to proof).

  • There's also an opportunity to save substantial space. In Nova, unlike SuperNova which builds the CommitmentKey separately, the CommitmentKey is encapsulated within public parameters. As a result, any serialization duplicates it. Mutualizing it among proofs will yield significant space savings (lurk-rs/issues/387).

@winston-h-zhang
Copy link
Contributor

I think there's a growing argument here to move the Lurk config/cache infra to arecibo. The main reason why is because it would make the most sense for arecibo to be responsible for its own commitment keys. For example, having the infra in Lurk wouldn't help if you needed to run many tests that needs to regenerate keys in arecibo. A secondary reason is to manage the memory pressure of public params. We could have the commitment key separate and only allocate it in when we need to commit something. What do you think?

@huitseeker
Copy link
Contributor Author

I think this could work and there may be appetite for the feature on the Nova side.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants