From e8f41bbf8a3cf2dacfcdbb7e78107fe13934c5f2 Mon Sep 17 00:00:00 2001 From: ledwards2225 Date: Tue, 1 Jul 2025 16:54:15 +0000 Subject: [PATCH] Revert "feat: stdlib::Proof (#15410)" This reverts commit 64fd7135fe74c2ee21606b1d6b616625e9ba5f13. --- .../cpp/src/barretenberg/api/prove_tube.cpp | 2 +- ...cription_ultra_recursive_verifier.test.cpp | 2 +- .../barretenberg/client_ivc/client_ivc.cpp | 4 +- .../barretenberg/client_ivc/client_ivc.hpp | 4 +- .../ipa_recursive.test.cpp | 6 +-- .../shplemini.test.cpp | 5 +- .../dsl/acir_format/acir_format.cpp | 10 ++-- .../acir_format/honk_recursion_constraint.cpp | 3 +- .../dsl/acir_format/proof_surgeon.hpp | 3 +- .../cpp/src/barretenberg/goblin/goblin.cpp | 2 +- .../cpp/src/barretenberg/goblin/goblin.hpp | 1 - .../honk/proof_system/types/proof.hpp | 1 + .../src/barretenberg/stdlib/CMakeLists.txt | 1 - .../client_ivc_recursive_verifier.test.cpp | 6 +-- .../eccvm_recursive_verifier.cpp | 7 ++- .../eccvm_recursive_verifier.hpp | 6 +-- .../goblin_recursive_verifier.cpp | 2 +- .../goblin_recursive_verifier.hpp | 2 +- .../goblin_recursive_verifier.test.cpp | 2 +- .../decider_recursive_verifier.cpp | 2 +- .../decider_recursive_verifier.hpp | 2 - .../ultra_recursive_verifier.cpp | 11 ++--- .../ultra_recursive_verifier.hpp | 7 ++- .../ultra_recursive_verifier.test.cpp | 6 +-- .../merge_recursive_verifier.cpp | 2 +- .../merge_recursive_verifier.hpp | 3 +- .../merge_verifier/merge_verifier.test.cpp | 3 +- .../stdlib/primitives/field/field.test.cpp | 2 +- .../barretenberg/stdlib/proof/CMakeLists.txt | 4 -- .../src/barretenberg/stdlib/proof/proof.hpp | 49 ------------------- .../barretenberg/stdlib/proof/proof.test.cpp | 39 --------------- .../protogalaxy_recursive_verifier.cpp | 2 +- .../protogalaxy_recursive_verifier.hpp | 3 +- .../protogalaxy_recursive_verifier.test.cpp | 12 +++-- .../stdlib/transcript/transcript.hpp | 2 +- .../stdlib/transcript/transcript.test.cpp | 10 ++-- .../translator_recursive_verifier.cpp | 2 +- .../translator_recursive_verifier.hpp | 2 - .../translator_recursive_verifier.test.cpp | 5 +- .../barretenberg/transcript/transcript.hpp | 19 +++++++ .../goblin_avm_recursive_verifier.hpp | 11 +++-- .../recursion/recursive_verifier.cpp | 6 +-- .../recursion/recursive_verifier.hpp | 6 +-- .../recursion/recursive_verifier.test.cpp | 4 +- 44 files changed, 97 insertions(+), 186 deletions(-) delete mode 100644 barretenberg/cpp/src/barretenberg/stdlib/proof/CMakeLists.txt delete mode 100644 barretenberg/cpp/src/barretenberg/stdlib/proof/proof.hpp delete mode 100644 barretenberg/cpp/src/barretenberg/stdlib/proof/proof.test.cpp diff --git a/barretenberg/cpp/src/barretenberg/api/prove_tube.cpp b/barretenberg/cpp/src/barretenberg/api/prove_tube.cpp index 107bedff1354..65bbef90165b 100644 --- a/barretenberg/cpp/src/barretenberg/api/prove_tube.cpp +++ b/barretenberg/cpp/src/barretenberg/api/prove_tube.cpp @@ -42,7 +42,7 @@ void prove_tube(const std::string& output_path, const std::string& vk_path) client_ivc_rec_verifier_output.points_accumulator.set_public(); // The tube only calls an IPA recursive verifier once, so we can just add this IPA claim and proof client_ivc_rec_verifier_output.opening_claim.set_public(); - builder->ipa_proof = client_ivc_rec_verifier_output.ipa_proof.get_value(); + builder->ipa_proof = convert_stdlib_proof_to_native(client_ivc_rec_verifier_output.ipa_proof); BB_ASSERT_EQ(builder->ipa_proof.size(), IPA_PROOF_LENGTH, "IPA proof should be set."); using Prover = UltraProver_; diff --git a/barretenberg/cpp/src/barretenberg/boomerang_value_detection/graph_description_ultra_recursive_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/boomerang_value_detection/graph_description_ultra_recursive_verifier.test.cpp index ca6b7f43f481..45031d0c2ec9 100644 --- a/barretenberg/cpp/src/barretenberg/boomerang_value_detection/graph_description_ultra_recursive_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/boomerang_value_detection/graph_description_ultra_recursive_verifier.test.cpp @@ -120,7 +120,7 @@ template class BoomerangRecursiveVerifierTest : publi pairing_points.P1.y.fix_witness(); if constexpr (HasIPAAccumulator) { output.ipa_claim.set_public(); - outer_circuit.ipa_proof = output.ipa_proof.get_value(); + outer_circuit.ipa_proof = convert_stdlib_proof_to_native(output.ipa_proof); } info("Recursive Verifier: num gates = ", outer_circuit.get_estimated_num_finalized_gates()); diff --git a/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.cpp b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.cpp index 3888922afc39..35214e2c8cd1 100644 --- a/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.cpp +++ b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.cpp @@ -54,7 +54,7 @@ void ClientIVC::instantiate_stdlib_verification_queue( auto& [proof, vkey, type] = verification_queue.front(); // Construct stdlib proof directly from the internal native queue data - StdlibProof stdlib_proof(circuit, proof); + auto stdlib_proof = bb::convert_native_proof_to_stdlib(&circuit, proof); // Use the provided stdlib vkey if present, otherwise construct one from the internal native queue auto stdlib_vkey = @@ -338,7 +338,7 @@ std::shared_ptr ClientIVC::construct_hiding_circ auto stdlib_decider_vk = std::make_shared(&builder, verification_queue[0].honk_verification_key); - StdlibProof stdlib_proof(builder, fold_proof); + auto stdlib_proof = bb::convert_native_proof_to_stdlib(&builder, fold_proof); // Perform recursive folding verification of the last folding proof FoldingRecursiveVerifier folding_verifier{ diff --git a/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.hpp b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.hpp index 0178298000ad..3b0bdbd2be53 100644 --- a/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.hpp +++ b/barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.hpp @@ -14,7 +14,6 @@ #include "barretenberg/stdlib/honk_verifier/oink_recursive_verifier.hpp" #include "barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.hpp" #include "barretenberg/stdlib/primitives/databus/databus.hpp" -#include "barretenberg/stdlib/proof/proof.hpp" #include "barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.hpp" #include "barretenberg/ultra_honk/decider_keys.hpp" #include "barretenberg/ultra_honk/decider_prover.hpp" @@ -72,7 +71,6 @@ class ClientIVC { using DataBusDepot = stdlib::DataBusDepot; using PairingPoints = stdlib::recursion::PairingPoints; using PublicPairingPoints = stdlib::PublicInputComponent; - using StdlibProof = stdlib::Proof; /** * @brief A full proof for the IVC scheme containing a Mega proof showing correctness of the hiding circuit (which @@ -136,7 +134,7 @@ class ClientIVC { // An entry in the stdlib verification queue struct StdlibVerifierInputs { - StdlibProof proof; // oink or PG + StdlibProof proof; // oink or PG std::shared_ptr honk_verification_key; QUEUE_TYPE type; }; diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/ipa_recursive.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/ipa_recursive.test.cpp index 424093681ae3..c986d34c23c4 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/ipa_recursive.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/ipa_recursive.test.cpp @@ -6,7 +6,6 @@ #include "barretenberg/stdlib/eccvm_verifier/verifier_commitment_key.hpp" #include "barretenberg/stdlib/pairing_points.hpp" #include "barretenberg/stdlib/primitives/curves/grumpkin.hpp" -#include "barretenberg/stdlib/proof/proof.hpp" #include "barretenberg/stdlib/transcript/transcript.hpp" #include "barretenberg/transcript/transcript.hpp" #include "barretenberg/ultra_honk/decider_proving_key.hpp" @@ -26,7 +25,6 @@ class IPARecursiveTests : public CommitmentTest { using VK = VerifierCommitmentKey; using Polynomial = bb::Polynomial; using Commitment = typename NativeCurve::AffineElement; - using StdlibProof = bb::stdlib::Proof; using StdlibTranscript = bb::stdlib::recursion::honk::UltraStdlibTranscript; template @@ -66,7 +64,7 @@ class IPARecursiveTests : public CommitmentTest { // Construct stdlib verifier transcript auto recursive_verifier_transcript = std::make_shared(); - recursive_verifier_transcript->load_proof(StdlibProof(builder, proof)); + recursive_verifier_transcript->load_proof(bb::convert_native_proof_to_stdlib(&builder, proof)); return { recursive_verifier_transcript, stdlib_opening_claim }; } template Builder build_ipa_recursive_verifier_circuit() @@ -242,7 +240,7 @@ TEST_F(IPARecursiveTests, AccumulationAndFullRecursiveVerifier) // Fully recursively verify this proof to check it. VerifierCommitmentKey stdlib_pcs_vkey(&root_rollup, 1UL << log_poly_length, this->vk()); auto stdlib_verifier_transcript = std::make_shared(); - stdlib_verifier_transcript->load_proof(StdlibProof(root_rollup, ipa_proof)); + stdlib_verifier_transcript->load_proof(convert_native_proof_to_stdlib(&root_rollup, ipa_proof)); OpeningClaim ipa_claim; ipa_claim.opening_pair.challenge = Curve::ScalarField::create_from_u512_as_witness(&root_rollup, output_claim.opening_pair.challenge.get_value()); diff --git a/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/shplemini.test.cpp b/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/shplemini.test.cpp index 09f10743d3a8..2a8b433eda6e 100644 --- a/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/shplemini.test.cpp +++ b/barretenberg/cpp/src/barretenberg/commitment_schemes_recursion/shplemini.test.cpp @@ -10,7 +10,6 @@ #include "barretenberg/stdlib/primitives/curves/bn254.hpp" #include "barretenberg/stdlib/primitives/curves/grumpkin.hpp" #include "barretenberg/stdlib/primitives/padding_indicator_array/padding_indicator_array.hpp" -#include "barretenberg/stdlib/proof/proof.hpp" #include "barretenberg/stdlib/transcript/transcript.hpp" #include "barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp" #include @@ -44,7 +43,6 @@ TEST(ShpleminiRecursionTest, ProveAndVerifySingle) using ClaimBatcher = ClaimBatcher_; using ClaimBatch = ClaimBatcher::Batch; using MockClaimGen = MockClaimGenerator; - using StdlibProof = bb::stdlib::Proof; bb::srs::init_file_crs_factory(bb::srs::bb_crs_path()); auto run_shplemini = [](size_t log_circuit_size) { @@ -78,7 +76,8 @@ TEST(ShpleminiRecursionTest, ProveAndVerifySingle) ShpleminiProver::prove(N, mock_claims.polynomial_batcher, u_challenge, commitment_key, prover_transcript); KZG::compute_opening_proof(commitment_key, prover_opening_claims, prover_transcript); Builder builder; - StdlibProof stdlib_proof(builder, prover_transcript->export_proof()); + StdlibProof stdlib_proof = + bb::convert_native_proof_to_stdlib(&builder, prover_transcript->export_proof()); auto stdlib_verifier_transcript = std::make_shared(); stdlib_verifier_transcript->load_proof(stdlib_proof); [[maybe_unused]] auto _ = stdlib_verifier_transcript->template receive_from_prover("Init"); diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp index 323a1f79ade5..8b143edbf318 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp @@ -36,14 +36,14 @@ template class DSLBigInts; template void handle_IPA_accumulation(Builder& builder, const std::vector>>& nested_ipa_claims, - const std::vector>& nested_ipa_proofs, + const std::vector>& nested_ipa_proofs, bool is_root_rollup); template struct HonkRecursionConstraintsOutput { using PairingPoints = stdlib::recursion::PairingPoints; PairingPoints points_accumulator; std::vector>> nested_ipa_claims; - std::vector> nested_ipa_proofs; + std::vector> nested_ipa_proofs; bool is_root_rollup = false; }; @@ -339,7 +339,7 @@ void build_constraints(Builder& builder, AcirProgram& program, const ProgramMeta template void handle_IPA_accumulation(Builder& builder, const std::vector>>& nested_ipa_claims, - const std::vector>& nested_ipa_proofs, + const std::vector>& nested_ipa_proofs, bool is_root_rollup) { BB_ASSERT_EQ( @@ -366,7 +366,7 @@ void handle_IPA_accumulation(Builder& builder, &builder, 1 << CONST_ECCVM_LOG_N, VerifierCommitmentKey(1 << CONST_ECCVM_LOG_N)); // do full IPA verification auto accumulated_ipa_transcript = std::make_shared(); - accumulated_ipa_transcript->load_proof(stdlib::Proof(builder, ipa_proof)); + accumulated_ipa_transcript->load_proof(convert_native_proof_to_stdlib(&builder, ipa_proof)); IPA>::full_verify_recursive( verifier_commitment_key, ipa_claim, accumulated_ipa_transcript); } else { @@ -378,7 +378,7 @@ void handle_IPA_accumulation(Builder& builder, final_ipa_claim = nested_ipa_claims[0]; // This conversion looks suspicious but there's no need to make this an output of the circuit since // its a proof that will be checked anyway. - final_ipa_proof = nested_ipa_proofs[0].get_value(); + final_ipa_proof = convert_stdlib_proof_to_native(nested_ipa_proofs[0]); } else if (nested_ipa_claims.size() == 0) { // If we don't have any claims, we may need to inject a fake one if we're proving with // UltraRollupHonk, indicated by the manual setting of the honk_recursion metadata to 2. diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.cpp index 79c8a305cd96..7f9bd6ce4c1d 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.cpp @@ -16,7 +16,6 @@ #include "barretenberg/stdlib/primitives/bigfield/constants.hpp" #include "barretenberg/stdlib/primitives/circuit_builders/circuit_builders_fwd.hpp" #include "barretenberg/stdlib/primitives/curves/bn254.hpp" -#include "barretenberg/stdlib/proof/proof.hpp" #include "proof_surgeon.hpp" #include "recursion_constraint.hpp" @@ -249,7 +248,7 @@ HonkRecursionConstraintOutput create_honk_recur key_fields.emplace_back(field); } - stdlib::Proof proof_fields; + std::vector> proof_fields; // Create witness indices for the proof with public inputs reinserted std::vector proof_indices = diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/proof_surgeon.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/proof_surgeon.hpp index f75d189ba79e..5b90e8ab4bd1 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/proof_surgeon.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/proof_surgeon.hpp @@ -12,7 +12,6 @@ #include "barretenberg/honk/proof_system/types/proof.hpp" #include "barretenberg/honk/types/aggregation_object_type.hpp" #include "barretenberg/serialize/msgpack.hpp" -#include "barretenberg/stdlib/proof/proof.hpp" #include #include @@ -123,7 +122,7 @@ class ProofSurgeon { * @return std::vector The corresponding public input witness indices */ static std::vector get_public_inputs_witness_indices_from_proof( - const bb::stdlib::Proof& proof, const size_t num_public_inputs_to_extract) + const bb::StdlibProof& proof, const size_t num_public_inputs_to_extract) { std::vector public_input_witness_indices; public_input_witness_indices.reserve(num_public_inputs_to_extract); diff --git a/barretenberg/cpp/src/barretenberg/goblin/goblin.cpp b/barretenberg/cpp/src/barretenberg/goblin/goblin.cpp index 525eb0cc330d..7513343eff31 100644 --- a/barretenberg/cpp/src/barretenberg/goblin/goblin.cpp +++ b/barretenberg/cpp/src/barretenberg/goblin/goblin.cpp @@ -80,7 +80,7 @@ Goblin::PairingPoints Goblin::recursively_verify_merge( ASSERT(!merge_verification_queue.empty()); // Recursively verify the next merge proof in the verification queue in a FIFO manner const MergeProof& merge_proof = merge_verification_queue.front(); - const stdlib::Proof stdlib_merge_proof(builder, merge_proof); + const StdlibProof stdlib_merge_proof = bb::convert_native_proof_to_stdlib(&builder, merge_proof); MergeRecursiveVerifier merge_verifier{ &builder, transcript }; PairingPoints pairing_points = merge_verifier.verify_proof(stdlib_merge_proof, t_commitments); diff --git a/barretenberg/cpp/src/barretenberg/goblin/goblin.hpp b/barretenberg/cpp/src/barretenberg/goblin/goblin.hpp index 463034e6c9fe..585f86e4dbb3 100644 --- a/barretenberg/cpp/src/barretenberg/goblin/goblin.hpp +++ b/barretenberg/cpp/src/barretenberg/goblin/goblin.hpp @@ -12,7 +12,6 @@ #include "barretenberg/flavor/mega_flavor.hpp" #include "barretenberg/goblin/types.hpp" #include "barretenberg/stdlib/merge_verifier/merge_recursive_verifier.hpp" -#include "barretenberg/stdlib/proof/proof.hpp" #include "barretenberg/translator_vm/translator_circuit_builder.hpp" #include "barretenberg/translator_vm/translator_flavor.hpp" #include "barretenberg/ultra_honk/decider_proving_key.hpp" diff --git a/barretenberg/cpp/src/barretenberg/honk/proof_system/types/proof.hpp b/barretenberg/cpp/src/barretenberg/honk/proof_system/types/proof.hpp index 0579f2a289d4..a14a9d0f5b05 100644 --- a/barretenberg/cpp/src/barretenberg/honk/proof_system/types/proof.hpp +++ b/barretenberg/cpp/src/barretenberg/honk/proof_system/types/proof.hpp @@ -26,5 +26,6 @@ struct ECCVMProof { MSGPACK_FIELDS(pre_ipa_proof, ipa_proof); }; template using StdlibPublicInputsVector = std::vector>; +template using StdlibProof = std::vector>; } // namespace bb diff --git a/barretenberg/cpp/src/barretenberg/stdlib/CMakeLists.txt b/barretenberg/cpp/src/barretenberg/stdlib/CMakeLists.txt index e79354ece573..850c978b76d6 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/CMakeLists.txt +++ b/barretenberg/cpp/src/barretenberg/stdlib/CMakeLists.txt @@ -7,7 +7,6 @@ add_subdirectory(goblin_verifier) add_subdirectory(merge_verifier) add_subdirectory(primitives) add_subdirectory(honk_verifier) -add_subdirectory(proof) add_subdirectory(transcript) add_subdirectory(translator_vm_verifier) add_subdirectory(protogalaxy_verifier) diff --git a/barretenberg/cpp/src/barretenberg/stdlib/client_ivc_verifier/client_ivc_recursive_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/client_ivc_verifier/client_ivc_recursive_verifier.test.cpp index cab358183ce3..5f5587db72e7 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/client_ivc_verifier/client_ivc_recursive_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/client_ivc_verifier/client_ivc_recursive_verifier.test.cpp @@ -104,7 +104,7 @@ TEST_F(ClientIVCRecursionTests, ClientTubeBase) client_ivc_rec_verifier_output.points_accumulator.set_public(); // The tube only calls an IPA recursive verifier once, so we can just add this IPA claim and proof client_ivc_rec_verifier_output.opening_claim.set_public(); - tube_builder->ipa_proof = client_ivc_rec_verifier_output.ipa_proof.get_value(); + tube_builder->ipa_proof = convert_stdlib_proof_to_native(client_ivc_rec_verifier_output.ipa_proof); info("ClientIVC Recursive Verifier: num prefinalized gates = ", tube_builder->num_gates); @@ -128,7 +128,7 @@ TEST_F(ClientIVCRecursionTests, ClientTubeBase) Builder base_builder; auto tube_vk = std::make_shared(proving_key->proving_key); auto base_vk = std::make_shared(&base_builder, tube_vk); - stdlib::Proof base_tube_proof(base_builder, native_tube_proof); + auto base_tube_proof = bb::convert_native_proof_to_stdlib(&base_builder, native_tube_proof); UltraRecursiveVerifier base_verifier{ &base_builder, base_vk }; UltraRecursiveVerifierOutput output = base_verifier.verify_proof(base_tube_proof); info("Tube UH Recursive Verifier: num prefinalized gates = ", base_builder.num_gates); @@ -165,7 +165,7 @@ TEST_F(ClientIVCRecursionTests, TubeVKIndependentOfInputCircuits) client_ivc_rec_verifier_output.points_accumulator.set_public(); // The tube only calls an IPA recursive verifier once, so we can just add this IPA claim and proof client_ivc_rec_verifier_output.opening_claim.set_public(); - tube_builder->ipa_proof = client_ivc_rec_verifier_output.ipa_proof.get_value(); + tube_builder->ipa_proof = convert_stdlib_proof_to_native(client_ivc_rec_verifier_output.ipa_proof); info("ClientIVC Recursive Verifier: num prefinalized gates = ", tube_builder->num_gates); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.cpp index 5f34f36308e6..31f918ad08eb 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.cpp @@ -7,7 +7,6 @@ #include "./eccvm_recursive_verifier.hpp" #include "barretenberg/commitment_schemes/shplonk/shplemini.hpp" #include "barretenberg/commitment_schemes/shplonk/shplonk.hpp" -#include "barretenberg/stdlib/proof/proof.hpp" #include "barretenberg/sumcheck/sumcheck.hpp" #include "barretenberg/transcript/transcript.hpp" @@ -28,7 +27,7 @@ ECCVMRecursiveVerifier_::ECCVMRecursiveVerifier_( * */ template -std::pair, stdlib::Proof::Builder>> +std::pair, StdlibProof::Builder>> ECCVMRecursiveVerifier_::verify_proof(const ECCVMProof& proof) { using Curve = typename Flavor::Curve; @@ -41,8 +40,8 @@ ECCVMRecursiveVerifier_::verify_proof(const ECCVMProof& proof) RelationParameters relation_parameters; - StdlibProof stdlib_proof(*builder, proof.pre_ipa_proof); - StdlibProof ipa_proof(*builder, proof.ipa_proof); + StdlibProof stdlib_proof = bb::convert_native_proof_to_stdlib(builder, proof.pre_ipa_proof); + StdlibProof ipa_proof = bb::convert_native_proof_to_stdlib(builder, proof.ipa_proof); transcript->load_proof(stdlib_proof); VerifierCommitments commitments{ key }; diff --git a/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.hpp b/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.hpp index 91962b41271a..2e0ca7ce9222 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/eccvm_verifier/eccvm_recursive_verifier.hpp @@ -7,7 +7,6 @@ #pragma once #include "barretenberg/goblin/translation_evaluations.hpp" #include "barretenberg/stdlib/eccvm_verifier/eccvm_recursive_flavor.hpp" -#include "barretenberg/stdlib/proof/proof.hpp" namespace bb { template class ECCVMRecursiveVerifier_ { @@ -23,7 +22,6 @@ template class ECCVMRecursiveVerifier_ { using PCS = typename Flavor::PCS; using Transcript = bb::BaseTranscript>; using VerifierCommitments = typename Flavor::VerifierCommitments; - using StdlibProof = bb::stdlib::Proof; public: explicit ECCVMRecursiveVerifier_(Builder* builder, @@ -31,7 +29,7 @@ template class ECCVMRecursiveVerifier_ { const std::shared_ptr& transcript); // TODO(https://github.com/AztecProtocol/barretenberg/issues/991): switch recursive verifiers to StdlibProof - [[nodiscard("IPA claim should be accumulated")]] std::pair, StdlibProof> verify_proof( + [[nodiscard("IPA claim should be accumulated")]] std::pair, StdlibProof> verify_proof( const ECCVMProof& proof); void compute_translation_opening_claims(const std::vector& translation_commitments); @@ -39,7 +37,7 @@ template class ECCVMRecursiveVerifier_ { Builder* builder; std::shared_ptr transcript; - StdlibProof ipa_proof; + StdlibProof ipa_proof; TranslationEvaluations_ translation_evaluations; // Final ShplonkVerifier consumes an array consisting of Translation Opening Claims and a diff --git a/barretenberg/cpp/src/barretenberg/stdlib/goblin_verifier/goblin_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/goblin_verifier/goblin_recursive_verifier.cpp index 3f17b9e90517..44476d9445c8 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/goblin_verifier/goblin_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/goblin_verifier/goblin_recursive_verifier.cpp @@ -20,7 +20,7 @@ GoblinRecursiveVerifierOutput GoblinRecursiveVerifier::verify( { // Verify the final merge step MergeVerifier merge_verifier{ builder, transcript }; - stdlib::Proof stdlib_merge_proof(*builder, proof.merge_proof); + StdlibProof stdlib_merge_proof = bb::convert_native_proof_to_stdlib(builder, proof.merge_proof); PairingPoints merge_pairing_points = merge_verifier.verify_proof(stdlib_merge_proof, t_commitments); // Run the ECCVM recursive verifier diff --git a/barretenberg/cpp/src/barretenberg/stdlib/goblin_verifier/goblin_recursive_verifier.hpp b/barretenberg/cpp/src/barretenberg/stdlib/goblin_verifier/goblin_recursive_verifier.hpp index 748e85e02311..b74e86615c7f 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/goblin_verifier/goblin_recursive_verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/goblin_verifier/goblin_recursive_verifier.hpp @@ -20,7 +20,7 @@ struct GoblinRecursiveVerifierOutput { using PairingAccumulator = PairingPoints; PairingAccumulator points_accumulator; OpeningClaim opening_claim; - stdlib::Proof ipa_proof; + StdlibProof ipa_proof; }; class GoblinRecursiveVerifier { diff --git a/barretenberg/cpp/src/barretenberg/stdlib/goblin_verifier/goblin_recursive_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/goblin_verifier/goblin_recursive_verifier.test.cpp index a9e197b5d86f..08f3a10333ec 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/goblin_verifier/goblin_recursive_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/goblin_verifier/goblin_recursive_verifier.test.cpp @@ -215,7 +215,7 @@ TEST_F(GoblinRecursiveVerifierTests, ECCVMFailure) VerifierCommitmentKey grumpkin_verifier_commitment_key(1 << CONST_ECCVM_LOG_N, crs_factory); OpeningClaim native_claim = goblin_rec_verifier_output.opening_claim.get_native_opening_claim(); auto native_ipa_transcript = std::make_shared(); - native_ipa_transcript->load_proof(goblin_rec_verifier_output.ipa_proof.get_value()); + native_ipa_transcript->load_proof(convert_stdlib_proof_to_native(goblin_rec_verifier_output.ipa_proof)); EXPECT_FALSE( IPA::reduce_verify(grumpkin_verifier_commitment_key, native_claim, native_ipa_transcript)); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/decider_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/decider_recursive_verifier.cpp index 9ad2739cc919..0356de538c24 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/decider_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/decider_recursive_verifier.cpp @@ -27,7 +27,7 @@ DeciderRecursiveVerifier_::PairingPoints DeciderRecursiveVerifier_; using ClaimBatch = ClaimBatcher::Batch; - StdlibProof stdlib_proof(*builder, proof); + StdlibProof stdlib_proof = bb::convert_native_proof_to_stdlib(builder, proof); transcript->load_proof(stdlib_proof); VerifierCommitments commitments{ accumulator->verification_key, accumulator->witness_commitments }; diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/decider_recursive_verifier.hpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/decider_recursive_verifier.hpp index a0906b0a74fb..3dd6e90eb64d 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/decider_recursive_verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/decider_recursive_verifier.hpp @@ -10,7 +10,6 @@ #include "barretenberg/flavor/ultra_rollup_recursive_flavor.hpp" #include "barretenberg/honk/proof_system/types/proof.hpp" #include "barretenberg/stdlib/pairing_points.hpp" -#include "barretenberg/stdlib/proof/proof.hpp" #include "barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_key.hpp" #include "barretenberg/stdlib/transcript/transcript.hpp" #include "barretenberg/sumcheck/sumcheck.hpp" @@ -29,7 +28,6 @@ template class DeciderRecursiveVerifier_ { using RecursiveDeciderVK = RecursiveDeciderVerificationKey_; using NativeDeciderVK = bb::DeciderVerificationKey_; using Transcript = bb::BaseTranscript>; - using StdlibProof = bb::stdlib::Proof; public: explicit DeciderRecursiveVerifier_(Builder* builder, std::shared_ptr accumulator) diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.cpp index d479fabd49ec..682ef95bed67 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.cpp @@ -42,7 +42,7 @@ UltraRecursiveVerifier_::UltraRecursiveVerifier_(Builder* builder, template UltraRecursiveVerifier_::Output UltraRecursiveVerifier_::verify_proof(const HonkProof& proof) { - StdlibProof stdlib_proof(*builder, proof); + StdlibProof stdlib_proof = bb::convert_native_proof_to_stdlib(builder, proof); return verify_proof(stdlib_proof); } @@ -51,8 +51,7 @@ UltraRecursiveVerifier_::Output UltraRecursiveVerifier_::verify_ * @return Output aggregation object */ template -UltraRecursiveVerifier_::Output UltraRecursiveVerifier_::verify_proof( - const stdlib::Proof& proof) +UltraRecursiveVerifier_::Output UltraRecursiveVerifier_::verify_proof(const StdlibProof& proof) { using Sumcheck = ::bb::SumcheckVerifier; using PCS = typename Flavor::PCS; @@ -67,7 +66,7 @@ UltraRecursiveVerifier_::Output UltraRecursiveVerifier_::verify_ BB_ASSERT_EQ(proof.size(), Flavor::NativeFlavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS + num_public_inputs); Output output; - StdlibProof honk_proof; + StdlibProof honk_proof; if constexpr (HasIPAAccumulator) { const size_t HONK_PROOF_LENGTH = Flavor::NativeFlavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS - IPA_PROOF_LENGTH; // The extra calculation is for the IPA proof length. @@ -76,8 +75,8 @@ UltraRecursiveVerifier_::Output UltraRecursiveVerifier_::verify_ // split out the ipa proof const std::ptrdiff_t honk_proof_with_pub_inputs_length = static_cast(HONK_PROOF_LENGTH + num_public_inputs); - output.ipa_proof = StdlibProof(proof.begin() + honk_proof_with_pub_inputs_length, proof.end()); - honk_proof = StdlibProof(proof.begin(), proof.begin() + honk_proof_with_pub_inputs_length); + output.ipa_proof = StdlibProof(proof.begin() + honk_proof_with_pub_inputs_length, proof.end()); + honk_proof = StdlibProof(proof.begin(), proof.begin() + honk_proof_with_pub_inputs_length); } else { honk_proof = proof; } diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.hpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.hpp index 771de0fc4d70..744b707eb394 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.hpp @@ -13,7 +13,6 @@ #include "barretenberg/honk/proof_system/types/proof.hpp" #include "barretenberg/stdlib/honk_verifier/oink_recursive_verifier.hpp" #include "barretenberg/stdlib/pairing_points.hpp" -#include "barretenberg/stdlib/proof/proof.hpp" #include "barretenberg/stdlib/transcript/transcript.hpp" #include "barretenberg/sumcheck/sumcheck.hpp" @@ -22,7 +21,7 @@ namespace bb::stdlib::recursion::honk { template struct UltraRecursiveVerifierOutput { PairingPoints points_accumulator; OpeningClaim> ipa_claim; - stdlib::Proof ipa_proof; + StdlibProof ipa_proof; }; template class UltraRecursiveVerifier_ { public: @@ -39,7 +38,6 @@ template class UltraRecursiveVerifier_ { using Transcript = bb::BaseTranscript>; using OinkVerifier = OinkRecursiveVerifier_; using Output = UltraRecursiveVerifierOutput; - using StdlibProof = stdlib::Proof; explicit UltraRecursiveVerifier_(Builder* builder, const std::shared_ptr& native_verifier_key, @@ -49,7 +47,8 @@ template class UltraRecursiveVerifier_ { const std::shared_ptr& transcript = std::make_shared()); [[nodiscard("IPA claim and Pairing points should be accumulated")]] Output verify_proof(const HonkProof& proof); - [[nodiscard("IPA claim and Pairing points should be accumulated")]] Output verify_proof(const StdlibProof& proof); + [[nodiscard("IPA claim and Pairing points should be accumulated")]] Output verify_proof( + const StdlibProof& proof); // TODO(https://github.com/AztecProtocol/barretenberg/issues/1364): Improve VKs. Clarify the usage of // RecursiveDeciderVK here. Seems unnecessary. diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.test.cpp index b68f56b6f835..5410d22ea203 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.test.cpp @@ -171,7 +171,7 @@ template class RecursiveVerifierTest : public testing verifier_output.points_accumulator.set_public(); if constexpr (HasIPAAccumulator) { verifier_output.ipa_claim.set_public(); - outer_circuit.ipa_proof = verifier_output.ipa_proof.get_value(); + outer_circuit.ipa_proof = convert_stdlib_proof_to_native(verifier_output.ipa_proof); } auto outer_proving_key = std::make_shared(outer_circuit); @@ -212,7 +212,7 @@ template class RecursiveVerifierTest : public testing output.points_accumulator.set_public(); if constexpr (HasIPAAccumulator) { output.ipa_claim.set_public(); - outer_circuit.ipa_proof = output.ipa_proof.get_value(); + outer_circuit.ipa_proof = convert_stdlib_proof_to_native(output.ipa_proof); } // Check for a failure flag in the recursive verifier circuit @@ -225,7 +225,7 @@ template class RecursiveVerifierTest : public testing native_verifier.transcript->enable_manifest(); if constexpr (HasIPAAccumulator) { native_verifier.ipa_verification_key = VerifierCommitmentKey(1 << CONST_ECCVM_LOG_N); - native_result = native_verifier.verify_proof(inner_proof, output.ipa_proof.get_value()); + native_result = native_verifier.verify_proof(inner_proof, convert_stdlib_proof_to_native(output.ipa_proof)); } else { native_result = native_verifier.verify_proof(inner_proof); } diff --git a/barretenberg/cpp/src/barretenberg/stdlib/merge_verifier/merge_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/merge_verifier/merge_recursive_verifier.cpp index 7f5c6c1459c9..051334ad0bf4 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/merge_verifier/merge_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/merge_verifier/merge_recursive_verifier.cpp @@ -34,7 +34,7 @@ MergeRecursiveVerifier_::MergeRecursiveVerifier_(CircuitBuilder* */ template MergeRecursiveVerifier_::PairingPoints MergeRecursiveVerifier_::verify_proof( - const stdlib::Proof& proof, const RefArray t_commitments) + const StdlibProof& proof, const RefArray t_commitments) { // Transform proof into a stdlib object transcript->load_proof(proof); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/merge_verifier/merge_recursive_verifier.hpp b/barretenberg/cpp/src/barretenberg/stdlib/merge_verifier/merge_recursive_verifier.hpp index 31f61d52a5a5..35ea8c235b24 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/merge_verifier/merge_recursive_verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/merge_verifier/merge_recursive_verifier.hpp @@ -9,7 +9,6 @@ #include "barretenberg/honk/proof_system/types/proof.hpp" #include "barretenberg/stdlib/pairing_points.hpp" #include "barretenberg/stdlib/primitives/curves/bn254.hpp" -#include "barretenberg/stdlib/proof/proof.hpp" #include "barretenberg/stdlib/transcript/transcript.hpp" namespace bb::stdlib::recursion::goblin { @@ -34,7 +33,7 @@ template class MergeRecursiveVerifier_ { const std::shared_ptr& transcript = std::make_shared()); [[nodiscard("Pairing points should be accumulated")]] PairingPoints verify_proof( - const stdlib::Proof& proof, const RefArray t_commitments); + const StdlibProof& proof, const RefArray t_commitments); }; } // namespace bb::stdlib::recursion::goblin diff --git a/barretenberg/cpp/src/barretenberg/stdlib/merge_verifier/merge_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/merge_verifier/merge_verifier.test.cpp index 36f3651d6d2b..b9429d9d542b 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/merge_verifier/merge_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/merge_verifier/merge_verifier.test.cpp @@ -71,7 +71,8 @@ template class RecursiveMergeVerifierTest : public test // Create a recursive merge verification circuit for the merge proof RecursiveMergeVerifier verifier{ &outer_circuit }; - const stdlib::Proof stdlib_merge_proof(outer_circuit, merge_proof); + const StdlibProof stdlib_merge_proof = + bb::convert_native_proof_to_stdlib(&outer_circuit, merge_proof); auto pairing_points = verifier.verify_proof(stdlib_merge_proof, t_commitments_rec); // Check for a failure flag in the recursive verifier circuit diff --git a/barretenberg/cpp/src/barretenberg/stdlib/primitives/field/field.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/primitives/field/field.test.cpp index e6caa122a39e..898b787a15d6 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/primitives/field/field.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/primitives/field/field.test.cpp @@ -1066,7 +1066,7 @@ template class stdlib_field : public testing::Test { uint64_t exponent_val = engine.get_random_uint32(); exponent_val += (uint64_t(1) << 32); - [[maybe_unused]] field_ct base = witness_ct(&builder, base_val); + field_ct base = witness_ct(&builder, base_val); field_ct exponent = witness_ct(&builder, exponent_val); #ifndef NDEBUG EXPECT_DEATH(base.pow(exponent), "Assertion failed: \\(exponent_value.get_msb\\(\\) < 32\\)"); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/proof/CMakeLists.txt b/barretenberg/cpp/src/barretenberg/stdlib/proof/CMakeLists.txt deleted file mode 100644 index 7322c795bf17..000000000000 --- a/barretenberg/cpp/src/barretenberg/stdlib/proof/CMakeLists.txt +++ /dev/null @@ -1,4 +0,0 @@ -barretenberg_module( - stdlib_proof - stdlib_circuit_builders -) diff --git a/barretenberg/cpp/src/barretenberg/stdlib/proof/proof.hpp b/barretenberg/cpp/src/barretenberg/stdlib/proof/proof.hpp deleted file mode 100644 index 2a4bd5089465..000000000000 --- a/barretenberg/cpp/src/barretenberg/stdlib/proof/proof.hpp +++ /dev/null @@ -1,49 +0,0 @@ -// === AUDIT STATUS === -// internal: { status: not started, auditors: [], date: YYYY-MM-DD } -// external_1: { status: not started, auditors: [], date: YYYY-MM-DD } -// external_2: { status: not started, auditors: [], date: YYYY-MM-DD } -// ===================== - -#pragma once - -#include "barretenberg/honk/proof_system/types/proof.hpp" -#include - -namespace bb::stdlib { - -/** - * @brief A simple wrapper around a vector of stdlib field elements representing a proof - * - * @tparam Builder - */ -template class Proof : public std::vector> { - public: - using Base = std::vector>; - using Base::Base; // Inherit all constructors from std::vector - - // Explicitly define vector copy constructor (not inherited by default) - Proof(const std::vector>& fields) - : Base(fields) - {} - - // Constructor from a native Proof - Proof(Builder& builder, const HonkProof& native_proof) - { - for (const auto& element : native_proof) { - this->push_back(bb::stdlib::witness_t(&builder, element)); - } - }; - - // Extract the native HonkProof - HonkProof get_value() const - { - HonkProof result; - result.reserve(this->size()); - for (const auto& element : *this) { - result.push_back(element.get_value()); - } - return result; - }; -}; - -} // namespace bb::stdlib diff --git a/barretenberg/cpp/src/barretenberg/stdlib/proof/proof.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/proof/proof.test.cpp deleted file mode 100644 index 099abbaf8972..000000000000 --- a/barretenberg/cpp/src/barretenberg/stdlib/proof/proof.test.cpp +++ /dev/null @@ -1,39 +0,0 @@ - -#include - -#include "barretenberg/stdlib_circuit_builders/mega_circuit_builder.hpp" -#include "proof.hpp" - -using namespace bb; - -namespace { -auto& engine = bb::numeric::get_debug_randomness(); -} - -/** - * @brief A test demonstrating that a stdlib Proof can be serialized and deserialized correctly. - * - */ -TEST(ProofTest, Basic) -{ - using Builder = MegaCircuitBuilder; - using Proof = bb::stdlib::Proof; - using NativeProof = bb::HonkProof; - - // Create a mock native proof with some random field elements - const size_t proof_size = 10; - NativeProof native_proof; - for (size_t i = 0; i < proof_size; ++i) { - native_proof.push_back(fr::random_element(&engine)); - } - - // Construct a stdlib proof from the native proof - Builder builder; - Proof proof(builder, native_proof); - - // Verify the sizes match - EXPECT_EQ(proof.size(), native_proof.size()); - - // Verify the proof returned by get_value() matches the original - EXPECT_EQ(proof.get_value(), native_proof); -} diff --git a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.cpp index 5ea7b6c1ed85..607d0861e81d 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.cpp @@ -44,7 +44,7 @@ void ProtogalaxyRecursiveVerifier_::run_oink_verifier_o template std::shared_ptr ProtogalaxyRecursiveVerifier_< - DeciderVerificationKeys>::verify_folding_proof(const stdlib::Proof& proof) + DeciderVerificationKeys>::verify_folding_proof(const StdlibProof& proof) { static constexpr size_t BATCHED_EXTENDED_LENGTH = DeciderVerificationKeys::BATCHED_EXTENDED_LENGTH; static constexpr size_t NUM_KEYS = DeciderVerificationKeys::NUM; diff --git a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.hpp b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.hpp index b3c063f8146b..03abc035bb24 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.hpp @@ -9,7 +9,6 @@ #include "barretenberg/flavor/mega_recursive_flavor.hpp" #include "barretenberg/honk/proof_system/types/proof.hpp" #include "barretenberg/protogalaxy/folding_result.hpp" -#include "barretenberg/stdlib/proof/proof.hpp" #include "barretenberg/stdlib/protogalaxy_verifier/recursive_decider_verification_keys.hpp" #include "barretenberg/stdlib/transcript/transcript.hpp" #include "barretenberg/ultra_honk/decider_keys.hpp" @@ -70,7 +69,7 @@ template class ProtogalaxyRecursiveVerifier_ { * by the prover, are expressed as constraints. * */ - std::shared_ptr verify_folding_proof(const stdlib::Proof&); + std::shared_ptr verify_folding_proof(const StdlibProof&); }; } // namespace bb::stdlib::recursion::honk diff --git a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.test.cpp index ca12b8dee85a..ce1d4f6fc1cb 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/protogalaxy_verifier/protogalaxy_recursive_verifier.test.cpp @@ -209,7 +209,8 @@ template class ProtogalaxyRecursiveTests : public tes auto recursive_decider_vk_1 = std::make_shared(&folding_circuit, decider_vk_1); auto recursive_decider_vk_2 = std::make_shared(&folding_circuit, decider_vk_2->verification_key); - stdlib::Proof stdlib_proof(folding_circuit, folding_proof.proof); + StdlibProof stdlib_proof = + bb::convert_native_proof_to_stdlib(&folding_circuit, folding_proof.proof); auto verifier = FoldingRecursiveVerifier{ &folding_circuit, recursive_decider_vk_1, @@ -311,7 +312,8 @@ template class ProtogalaxyRecursiveTests : public tes auto recursive_decider_vk_1 = std::make_shared(&folding_circuit, decider_vk_1); auto recursive_decider_vk_2 = std::make_shared(&folding_circuit, decider_vk_2->verification_key); - stdlib::Proof stdlib_proof(folding_circuit, folding_proof.proof); + StdlibProof stdlib_proof = + bb::convert_native_proof_to_stdlib(&folding_circuit, folding_proof.proof); auto verifier = FoldingRecursiveVerifier{ &folding_circuit, recursive_decider_vk_1, @@ -429,7 +431,8 @@ template class ProtogalaxyRecursiveTests : public tes std::make_shared(&folding_circuit, verifier_accumulator); auto recursive_decider_vk_2 = std::make_shared(&folding_circuit, verifier_inst->verification_key); - stdlib::Proof stdlib_proof(folding_circuit, folding_proof.proof); + StdlibProof stdlib_proof = + bb::convert_native_proof_to_stdlib(&folding_circuit, folding_proof.proof); auto verifier = FoldingRecursiveVerifier{ &folding_circuit, recursive_decider_vk_1, @@ -473,7 +476,8 @@ template class ProtogalaxyRecursiveTests : public tes auto recursive_decider_vk_1 = std::make_shared(&verifier_circuit, honk_vk_1); auto recursive_decider_vk_2 = std::make_shared(&verifier_circuit, honk_vk_2); - stdlib::Proof stdlib_proof(verifier_circuit, fold_result.proof); + StdlibProof stdlib_proof = + bb::convert_native_proof_to_stdlib(&verifier_circuit, fold_result.proof); auto verifier = FoldingRecursiveVerifier{ &verifier_circuit, diff --git a/barretenberg/cpp/src/barretenberg/stdlib/transcript/transcript.hpp b/barretenberg/cpp/src/barretenberg/stdlib/transcript/transcript.hpp index e284402f7420..c5267d809219 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/transcript/transcript.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/transcript/transcript.hpp @@ -68,4 +68,4 @@ template struct StdlibTranscriptParams { using UltraStdlibTranscript = BaseTranscript>; using MegaStdlibTranscript = BaseTranscript>; -} // namespace bb::stdlib::recursion::honk +} // namespace bb::stdlib::recursion::honk \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/stdlib/transcript/transcript.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/transcript/transcript.test.cpp index 1d8bc62538a6..5963496b9213 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/transcript/transcript.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/transcript/transcript.test.cpp @@ -7,7 +7,6 @@ #include "barretenberg/flavor/ultra_recursive_flavor.hpp" #include "barretenberg/flavor/ultra_rollup_recursive_flavor.hpp" #include "barretenberg/polynomials/univariate.hpp" -#include "barretenberg/stdlib/proof/proof.hpp" #include "barretenberg/transcript/transcript.hpp" #include "barretenberg/ultra_honk/decider_proving_key.hpp" #include "barretenberg/ultra_honk/ultra_prover.hpp" @@ -21,7 +20,6 @@ using UltraRecursiveFlavor = UltraRecursiveFlavor_; using FF = fr; using NativeTranscript = NativeTranscript; using StdlibTranscript = BaseTranscript>; -using StdlibProof = stdlib::Proof; /** * @brief Create some mock data; add it to the provided prover transcript in various mock rounds @@ -115,7 +113,7 @@ TEST(RecursiveHonkTranscript, InterfacesMatch) EXPECT_EQ(prover_transcript.get_manifest(), native_transcript.get_manifest()); // Instantiate a stdlib Transcript and perform the same operations - StdlibProof stdlib_proof(builder, proof_data); + StdlibProof stdlib_proof = bb::convert_native_proof_to_stdlib(&builder, proof_data); StdlibTranscript transcript; transcript.load_proof(stdlib_proof); perform_mock_verifier_transcript_operations(transcript); @@ -170,7 +168,7 @@ TEST(RecursiveHonkTranscript, ReturnValuesMatch) auto [native_alpha, native_beta] = native_transcript.template get_challenges("alpha", "beta"); // Perform the same operations with the stdlib verifier transcript - stdlib::Proof stdlib_proof(builder, proof_data); + StdlibProof stdlib_proof = bb::convert_native_proof_to_stdlib(&builder, proof_data); StdlibTranscript stdlib_transcript; stdlib_transcript.load_proof(stdlib_proof); auto stdlib_scalar = stdlib_transcript.template receive_from_prover("scalar"); @@ -218,7 +216,7 @@ TEST(RecursiveTranscript, InfinityConsistencyGrumpkin) verifier_transcript.receive_from_prover("infinity"); auto verifier_challenge = verifier_transcript.get_challenge("challenge"); - stdlib::Proof stdlib_proof(builder, proof_data); + StdlibProof stdlib_proof = bb::convert_native_proof_to_stdlib(&builder, proof_data); StdlibTranscript stdlib_transcript; stdlib_transcript.load_proof(stdlib_proof); auto stdlib_infinity = stdlib_transcript.receive_from_prover("infinity"); @@ -258,7 +256,7 @@ TEST(RecursiveTranscript, InfinityConsistencyBN254) verifier_transcript.receive_from_prover("infinity"); auto verifier_challenge = verifier_transcript.get_challenge("challenge"); - stdlib::Proof stdlib_proof(builder, proof_data); + StdlibProof stdlib_proof = bb::convert_native_proof_to_stdlib(&builder, proof_data); StdlibTranscript stdlib_transcript; stdlib_transcript.load_proof(stdlib_proof); auto stdlib_commitment = stdlib_transcript.receive_from_prover("infinity"); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.cpp index 6f32b07f652b..62f415365c07 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.cpp @@ -76,7 +76,7 @@ TranslatorRecursiveVerifier_::PairingPoints TranslatorRecursiveVerifier_ using ClaimBatch = ClaimBatcher::Batch; using InterleavedBatch = ClaimBatcher::InterleavedBatch; - StdlibProof stdlib_proof(*builder, proof); + StdlibProof stdlib_proof = bb::convert_native_proof_to_stdlib(builder, proof); transcript->load_proof(stdlib_proof); VerifierCommitments commitments{ key }; diff --git a/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.hpp b/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.hpp index 9f939d14c28a..80a6f7236ea2 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.hpp @@ -9,7 +9,6 @@ #include "barretenberg/goblin/types.hpp" #include "barretenberg/honk/proof_system/types/proof.hpp" #include "barretenberg/stdlib/pairing_points.hpp" -#include "barretenberg/stdlib/proof/proof.hpp" #include "barretenberg/stdlib/transcript/transcript.hpp" #include "barretenberg/stdlib/translator_vm_verifier/translator_recursive_flavor.hpp" #include "barretenberg/sumcheck/sumcheck.hpp" @@ -32,7 +31,6 @@ template class TranslatorRecursiveVerifier_ { using TranslationEvaluations = TranslationEvaluations_; using Transcript = typename Flavor::Transcript; using RelationParams = ::bb::RelationParameters; - using StdlibProof = stdlib::Proof; std::shared_ptr key; std::shared_ptr transcript; diff --git a/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.test.cpp index 8951546ee485..9a931009b6b5 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/translator_vm_verifier/translator_recursive_verifier.test.cpp @@ -83,7 +83,7 @@ template class TranslatorRecursiveTests : public ::te OuterBuilder outer_circuit; // Mock a previous verifier that would in reality be the ECCVM recursive verifier - stdlib::Proof stdlib_proof(outer_circuit, fake_inital_proof); + StdlibProof stdlib_proof = bb::convert_native_proof_to_stdlib(&outer_circuit, fake_inital_proof); auto transcript = std::make_shared(); transcript->load_proof(stdlib_proof); [[maybe_unused]] auto _ = transcript->template receive_from_prover("init"); @@ -165,7 +165,8 @@ template class TranslatorRecursiveTests : public ::te OuterBuilder outer_circuit; // Mock a previous verifier that would in reality be the ECCVM recursive verifier - stdlib::Proof stdlib_proof(outer_circuit, fake_inital_proof); + StdlibProof stdlib_proof = + bb::convert_native_proof_to_stdlib(&outer_circuit, fake_inital_proof); auto transcript = std::make_shared(); transcript->load_proof(stdlib_proof); [[maybe_unused]] auto _ = transcript->template receive_from_prover("init"); diff --git a/barretenberg/cpp/src/barretenberg/transcript/transcript.hpp b/barretenberg/cpp/src/barretenberg/transcript/transcript.hpp index 4f0b2136fe0e..57551632fb97 100644 --- a/barretenberg/cpp/src/barretenberg/transcript/transcript.hpp +++ b/barretenberg/cpp/src/barretenberg/transcript/transcript.hpp @@ -653,6 +653,25 @@ template class BaseTranscript { } }; +template +static bb::StdlibProof convert_native_proof_to_stdlib(Builder* builder, const HonkProof& proof) +{ + bb::StdlibProof result; + for (const auto& element : proof) { + result.push_back(bb::stdlib::witness_t(builder, element)); + } + return result; +} + +template static bb::HonkProof convert_stdlib_proof_to_native(const StdlibProof& proof) +{ + bb::HonkProof result; + for (const auto& element : proof) { + result.push_back(element.get_value()); + } + return result; +} + using NativeTranscript = BaseTranscript; /////////////////////////////////////////// diff --git a/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/goblin_avm_recursive_verifier.hpp b/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/goblin_avm_recursive_verifier.hpp index b27240e66fa9..68f8bed48a10 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/goblin_avm_recursive_verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/goblin_avm_recursive_verifier.hpp @@ -83,7 +83,7 @@ class AvmGoblinRecursiveVerifier { * @return RecursiveAvmGoblinOutput {ipa_proof, ipa_claim, points_accumulator} */ [[nodiscard("IPA claim and Pairing points should be accumulated")]] RecursiveAvmGoblinOutput verify_proof( - const stdlib::Proof& stdlib_proof, const std::vector>& public_inputs) const + const StdlibProof& stdlib_proof, const std::vector>& public_inputs) const { // Construct and prove the inner Mega-arithmetized AVM recursive verifier circuit; proof is {\pi_M, \pi_G} InnerProverOutput inner_output = @@ -106,7 +106,7 @@ class AvmGoblinRecursiveVerifier { * @return RecursiveAvmGoblinOutput */ [[nodiscard("IPA claim and Pairing points should be accumulated")]] RecursiveAvmGoblinOutput - construct_outer_recursive_verification_circuit(const stdlib::Proof& stdlib_proof, + construct_outer_recursive_verification_circuit(const StdlibProof& stdlib_proof, const std::vector>& public_inputs, const InnerProverOutput& inner_output) const { @@ -132,7 +132,8 @@ class AvmGoblinRecursiveVerifier { // TODO(https://github.com/AztecProtocol/barretenberg/issues/1305): Mega + Goblin VKs must be circuit constants. auto mega_vk = std::make_shared(&ultra_builder, inner_output.mega_vk); MegaRecursiveVerifier mega_verifier(&ultra_builder, mega_vk, transcript); - stdlib::Proof mega_proof(ultra_builder, inner_output.mega_proof); + StdlibProof mega_proof = + bb::convert_native_proof_to_stdlib(&ultra_builder, inner_output.mega_proof); auto mega_verifier_output = mega_verifier.verify_proof(mega_proof); // Recursively verify the goblin proof\pi_G in the Ultra circuit @@ -162,7 +163,7 @@ class AvmGoblinRecursiveVerifier { * @return InnerCircuitOutput proof and verification key for Mega + Goblin; {\pi_M, \pi_G}, {VK_M, VK_G} */ InnerProverOutput construct_and_prove_inner_recursive_verification_circuit( - const stdlib::Proof& stdlib_proof, const std::vector>& public_inputs) const + const StdlibProof& stdlib_proof, const std::vector>& public_inputs) const { using AvmRecursiveFlavor = AvmRecursiveFlavor_; using AvmRecursiveVerificationKey = AvmRecursiveFlavor::VerificationKey; @@ -191,7 +192,7 @@ class AvmGoblinRecursiveVerifier { }; // Convert the AVM proof, public inputs, and VK to stdlib Mega representations and add them to the hash buffer. - stdlib::Proof mega_stdlib_proof{ mega_builder, stdlib_proof.get_value() }; + std::vector mega_stdlib_proof = convert_stdlib_ultra_to_stdlib_mega(stdlib_proof); std::vector> mega_public_inputs; mega_public_inputs.reserve(public_inputs.size()); for (const std::vector& input_vec : public_inputs) { diff --git a/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/recursive_verifier.cpp index 84200fcbaa45..09364af2533d 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/recursive_verifier.cpp @@ -53,7 +53,7 @@ template AvmRecursiveVerifier_::PairingPoints AvmRecursiveVerifier_::verify_proof( const HonkProof& proof, const std::vector>& public_inputs_vec_nt) { - StdlibProof stdlib_proof(builder, proof); + StdlibProof stdlib_proof = convert_native_proof_to_stdlib(&builder, proof); std::vector> public_inputs_ct; public_inputs_ct.reserve(public_inputs_vec_nt.size()); @@ -74,7 +74,7 @@ AvmRecursiveVerifier_::PairingPoints AvmRecursiveVerifier_::veri // TODO(#14234)[Unconditional PIs validation]: rename stdlib_proof_with_pi_flag to stdlib_proof template AvmRecursiveVerifier_::PairingPoints AvmRecursiveVerifier_::verify_proof( - const stdlib::Proof& stdlib_proof_with_pi_flag, const std::vector>& public_inputs) + const StdlibProof& stdlib_proof_with_pi_flag, const std::vector>& public_inputs) { using Curve = typename Flavor::Curve; using PCS = typename Flavor::PCS; @@ -86,7 +86,7 @@ AvmRecursiveVerifier_::PairingPoints AvmRecursiveVerifier_::veri using stdlib::bool_t; // TODO(#14234)[Unconditional PIs validation]: Remove the next 3 lines - StdlibProof stdlib_proof = stdlib_proof_with_pi_flag; + StdlibProof stdlib_proof = stdlib_proof_with_pi_flag; bool_t pi_validation = !bool_t(stdlib_proof.at(0)); stdlib_proof.erase(stdlib_proof.begin()); diff --git a/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/recursive_verifier.hpp b/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/recursive_verifier.hpp index 1d5b328991c0..d985d2e5cb6c 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/recursive_verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/recursive_verifier.hpp @@ -1,7 +1,6 @@ #pragma once #include "barretenberg/stdlib/pairing_points.hpp" -#include "barretenberg/stdlib/proof/proof.hpp" #include "barretenberg/sumcheck/sumcheck.hpp" #include "barretenberg/vm2/constraining/recursion/recursive_flavor.hpp" @@ -23,7 +22,6 @@ template class AvmRecursiveVerifier_ { using Transcript = BaseTranscript>; using VerifierCommitments = typename Flavor::VerifierCommitments; using PairingPoints = stdlib::recursion::PairingPoints; - using StdlibProof = stdlib::Proof; public: explicit AvmRecursiveVerifier_(Builder& builder, @@ -33,8 +31,8 @@ template class AvmRecursiveVerifier_ { [[nodiscard("IPA claim and Pairing points should be accumulated")]] PairingPoints verify_proof( const HonkProof& proof, const std::vector>& public_inputs_vec_nt); [[nodiscard("IPA claim and Pairing points should be accumulated")]] PairingPoints verify_proof( - const StdlibProof& stdlib_proof_with_pi_flag, // TODO(#14234)[Unconditional PIs validation]: rename - // stdlib_proof_with_pi_flag to stdlib_proof + const StdlibProof& stdlib_proof_with_pi_flag, // TODO(#14234)[Unconditional PIs validation]: rename + // stdlib_proof_with_pi_flag to stdlib_proof const std::vector>& public_inputs); std::shared_ptr key; diff --git a/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/recursive_verifier.test.cpp b/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/recursive_verifier.test.cpp index b7c48dabd5f8..dd4ed23d57b4 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/recursive_verifier.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/recursive_verifier.test.cpp @@ -170,7 +170,7 @@ TEST_F(AvmRecursiveTests, GoblinRecursion) // Construct stdlib representations of the proof, public inputs and verification key OuterBuilder outer_circuit; - stdlib::Proof stdlib_proof(outer_circuit, proof); + StdlibProof stdlib_proof = bb::convert_native_proof_to_stdlib(&outer_circuit, proof); std::vector> public_inputs_ct; public_inputs_ct.reserve(public_inputs_cols.size()); @@ -199,7 +199,7 @@ TEST_F(AvmRecursiveTests, GoblinRecursion) verifier_output.points_accumulator.set_public(); verifier_output.ipa_claim.set_public(); - outer_circuit.ipa_proof = verifier_output.ipa_proof.get_value(); + outer_circuit.ipa_proof = convert_stdlib_proof_to_native(verifier_output.ipa_proof); // Ensure that the pairing check is satisfied on the outputs of the recursive verifier NativeVerifierCommitmentKey pcs_vkey{};