From 9cc7b7a33b0d22d85105d44b7513c688ce51fb36 Mon Sep 17 00:00:00 2001 From: lucasxia01 Date: Tue, 26 Mar 2024 18:33:41 +0000 Subject: [PATCH 1/6] move alphas generation to oink --- .../src/barretenberg/protogalaxy/protogalaxy_prover.cpp | 9 ++------- .../cpp/src/barretenberg/ultra_honk/oink_prover.cpp | 7 +++++++ .../cpp/src/barretenberg/ultra_honk/oink_prover.hpp | 2 ++ .../cpp/src/barretenberg/ultra_honk/ultra_prover.cpp | 9 +++------ .../cpp/src/barretenberg/ultra_honk/ultra_prover.hpp | 1 - 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover.cpp b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover.cpp index a1cb41cef73..c1ce74400bf 100644 --- a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover.cpp @@ -8,15 +8,10 @@ void ProtoGalaxyProver_::finalise_and_send_instance(std::shared { OinkProver oink_prover(instance->proving_key, commitment_key, transcript, domain_separator + '_'); - auto [relation_params] = oink_prover.prove(); + auto [relation_params, alphas] = oink_prover.prove(); instance->relation_parameters = std::move(relation_params); instance->prover_polynomials = ProverPolynomials(instance->proving_key); - - // Generate relation separators alphas for sumcheck - for (size_t idx = 0; idx < NUM_SUBRELATIONS - 1; idx++) { - instance->alphas[idx] = - transcript->template get_challenge(domain_separator + "_alpha_" + std::to_string(idx)); - } + instance->alphas = std::move(alphas); } template void ProtoGalaxyProver_::prepare_for_folding() diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.cpp index b5a5047443b..2df9685235e 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.cpp @@ -25,8 +25,15 @@ template OinkProverOutput OinkProver::pro // Compute grand product(s) and commitments. execute_grand_product_computation_round(); + // Generate relation separators alphas for sumcheck + RelationSeparator alphas; + for (size_t idx = 0; idx < alphas.size(); idx++) { + alphas[idx] = transcript->template get_challenge("Sumcheck:alpha_" + std::to_string(idx)); + } + return OinkProverOutput{ .relation_parameters = std::move(relation_parameters), + .alphas = std::move(alphas), }; } diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.hpp b/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.hpp index ba92115bdc5..c016cfb06c8 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.hpp @@ -26,6 +26,7 @@ namespace bb { template struct OinkProverOutput { bb::RelationParameters relation_parameters; + typename Flavor::RelationSeparator alphas; }; /** @@ -49,6 +50,7 @@ template class OinkProver { std::string domain_separator; typename Flavor::WitnessCommitments witness_commitments; typename Flavor::CommitmentLabels commitment_labels; + using RelationSeparator = typename Flavor::RelationSeparator; bb::RelationParameters relation_parameters; diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp index a8bce2bfc93..be4c4f9ab87 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp @@ -42,11 +42,7 @@ template void UltraProver_::execute_relation_chec using Sumcheck = SumcheckProver; auto circuit_size = instance->proving_key->circuit_size; auto sumcheck = Sumcheck(circuit_size, transcript); - RelationSeparator alphas; - for (size_t idx = 0; idx < alphas.size(); idx++) { - alphas[idx] = transcript->template get_challenge("Sumcheck:alpha_" + std::to_string(idx)); - } - instance->alphas = alphas; + std::vector gate_challenges(numeric::get_msb(circuit_size)); for (size_t idx = 0; idx < gate_challenges.size(); idx++) { gate_challenges[idx] = transcript->template get_challenge("Sumcheck:gate_challenge_" + std::to_string(idx)); @@ -79,8 +75,9 @@ template HonkProof& UltraProver_::export_proof() template HonkProof& UltraProver_::construct_proof() { - auto [relation_params] = oink_prover.prove(); + auto [relation_params, alphas] = oink_prover.prove(); instance->relation_parameters = std::move(relation_params); + instance->alphas = alphas; instance->prover_polynomials = ProverPolynomials(instance->proving_key); // Fiat-Shamir: alpha diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp index e5831b778ca..36f466e2004 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp @@ -25,7 +25,6 @@ template class UltraProver_ { using ProverInstance = ProverInstance_; using Instance = ProverInstance; using Transcript = typename Flavor::Transcript; - using RelationSeparator = typename Flavor::RelationSeparator; using ZeroMorph = ZeroMorphProver_; std::shared_ptr instance; From 29f9a0331f5f25bacd4bcbb60d562f7c772f13f2 Mon Sep 17 00:00:00 2001 From: lucasxia01 Date: Tue, 26 Mar 2024 21:38:37 +0000 Subject: [PATCH 2/6] use decider in ultra prover --- .../ultra_bench/ultra_honk_rounds.bench.cpp | 14 ++++- .../barretenberg/client_ivc/client_ivc.hpp | 2 +- .../protogalaxy/protogalaxy.test.cpp | 2 +- .../protogalaxy_recursive_verifier.test.cpp | 2 +- .../decider_prover.cpp | 0 .../decider_prover.hpp | 0 .../barretenberg/ultra_honk/ultra_prover.cpp | 58 +++++-------------- .../barretenberg/ultra_honk/ultra_prover.hpp | 8 --- 8 files changed, 31 insertions(+), 55 deletions(-) rename barretenberg/cpp/src/barretenberg/{protogalaxy => ultra_honk}/decider_prover.cpp (100%) rename barretenberg/cpp/src/barretenberg/{protogalaxy => ultra_honk}/decider_prover.hpp (100%) diff --git a/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp b/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp index e9093518f54..2342323e16a 100644 --- a/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp +++ b/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp @@ -3,6 +3,7 @@ #include "barretenberg/benchmark/ultra_bench/mock_circuits.hpp" #include "barretenberg/common/op_count_google_bench.hpp" #include "barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp" +#include "barretenberg/ultra_honk/decider_prover.hpp" #include "barretenberg/ultra_honk/ultra_prover.hpp" using namespace benchmark; @@ -52,8 +53,17 @@ BB_PROFILE static void test_round_inner(State& state, GoblinUltraProver& prover, // we need to get the relation_parameters and prover_polynomials from the oink_prover prover.instance->relation_parameters = prover.oink_prover.relation_parameters; prover.instance->prover_polynomials = GoblinUltraFlavor::ProverPolynomials(prover.instance->proving_key); - time_if_index(RELATION_CHECK, [&] { prover.execute_relation_check_rounds(); }); - time_if_index(ZEROMORPH, [&] { prover.execute_zeromorph_rounds(); }); + + std::vector gate_challenges(numeric::get_msb(prover.instance->proving_key->circuit_size)); + for (size_t idx = 0; idx < gate_challenges.size(); idx++) { + gate_challenges[idx] = prover.transcript->template get_challenge( + "Sumcheck:gate_challenge_" + std::to_string(idx)); + } + prover.instance->gate_challenges = gate_challenges; + + DeciderProver_ decider_prover(prover.instance, prover.transcript); + time_if_index(RELATION_CHECK, [&] { decider_prover.execute_relation_check_rounds(); }); + time_if_index(ZEROMORPH, [&] { decider_prover.execute_zeromorph_rounds(); }); } BB_PROFILE static void test_round(State& state, size_t index) noexcept { diff --git a/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.hpp b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.hpp index f2e0ee309c3..763aa8bfa51 100644 --- a/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.hpp +++ b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.hpp @@ -2,11 +2,11 @@ #include "barretenberg/goblin/goblin.hpp" #include "barretenberg/goblin/mock_circuits.hpp" -#include "barretenberg/protogalaxy/decider_prover.hpp" #include "barretenberg/protogalaxy/decider_verifier.hpp" #include "barretenberg/protogalaxy/protogalaxy_prover.hpp" #include "barretenberg/protogalaxy/protogalaxy_verifier.hpp" #include "barretenberg/sumcheck/instance/instances.hpp" +#include "barretenberg/ultra_honk/decider_prover.hpp" namespace bb { diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy.test.cpp b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy.test.cpp index 453e0d844d7..a1cbb6380ae 100644 --- a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy.test.cpp +++ b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy.test.cpp @@ -1,9 +1,9 @@ #include "barretenberg/goblin/mock_circuits.hpp" #include "barretenberg/polynomials/pow.hpp" -#include "barretenberg/protogalaxy/decider_prover.hpp" #include "barretenberg/protogalaxy/decider_verifier.hpp" #include "barretenberg/protogalaxy/protogalaxy_prover.hpp" #include "barretenberg/protogalaxy/protogalaxy_verifier.hpp" +#include "barretenberg/ultra_honk/decider_prover.hpp" #include diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/protogalaxy_recursive_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/protogalaxy_recursive_verifier.test.cpp index 22c9b7f29f4..9fc72ef0b5c 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/protogalaxy_recursive_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_recursion/verifier/protogalaxy_recursive_verifier.test.cpp @@ -1,7 +1,6 @@ #include "barretenberg/stdlib/honk_recursion/verifier/protogalaxy_recursive_verifier.hpp" #include "barretenberg/circuit_checker/circuit_checker.hpp" #include "barretenberg/common/test.hpp" -#include "barretenberg/protogalaxy/decider_prover.hpp" #include "barretenberg/protogalaxy/decider_verifier.hpp" #include "barretenberg/protogalaxy/protogalaxy_prover.hpp" #include "barretenberg/protogalaxy/protogalaxy_verifier.hpp" @@ -11,6 +10,7 @@ #include "barretenberg/stdlib/primitives/curves/bn254.hpp" #include "barretenberg/stdlib_circuit_builders/ultra_recursive_flavor.hpp" #include "barretenberg/sumcheck/instance/instances.hpp" +#include "barretenberg/ultra_honk/decider_prover.hpp" #include "barretenberg/ultra_honk/ultra_prover.hpp" #include "barretenberg/ultra_honk/ultra_verifier.hpp" diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/decider_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp similarity index 100% rename from barretenberg/cpp/src/barretenberg/protogalaxy/decider_prover.cpp rename to barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/decider_prover.hpp b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.hpp similarity index 100% rename from barretenberg/cpp/src/barretenberg/protogalaxy/decider_prover.hpp rename to barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.hpp diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp index be4c4f9ab87..ffb7cff543a 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp @@ -1,5 +1,6 @@ #include "ultra_prover.hpp" #include "barretenberg/sumcheck/sumcheck.hpp" +#include "barretenberg/ultra_honk/decider_prover.hpp" namespace bb { @@ -33,46 +34,11 @@ UltraProver_::UltraProver_(Builder& circuit) , oink_prover(instance->proving_key, commitment_key, transcript, "") {} -/** - * @brief Run Sumcheck resulting in u = (u_1,...,u_d) challenges and all evaluations at u being calculated. - * - */ -template void UltraProver_::execute_relation_check_rounds() -{ - using Sumcheck = SumcheckProver; - auto circuit_size = instance->proving_key->circuit_size; - auto sumcheck = Sumcheck(circuit_size, transcript); - - std::vector gate_challenges(numeric::get_msb(circuit_size)); - for (size_t idx = 0; idx < gate_challenges.size(); idx++) { - gate_challenges[idx] = transcript->template get_challenge("Sumcheck:gate_challenge_" + std::to_string(idx)); - } - instance->gate_challenges = gate_challenges; - sumcheck_output = sumcheck.prove(instance); -} - -/** - * @brief Execute the ZeroMorph protocol to prove the multilinear evaluations produced by Sumcheck - * @details See https://hackmd.io/dlf9xEwhTQyE3hiGbq4FsA?view for a complete description of the unrolled protocol. - * - * */ -template void UltraProver_::execute_zeromorph_rounds() -{ - ZeroMorph::prove(instance->prover_polynomials.get_unshifted(), - instance->prover_polynomials.get_to_be_shifted(), - sumcheck_output.claimed_evaluations.get_unshifted(), - sumcheck_output.claimed_evaluations.get_shifted(), - sumcheck_output.challenge, - commitment_key, - transcript); -} - template HonkProof& UltraProver_::export_proof() { proof = transcript->proof_data; return proof; } - template HonkProof& UltraProver_::construct_proof() { auto [relation_params, alphas] = oink_prover.prove(); @@ -80,15 +46,23 @@ template HonkProof& UltraProver_::construct_proof instance->alphas = alphas; instance->prover_polynomials = ProverPolynomials(instance->proving_key); - // Fiat-Shamir: alpha - // Run sumcheck subprotocol. - execute_relation_check_rounds(); + std::vector gate_challenges(numeric::get_msb(instance->proving_key->circuit_size)); + for (size_t idx = 0; idx < gate_challenges.size(); idx++) { + gate_challenges[idx] = transcript->template get_challenge("Sumcheck:gate_challenge_" + std::to_string(idx)); + } + instance->gate_challenges = gate_challenges; + + DeciderProver_ decider_prover(instance, transcript); + + // // Fiat-Shamir: alpha + // // Run sumcheck subprotocol. + // execute_relation_check_rounds(); - // Fiat-Shamir: rho, y, x, z - // Execute Zeromorph multilinear PCS - execute_zeromorph_rounds(); + // // Fiat-Shamir: rho, y, x, z + // // Execute Zeromorph multilinear PCS + // execute_zeromorph_rounds(); - return export_proof(); + return decider_prover.construct_proof(); } template class UltraProver_; diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp index 36f466e2004..f6c95b79df1 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp @@ -46,14 +46,6 @@ template class UltraProver_ { explicit UltraProver_(Builder&); - BB_PROFILE void execute_preamble_round(); - BB_PROFILE void execute_wire_commitments_round(); - BB_PROFILE void execute_sorted_list_accumulator_round(); - BB_PROFILE void execute_log_derivative_inverse_round(); - BB_PROFILE void execute_grand_product_computation_round(); - BB_PROFILE void execute_relation_check_rounds(); - BB_PROFILE void execute_zeromorph_rounds(); - HonkProof& export_proof(); HonkProof& construct_proof(); From 5ab3f4a2c2ccdd065ffdbb11123fb74063461708 Mon Sep 17 00:00:00 2001 From: lucasxia01 Date: Wed, 27 Mar 2024 16:48:06 +0000 Subject: [PATCH 3/6] removing HonkProof reference usage, instead we will just return a copy of proof data --- barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp | 4 ++-- barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.hpp | 4 ++-- .../barretenberg/translator_vm/goblin_translator_prover.cpp | 4 ++-- .../barretenberg/translator_vm/goblin_translator_prover.hpp | 4 ++-- .../cpp/src/barretenberg/ultra_honk/decider_prover.cpp | 6 +++--- .../cpp/src/barretenberg/ultra_honk/decider_prover.hpp | 4 ++-- .../cpp/src/barretenberg/ultra_honk/merge_verifier.cpp | 2 +- .../cpp/src/barretenberg/ultra_honk/ultra_prover.cpp | 6 +++--- .../cpp/src/barretenberg/ultra_honk/ultra_prover.hpp | 4 ++-- .../cpp/src/barretenberg/vm/generated/avm_prover.cpp | 4 ++-- .../cpp/src/barretenberg/vm/generated/avm_prover.hpp | 4 ++-- 11 files changed, 23 insertions(+), 23 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp index 5710d5c5b67..998bb70c072 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp @@ -194,13 +194,13 @@ template void ECCVMProver_::execute_transcript_co translation_batching_challenge_v = transcript->template get_challenge("Translation:batching_challenge"); } -template HonkProof& ECCVMProver_::export_proof() +template HonkProof ECCVMProver_::export_proof() { proof = transcript->export_proof(); return proof; } -template HonkProof& ECCVMProver_::construct_proof() +template HonkProof ECCVMProver_::construct_proof() { BB_OP_COUNT_TIME_NAME("ECCVMProver::construct_proof"); diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.hpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.hpp index bf607c47e2a..a6abc48c4d2 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.hpp @@ -38,8 +38,8 @@ template class ECCVMProver_ { BB_PROFILE void execute_zeromorph_rounds(); BB_PROFILE void execute_transcript_consistency_univariate_opening_round(); - HonkProof& export_proof(); - HonkProof& construct_proof(); + HonkProof export_proof(); + HonkProof construct_proof(); std::shared_ptr transcript; diff --git a/barretenberg/cpp/src/barretenberg/translator_vm/goblin_translator_prover.cpp b/barretenberg/cpp/src/barretenberg/translator_vm/goblin_translator_prover.cpp index 4022070e958..8e4c8f64bbf 100644 --- a/barretenberg/cpp/src/barretenberg/translator_vm/goblin_translator_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/translator_vm/goblin_translator_prover.cpp @@ -332,13 +332,13 @@ void GoblinTranslatorProver::execute_zeromorph_rounds() prover_polynomials.get_concatenation_groups()); } -HonkProof& GoblinTranslatorProver::export_proof() +HonkProof GoblinTranslatorProver::export_proof() { proof = transcript->export_proof(); return proof; } -HonkProof& GoblinTranslatorProver::construct_proof() +HonkProof GoblinTranslatorProver::construct_proof() { BB_OP_COUNT_TIME_NAME("GoblinTranslatorProver::construct_proof"); diff --git a/barretenberg/cpp/src/barretenberg/translator_vm/goblin_translator_prover.hpp b/barretenberg/cpp/src/barretenberg/translator_vm/goblin_translator_prover.hpp index 72c0e4010bf..70059668c2b 100644 --- a/barretenberg/cpp/src/barretenberg/translator_vm/goblin_translator_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/translator_vm/goblin_translator_prover.hpp @@ -42,8 +42,8 @@ class GoblinTranslatorProver { BB_PROFILE void execute_grand_product_computation_round(); BB_PROFILE void execute_relation_check_rounds(); BB_PROFILE void execute_zeromorph_rounds(); - HonkProof& export_proof(); - HonkProof& construct_proof(); + HonkProof export_proof(); + HonkProof construct_proof(); std::shared_ptr transcript = std::make_shared(); diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp index 0b13eefeb37..7de3c7c27cc 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp @@ -17,7 +17,7 @@ DeciderProver_::DeciderProver_(const std::shared_ptr& inst, const std::shared_ptr& transcript) : accumulator(std::move(inst)) , transcript(transcript) - , commitment_key(inst->proving_key->commitment_key) + , commitment_key(accumulator->proving_key->commitment_key) {} /** @@ -49,13 +49,13 @@ template void DeciderProver_::execute_zeromorph_r transcript); } -template HonkProof& DeciderProver_::export_proof() +template HonkProof DeciderProver_::export_proof() { proof = transcript->proof_data; return proof; } -template HonkProof& DeciderProver_::construct_proof() +template HonkProof DeciderProver_::construct_proof() { BB_OP_COUNT_TIME_NAME("Decider::construct_proof"); diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.hpp b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.hpp index 977605f5a7d..3df1166b635 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.hpp @@ -30,8 +30,8 @@ template class DeciderProver_ { BB_PROFILE void execute_relation_check_rounds(); BB_PROFILE void execute_zeromorph_rounds(); - HonkProof& export_proof(); - HonkProof& construct_proof(); + HonkProof export_proof(); + HonkProof construct_proof(); std::shared_ptr accumulator; diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/merge_verifier.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/merge_verifier.cpp index 18e30a1cdaf..72cadbe963c 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/merge_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/merge_verifier.cpp @@ -17,7 +17,7 @@ MergeVerifier_::MergeVerifier_() * Schwartz-Zippel check. Evaluations are checked via batched KZG. * * @tparam Flavor - * @return HonkProof& + * @return bool */ template bool MergeVerifier_::verify_proof(const HonkProof& proof) { diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp index ffb7cff543a..e29973b72b7 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp @@ -16,7 +16,7 @@ UltraProver_::UltraProver_(const std::shared_ptr& inst, const : instance(std::move(inst)) , transcript(transcript) , commitment_key(instance->proving_key->commitment_key) - , oink_prover(inst->proving_key, commitment_key, transcript, "") + , oink_prover(instance->proving_key, commitment_key, transcript, "") {} /** @@ -34,12 +34,12 @@ UltraProver_::UltraProver_(Builder& circuit) , oink_prover(instance->proving_key, commitment_key, transcript, "") {} -template HonkProof& UltraProver_::export_proof() +template HonkProof UltraProver_::export_proof() { proof = transcript->proof_data; return proof; } -template HonkProof& UltraProver_::construct_proof() +template HonkProof UltraProver_::construct_proof() { auto [relation_params, alphas] = oink_prover.prove(); instance->relation_parameters = std::move(relation_params); diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp index f6c95b79df1..75551c4f1e4 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp @@ -46,8 +46,8 @@ template class UltraProver_ { explicit UltraProver_(Builder&); - HonkProof& export_proof(); - HonkProof& construct_proof(); + HonkProof export_proof(); + HonkProof construct_proof(); private: HonkProof proof; diff --git a/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp b/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp index e887045bb96..a4bd5e54b23 100644 --- a/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.cpp @@ -98,13 +98,13 @@ void AvmProver::execute_zeromorph_rounds() transcript); } -HonkProof& AvmProver::export_proof() +HonkProof AvmProver::export_proof() { proof = transcript->proof_data; return proof; } -HonkProof& AvmProver::construct_proof() +HonkProof AvmProver::construct_proof() { // Add circuit size public input size and public inputs to transcript. execute_preamble_round(); diff --git a/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.hpp b/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.hpp index 1e15b341e17..4459d663473 100644 --- a/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/generated/avm_prover.hpp @@ -31,8 +31,8 @@ class AvmProver { void execute_relation_check_rounds(); void execute_zeromorph_rounds(); - HonkProof& export_proof(); - HonkProof& construct_proof(); + HonkProof export_proof(); + HonkProof construct_proof(); std::shared_ptr transcript = std::make_shared(); From b1ddafba260912bc333c4e2e44cd618af72f5428 Mon Sep 17 00:00:00 2001 From: lucasxia01 Date: Wed, 27 Mar 2024 18:48:31 +0000 Subject: [PATCH 4/6] cleanup --- .../ultra_bench/ultra_honk_rounds.bench.cpp | 8 ++----- .../barretenberg/ultra_honk/oink_prover.cpp | 13 ++++++---- .../barretenberg/ultra_honk/oink_prover.hpp | 1 + .../barretenberg/ultra_honk/ultra_prover.cpp | 24 ++++++++----------- .../barretenberg/ultra_honk/ultra_prover.hpp | 2 ++ 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp b/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp index 2342323e16a..1977ab23e67 100644 --- a/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp +++ b/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp @@ -50,16 +50,12 @@ BB_PROFILE static void test_round_inner(State& state, GoblinUltraProver& prover, time_if_index(SORTED_LIST_ACCUMULATOR, [&] { prover.oink_prover.execute_sorted_list_accumulator_round(); }); time_if_index(LOG_DERIVATIVE_INVERSE, [&] { prover.oink_prover.execute_log_derivative_inverse_round(); }); time_if_index(GRAND_PRODUCT_COMPUTATION, [&] { prover.oink_prover.execute_grand_product_computation_round(); }); + prover.instance->alphas = prover.oink_prover.generate_alphas(); // we need to get the relation_parameters and prover_polynomials from the oink_prover prover.instance->relation_parameters = prover.oink_prover.relation_parameters; prover.instance->prover_polynomials = GoblinUltraFlavor::ProverPolynomials(prover.instance->proving_key); - std::vector gate_challenges(numeric::get_msb(prover.instance->proving_key->circuit_size)); - for (size_t idx = 0; idx < gate_challenges.size(); idx++) { - gate_challenges[idx] = prover.transcript->template get_challenge( - "Sumcheck:gate_challenge_" + std::to_string(idx)); - } - prover.instance->gate_challenges = gate_challenges; + prover.generate_gate_challenges(); DeciderProver_ decider_prover(prover.instance, prover.transcript); time_if_index(RELATION_CHECK, [&] { decider_prover.execute_relation_check_rounds(); }); diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.cpp index 2df9685235e..e9d43bff904 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.cpp @@ -26,10 +26,7 @@ template OinkProverOutput OinkProver::pro execute_grand_product_computation_round(); // Generate relation separators alphas for sumcheck - RelationSeparator alphas; - for (size_t idx = 0; idx < alphas.size(); idx++) { - alphas[idx] = transcript->template get_challenge("Sumcheck:alpha_" + std::to_string(idx)); - } + RelationSeparator alphas = generate_alphas(); return OinkProverOutput{ .relation_parameters = std::move(relation_parameters), @@ -156,6 +153,14 @@ template void OinkProver::execute_grand_product_c transcript->send_to_verifier(domain_separator + commitment_labels.z_lookup, witness_commitments.z_lookup); } +template typename Flavor::RelationSeparator OinkProver::generate_alphas() +{ + RelationSeparator alphas; + for (size_t idx = 0; idx < alphas.size(); idx++) { + alphas[idx] = transcript->template get_challenge("Sumcheck:alpha_" + std::to_string(idx)); + } + return alphas; +} template class OinkProver; template class OinkProver; diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.hpp b/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.hpp index c016cfb06c8..cf3eaeacef8 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.hpp @@ -70,5 +70,6 @@ template class OinkProver { void execute_sorted_list_accumulator_round(); void execute_log_derivative_inverse_round(); void execute_grand_product_computation_round(); + RelationSeparator generate_alphas(); }; } // namespace bb \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp index e29973b72b7..5b025e50f85 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp @@ -39,29 +39,25 @@ template HonkProof UltraProver_::export_proof() proof = transcript->proof_data; return proof; } -template HonkProof UltraProver_::construct_proof() +template void UltraProver_::generate_gate_challenges() { - auto [relation_params, alphas] = oink_prover.prove(); - instance->relation_parameters = std::move(relation_params); - instance->alphas = alphas; - instance->prover_polynomials = ProverPolynomials(instance->proving_key); - std::vector gate_challenges(numeric::get_msb(instance->proving_key->circuit_size)); for (size_t idx = 0; idx < gate_challenges.size(); idx++) { gate_challenges[idx] = transcript->template get_challenge("Sumcheck:gate_challenge_" + std::to_string(idx)); } instance->gate_challenges = gate_challenges; +} - DeciderProver_ decider_prover(instance, transcript); - - // // Fiat-Shamir: alpha - // // Run sumcheck subprotocol. - // execute_relation_check_rounds(); +template HonkProof UltraProver_::construct_proof() +{ + auto [relation_params, alphas] = oink_prover.prove(); + instance->relation_parameters = std::move(relation_params); + instance->alphas = alphas; + instance->prover_polynomials = ProverPolynomials(instance->proving_key); - // // Fiat-Shamir: rho, y, x, z - // // Execute Zeromorph multilinear PCS - // execute_zeromorph_rounds(); + generate_gate_challenges(); + DeciderProver_ decider_prover(instance, transcript); return decider_prover.construct_proof(); } diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp index 75551c4f1e4..31d141c615a 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp @@ -46,6 +46,8 @@ template class UltraProver_ { explicit UltraProver_(Builder&); + BB_PROFILE void generate_gate_challenges(); + HonkProof export_proof(); HonkProof construct_proof(); From bd964d1534e190c23ab5766dd1515ddc27abb6f1 Mon Sep 17 00:00:00 2001 From: lucasxia01 Date: Mon, 6 May 2024 20:08:12 +0000 Subject: [PATCH 5/6] fix compilation --- .../cpp/src/barretenberg/ultra_honk/ultra_prover.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp index df11f646492..fb7bdbc768d 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp @@ -39,7 +39,7 @@ template HonkProof UltraProver_::export_proof() } template void UltraProver_::generate_gate_challenges() { - std::vector gate_challenges(numeric::get_msb(instance->proving_key->circuit_size)); + std::vector gate_challenges(numeric::get_msb(instance->proving_key.circuit_size)); for (size_t idx = 0; idx < gate_challenges.size(); idx++) { gate_challenges[idx] = transcript->template get_challenge("Sumcheck:gate_challenge_" + std::to_string(idx)); } @@ -48,12 +48,11 @@ template void UltraProver_::generate_gate_challen template HonkProof UltraProver_::construct_proof() { - OinkProver oink_prover(instance->proving_key, transcript); + OinkProver oink_prover(instance->proving_key, transcript); auto [proving_key, relation_params, alphas] = oink_prover.prove(); instance->proving_key = std::move(proving_key); instance->relation_parameters = std::move(relation_params); instance->alphas = alphas; - instance->prover_polynomials = ProverPolynomials(instance->proving_key); generate_gate_challenges(); From 885605dfe0c41276dafeb07b0facf44fbe2ac658 Mon Sep 17 00:00:00 2001 From: lucasxia01 Date: Mon, 6 May 2024 21:49:55 +0000 Subject: [PATCH 6/6] reverse a regression --- .../benchmark/ultra_bench/ultra_honk_rounds.bench.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp b/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp index 77a227f47cd..f113305191c 100644 --- a/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp +++ b/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp @@ -52,7 +52,7 @@ BB_PROFILE static void test_round_inner(State& state, GoblinUltraProver& prover, time_if_index(SORTED_LIST_ACCUMULATOR, [&] { oink_prover.execute_sorted_list_accumulator_round(); }); time_if_index(LOG_DERIVATIVE_INVERSE, [&] { oink_prover.execute_log_derivative_inverse_round(); }); time_if_index(GRAND_PRODUCT_COMPUTATION, [&] { oink_prover.execute_grand_product_computation_round(); }); - prover.instance->alphas = oink_prover.generate_alphas_round(); + time_if_index(GENERATE_ALPHAS, [&] { prover.instance->alphas = oink_prover.generate_alphas_round(); }); // we need to get the relation_parameters and prover_polynomials from the oink_prover prover.instance->relation_parameters = oink_prover.relation_parameters;