-
Notifications
You must be signed in to change notification settings - Fork 237
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
chore!: Replace computing hashes in circuits wasm, with computing them in ts via bb.js pedersen call. #3114
Conversation
New and removed dependencies detected. Learn more about Socket for GitHub ↗︎
🚮 Removed packages: [email protected] |
Benchmark resultsNo metrics with a significant change found. Detailed resultsAll benchmarks are run on txs on the This benchmark source data is available in JSON format on S3 here. Values are compared against data from master at commit L2 block published to L1Each column represents the number of txs on an L2 block published to L1.
L2 chain processingEach column represents the number of blocks on the L2 chain where each block has 16 txs.
Circuits statsStats on running time and I/O sizes collected for every circuit run across all benchmarks.
MiscellaneousTransaction sizes based on how many contracts are deployed in the tx.
|
… rebuild end-to-end]
…ec-packages into cl/ts_use_new_pedersen
In prep to merge #3114 The above would break the canary as bb.js is now required to deployed as it's new used by yarn-project. This is inevitable as we start proving anyway. The issue is bb.js is currently deployed independently in GA workflow. This will need to be changed to deploy as part of CCI workflow. There are other changes that should be made to "canary" anyway to simplify our build/deploy, so disabling now seem ok.
@@ -441,6 +510,16 @@ export function computeCallStackItemHash( | |||
export function computePrivateCallStackItemHash(wasm: IWasmModule, callStackItem: PrivateCallStackItem): Fr { | |||
const value = wasmSyncCall(wasm, 'abis__compute_private_call_stack_item_hash', callStackItem, 32); | |||
return Fr.fromBuffer(value); | |||
// return Fr.fromBuffer( | |||
// pedersenHashWithHashIndex( |
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.
commented code can be removed
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.
Left it in as my next PR will actually make that commented code work. Just commented because discovered it's too much work for this PR.
// pedersenHashWithHashIndex( | ||
// [ | ||
// callStackItem.contractAddress.toBuffer(), | ||
// callStackItem.functionData.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.
same as above
@@ -29,11 +29,11 @@ WASM_EXPORT void schnorr_multisig_construct_signature_round_1( | |||
|
|||
WASM_EXPORT void schnorr_multisig_construct_signature_round_2( | |||
uint8_t const* message, | |||
fq::in_buf private_key, |
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.
mind tl;dr'ing why we're switching field types?
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 was an oopsie. Fixed. It was actually another api call that was meant to become Fq.
Typescript didnt raise error due to Fq and Fr being structurally the same, although this PR changes that as I optimised Fr slightly (made it Uint8Array under the hood rather than bigint as the conversion seriously impacts performance when doing lots of hashing).
I'll keep this review light on the principle of engineers reviewing their own work first and foremost, so kept the review to 'am I comfortable with what I read here'. I've made minor comments, otherwise I saw a lot of propagation of async/await removal and read the comments above, LGTM. One thing missing: The motivation, just for posterity, is to move away off of circuits dependency gradually, right? |
Yeah. The ultimate reason is to have much more of a pure TypeScript reference client rather than this extremely strong coupling with the C++ code/wasm. So bb.js can hopefully act as a lib for building proofs with a simple api, noir has their TS packages we can use, and then hopefully all of our yarn-project can just be pure TS. (edit: I see the argument that circuits.js was a circuits encapsulating library, but with circuits now being written in Noir, it doesn't make sense to have a wasm for defining how we hash all these structs) A side reason for this is just having the wasm plumbed into a hash function we use all over the place seems a bit off. It's nicer when the api is how it is in this PR, as we can easily switch how the hash is computed. Wether its a wasm, TS, or something else, is now encapsulated within the foundation/crypto/pedersen module. |
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-packages: 0.15.0</summary> ## [0.15.0](aztec-packages-v0.14.2...aztec-packages-v0.15.0) (2023-11-16) ### ⚠ BREAKING CHANGES * Replace computing hashes in circuits wasm, with computing them in ts via bb.js pedersen call. ([#3114](#3114)) ### Features * **bb:** Add msan preset ([#3284](#3284)) ([bcf025c](bcf025c)) * Enable merge and root rollup circuits in noir ([#3248](#3248)) ([68555fc](68555fc)) * Protogalaxy combiner quotient ([#3245](#3245)) ([db0f3ab](db0f3ab)) * Public kernel in noir ([#3186](#3186)) ([15a522b](15a522b)) * Ultra honk arith from ultra ([#3274](#3274)) ([ec2b805](ec2b805)) ### Bug Fixes * Debug build ([#3283](#3283)) ([aca2624](aca2624)) * Fix block constraint key divergence bug. ([#3256](#3256)) ([1c71a0c](1c71a0c)) * Main.md typo ([#3278](#3278)) ([cb87c4d](cb87c4d)) * Typo fix roundup ([#3302](#3302)) ([9dd778d](9dd778d)) ### Miscellaneous * **bb:** Remove -Wfatal-errors ([#3318](#3318)) ([4229173](4229173)) * Clarify that barretenberg mirror should not take PRs ([#3303](#3303)) ([13f1a1d](13f1a1d)) * Clean up Plonk widgets ([#3305](#3305)) ([4623d91](4623d91)) * **docs:** Aztec.nr logging page ([#3281](#3281)) ([11e6ca7](11e6ca7)) * **docs:** Update netlify.toml and fix build ([#3304](#3304)) ([df76636](df76636)) * Explicitly instantiate Goblin translator relations ([#3239](#3239)) ([e3b5fb0](e3b5fb0)) * Plain struct flavor entities ([#3277](#3277)) ([f109512](f109512)) * Remove bn254 instantiation of eccvm plus naming changes ([#3330](#3330)) ([23d1e2d](23d1e2d)) * Replace computing hashes in circuits wasm, with computing them in ts via bb.js pedersen call. ([#3114](#3114)) ([87eeb71](87eeb71)) * Revert build-debug folder for debug preset ([#3324](#3324)) ([43a2e6b](43a2e6b)) * Towards plain struct flavor entities ([#3216](#3216)) ([3ba89cf](3ba89cf)) * Typo fixes based on cspell ([#3319](#3319)) ([8ae44dd](8ae44dd)) </details> <details><summary>barretenberg.js: 0.15.0</summary> ## [0.15.0](barretenberg.js-v0.14.2...barretenberg.js-v0.15.0) (2023-11-16) ### ⚠ BREAKING CHANGES * Replace computing hashes in circuits wasm, with computing them in ts via bb.js pedersen call. ([#3114](#3114)) ### Bug Fixes * Fix block constraint key divergence bug. ([#3256](#3256)) ([1c71a0c](1c71a0c)) ### Miscellaneous * Replace computing hashes in circuits wasm, with computing them in ts via bb.js pedersen call. ([#3114](#3114)) ([87eeb71](87eeb71)) * Typo fixes based on cspell ([#3319](#3319)) ([8ae44dd](8ae44dd)) </details> <details><summary>barretenberg: 0.15.0</summary> ## [0.15.0](barretenberg-v0.14.2...barretenberg-v0.15.0) (2023-11-16) ### ⚠ BREAKING CHANGES * Replace computing hashes in circuits wasm, with computing them in ts via bb.js pedersen call. ([#3114](#3114)) ### Features * **bb:** Add msan preset ([#3284](#3284)) ([bcf025c](bcf025c)) * Protogalaxy combiner quotient ([#3245](#3245)) ([db0f3ab](db0f3ab)) * Ultra honk arith from ultra ([#3274](#3274)) ([ec2b805](ec2b805)) ### Bug Fixes * Debug build ([#3283](#3283)) ([aca2624](aca2624)) * Fix block constraint key divergence bug. ([#3256](#3256)) ([1c71a0c](1c71a0c)) ### Miscellaneous * **bb:** Remove -Wfatal-errors ([#3318](#3318)) ([4229173](4229173)) * Clarify that barretenberg mirror should not take PRs ([#3303](#3303)) ([13f1a1d](13f1a1d)) * Clean up Plonk widgets ([#3305](#3305)) ([4623d91](4623d91)) * Explicitly instantiate Goblin translator relations ([#3239](#3239)) ([e3b5fb0](e3b5fb0)) * Plain struct flavor entities ([#3277](#3277)) ([f109512](f109512)) * Remove bn254 instantiation of eccvm plus naming changes ([#3330](#3330)) ([23d1e2d](23d1e2d)) * Replace computing hashes in circuits wasm, with computing them in ts via bb.js pedersen call. ([#3114](#3114)) ([87eeb71](87eeb71)) * Revert build-debug folder for debug preset ([#3324](#3324)) ([43a2e6b](43a2e6b)) * Towards plain struct flavor entities ([#3216](#3216)) ([3ba89cf](3ba89cf)) * Typo fixes based on cspell ([#3319](#3319)) ([8ae44dd](8ae44dd)) </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.15.0</summary> ## [0.15.0](AztecProtocol/aztec-packages@aztec-packages-v0.14.2...aztec-packages-v0.15.0) (2023-11-16) ### ⚠ BREAKING CHANGES * Replace computing hashes in circuits wasm, with computing them in ts via bb.js pedersen call. ([#3114](AztecProtocol/aztec-packages#3114)) ### Features * **bb:** Add msan preset ([#3284](AztecProtocol/aztec-packages#3284)) ([bcf025c](AztecProtocol/aztec-packages@bcf025c)) * Enable merge and root rollup circuits in noir ([#3248](AztecProtocol/aztec-packages#3248)) ([68555fc](AztecProtocol/aztec-packages@68555fc)) * Protogalaxy combiner quotient ([#3245](AztecProtocol/aztec-packages#3245)) ([db0f3ab](AztecProtocol/aztec-packages@db0f3ab)) * Public kernel in noir ([#3186](AztecProtocol/aztec-packages#3186)) ([15a522b](AztecProtocol/aztec-packages@15a522b)) * Ultra honk arith from ultra ([#3274](AztecProtocol/aztec-packages#3274)) ([ec2b805](AztecProtocol/aztec-packages@ec2b805)) ### Bug Fixes * Debug build ([#3283](AztecProtocol/aztec-packages#3283)) ([aca2624](AztecProtocol/aztec-packages@aca2624)) * Fix block constraint key divergence bug. ([#3256](AztecProtocol/aztec-packages#3256)) ([1c71a0c](AztecProtocol/aztec-packages@1c71a0c)) * Main.md typo ([#3278](AztecProtocol/aztec-packages#3278)) ([cb87c4d](AztecProtocol/aztec-packages@cb87c4d)) * Typo fix roundup ([#3302](AztecProtocol/aztec-packages#3302)) ([9dd778d](AztecProtocol/aztec-packages@9dd778d)) ### Miscellaneous * **bb:** Remove -Wfatal-errors ([#3318](AztecProtocol/aztec-packages#3318)) ([4229173](AztecProtocol/aztec-packages@4229173)) * Clarify that barretenberg mirror should not take PRs ([#3303](AztecProtocol/aztec-packages#3303)) ([13f1a1d](AztecProtocol/aztec-packages@13f1a1d)) * Clean up Plonk widgets ([#3305](AztecProtocol/aztec-packages#3305)) ([4623d91](AztecProtocol/aztec-packages@4623d91)) * **docs:** Aztec.nr logging page ([#3281](AztecProtocol/aztec-packages#3281)) ([11e6ca7](AztecProtocol/aztec-packages@11e6ca7)) * **docs:** Update netlify.toml and fix build ([#3304](AztecProtocol/aztec-packages#3304)) ([df76636](AztecProtocol/aztec-packages@df76636)) * Explicitly instantiate Goblin translator relations ([#3239](AztecProtocol/aztec-packages#3239)) ([e3b5fb0](AztecProtocol/aztec-packages@e3b5fb0)) * Plain struct flavor entities ([#3277](AztecProtocol/aztec-packages#3277)) ([f109512](AztecProtocol/aztec-packages@f109512)) * Remove bn254 instantiation of eccvm plus naming changes ([#3330](AztecProtocol/aztec-packages#3330)) ([23d1e2d](AztecProtocol/aztec-packages@23d1e2d)) * Replace computing hashes in circuits wasm, with computing them in ts via bb.js pedersen call. ([#3114](AztecProtocol/aztec-packages#3114)) ([87eeb71](AztecProtocol/aztec-packages@87eeb71)) * Revert build-debug folder for debug preset ([#3324](AztecProtocol/aztec-packages#3324)) ([43a2e6b](AztecProtocol/aztec-packages@43a2e6b)) * Towards plain struct flavor entities ([#3216](AztecProtocol/aztec-packages#3216)) ([3ba89cf](AztecProtocol/aztec-packages@3ba89cf)) * Typo fixes based on cspell ([#3319](AztecProtocol/aztec-packages#3319)) ([8ae44dd](AztecProtocol/aztec-packages@8ae44dd)) </details> <details><summary>barretenberg.js: 0.15.0</summary> ## [0.15.0](AztecProtocol/aztec-packages@barretenberg.js-v0.14.2...barretenberg.js-v0.15.0) (2023-11-16) ### ⚠ BREAKING CHANGES * Replace computing hashes in circuits wasm, with computing them in ts via bb.js pedersen call. ([#3114](AztecProtocol/aztec-packages#3114)) ### Bug Fixes * Fix block constraint key divergence bug. ([#3256](AztecProtocol/aztec-packages#3256)) ([1c71a0c](AztecProtocol/aztec-packages@1c71a0c)) ### Miscellaneous * Replace computing hashes in circuits wasm, with computing them in ts via bb.js pedersen call. ([#3114](AztecProtocol/aztec-packages#3114)) ([87eeb71](AztecProtocol/aztec-packages@87eeb71)) * Typo fixes based on cspell ([#3319](AztecProtocol/aztec-packages#3319)) ([8ae44dd](AztecProtocol/aztec-packages@8ae44dd)) </details> <details><summary>barretenberg: 0.15.0</summary> ## [0.15.0](AztecProtocol/aztec-packages@barretenberg-v0.14.2...barretenberg-v0.15.0) (2023-11-16) ### ⚠ BREAKING CHANGES * Replace computing hashes in circuits wasm, with computing them in ts via bb.js pedersen call. ([#3114](AztecProtocol/aztec-packages#3114)) ### Features * **bb:** Add msan preset ([#3284](AztecProtocol/aztec-packages#3284)) ([bcf025c](AztecProtocol/aztec-packages@bcf025c)) * Protogalaxy combiner quotient ([#3245](AztecProtocol/aztec-packages#3245)) ([db0f3ab](AztecProtocol/aztec-packages@db0f3ab)) * Ultra honk arith from ultra ([#3274](AztecProtocol/aztec-packages#3274)) ([ec2b805](AztecProtocol/aztec-packages@ec2b805)) ### Bug Fixes * Debug build ([#3283](AztecProtocol/aztec-packages#3283)) ([aca2624](AztecProtocol/aztec-packages@aca2624)) * Fix block constraint key divergence bug. ([#3256](AztecProtocol/aztec-packages#3256)) ([1c71a0c](AztecProtocol/aztec-packages@1c71a0c)) ### Miscellaneous * **bb:** Remove -Wfatal-errors ([#3318](AztecProtocol/aztec-packages#3318)) ([4229173](AztecProtocol/aztec-packages@4229173)) * Clarify that barretenberg mirror should not take PRs ([#3303](AztecProtocol/aztec-packages#3303)) ([13f1a1d](AztecProtocol/aztec-packages@13f1a1d)) * Clean up Plonk widgets ([#3305](AztecProtocol/aztec-packages#3305)) ([4623d91](AztecProtocol/aztec-packages@4623d91)) * Explicitly instantiate Goblin translator relations ([#3239](AztecProtocol/aztec-packages#3239)) ([e3b5fb0](AztecProtocol/aztec-packages@e3b5fb0)) * Plain struct flavor entities ([#3277](AztecProtocol/aztec-packages#3277)) ([f109512](AztecProtocol/aztec-packages@f109512)) * Remove bn254 instantiation of eccvm plus naming changes ([#3330](AztecProtocol/aztec-packages#3330)) ([23d1e2d](AztecProtocol/aztec-packages@23d1e2d)) * Replace computing hashes in circuits wasm, with computing them in ts via bb.js pedersen call. ([#3114](AztecProtocol/aztec-packages#3114)) ([87eeb71](AztecProtocol/aztec-packages@87eeb71)) * Revert build-debug folder for debug preset ([#3324](AztecProtocol/aztec-packages#3324)) ([43a2e6b](AztecProtocol/aztec-packages@43a2e6b)) * Towards plain struct flavor entities ([#3216](AztecProtocol/aztec-packages#3216)) ([3ba89cf](AztecProtocol/aztec-packages@3ba89cf)) * Typo fixes based on cspell ([#3319](AztecProtocol/aztec-packages#3319)) ([8ae44dd](AztecProtocol/aztec-packages@8ae44dd)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
elliptic
version of pedersen as it can be much faster than@noble/curves
(WARNING: Jest totally messes with benchmarks and can't be trusted for timings with this stuff). Leaving noble version in for now in case want to revisit, but not exported via index. Theelliptic
version is also just there as reference (maybe useful in future).foundation/crypto/pedersen/pedersen.wasm.ts
(and defaults to using it via index.ts) that mimics our pure TS pedersen api, but uses the bb.js wasm.foundation/crypto/pedersen
leverages top-level await to load the wasm as a global, so we can remove a tonne of async await calls.hashVK
.portal
yarn thingy. What does this mean for releases? (edit: This would probably have broken canary. This PR disabled canary. chore: Disable canary. #3244)foundation/crypto/pedersen
, got rid ofcircuits/barretenberg/crypto/pedersen
wrapper.DEBUG_COLOR=1
.test()
toit()
(was faffing with other test runner when profiling pedersen).performance.now
rather thanDate.getTime()
madge
as a tool to detect circular deps.TODO in subsequent PR's.
abis.ts
to exist as hash functions on the various types.