-
Notifications
You must be signed in to change notification settings - Fork 270
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
feat: adding structure to Transcript #2937
Conversation
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.
|
created transcript in goblin_ultra
void print() { manifest.print(); } | ||
}; | ||
|
||
template <typename FF> class ProverTranscript : public BaseTranscript<FF> { |
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.
deleting ProverTranscript and VerifierTranscript and merging it with BaseTranscript so that I do not have to define Prover/Verifier Transcripts that inherit from each flavor Transcript class.
* @param label Human readable name for the challenge. | ||
* @return deserialized element of type T | ||
*/ | ||
template <class T> T receive_from_prover(const std::string& label) |
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.
code is not new; just moved and num_bytes_read_ was renamed to num_bytes_read
made goblin ultra transcript tests
small update to transcript test to be random
builder.add_public_variable(a); | ||
} | ||
|
||
void generate_random_test_circuit(auto& builder) |
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.
probably should just use this function instead of the other function in all places
return manifest_expected; | ||
} | ||
|
||
void generate_test_circuit(auto& builder) |
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.
mostly copied from generate_test_circuit in goblin_ultra_composer.test.cpp, but with only 1 big add gate.
|
||
return manifest_expected; | ||
} | ||
proof_system::ECCVMCircuitBuilder<Flavor> generate_trace(numeric::random::Engine* engine = nullptr) |
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.
copied from eccvm_composer.test.cpp
barretenberg/cpp/src/barretenberg/honk/flavor/goblin_translator.hpp
Outdated
Show resolved
Hide resolved
@@ -396,6 +396,127 @@ template <typename BuilderType> class UltraRecursive_ { | |||
this->lagrange_last = verification_key->lagrange_last; | |||
} | |||
}; | |||
|
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.
should be identical to Ultra Transcript
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.
except with all the qualifiers that come from templating
@@ -168,7 +169,7 @@ template <typename Flavor> bool ECCVMVerifier_<Flavor>::verify_proof(const plonk | |||
transcript.template receive_from_prover<Commitment>(commitment_labels.lookup_read_counts_1); | |||
|
|||
// Get challenge for sorted list batching and wire four memory records | |||
auto [beta, gamma] = transcript.get_challenges("bbeta", "gamma"); |
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.
Zac's typo I think; was confused how the manifest test was failing for a bit.
barretenberg/cpp/src/barretenberg/honk/proof_system/protogalaxy_prover.hpp
Show resolved
Hide resolved
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 work! Please make the small changes I request and then merge when ready (please merge master one more time, and remove the checklist from the merge commit message).
* @param element | ||
* @param proof_data | ||
*/ | ||
template <typename T> void serialize_object(const T& element, std::vector<uint8_t>& proof_data) |
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.
Could you rename these to serialize_to/from_buffer
to align more with existing names? The word "object" isn't doing much here.
barretenberg/cpp/src/barretenberg/stdlib/recursion/honk/transcript/transcript.test.cpp
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/honk/proof_system/protogalaxy_prover.hpp
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/honk/flavor/goblin_translator.hpp
Outdated
Show resolved
Hide resolved
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-packages: 0.13.0</summary> ## [0.13.0](aztec-packages-v0.12.0...aztec-packages-v0.13.0) (2023-10-31) ### ⚠ BREAKING CHANGES * PXE.getNotes(...) + refactor of note types ([#3051](#3051)) ### Features * `FieldNote` ([#3037](#3037)) ([3d1ffd0](3d1ffd0)) * Add Aztec Boxes page to docs ([#2569](#2569)) ([997c15c](997c15c)) * Adding structure to Transcript ([#2937](#2937)) ([db67aa1](db67aa1)) * Compile noir contracts with noir_wasm ([#2737](#2737)) ([524cecf](524cecf)) * Dockerize aztec-cli ([#3031](#3031)) ([ec2e3c2](ec2e3c2)) * Efficient ZM quotient computation ([#3016](#3016)) ([ebda5fc](ebda5fc)) * **feature_branch:** Private Kernel Circuit ([#2740](#2740)) ([f800a36](f800a36)) * Measure plonk rounds ([#3065](#3065)) ([c8e1d8b](c8e1d8b)) * Migrate the init kernel CPP tests to noir ([#3091](#3091)) ([906429f](906429f)) * New script to output table of benchmarks for README pasting. ([#2780](#2780)) ([6c20b45](6c20b45)) * Pedersen in typescript. ([#3111](#3111)) ([933f1b2](933f1b2)) * Protogalaxy folding of challenges ([#2935](#2935)) ([7ed30e8](7ed30e8)) * PXE.getNotes(...) + refactor of note types ([#3051](#3051)) ([16abb5a](16abb5a)) * Zeromorph with concatenation (Goblin Translator part 10) ([#3006](#3006)) ([70b0f17](70b0f17)) ### Bug Fixes * Bad contract txs publishing contract data ([#2673](#2673)) ([ccd4611](ccd4611)) * Better error message for compute_note_hash_and_nullifier. ([#3097](#3097)) ([57bec53](57bec53)) * Broken `FieldNote` test ([#3135](#3135)) ([fe78ecf](fe78ecf)) * Docker-compose up, rather than run. ([#3081](#3081)) ([242f780](242f780)) * Formatting ([#3070](#3070)) ([e1633d3](e1633d3)) * Minor stale naming fix ([#3117](#3117)) ([a6786ae](a6786ae)) * Push cli docker image to docker hub ([#3120](#3120)) ([ccad50f](ccad50f)) * Remove duplicate terraform resource definition ([#3066](#3066)) ([d5abadb](d5abadb)) * Retry request spot ([#3116](#3116)) ([82de5f1](82de5f1)) ### Miscellaneous * Add stdlib tests for pedersen commitment ([#3075](#3075)) ([87fa621](87fa621)) * Automatic c_binds for commit should return a point instead of an Fr element ([#3072](#3072)) ([2e289a5](2e289a5)) * Cleanup remaining mentions of `compress` with pedersen in cpp and ts ([#3074](#3074)) ([52cf383](52cf383)) * E2e on spots [ci rebuild] ([#3068](#3068)) ([15db6bf](15db6bf)) * Fix dapp_testing e2e race condition ([#3094](#3094)) ([89e7c21](89e7c21)) * Remove docs mirror ([#3122](#3122)) ([3fa51e2](3fa51e2)) * Remove endomorphism coefficient from ecc_add_gate ([#3115](#3115)) ([d294987](d294987)) * Remove unecessary calls to `pedersen__init` ([#3079](#3079)) ([84f8db2](84f8db2)) * Remove unused pedersen c_binds ([#3058](#3058)) ([e71e5f9](e71e5f9)) * Removes pedersen commit native pairs method ([#3073](#3073)) ([69a34c7](69a34c7)) * Rename private-kernel subpackage to protocol-circuits ([#3134](#3134)) ([3e07104](3e07104)) ### Documentation * Initial keys spec ([#3035](#3035)) ([4b24c58](4b24c58)) </details> <details><summary>barretenberg.js: 0.13.0</summary> ## [0.13.0](barretenberg.js-v0.12.0...barretenberg.js-v0.13.0) (2023-10-31) ### Features * New script to output table of benchmarks for README pasting. ([#2780](#2780)) ([6c20b45](6c20b45)) ### Miscellaneous * Automatic c_binds for commit should return a point instead of an Fr element ([#3072](#3072)) ([2e289a5](2e289a5)) * Remove unecessary calls to `pedersen__init` ([#3079](#3079)) ([84f8db2](84f8db2)) * Remove unused pedersen c_binds ([#3058](#3058)) ([e71e5f9](e71e5f9)) </details> <details><summary>barretenberg: 0.13.0</summary> ## [0.13.0](barretenberg-v0.12.0...barretenberg-v0.13.0) (2023-10-31) ### Features * Adding structure to Transcript ([#2937](#2937)) ([db67aa1](db67aa1)) * Efficient ZM quotient computation ([#3016](#3016)) ([ebda5fc](ebda5fc)) * Measure plonk rounds ([#3065](#3065)) ([c8e1d8b](c8e1d8b)) * New script to output table of benchmarks for README pasting. ([#2780](#2780)) ([6c20b45](6c20b45)) * Pedersen in typescript. ([#3111](#3111)) ([933f1b2](933f1b2)) * Protogalaxy folding of challenges ([#2935](#2935)) ([7ed30e8](7ed30e8)) * Zeromorph with concatenation (Goblin Translator part 10) ([#3006](#3006)) ([70b0f17](70b0f17)) ### Miscellaneous * Add stdlib tests for pedersen commitment ([#3075](#3075)) ([87fa621](87fa621)) * Automatic c_binds for commit should return a point instead of an Fr element ([#3072](#3072)) ([2e289a5](2e289a5)) * Cleanup remaining mentions of `compress` with pedersen in cpp and ts ([#3074](#3074)) ([52cf383](52cf383)) * Remove endomorphism coefficient from ecc_add_gate ([#3115](#3115)) ([d294987](d294987)) * Remove unecessary calls to `pedersen__init` ([#3079](#3079)) ([84f8db2](84f8db2)) * Remove unused pedersen c_binds ([#3058](#3058)) ([e71e5f9](e71e5f9)) * Removes pedersen commit native pairs method ([#3073](#3073)) ([69a34c7](69a34c7)) </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.13.0</summary> ## [0.13.0](AztecProtocol/aztec-packages@aztec-packages-v0.12.0...aztec-packages-v0.13.0) (2023-10-31) ### ⚠ BREAKING CHANGES * PXE.getNotes(...) + refactor of note types ([#3051](AztecProtocol/aztec-packages#3051)) ### Features * `FieldNote` ([#3037](AztecProtocol/aztec-packages#3037)) ([3d1ffd0](AztecProtocol/aztec-packages@3d1ffd0)) * Add Aztec Boxes page to docs ([#2569](AztecProtocol/aztec-packages#2569)) ([997c15c](AztecProtocol/aztec-packages@997c15c)) * Adding structure to Transcript ([#2937](AztecProtocol/aztec-packages#2937)) ([db67aa1](AztecProtocol/aztec-packages@db67aa1)) * Compile noir contracts with noir_wasm ([#2737](AztecProtocol/aztec-packages#2737)) ([524cecf](AztecProtocol/aztec-packages@524cecf)) * Dockerize aztec-cli ([#3031](AztecProtocol/aztec-packages#3031)) ([ec2e3c2](AztecProtocol/aztec-packages@ec2e3c2)) * Efficient ZM quotient computation ([#3016](AztecProtocol/aztec-packages#3016)) ([ebda5fc](AztecProtocol/aztec-packages@ebda5fc)) * **feature_branch:** Private Kernel Circuit ([#2740](AztecProtocol/aztec-packages#2740)) ([f800a36](AztecProtocol/aztec-packages@f800a36)) * Measure plonk rounds ([#3065](AztecProtocol/aztec-packages#3065)) ([c8e1d8b](AztecProtocol/aztec-packages@c8e1d8b)) * Migrate the init kernel CPP tests to noir ([#3091](AztecProtocol/aztec-packages#3091)) ([906429f](AztecProtocol/aztec-packages@906429f)) * New script to output table of benchmarks for README pasting. ([#2780](AztecProtocol/aztec-packages#2780)) ([6c20b45](AztecProtocol/aztec-packages@6c20b45)) * Pedersen in typescript. ([#3111](AztecProtocol/aztec-packages#3111)) ([933f1b2](AztecProtocol/aztec-packages@933f1b2)) * Protogalaxy folding of challenges ([#2935](AztecProtocol/aztec-packages#2935)) ([7ed30e8](AztecProtocol/aztec-packages@7ed30e8)) * PXE.getNotes(...) + refactor of note types ([#3051](AztecProtocol/aztec-packages#3051)) ([16abb5a](AztecProtocol/aztec-packages@16abb5a)) * Zeromorph with concatenation (Goblin Translator part 10) ([#3006](AztecProtocol/aztec-packages#3006)) ([70b0f17](AztecProtocol/aztec-packages@70b0f17)) ### Bug Fixes * Bad contract txs publishing contract data ([#2673](AztecProtocol/aztec-packages#2673)) ([ccd4611](AztecProtocol/aztec-packages@ccd4611)) * Better error message for compute_note_hash_and_nullifier. ([#3097](AztecProtocol/aztec-packages#3097)) ([57bec53](AztecProtocol/aztec-packages@57bec53)) * Broken `FieldNote` test ([#3135](AztecProtocol/aztec-packages#3135)) ([fe78ecf](AztecProtocol/aztec-packages@fe78ecf)) * Docker-compose up, rather than run. ([#3081](AztecProtocol/aztec-packages#3081)) ([242f780](AztecProtocol/aztec-packages@242f780)) * Formatting ([#3070](AztecProtocol/aztec-packages#3070)) ([e1633d3](AztecProtocol/aztec-packages@e1633d3)) * Minor stale naming fix ([#3117](AztecProtocol/aztec-packages#3117)) ([a6786ae](AztecProtocol/aztec-packages@a6786ae)) * Push cli docker image to docker hub ([#3120](AztecProtocol/aztec-packages#3120)) ([ccad50f](AztecProtocol/aztec-packages@ccad50f)) * Remove duplicate terraform resource definition ([#3066](AztecProtocol/aztec-packages#3066)) ([d5abadb](AztecProtocol/aztec-packages@d5abadb)) * Retry request spot ([#3116](AztecProtocol/aztec-packages#3116)) ([82de5f1](AztecProtocol/aztec-packages@82de5f1)) ### Miscellaneous * Add stdlib tests for pedersen commitment ([#3075](AztecProtocol/aztec-packages#3075)) ([87fa621](AztecProtocol/aztec-packages@87fa621)) * Automatic c_binds for commit should return a point instead of an Fr element ([#3072](AztecProtocol/aztec-packages#3072)) ([2e289a5](AztecProtocol/aztec-packages@2e289a5)) * Cleanup remaining mentions of `compress` with pedersen in cpp and ts ([#3074](AztecProtocol/aztec-packages#3074)) ([52cf383](AztecProtocol/aztec-packages@52cf383)) * E2e on spots [ci rebuild] ([#3068](AztecProtocol/aztec-packages#3068)) ([15db6bf](AztecProtocol/aztec-packages@15db6bf)) * Fix dapp_testing e2e race condition ([#3094](AztecProtocol/aztec-packages#3094)) ([89e7c21](AztecProtocol/aztec-packages@89e7c21)) * Remove docs mirror ([#3122](AztecProtocol/aztec-packages#3122)) ([3fa51e2](AztecProtocol/aztec-packages@3fa51e2)) * Remove endomorphism coefficient from ecc_add_gate ([#3115](AztecProtocol/aztec-packages#3115)) ([d294987](AztecProtocol/aztec-packages@d294987)) * Remove unecessary calls to `pedersen__init` ([#3079](AztecProtocol/aztec-packages#3079)) ([84f8db2](AztecProtocol/aztec-packages@84f8db2)) * Remove unused pedersen c_binds ([#3058](AztecProtocol/aztec-packages#3058)) ([e71e5f9](AztecProtocol/aztec-packages@e71e5f9)) * Removes pedersen commit native pairs method ([#3073](AztecProtocol/aztec-packages#3073)) ([69a34c7](AztecProtocol/aztec-packages@69a34c7)) * Rename private-kernel subpackage to protocol-circuits ([#3134](AztecProtocol/aztec-packages#3134)) ([3e07104](AztecProtocol/aztec-packages@3e07104)) ### Documentation * Initial keys spec ([#3035](AztecProtocol/aztec-packages#3035)) ([4b24c58](AztecProtocol/aztec-packages@4b24c58)) </details> <details><summary>barretenberg.js: 0.13.0</summary> ## [0.13.0](AztecProtocol/aztec-packages@barretenberg.js-v0.12.0...barretenberg.js-v0.13.0) (2023-10-31) ### Features * New script to output table of benchmarks for README pasting. ([#2780](AztecProtocol/aztec-packages#2780)) ([6c20b45](AztecProtocol/aztec-packages@6c20b45)) ### Miscellaneous * Automatic c_binds for commit should return a point instead of an Fr element ([#3072](AztecProtocol/aztec-packages#3072)) ([2e289a5](AztecProtocol/aztec-packages@2e289a5)) * Remove unecessary calls to `pedersen__init` ([#3079](AztecProtocol/aztec-packages#3079)) ([84f8db2](AztecProtocol/aztec-packages@84f8db2)) * Remove unused pedersen c_binds ([#3058](AztecProtocol/aztec-packages#3058)) ([e71e5f9](AztecProtocol/aztec-packages@e71e5f9)) </details> <details><summary>barretenberg: 0.13.0</summary> ## [0.13.0](AztecProtocol/aztec-packages@barretenberg-v0.12.0...barretenberg-v0.13.0) (2023-10-31) ### Features * Adding structure to Transcript ([#2937](AztecProtocol/aztec-packages#2937)) ([db67aa1](AztecProtocol/aztec-packages@db67aa1)) * Efficient ZM quotient computation ([#3016](AztecProtocol/aztec-packages#3016)) ([ebda5fc](AztecProtocol/aztec-packages@ebda5fc)) * Measure plonk rounds ([#3065](AztecProtocol/aztec-packages#3065)) ([c8e1d8b](AztecProtocol/aztec-packages@c8e1d8b)) * New script to output table of benchmarks for README pasting. ([#2780](AztecProtocol/aztec-packages#2780)) ([6c20b45](AztecProtocol/aztec-packages@6c20b45)) * Pedersen in typescript. ([#3111](AztecProtocol/aztec-packages#3111)) ([933f1b2](AztecProtocol/aztec-packages@933f1b2)) * Protogalaxy folding of challenges ([#2935](AztecProtocol/aztec-packages#2935)) ([7ed30e8](AztecProtocol/aztec-packages@7ed30e8)) * Zeromorph with concatenation (Goblin Translator part 10) ([#3006](AztecProtocol/aztec-packages#3006)) ([70b0f17](AztecProtocol/aztec-packages@70b0f17)) ### Miscellaneous * Add stdlib tests for pedersen commitment ([#3075](AztecProtocol/aztec-packages#3075)) ([87fa621](AztecProtocol/aztec-packages@87fa621)) * Automatic c_binds for commit should return a point instead of an Fr element ([#3072](AztecProtocol/aztec-packages#3072)) ([2e289a5](AztecProtocol/aztec-packages@2e289a5)) * Cleanup remaining mentions of `compress` with pedersen in cpp and ts ([#3074](AztecProtocol/aztec-packages#3074)) ([52cf383](AztecProtocol/aztec-packages@52cf383)) * Remove endomorphism coefficient from ecc_add_gate ([#3115](AztecProtocol/aztec-packages#3115)) ([d294987](AztecProtocol/aztec-packages@d294987)) * Remove unecessary calls to `pedersen__init` ([#3079](AztecProtocol/aztec-packages#3079)) ([84f8db2](AztecProtocol/aztec-packages@84f8db2)) * Remove unused pedersen c_binds ([#3058](AztecProtocol/aztec-packages#3058)) ([e71e5f9](AztecProtocol/aztec-packages@e71e5f9)) * Removes pedersen commit native pairs method ([#3073](AztecProtocol/aztec-packages#3073)) ([69a34c7](AztecProtocol/aztec-packages@69a34c7)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
Adding structuring feature to transcript based on the flavor and resolves AztecProtocol/barretenberg#656.
The main two functions added are
deserialize_full_transcript()
andserialize_full_transcript()
, which are defined for each flavored transcript derived class. These classes are defined in the flavor classes, and primarily declare all of the transcript objects as member variables.deserialize_full_transcript()
will take a full proof generated by the flavored prover, and put all those bytes into the member variables. Then, one can now view and modify the objects by just using the member variables. In order to actually push the modification, one has to callserialize_full_transcript()
in order to regenerate the proof from the (modified) member variables. The tests in(flavor)_transcript.test.cpp
illustrate how to use these functions in more depth. I also modified the tests instdlib/recursion/honk/verifier/goblin_verifier.test.cpp
and instdlib/recursion/honk/verifier/verifier.test.cpp
.Got rid of the ProverTranscript and VerifierTranscript and merging them into the BaseTranscript. This was done to avoid having to create these for every flavor derived class and because they did not provide much on top of the BaseTranscript.
Created transcript tests for flavors besides Ultra.
Transcript breakdown for all flavors: https://docs.google.com/spreadsheets/d/1TpkkPj9o5ZXr_kWT7WsquXSEZY10C1Lt3BWeCA7Qe9U/edit#gid=0.
Some design considerations: https://hackmd.io/o8HbTiujTGa4sLccAHQaxw?both.