Skip to content
This repository has been archived by the owner on Apr 9, 2024. It is now read-only.

feat!: Remove solve from PWG trait & introduce separate solvers for each blackbox #257

Merged
merged 3 commits into from
May 5, 2023

Conversation

phated
Copy link
Contributor

@phated phated commented May 3, 2023

Related issue(s)

Works towards a resolution of the conversation at https://github.com/noir-lang/acvm/pull/247/files#r1180617953 and puts ACVM in a better position for self-implementing all of the opcodes (one by one).

Description

Summary of changes

This removes the solve function on the PartialWitnessGenerator trait and moves it into the pwg module as a standalone function that takes a backend. It also replaces solve_black_box_function_call with individual functions for each black box function being solved. This will allow us to systematically implement the blackbox function calls in ACVM and then remove them from the PWG interface for backends. Until (eventually) they are all gone and the backend doesn't need to implement anything for PWG; instead, just conforming to the ACVM implementation.

I've split these out into separate functions because leaking the BlackBoxFunc enum to a backend is misleading after #247 lands and keccak is handled by ACVM. However, it seems like we'll need pedersen for quite some time (probably as the only one?).

Dependency additions / changes

(If applicable.)

Test additions / changes

(If applicable.)

Checklist

  • I have tested the changes locally.
  • I have formatted the changes with Prettier and/or cargo fmt with default settings.
  • I have linked this PR to the issue(s) that it resolves.
  • I have reviewed the changes on GitHub, line by line.
  • I have ensured all changes are covered in the description.

Additional context

(If applicable.)

@phated phated mentioned this pull request May 3, 2023
5 tasks
@phated phated changed the title feat!: Remove solve from PWG trait & introduce separate solvers for each blackbox feat!: Remove solve from PWG trait & introduce separate solvers for each blackbox May 3, 2023
@phated phated force-pushed the phated/split-blackbox-funcs branch from ac64f0e to dfe9293 Compare May 4, 2023 19:34
@phated
Copy link
Contributor Author

phated commented May 4, 2023

@guipublic reviewed via DM while github was broken, I've pushed his suggested changes, so should be good for another review.

@guipublic guipublic added this pull request to the merge queue May 5, 2023
Merged via the queue into master with commit 3f3dd74 May 5, 2023
@github-actions github-actions bot mentioned this pull request May 5, 2023
@TomAFrench
Copy link
Member

Much prefer this compared to original implementation as we can enforce removal of dead code in backends by removing bb functions from the trait.

@phated phated deleted the phated/split-blackbox-funcs branch May 5, 2023 14:40
TomAFrench added a commit that referenced this pull request May 8, 2023
* master:
  changes the name of blake to be blakes2s256 (#261)
  update hash functions (#260)
  feat!: Remove `solve` from PWG trait & introduce separate solvers for each blackbox (#257)
  chore: Release 0.11.0 (#250)
  feat(acvm): Add generic error for failing to solve an opcode (#251)
TomAFrench added a commit that referenced this pull request May 16, 2023
* master: (49 commits)
  feat(acvm)!: Add CommonReferenceString backend trait (#231)
  fix(acir): Hide variants of WitnessMapError and export it from package (#283)
  feat!: Introduce WitnessMap data structure to avoid leaking internal structure (#252)
  feat!: use struct variants for blackbox function calls (#269)
  chore(acvm)!: Backend trait must implement Debug (#275)
  chore!: remove `OpcodeResolutionError::UnexpectedOpcode` (#274)
  chore(acvm)!: rename `hash_to_field128_security` to `hash_to_field_128_security` (#271)
  feat(acvm)!: update black box solver interfaces to match `pwg:black_box::solve` (#268)
  chore(acir_field): remove unnecessary `to_vec()` (#267)
  chore(acvm)!: expose separate solvers for AND and XOR opcodes (#266)
  feat(acvm)!: Simplification pass for ACIR (#151)
  changes the name of blake to be blakes2s256 (#261)
  update hash functions (#260)
  feat!: Remove `solve` from PWG trait & introduce separate solvers for each blackbox (#257)
  chore: Release 0.11.0 (#250)
  feat(acvm): Add generic error for failing to solve an opcode (#251)
  fix(acir): Fix `Expression` multiplication to correctly handle degree 1 terms (#255)
  chore(acir): organise opcodes definitions (#254)
  chore: remove usage of `insert_witness` with `insert_value` (#253)
  feat: Add Keccak Hash function (#259)
  ...
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants