-
Notifications
You must be signed in to change notification settings - Fork 16
feat!: Introduce WitnessMap data structure to avoid leaking internal structure #252
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice! Yeah, this has been something floating in the back of my mind as well so thank you for implementing it.
Just a couple of comments on this. We should also check the I assumed you had checked already but just saw the draft PRs which confirmed.aztec_backend
and noir
repos to ensure we're not missing out any features we need to add (I can't see any that aren't already covered here)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Seeing as I touched this last I'll let you merge into master.
Updating the downstream PRs are blocked on noir-lang/acvm-backend-barretenberg#151 |
* master: 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)
* master: feat!: use struct variants for blackbox function calls (#269)
* 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) ...
Related issue(s)
Resolves (link to issue)
Description
Summary of changes
This implements a
WitnessMap
type that wraps BTreeMap throughout the project. I noticed that this was a leaky abstraction because theto_bytes
andfrom_bytes
implementations on Witness took or returned BTreeMaps instead of operating on one Witness.By implementing this newtype, we can implement traits against it to provide a much smoother API and still allow us to change the underlying data type if we want or need to. I also hope this streamlines serde between wasm & JS in the future but I've not built that out yet.
While I was updating Noir itself, I noticed that it also had a
WitnessMap
type alias, so that further solidified my belief that this type needed to exist in ACVM.Dependency additions / changes
(If applicable.)
Test additions / changes
(If applicable.)
Checklist
cargo fmt
with default settings.Additional context
(If applicable.)