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

refactor: Use serialize functions in getInitialWitness #2713

Merged
merged 1 commit into from
Oct 5, 2023
Merged

Conversation

LHerskind
Copy link
Contributor

Fixes #2625. Using the functions defined in serialize when applicable.

Checklist:

Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge.

  • If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag.
  • I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code.
  • Every change is related to the PR description.
  • I have linked this pull request to relevant issues (if any exist).

Copy link
Contributor

@sirasistant sirasistant left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is great! One less place to remember to update when we change inputs

Comment on lines +37 to +46
export function toACVMField(
value: AztecAddress | EthAddress | Fr | Buffer | boolean | number | bigint | ACVMField,
): ACVMField {
let buffer;
if (Buffer.isBuffer(value)) {
buffer = value;
} else if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'bigint') {
buffer = new Fr(value).toBuffer();
} else if (typeof value === 'string') {
buffer = Fr.fromString(value).toBuffer();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we can add a type guard for isACVMField that checks that it's a hex value of the correct length and if is ACVMField just short circuit the conversion to/from buffer? It'd remove any performance impact of this refactor :D

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The size and such should already be handled by the fromString that was why I just ended up using that 👀. The frombuffer is reading 32 bytes, so if it is of wrong size should break there.

  /**
   * Create a Fr instance from a hex-encoded string.
   * The input 'address' can be either prefixed with '0x' or not, and should have exactly 64 hex characters.
   * Throws an error if the input length is invalid or the address value is out of range.
   *
   * @param address - The hex-encoded string representing the field element.
   * @returns A Fr instance.
   */
  static fromString(address: string) {
    return Fr.fromBuffer(Buffer.from(address.replace(/^0x/i, ''), 'hex'));
  }

Copy link
Contributor

@sirasistant sirasistant Oct 5, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh yeah I wasn't meaning as validation, It's because, suppose that the toACVMField receives an ACVMField (where it could just return the parameter without any operation)
Then we now would be doing:
Fr.fromString() => internally does Fr.fromBuffer() and Buffer.from(string)
Then fr.toBuffer()
Then buffer.toString('hex')

so that's many conversions to/from buffer when if it's sure about the type it can just return the parameter without doing anything. So with a type guard, you could:

function isACVMField(value: any): value is ACVMField {
  ... // Check here if hex string and a hex regex with the ACVMField length for example
}

// Then in toACVMField
...
if (isACVMField(value)) {
    return value
}
... The rest of the function

But maybe it's not that efficient if we need to check in runtime if it's an ACVMField with a regex ): Maybe I'm overcomplicating myself. The truly zero runtime cost would be to convert ACVMField to a branded string but that's more painful

@LHerskind LHerskind merged commit 93cc668 into master Oct 5, 2023
2 checks passed
@LHerskind LHerskind deleted the lh/2625 branch October 5, 2023 16:52
critesjosh pushed a commit that referenced this pull request Oct 9, 2023
🤖 I have created a release *beep* *boop*
---


<details><summary>aztec-packages: 0.8.8</summary>

##
[0.8.8](aztec-packages-v0.8.7...aztec-packages-v0.8.8)
(2023-10-09)


### Features

