-
Notifications
You must be signed in to change notification settings - Fork 305
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: update honk recursion constraint #6545
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. Proof generationEach column represents the number of threads used in proof generation.
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 kernel circuit run across all benchmarks.
Stats on running time collected for app circuits
Tree insertion statsThe duration to insert a fixed batch of leaves into each tree type.
MiscellaneousTransaction sizes based on how many contract classes are registered in the tx.
Transaction size based on fee payment method | Metric | | |
Co-authored-by: Lucas Xia <[email protected]>
…have same x value?)
…cursion separator challenge)
indexing and other related fixes
std::array<uint32_t, HonkRecursionConstraint::AGGREGATION_OBJECT_SIZE> nested_aggregation_object = {}; | ||
// If the proof has public inputs attached to it, we should handle setting the nested aggregation object |
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.
not sure how to replace this check that the aggregation object is there. Maybe impossible given proof sizes are variable.
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.
I think it is not possible given the proof sizes are variable. If we add some way to attach constant metadata to the opcode we should be able to determine this as well as other information about the proof (like which verifier we want to use)
…ocol/aztec-packages into lx/honk-recursion-constraint-2
barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp
Outdated
Show resolved
Hide resolved
@@ -26,7 +26,7 @@ template <typename Flavor> class UltraVerifier_ { | |||
bool verify_proof(const HonkProof& proof); | |||
|
|||
std::shared_ptr<VerificationKey> key; | |||
std::shared_ptr<Transcript> transcript; | |||
std::shared_ptr<Transcript> transcript; // this seems useless |
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.
I'll leave a todo here I guess
|
||
// TODO(luke): Eventually this will return something like aggregation_state but I'm simplifying for now until we | ||
// determine the exact interface. Simply returns the two pairing points. | ||
PairingPoints verify_proof(const HonkProof& proof); | ||
PairingPoints verify_proof(const StdlibProof<Builder>& proof); |
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.
just a new function that allows you directly pass in a stdlib proof
barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp
Outdated
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.
I like the use of one aggregation object in the constraint, simplifies the mental model. Mostly nits
barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp
Outdated
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp
Outdated
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp
Outdated
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp
Outdated
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.cpp
Outdated
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.test.cpp
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.test.cpp
Outdated
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp
Outdated
Show resolved
Hide resolved
barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.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.
LGTM. Just noting that we will need to test this against prove THEN verify rather than just prove AND verify to test we pass in the case of invalid witness assignments
std::array<uint32_t, HonkRecursionConstraint::AGGREGATION_OBJECT_SIZE> nested_aggregation_object = {}; | ||
// If the proof has public inputs attached to it, we should handle setting the nested aggregation object |
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.
I think it is not possible given the proof sizes are variable. If we add some way to attach constant metadata to the opcode we should be able to determine this as well as other information about the proof (like which verifier we want to use)
* master: feat: prepare circuit output for validation (#6678) chore: stop building/publishing `acvm_backend.wasm` (#6584) chore: add bench programs (#6566) chore: make public data update requests, note hashes, and unencrypted logs readonly in TS (#6658) git subrepo push --branch=master noir-projects/aztec-nr git_subrepo.sh: Fix parent in .gitrepo file. [skip ci] chore: replace relative paths to noir-protocol-circuits git subrepo push --branch=master barretenberg feat: update honk recursion constraint (#6545) feat: Add code-workspace and update build dirs (#6723) feat: Sync from noir (#6717) feat: folding acir programs (#6685) feat: sumcheck part of ECCVM recursive verifier instantiated as an UltraCircuit (#6413)
Closes AztecProtocol/barretenberg#933.
Updates recursion constraint for honk so that it calls the ultra honk recursive verifier.
Removes key hash from the constraint. Also recursively aggregates the aggregation objects.
Ignores the case where we don't have the witness values and want to use dummy witnesses.
Please read contributing guidelines and remove this line.