-
Notifications
You must be signed in to change notification settings - Fork 234
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
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.
This is great! One less place to remember to update when we change inputs
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(); |
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.
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
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.
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'));
}
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.
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
🤖 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).
🤖 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).
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.