* Actually compute selectors
([#2686](#2686))
([dcb65e1](dcb65e1))
* Add otterscan to sandbox
([#2648](#2648))
([6986649](6986649))
* **aztec.js:** Remove attach method
([#2715](#2715))
([c03c654](c03c654))
* Create .gitattributes in aztec-nr
([#2661](#2661))
([8084fc3](8084fc3))
* GCC 13 preset
([#2623](#2623))
([4881414](4881414))
* Update noir to v0.16
([#2718](#2718))
([e8d0675](e8d0675))


### Bug Fixes

* Avoid ambiguity on blank and blank-react (prefix issue)
([#2729](#2729))
([68cdb3f](68cdb3f))
* Block encoding
([#2719](#2719))
([c4796ac](c4796ac))
* Canary tests to use a fork
([#2739](#2739))
([4906142](4906142))
* Challenge generation update
([#2628](#2628))
([68c1fab](68c1fab))
* Docs: Sandbox version numbers
([#2708](#2708))
([34b0209](34b0209))
* Docs: Update Sandbox page to use #include_aztec_version
([#2703](#2703))
([d5b78af](d5b78af))
* Remove npx from extract_tag_version
([#2697](#2697))
([fe4484a](fe4484a))
* Version in sandbox deployment
([#2730](#2730))
([b1d8efd](b1d8efd))


### Miscellaneous

* `foundation/src/serialization` tech debt
([#2722](#2722))
([e92154b](e92154b))
* Add node10 entrypoint to Foundation
([#2706](#2706))
([30c7935](30c7935))
* Add storage slot to docs
([#2601](#2601))
([a7710f0](a7710f0))
* Add visibility modifiers
([#2728](#2728))
([d9ae189](d9ae189))
* **benchmark:** Measure time to decrypt notes in pxe
([#2714](#2714))
([33a230a](33a230a))
* Build boxes as part of workspace
([#2725](#2725))
([d18349f](d18349f))
* Bump ACIR deserializer
([#2675](#2675))
([502ee87](502ee87))
* **circuits:** Delete old code that set a different generator index per
vector entry in pedersen commitment
([#2700](#2700))
([4eabfd1](4eabfd1))
* **log:** Show log level in debug logs
([#2717](#2717))
([2b87381](2b87381))
* Move { Fr } imports to foundation/fields
([#2712](#2712))
([f6fc7f2](f6fc7f2))
* **uniswap_tests:** Test edge cases around uniswap flow
([#2620](#2620))
([7a58fe9](7a58fe9))
* Use `serialize` functions in `getInitialWitness`
([#2713](#2713))
([93cc668](93cc668))
</details>

<details><summary>barretenberg.js: 0.8.8</summary>

##
[0.8.8](barretenberg.js-v0.8.7...barretenberg.js-v0.8.8)
(2023-10-09)


### Miscellaneous

* **barretenberg.js:** Synchronize aztec-packages versions
</details>

<details><summary>barretenberg: 0.8.8</summary>

##
[0.8.8](barretenberg-v0.8.7...barretenberg-v0.8.8)
(2023-10-09)


### Features

* GCC 13 preset
([#2623](#2623))
([4881414](4881414))


### Bug Fixes

* Challenge generation update
([#2628](#2628))
([68c1fab](68c1fab))


### Miscellaneous

* Bump ACIR deserializer
([#2675](#2675))
([502ee87](502ee87))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
AztecBot added a commit to AztecProtocol/barretenberg that referenced this pull request Oct 10, 2023
🤖 I have created a release *beep* *boop*
---


<details><summary>aztec-packages: 0.8.8</summary>

##
[0.8.8](AztecProtocol/aztec-packages@aztec-packages-v0.8.7...aztec-packages-v0.8.8)
(2023-10-09)


### Features

* Actually compute selectors
([#2686](AztecProtocol/aztec-packages#2686))
([dcb65e1](AztecProtocol/aztec-packages@dcb65e1))
* Add otterscan to sandbox
([#2648](AztecProtocol/aztec-packages#2648))
([6986649](AztecProtocol/aztec-packages@6986649))
* **aztec.js:** Remove attach method
([#2715](AztecProtocol/aztec-packages#2715))
([c03c654](AztecProtocol/aztec-packages@c03c654))
* Create .gitattributes in aztec-nr
([#2661](AztecProtocol/aztec-packages#2661))
([8084fc3](AztecProtocol/aztec-packages@8084fc3))
* GCC 13 preset
([#2623](AztecProtocol/aztec-packages#2623))
([4881414](AztecProtocol/aztec-packages@4881414))
* Update noir to v0.16
([#2718](AztecProtocol/aztec-packages#2718))
([e8d0675](AztecProtocol/aztec-packages@e8d0675))


### Bug Fixes

* Avoid ambiguity on blank and blank-react (prefix issue)
([#2729](AztecProtocol/aztec-packages#2729))
([68cdb3f](AztecProtocol/aztec-packages@68cdb3f))
* Block encoding
([#2719](AztecProtocol/aztec-packages#2719))
([c4796ac](AztecProtocol/aztec-packages@c4796ac))
* Canary tests to use a fork
([#2739](AztecProtocol/aztec-packages#2739))
([4906142](AztecProtocol/aztec-packages@4906142))
* Challenge generation update
([#2628](AztecProtocol/aztec-packages#2628))
([68c1fab](AztecProtocol/aztec-packages@68c1fab))
* Docs: Sandbox version numbers
([#2708](AztecProtocol/aztec-packages#2708))
([34b0209](AztecProtocol/aztec-packages@34b0209))
* Docs: Update Sandbox page to use #include_aztec_version
([#2703](AztecProtocol/aztec-packages#2703))
([d5b78af](AztecProtocol/aztec-packages@d5b78af))
* Remove npx from extract_tag_version
([#2697](AztecProtocol/aztec-packages#2697))
([fe4484a](AztecProtocol/aztec-packages@fe4484a))
* Version in sandbox deployment
([#2730](AztecProtocol/aztec-packages#2730))
([b1d8efd](AztecProtocol/aztec-packages@b1d8efd))


### Miscellaneous

* `foundation/src/serialization` tech debt
([#2722](AztecProtocol/aztec-packages#2722))
([e92154b](AztecProtocol/aztec-packages@e92154b))
* Add node10 entrypoint to Foundation
([#2706](AztecProtocol/aztec-packages#2706))
([30c7935](AztecProtocol/aztec-packages@30c7935))
* Add storage slot to docs
([#2601](AztecProtocol/aztec-packages#2601))
([a7710f0](AztecProtocol/aztec-packages@a7710f0))
* Add visibility modifiers
([#2728](AztecProtocol/aztec-packages#2728))
([d9ae189](AztecProtocol/aztec-packages@d9ae189))
* **benchmark:** Measure time to decrypt notes in pxe
([#2714](AztecProtocol/aztec-packages#2714))
([33a230a](AztecProtocol/aztec-packages@33a230a))
* Build boxes as part of workspace
([#2725](AztecProtocol/aztec-packages#2725))
([d18349f](AztecProtocol/aztec-packages@d18349f))
* Bump ACIR deserializer
([#2675](AztecProtocol/aztec-packages#2675))
([502ee87](AztecProtocol/aztec-packages@502ee87))
* **circuits:** Delete old code that set a different generator index per
vector entry in pedersen commitment
([#2700](AztecProtocol/aztec-packages#2700))
([4eabfd1](AztecProtocol/aztec-packages@4eabfd1))
* **log:** Show log level in debug logs
([#2717](AztecProtocol/aztec-packages#2717))
([2b87381](AztecProtocol/aztec-packages@2b87381))
* Move { Fr } imports to foundation/fields
([#2712](AztecProtocol/aztec-packages#2712))
([f6fc7f2](AztecProtocol/aztec-packages@f6fc7f2))
* **uniswap_tests:** Test edge cases around uniswap flow
([#2620](AztecProtocol/aztec-packages#2620))
([7a58fe9](AztecProtocol/aztec-packages@7a58fe9))
* Use `serialize` functions in `getInitialWitness`
([#2713](AztecProtocol/aztec-packages#2713))
([93cc668](AztecProtocol/aztec-packages@93cc668))
</details>

<details><summary>barretenberg.js: 0.8.8</summary>

##
[0.8.8](AztecProtocol/aztec-packages@barretenberg.js-v0.8.7...barretenberg.js-v0.8.8)
(2023-10-09)


### Miscellaneous

* **barretenberg.js:** Synchronize aztec-packages versions
</details>

<details><summary>barretenberg: 0.8.8</summary>

##
[0.8.8](AztecProtocol/aztec-packages@barretenberg-v0.8.7...barretenberg-v0.8.8)
(2023-10-09)


### Features

* GCC 13 preset
([#2623](AztecProtocol/aztec-packages#2623))
([4881414](AztecProtocol/aztec-packages@4881414))


### Bug Fixes

* Challenge generation update
([#2628](AztecProtocol/aztec-packages#2628))
([68c1fab](AztecProtocol/aztec-packages@68c1fab))


### Miscellaneous

* Bump ACIR deserializer
([#2675](AztecProtocol/aztec-packages#2675))
([502ee87](AztecProtocol/aztec-packages@502ee87))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

refactor: getInitialWitness should not roll its own
2 participants