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

feat!: Introduce WitnessMap data structure to avoid leaking internal structure #252

Merged
merged 10 commits into from
May 12, 2023

Conversation

phated
Copy link
Contributor

@phated phated commented May 1, 2023

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 the to_bytes and from_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

  • 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.)

Copy link
Member

@TomAFrench TomAFrench left a 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 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) I assumed you had checked already but just saw the draft PRs which confirmed.

acir/src/native_types/witness.rs Outdated Show resolved Hide resolved
acir/src/native_types/witness.rs Outdated Show resolved Hide resolved
acir/src/native_types/witness.rs Outdated Show resolved Hide resolved
acir/src/native_types/witness.rs Outdated Show resolved Hide resolved
* 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)
Copy link
Member

@TomAFrench TomAFrench left a 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.

@TomAFrench
Copy link
Member

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)
@TomAFrench TomAFrench added this pull request to the merge queue May 12, 2023
Merged via the queue into master with commit b248e60 May 12, 2023
@github-actions github-actions bot mentioned this pull request May 12, 2023
@TomAFrench TomAFrench deleted the phated/witness-map branch May 12, 2023 05:32
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.

2 participants