diff --git a/barretenberg/cpp/src/barretenberg/vm2/constraining/benchmark/relations_acc.bench.cpp b/barretenberg/cpp/src/barretenberg/vm2/constraining/benchmark/relations_acc.bench.cpp index 23dd82038bb9..1ae2f7f6994f 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/constraining/benchmark/relations_acc.bench.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/constraining/benchmark/relations_acc.bench.cpp @@ -7,9 +7,9 @@ #include "barretenberg/common/constexpr_utils.hpp" #include "barretenberg/relations/relation_parameters.hpp" #include "barretenberg/vm2/common/field.hpp" +#include "barretenberg/vm2/constraining/full_row.hpp" #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/generated/flavor.hpp" -#include "barretenberg/vm2/generated/full_row.hpp" using namespace benchmark; using namespace bb::avm2; @@ -97,4 +97,4 @@ int main(int argc, char** argv) ::benchmark::Initialize(&argc, argv); ::benchmark::RunSpecifiedBenchmarks(); -} \ No newline at end of file +} diff --git a/barretenberg/cpp/src/barretenberg/vm2/generated/full_row.hpp b/barretenberg/cpp/src/barretenberg/vm2/constraining/full_row.hpp similarity index 93% rename from barretenberg/cpp/src/barretenberg/vm2/generated/full_row.hpp rename to barretenberg/cpp/src/barretenberg/vm2/constraining/full_row.hpp index 79093a9c5193..ac0594d3d8ac 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/generated/full_row.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/constraining/full_row.hpp @@ -1,7 +1,6 @@ -// AUTOGENERATED FILE #pragma once -#include "columns.hpp" +#include "barretenberg/vm2/generated/columns.hpp" namespace bb::avm2 { diff --git a/barretenberg/cpp/src/barretenberg/vm2/constraining/polynomials.hpp b/barretenberg/cpp/src/barretenberg/vm2/constraining/polynomials.hpp index 3ea0b0d5902f..dd9805df10ea 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/constraining/polynomials.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/constraining/polynomials.hpp @@ -1,6 +1,6 @@ #pragma once -#include "barretenberg/vm2/generated/prover.hpp" +#include "barretenberg/vm2/constraining/prover.hpp" #include "barretenberg/vm2/tracegen/trace_container.hpp" namespace bb::avm2::constraining { @@ -8,4 +8,4 @@ namespace bb::avm2::constraining { // Computes the polynomials from the trace, and destroys it in the process. AvmProver::ProverPolynomials compute_polynomials(tracegen::TraceContainer& trace); -} // namespace bb::avm2::constraining \ No newline at end of file +} // namespace bb::avm2::constraining diff --git a/barretenberg/cpp/src/barretenberg/vm2/generated/prover.cpp b/barretenberg/cpp/src/barretenberg/vm2/constraining/prover.cpp similarity index 98% rename from barretenberg/cpp/src/barretenberg/vm2/generated/prover.cpp rename to barretenberg/cpp/src/barretenberg/vm2/constraining/prover.cpp index f9b4a80cb016..b4865464cdb0 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/generated/prover.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/constraining/prover.cpp @@ -1,5 +1,5 @@ -// AUTOGENERATED FILE -#include "prover.hpp" +#include "barretenberg/vm2/constraining/prover.hpp" + #include "barretenberg/commitment_schemes/claim.hpp" #include "barretenberg/commitment_schemes/commitment_key.hpp" #include "barretenberg/commitment_schemes/shplonk/shplemini.hpp" @@ -155,4 +155,4 @@ HonkProof AvmProver::construct_proof() return export_proof(); } -} // namespace bb::avm2 \ No newline at end of file +} // namespace bb::avm2 diff --git a/barretenberg/cpp/src/barretenberg/vm2/generated/prover.hpp b/barretenberg/cpp/src/barretenberg/vm2/constraining/prover.hpp similarity index 96% rename from barretenberg/cpp/src/barretenberg/vm2/generated/prover.hpp rename to barretenberg/cpp/src/barretenberg/vm2/constraining/prover.hpp index 10dfcc9ca1fe..b419a3eb36fb 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/generated/prover.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/constraining/prover.hpp @@ -5,7 +5,7 @@ #include "barretenberg/relations/relation_parameters.hpp" #include "barretenberg/sumcheck/sumcheck_output.hpp" #include "barretenberg/transcript/transcript.hpp" -#include "flavor.hpp" +#include "barretenberg/vm2/generated/flavor.hpp" namespace bb::avm2 { @@ -61,4 +61,4 @@ class AvmProver { HonkProof proof; }; -} // namespace bb::avm2 \ No newline at end of file +} // namespace bb::avm2 diff --git a/barretenberg/cpp/src/barretenberg/vm2/generated/verifier.cpp b/barretenberg/cpp/src/barretenberg/vm2/constraining/verifier.cpp similarity index 98% rename from barretenberg/cpp/src/barretenberg/vm2/generated/verifier.cpp rename to barretenberg/cpp/src/barretenberg/vm2/constraining/verifier.cpp index d90cc798f6a3..ec7ff30ad0b6 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/generated/verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/constraining/verifier.cpp @@ -1,5 +1,5 @@ -// AUTOGENERATED FILE -#include "verifier.hpp" +#include "barretenberg/vm2/constraining/verifier.hpp" + #include "barretenberg/commitment_schemes/shplonk/shplemini.hpp" #include "barretenberg/common/log.hpp" #include "barretenberg/numeric/bitop/get_msb.hpp" diff --git a/barretenberg/cpp/src/barretenberg/vm2/generated/verifier.hpp b/barretenberg/cpp/src/barretenberg/vm2/constraining/verifier.hpp similarity index 94% rename from barretenberg/cpp/src/barretenberg/vm2/generated/verifier.hpp rename to barretenberg/cpp/src/barretenberg/vm2/constraining/verifier.hpp index c969e3c51d2e..6fd78f3b020e 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/generated/verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/constraining/verifier.hpp @@ -1,9 +1,8 @@ -// AUTOGENERATED FILE #pragma once #include "barretenberg/plonk/proof_system/types/proof.hpp" #include "barretenberg/sumcheck/sumcheck.hpp" -#include "flavor.hpp" +#include "barretenberg/vm2/generated/flavor.hpp" namespace bb::avm2 { @@ -36,4 +35,4 @@ class AvmVerifier { FF evaluate_public_input_column(const std::vector& points, std::vector challenges); }; -} // namespace bb::avm2 \ No newline at end of file +} // namespace bb::avm2 diff --git a/barretenberg/cpp/src/barretenberg/vm2/debugger.cpp b/barretenberg/cpp/src/barretenberg/vm2/debugger.cpp index c87ad35ec645..988a7938635d 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/debugger.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/debugger.cpp @@ -8,9 +8,9 @@ #include "barretenberg/numeric/uint256/uint256.hpp" #include "barretenberg/vm2/common/field.hpp" +#include "barretenberg/vm2/constraining/full_row.hpp" #include "barretenberg/vm2/generated/columns.hpp" #include "barretenberg/vm2/generated/flavor.hpp" -#include "barretenberg/vm2/generated/full_row.hpp" #include "barretenberg/vm2/tracegen/lib/trace_conversion.hpp" namespace bb::avm2 { @@ -222,4 +222,4 @@ void InteractiveDebugger::test_relation(const std::string& relation_name, std::o } } -} // namespace bb::avm2 \ No newline at end of file +} // namespace bb::avm2 diff --git a/barretenberg/cpp/src/barretenberg/vm2/generated/flavor.hpp b/barretenberg/cpp/src/barretenberg/vm2/generated/flavor.hpp index a9000e6b59f4..f4364c52e8d9 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/generated/flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/generated/flavor.hpp @@ -445,54 +445,9 @@ class AvmFlavor { public: VerifierCommitments_(const std::shared_ptr& verification_key) { - this->precomputed_as_unary = verification_key->precomputed_as_unary; - this->precomputed_bitwise_input_a = verification_key->precomputed_bitwise_input_a; - this->precomputed_bitwise_input_b = verification_key->precomputed_bitwise_input_b; - this->precomputed_bitwise_op_id = verification_key->precomputed_bitwise_op_id; - this->precomputed_bitwise_output = verification_key->precomputed_bitwise_output; - this->precomputed_clk = verification_key->precomputed_clk; - this->precomputed_exec_opcode = verification_key->precomputed_exec_opcode; - this->precomputed_first_row = verification_key->precomputed_first_row; - this->precomputed_instr_size = verification_key->precomputed_instr_size; - this->precomputed_integral_tag_length = verification_key->precomputed_integral_tag_length; - this->precomputed_opcode_out_of_range = verification_key->precomputed_opcode_out_of_range; - this->precomputed_p_decomposition_limb = verification_key->precomputed_p_decomposition_limb; - this->precomputed_p_decomposition_limb_index = verification_key->precomputed_p_decomposition_limb_index; - this->precomputed_p_decomposition_radix = verification_key->precomputed_p_decomposition_radix; - this->precomputed_power_of_2 = verification_key->precomputed_power_of_2; - this->precomputed_sel_bitwise = verification_key->precomputed_sel_bitwise; - this->precomputed_sel_has_tag = verification_key->precomputed_sel_has_tag; - this->precomputed_sel_integral_tag = verification_key->precomputed_sel_integral_tag; - this->precomputed_sel_mem_tag_out_of_range = verification_key->precomputed_sel_mem_tag_out_of_range; - this->precomputed_sel_op_dc_0 = verification_key->precomputed_sel_op_dc_0; - this->precomputed_sel_op_dc_1 = verification_key->precomputed_sel_op_dc_1; - this->precomputed_sel_op_dc_10 = verification_key->precomputed_sel_op_dc_10; - this->precomputed_sel_op_dc_11 = verification_key->precomputed_sel_op_dc_11; - this->precomputed_sel_op_dc_12 = verification_key->precomputed_sel_op_dc_12; - this->precomputed_sel_op_dc_13 = verification_key->precomputed_sel_op_dc_13; - this->precomputed_sel_op_dc_14 = verification_key->precomputed_sel_op_dc_14; - this->precomputed_sel_op_dc_15 = verification_key->precomputed_sel_op_dc_15; - this->precomputed_sel_op_dc_16 = verification_key->precomputed_sel_op_dc_16; - this->precomputed_sel_op_dc_17 = verification_key->precomputed_sel_op_dc_17; - this->precomputed_sel_op_dc_2 = verification_key->precomputed_sel_op_dc_2; - this->precomputed_sel_op_dc_3 = verification_key->precomputed_sel_op_dc_3; - this->precomputed_sel_op_dc_4 = verification_key->precomputed_sel_op_dc_4; - this->precomputed_sel_op_dc_5 = verification_key->precomputed_sel_op_dc_5; - this->precomputed_sel_op_dc_6 = verification_key->precomputed_sel_op_dc_6; - this->precomputed_sel_op_dc_7 = verification_key->precomputed_sel_op_dc_7; - this->precomputed_sel_op_dc_8 = verification_key->precomputed_sel_op_dc_8; - this->precomputed_sel_op_dc_9 = verification_key->precomputed_sel_op_dc_9; - this->precomputed_sel_p_decomposition = verification_key->precomputed_sel_p_decomposition; - this->precomputed_sel_range_16 = verification_key->precomputed_sel_range_16; - this->precomputed_sel_range_8 = verification_key->precomputed_sel_range_8; - this->precomputed_sel_sha256_compression = verification_key->precomputed_sel_sha256_compression; - this->precomputed_sel_tag_is_op2 = verification_key->precomputed_sel_tag_is_op2; - this->precomputed_sel_to_radix_safe_limbs = verification_key->precomputed_sel_to_radix_safe_limbs; - this->precomputed_sel_unary = verification_key->precomputed_sel_unary; - this->precomputed_sha256_compression_round_constant = - verification_key->precomputed_sha256_compression_round_constant; - this->precomputed_to_radix_safe_limbs = verification_key->precomputed_to_radix_safe_limbs; - this->precomputed_zero = verification_key->precomputed_zero; + for (auto [commitment, vk_commitment] : zip_view(this->get_precomputed(), verification_key->get_all())) { + commitment = vk_commitment; + } } }; diff --git a/barretenberg/cpp/src/barretenberg/vm2/proving_helper.cpp b/barretenberg/cpp/src/barretenberg/vm2/proving_helper.cpp index 29480e6864fa..27da00a16222 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/proving_helper.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/proving_helper.cpp @@ -11,9 +11,9 @@ #include "barretenberg/vm2/common/constants.hpp" #include "barretenberg/vm2/constraining/check_circuit.hpp" #include "barretenberg/vm2/constraining/polynomials.hpp" +#include "barretenberg/vm2/constraining/prover.hpp" +#include "barretenberg/vm2/constraining/verifier.hpp" #include "barretenberg/vm2/debugger.hpp" -#include "barretenberg/vm2/generated/prover.hpp" -#include "barretenberg/vm2/generated/verifier.hpp" namespace bb::avm2 { namespace { @@ -112,4 +112,4 @@ bool AvmProvingHelper::verify(const AvmProvingHelper::Proof& proof, const Public return AVM_TRACK_TIME_V("proving/verify_proof", verifier.verify_proof(proof, pi.to_columns())); } -} // namespace bb::avm2 \ No newline at end of file +} // namespace bb::avm2 diff --git a/barretenberg/cpp/src/barretenberg/vm2/proving_helper.hpp b/barretenberg/cpp/src/barretenberg/vm2/proving_helper.hpp index ce10f6ec7ec5..607fbcfeaf8f 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/proving_helper.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/proving_helper.hpp @@ -2,8 +2,8 @@ #include "barretenberg/honk/proof_system/types/proof.hpp" #include "barretenberg/vm2/common/avm_inputs.hpp" -#include "barretenberg/vm2/generated/prover.hpp" -#include "barretenberg/vm2/generated/verifier.hpp" +#include "barretenberg/vm2/constraining/prover.hpp" +#include "barretenberg/vm2/constraining/verifier.hpp" #include "barretenberg/vm2/tracegen/trace_container.hpp" namespace bb::avm2 { @@ -19,4 +19,4 @@ class AvmProvingHelper { bool verify(const Proof& proof, const PublicInputs& pi, const VkData& vk_data); }; -} // namespace bb::avm2 \ No newline at end of file +} // namespace bb::avm2 diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/alu_trace.test.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/alu_trace.test.cpp index dfe6d54d5430..a2e988616fd5 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/alu_trace.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/alu_trace.test.cpp @@ -3,8 +3,8 @@ #include +#include "barretenberg/vm2/constraining/full_row.hpp" #include "barretenberg/vm2/generated/flavor_settings.hpp" -#include "barretenberg/vm2/generated/full_row.hpp" #include "barretenberg/vm2/testing/macros.hpp" #include "barretenberg/vm2/tracegen/alu_trace.hpp" #include "barretenberg/vm2/tracegen/test_trace_container.hpp" diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/bitwise_trace.test.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/bitwise_trace.test.cpp index 6f5c43a2e95c..d9151d60ee04 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/bitwise_trace.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/bitwise_trace.test.cpp @@ -3,8 +3,8 @@ #include +#include "barretenberg/vm2/constraining/full_row.hpp" #include "barretenberg/vm2/generated/flavor_settings.hpp" -#include "barretenberg/vm2/generated/full_row.hpp" #include "barretenberg/vm2/testing/macros.hpp" #include "barretenberg/vm2/tracegen/bitwise_trace.hpp" #include "barretenberg/vm2/tracegen/test_trace_container.hpp" diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/bytecode_trace.test.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/bytecode_trace.test.cpp index b70cfb59a8b5..7e27010332ab 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/bytecode_trace.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/bytecode_trace.test.cpp @@ -9,8 +9,8 @@ #include #include "barretenberg/vm2/common/instruction_spec.hpp" +#include "barretenberg/vm2/constraining/full_row.hpp" #include "barretenberg/vm2/generated/flavor_settings.hpp" -#include "barretenberg/vm2/generated/full_row.hpp" #include "barretenberg/vm2/testing/fixtures.hpp" #include "barretenberg/vm2/testing/macros.hpp" #include "barretenberg/vm2/tracegen/bytecode_trace.hpp" diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/class_id_derivation_trace.test.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/class_id_derivation_trace.test.cpp index 70a2692a04d2..9fa6f92c8f39 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/class_id_derivation_trace.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/class_id_derivation_trace.test.cpp @@ -3,8 +3,8 @@ #include +#include "barretenberg/vm2/constraining/full_row.hpp" #include "barretenberg/vm2/generated/flavor_settings.hpp" -#include "barretenberg/vm2/generated/full_row.hpp" #include "barretenberg/vm2/testing/macros.hpp" #include "barretenberg/vm2/tracegen/class_id_derivation_trace.hpp" #include "barretenberg/vm2/tracegen/test_trace_container.hpp" diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/lib/trace_conversion.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/lib/trace_conversion.hpp index 7c524564abef..0f80cab697b0 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/lib/trace_conversion.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/lib/trace_conversion.hpp @@ -3,8 +3,8 @@ #include #include "barretenberg/vm2/common/field.hpp" +#include "barretenberg/vm2/constraining/full_row.hpp" #include "barretenberg/vm2/generated/columns.hpp" -#include "barretenberg/vm2/generated/full_row.hpp" namespace bb::avm2::tracegen { diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/merkle_check_trace.test.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/merkle_check_trace.test.cpp index 0c566df3a573..7b06ce15cde7 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/merkle_check_trace.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/merkle_check_trace.test.cpp @@ -6,8 +6,8 @@ #include "barretenberg/crypto/poseidon2/poseidon2.hpp" #include "barretenberg/vm2/common/field.hpp" +#include "barretenberg/vm2/constraining/full_row.hpp" #include "barretenberg/vm2/generated/flavor_settings.hpp" -#include "barretenberg/vm2/generated/full_row.hpp" #include "barretenberg/vm2/tracegen/merkle_check_trace.hpp" #include "barretenberg/vm2/tracegen/test_trace_container.hpp" diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/range_check_trace.test.cpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/range_check_trace.test.cpp index 3493d51b3fc6..21b182ea855d 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/range_check_trace.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/range_check_trace.test.cpp @@ -3,8 +3,8 @@ #include +#include "barretenberg/vm2/constraining/full_row.hpp" #include "barretenberg/vm2/generated/flavor_settings.hpp" -#include "barretenberg/vm2/generated/full_row.hpp" #include "barretenberg/vm2/tracegen/range_check_trace.hpp" #include "barretenberg/vm2/tracegen/test_trace_container.hpp" diff --git a/barretenberg/cpp/src/barretenberg/vm2/tracegen/test_trace_container.hpp b/barretenberg/cpp/src/barretenberg/vm2/tracegen/test_trace_container.hpp index 409205de7f75..554a7b9ee5a1 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/tracegen/test_trace_container.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/tracegen/test_trace_container.hpp @@ -3,8 +3,8 @@ #include #include +#include "barretenberg/vm2/constraining/full_row.hpp" #include "barretenberg/vm2/generated/columns.hpp" -#include "barretenberg/vm2/generated/full_row.hpp" #include "barretenberg/vm2/tracegen/trace_container.hpp" namespace bb::avm2::tracegen { @@ -30,4 +30,4 @@ class TestTraceContainer : public TraceContainer { RowTraceContainer as_rows() const; }; -} // namespace bb::avm2::tracegen \ No newline at end of file +} // namespace bb::avm2::tracegen diff --git a/bb-pilcom/bb-pil-backend/src/circuit_builder.rs b/bb-pilcom/bb-pil-backend/src/circuit_builder.rs deleted file mode 100644 index 080b70c501ca..000000000000 --- a/bb-pilcom/bb-pil-backend/src/circuit_builder.rs +++ /dev/null @@ -1,73 +0,0 @@ -use crate::file_writer::BBFiles; -use handlebars::Handlebars; -use serde_json::json; - -pub trait CircuitBuilder { - fn create_circuit_builder_hpp(&mut self, name: &str); - fn create_circuit_builder_cpp(&mut self, name: &str, all_cols_without_inverses: &[String]); - - fn create_full_row_hpp(&mut self, name: &str, all_cols: &[String]); -} - -impl CircuitBuilder for BBFiles { - fn create_circuit_builder_hpp(&mut self, name: &str) { - let mut handlebars = Handlebars::new(); - - let data = &json!({ - "name": name, - }); - - handlebars - .register_template_string( - "circuit_builder.hpp", - std::str::from_utf8(include_bytes!("../templates/circuit_builder.hpp.hbs")) - .unwrap(), - ) - .unwrap(); - - let circuit_hpp = handlebars.render("circuit_builder.hpp", data).unwrap(); - - self.write_file(None, "circuit_builder.hpp", &circuit_hpp); - } - - fn create_circuit_builder_cpp(&mut self, name: &str, all_cols_without_inverses: &[String]) { - let mut handlebars = Handlebars::new(); - - let data = &json!({ - "name": name, - "all_cols_without_inverses": all_cols_without_inverses, - }); - - handlebars - .register_template_string( - "circuit_builder.cpp", - std::str::from_utf8(include_bytes!("../templates/circuit_builder.cpp.hbs")) - .unwrap(), - ) - .unwrap(); - - let circuit_cpp = handlebars.render("circuit_builder.cpp", data).unwrap(); - - self.write_file(None, "circuit_builder.cpp", &circuit_cpp); - } - - fn create_full_row_hpp(&mut self, name: &str, all_cols: &[String]) { - let mut handlebars = Handlebars::new(); - - let data = &json!({ - "name": name, - "all_cols": all_cols, - }); - - handlebars - .register_template_string( - "full_row.hpp", - std::str::from_utf8(include_bytes!("../templates/full_row.hpp.hbs")).unwrap(), - ) - .unwrap(); - - let hpp = handlebars.render("full_row.hpp", data).unwrap(); - - self.write_file(None, "full_row.hpp", &hpp); - } -} diff --git a/bb-pilcom/bb-pil-backend/src/composer_builder.rs b/bb-pilcom/bb-pil-backend/src/composer_builder.rs deleted file mode 100644 index 5e12155afe67..000000000000 --- a/bb-pilcom/bb-pil-backend/src/composer_builder.rs +++ /dev/null @@ -1,48 +0,0 @@ -use crate::file_writer::BBFiles; -use handlebars::Handlebars; -use serde_json::json; - -pub trait ComposerBuilder { - fn create_composer_cpp(&mut self, name: &str); - fn create_composer_hpp(&mut self, name: &str); -} - -impl ComposerBuilder for BBFiles { - fn create_composer_cpp(&mut self, name: &str) { - let mut handlebars = Handlebars::new(); - - let data = &json!({ - "name": name, - }); - - handlebars - .register_template_string( - "composer.cpp", - std::str::from_utf8(include_bytes!("../templates/composer.cpp.hbs")).unwrap(), - ) - .unwrap(); - - let composer_cpp = handlebars.render("composer.cpp", data).unwrap(); - - self.write_file(None, "composer.cpp", &composer_cpp); - } - - fn create_composer_hpp(&mut self, name: &str) { - let mut handlebars = Handlebars::new(); - - let data = &json!({ - "name": name, - }); - - handlebars - .register_template_string( - "composer.hpp", - std::str::from_utf8(include_bytes!("../templates/composer.hpp.hbs")).unwrap(), - ) - .unwrap(); - - let composer_hpp = handlebars.render("composer.hpp", data).unwrap(); - - self.write_file(None, "composer.hpp", &composer_hpp); - } -} diff --git a/bb-pilcom/bb-pil-backend/src/lib.rs b/bb-pilcom/bb-pil-backend/src/lib.rs index cdea9b8fe6cc..0bef4b83456e 100644 --- a/bb-pilcom/bb-pil-backend/src/lib.rs +++ b/bb-pilcom/bb-pil-backend/src/lib.rs @@ -1,12 +1,8 @@ -mod circuit_builder; -mod composer_builder; mod expression_evaluation; mod file_writer; mod flavor_builder; pub mod lookup_builder; pub mod permutation_builder; -mod prover_builder; mod relation_builder; mod utils; -mod verifier_builder; pub mod vm_builder; diff --git a/bb-pilcom/bb-pil-backend/src/prover_builder.rs b/bb-pilcom/bb-pil-backend/src/prover_builder.rs deleted file mode 100644 index 3590722a2096..000000000000 --- a/bb-pilcom/bb-pil-backend/src/prover_builder.rs +++ /dev/null @@ -1,49 +0,0 @@ -use crate::file_writer::BBFiles; -use handlebars::Handlebars; -use serde_json::json; - -pub trait ProverBuilder { - fn create_prover_hpp(&mut self, name: &str); - - fn create_prover_cpp(&mut self, name: &str); -} - -impl ProverBuilder for BBFiles { - fn create_prover_hpp(&mut self, name: &str) { - let mut handlebars = Handlebars::new(); - - let data = &json!({ - "name": name, - }); - - handlebars - .register_template_string( - "prover.hpp", - std::str::from_utf8(include_bytes!("../templates/prover.hpp.hbs")).unwrap(), - ) - .unwrap(); - - let prover_hpp = handlebars.render("prover.hpp", data).unwrap(); - - self.write_file(None, "prover.hpp", &prover_hpp); - } - - fn create_prover_cpp(&mut self, name: &str) { - let mut handlebars = Handlebars::new(); - - let data = &json!({ - "name": name, - }); - - handlebars - .register_template_string( - "prover.cpp", - std::str::from_utf8(include_bytes!("../templates/prover.cpp.hbs")).unwrap(), - ) - .unwrap(); - - let prover_cpp = handlebars.render("prover.cpp", data).unwrap(); - - self.write_file(None, "prover.cpp", &prover_cpp); - } -} diff --git a/bb-pilcom/bb-pil-backend/src/verifier_builder.rs b/bb-pilcom/bb-pil-backend/src/verifier_builder.rs deleted file mode 100644 index 5f2d4369d993..000000000000 --- a/bb-pilcom/bb-pil-backend/src/verifier_builder.rs +++ /dev/null @@ -1,83 +0,0 @@ -use crate::file_writer::BBFiles; -use handlebars::Handlebars; -use serde_json::json; - -pub trait VerifierBuilder { - fn create_verifier_cpp(&mut self, name: &str, public_cols: &[(usize, String)]); - - fn create_verifier_hpp(&mut self, name: &str); - - fn create_recursive_verifier_cpp(&mut self, name: &str, public_cols: &[(usize, String)]); -} - -impl VerifierBuilder for BBFiles { - fn create_verifier_cpp(&mut self, name: &str, public_cols: &[(usize, String)]) { - let mut handlebars = Handlebars::new(); - - let data = &json!({ - "name": name, - "public_cols": public_cols.iter().map(|(idx, name)| { - json!({ - "col": name, - "idx": idx, - }) - }).collect::>() - }); - - handlebars - .register_template_string( - "verifier.cpp", - std::str::from_utf8(include_bytes!("../templates/verifier.cpp.hbs")).unwrap(), - ) - .unwrap(); - - let verifier_cpp = handlebars.render("verifier.cpp", data).unwrap(); - - self.write_file(None, "verifier.cpp", &verifier_cpp); - } - - fn create_recursive_verifier_cpp(&mut self, name: &str, public_cols: &[(usize, String)]) { - let mut handlebars = Handlebars::new(); - - let data = &json!({ - "name": name, - "public_cols": public_cols.iter().map(|(idx, name)| { - json!({ - "col": name, - "idx": idx, - }) - }).collect::>() - }); - - handlebars - .register_template_string( - "recursive_verifier.cpp", - std::str::from_utf8(include_bytes!("../templates/recursive_verifier.cpp.hbs")) - .unwrap(), - ) - .unwrap(); - - let verifier_cpp = handlebars.render("recursive_verifier.cpp", data).unwrap(); - - self.write_file(None, "recursive_verifier.cpp", &verifier_cpp); - } - - fn create_verifier_hpp(&mut self, name: &str) { - let mut handlebars = Handlebars::new(); - - let data = &json!({ - "name": name, - }); - - handlebars - .register_template_string( - "verifier.hpp", - std::str::from_utf8(include_bytes!("../templates/verifier.hpp.hbs")).unwrap(), - ) - .unwrap(); - - let verifier_hpp = handlebars.render("verifier.hpp", data).unwrap(); - - self.write_file(None, "verifier.hpp", &verifier_hpp); - } -} diff --git a/bb-pilcom/bb-pil-backend/src/vm_builder.rs b/bb-pilcom/bb-pil-backend/src/vm_builder.rs index 360aec3291ef..b55b592b24c0 100644 --- a/bb-pilcom/bb-pil-backend/src/vm_builder.rs +++ b/bb-pilcom/bb-pil-backend/src/vm_builder.rs @@ -1,15 +1,11 @@ -use crate::circuit_builder::CircuitBuilder; -use crate::composer_builder::ComposerBuilder; use crate::file_writer::BBFiles; use crate::flavor_builder::FlavorBuilder; use crate::lookup_builder::{ get_counts_from_lookups, get_inverses_from_lookups, Lookup, LookupBuilder, }; use crate::permutation_builder::{get_inverses_from_permutations, Permutation, PermutationBuilder}; -use crate::prover_builder::ProverBuilder; use crate::relation_builder::{get_shifted_polys, RelationBuilder}; use crate::utils::{flatten, sanitize_name, snake_case, sort_cols}; -use crate::verifier_builder::VerifierBuilder; use dialoguer::Confirm; use itertools::Itertools; @@ -100,9 +96,6 @@ pub fn analyzed_to_cpp( .sorted() .collect_vec(); - // ----------------------- Create the full row files ----------------------- - bb_files.create_full_row_hpp(vm_name, &all_cols); - // ----------------------- Create the flavor files ----------------------- bb_files.create_flavor_hpp( vm_name, @@ -146,30 +139,6 @@ pub fn analyzed_to_cpp( &all_cols_with_shifts, ); - // ----------------------- Create the Verifier files ----------------------- - bb_files.create_verifier_cpp(vm_name, &public_inputs); - bb_files.create_verifier_hpp(vm_name); - - // ----------------------- Create the Prover files ----------------------- - bb_files.create_prover_cpp(vm_name); - bb_files.create_prover_hpp(vm_name); - - if vm_name == "Avm2" { - println!("Skipping the creation of the composer, circuit builder and recursive verifier for Avm2."); - return; - } - - // ----------------------- Create the circuit builder files ----------------------- - bb_files.create_circuit_builder_hpp(vm_name); - bb_files.create_circuit_builder_cpp(vm_name, &all_cols_without_inverses); - - // ----------------------- Create the composer files ----------------------- - bb_files.create_composer_cpp(vm_name); - bb_files.create_composer_hpp(vm_name); - - // ----------------------- Create the recursive verifier ----------------------- - bb_files.create_recursive_verifier_cpp(vm_name, &public_inputs); - println!("Done with generation."); } diff --git a/bb-pilcom/bb-pil-backend/templates/circuit_builder.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/circuit_builder.cpp.hbs deleted file mode 100644 index c172edffe4dd..000000000000 --- a/bb-pilcom/bb-pil-backend/templates/circuit_builder.cpp.hbs +++ /dev/null @@ -1,200 +0,0 @@ -// AUTOGENERATED FILE -#include "circuit_builder.hpp" -#include "columns.hpp" - -#include -#include -#include - -#include "barretenberg/common/constexpr_utils.hpp" -#include "barretenberg/common/thread.hpp" -#include "barretenberg/common/throw_or_abort.hpp" -#include "barretenberg/ecc/curves/bn254/fr.hpp" -#include "barretenberg/relations/generic_permutation/generic_permutation_relation.hpp" -#include "barretenberg/relations/generic_lookup/generic_lookup_relation.hpp" -#include "barretenberg/honk/proof_system/logderivative_library.hpp" -#include "barretenberg/numeric/bitop/get_msb.hpp" -#include "barretenberg/vm/stats.hpp" - -namespace bb::{{snakeCase name}} { - -AvmCircuitBuilder::ProverPolynomials AvmCircuitBuilder::compute_polynomials() const { - const size_t num_rows = get_estimated_num_finalized_gates(); - const size_t circuit_subgroup_size = get_circuit_subgroup_size(); - ASSERT(num_rows <= circuit_subgroup_size); - ProverPolynomials polys; - - // We create a mapping between the polynomial index and the corresponding column index when row - // is expressed as a vector, i.e., column of the trace matrix. - std::unordered_map names_to_col_idx; - const auto names = COLUMN_NAMES; - for (size_t i = 0; i < names.size(); i++) { - names_to_col_idx[names[i]] = i; - } - - const auto labels = polys.get_unshifted_labels(); - const size_t num_unshifted = labels.size(); - - // Mapping - std::vector polys_to_cols_unshifted_idx(num_unshifted); - for (size_t i = 0; i < num_unshifted; i++) { - polys_to_cols_unshifted_idx[i] = names_to_col_idx.at(labels[i]); - } - - // Allocate mem for each column - AVM_TRACK_TIME("circuit_builder/init_polys_to_be_shifted", ({ - for (auto& poly : polys.get_to_be_shifted()) { - poly = Polynomial{ /*memory size*/ num_rows - 1, - /*largest possible index*/ circuit_subgroup_size, - /*make shiftable with offset*/ 1 }; - } - })); - - // catch-all with fully formed polynomials - AVM_TRACK_TIME( - "circuit_builder/init_polys_unshifted", ({ - auto unshifted = polys.get_unshifted(); - - // An array which stores for each column of the trace the smallest size of the - // truncated column containing all non-zero elements. - // It is used to allocate the polynomials without memory overhead for the tail of zeros. - std::array col_nonzero_size{}; - - // Computation of size of columns. - // Non-parallel version takes 0.5 second for a trace size of 200k rows. - // A parallel version might be considered in the future. - for (size_t i = 0; i < num_rows; i++) { - const auto& row = rows[i]; - for (size_t col = 0; col < col_nonzero_size.size(); col++) { - if (!row.get_column(static_cast(col)).is_zero()) { - col_nonzero_size[col] = i + 1; - } - } - } - - // Set of the labels for derived/inverse polynomials. - const auto derived_labels = polys.get_derived_labels(); - std::set derived_labels_set(derived_labels.begin(), derived_labels.end()); - - bb::parallel_for(num_unshifted, [&](size_t i) { - auto& poly = unshifted[i]; - const auto col_idx = polys_to_cols_unshifted_idx[i]; - const bool is_derived = derived_labels_set.contains(labels[i]); - - if (poly.is_empty()) { - // Not set above. Non-derived unshifted polynomials are initialized below. The non-derived ones - // do need to be initialized with zeros and are fully allocated (size == num_rows). - poly = is_derived ? Polynomial::create_non_parallel_zero_init(num_rows, circuit_subgroup_size) - : Polynomial{ col_nonzero_size[col_idx], circuit_subgroup_size, Polynomial::DontZeroMemory::FLAG }; - } - }); - })); - - AVM_TRACK_TIME( - "circuit_builder/set_polys_unshifted", ({ - bb::parallel_for(rows.size(), [&](size_t i) { - {{#each all_cols_without_inverses as |poly|}} - polys.{{poly}}.set_if_valid_index(i, rows[i].{{poly}}); - {{/each}} - }); - })); - - AVM_TRACK_TIME( - "circuit_builder/set_polys_shifted", ({ - for (auto [shifted, to_be_shifted] : zip_view(polys.get_shifted(), polys.get_to_be_shifted())) { - shifted = to_be_shifted.shifted(); - } - })); - - return polys; -} - -bool AvmCircuitBuilder::check_circuit() const { - const FF gamma = FF::random_element(); - const FF beta = FF::random_element(); - bb::RelationParameters params{ - .eta = 0, - .beta = beta, - .gamma = gamma, - .public_input_delta = 0, - .lookup_grand_product_delta = 0, - .beta_sqr = 0, - .beta_cube = 0, - .eccvm_set_permutation_delta = 0, - }; - - auto polys = compute_polynomials(); - // We'll only check up to the generated trace which might be << than the circuit subgroup size. - const size_t num_rows = get_estimated_num_finalized_gates(); - - // Checks that we will run. - using SignalErrorFn = const std::function&; - std::vector> checks; - - // Add relation checks. - bb::constexpr_for<0, std::tuple_size_v, 1>([&]() { - using Relation = std::tuple_element_t; - checks.push_back([&](SignalErrorFn signal_error) { - typename Relation::SumcheckArrayOfValuesOverSubrelations result; - for (auto& r : result) { - r = 0; - } - - std::array subrelation_failed = { false }; - for (size_t r = 0; r < num_rows; ++r) { - Relation::accumulate(result, polys.get_standard_row(r), {}, 1); - for (size_t j = 0; j < result.size(); ++j) { - if (!subrelation_failed[j] && result[j] != 0) { - signal_error(format("Relation ", - Relation::NAME, - ", subrelation ", - Relation::get_subrelation_label(j), - " failed at row ", - r)); - // We will not check this subrelation for any other rows. - // Since the accumulation will keep being != 0. - subrelation_failed[j] = true; - } - } - } - }); - }); - - // Add calculation of logderivatives and lookup/permutation checks. - bb::constexpr_for<0, std::tuple_size_v, 1>([&]() { - using Relation = std::tuple_element_t; - checks.push_back([&, num_rows](SignalErrorFn signal_error) { - // Check the logderivative relation - bb::compute_logderivative_inverse(polys, params, num_rows); - - typename Relation::SumcheckArrayOfValuesOverSubrelations lookup_result; - - for (auto& r : lookup_result) { - r = 0; - } - for (size_t r = 0; r < num_rows; ++r) { - Relation::accumulate(lookup_result, polys.get_standard_row(r), params, 1); - } - for (auto r : lookup_result) { - if (r != 0) { - signal_error(format("Lookup ", Relation::NAME, " failed.")); - } - } - }); - }); - - std::string errors; - std::mutex m; - auto signal_error = [&](const std::string& error) { - std::lock_guard lock(m); - errors += error + "\n"; - }; - bb::parallel_for(checks.size(), [&](size_t i) { checks[i](signal_error); }); - if (!errors.empty()) { - throw_or_abort(errors); - } - - return errors.empty(); -} - -} // namespace bb::{{snakeCase name}} \ No newline at end of file diff --git a/bb-pilcom/bb-pil-backend/templates/circuit_builder.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/circuit_builder.hpp.hbs deleted file mode 100644 index 451075ada83c..000000000000 --- a/bb-pilcom/bb-pil-backend/templates/circuit_builder.hpp.hbs +++ /dev/null @@ -1,47 +0,0 @@ -// AUTOGENERATED FILE -#pragma once - -#include - -#include "full_row.hpp" -#include "flavor.hpp" - -namespace bb::{{snakeCase name}} { - -class AvmCircuitBuilder { - public: - // Do not use this constant directly, use get_circuit_subgroup_size() instead. - constexpr static size_t CIRCUIT_SUBGROUP_SIZE = 1 << 21; - - using Flavor = bb::{{snakeCase name}}::AvmFlavor; - using FF = Flavor::FF; - using Row = AvmFullRow; - using Polynomial = Flavor::Polynomial; - using ProverPolynomials = Flavor::ProverPolynomials; - - void set_trace(std::vector&& trace) - { - rows = std::move(trace); - num_rows = rows.size(); - } - void clear_trace() - { - rows.clear(); - rows.shrink_to_fit(); - num_rows = 0; - } - - ProverPolynomials compute_polynomials() const; - - bool check_circuit() const; - - size_t get_estimated_num_finalized_gates() const { return num_rows; } - - size_t get_circuit_subgroup_size() const { return CIRCUIT_SUBGROUP_SIZE; } - - private: - size_t num_rows = 0; - std::vector rows; -}; - -} // namespace bb::{{snakeCase name}} \ No newline at end of file diff --git a/bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs deleted file mode 100644 index 42828a1c0fe3..000000000000 --- a/bb-pilcom/bb-pil-backend/templates/composer.cpp.hbs +++ /dev/null @@ -1,67 +0,0 @@ -// AUTOGENERATED FILE -#include "composer.hpp" -#include "barretenberg/vm/stats.hpp" - -namespace bb::{{snakeCase name}} { - -using Flavor = AvmFlavor; -void AvmComposer::compute_witness(CircuitConstructor& circuit) -{ - if (computed_witness) { - return; - } - - auto polynomials = circuit.compute_polynomials(); - - for (auto [key_poly, prover_poly] : zip_view(proving_key->get_all(), polynomials.get_unshifted())) { - ASSERT(flavor_get_label(*proving_key, key_poly) == flavor_get_label(polynomials, prover_poly)); - key_poly = std::move(prover_poly); - } - - computed_witness = true; -} - -AvmProver AvmComposer::create_prover(CircuitConstructor& circuit_constructor) -{ - AVM_TRACK_TIME("composer/create_prover:proving_key", compute_proving_key(circuit_constructor)); - AVM_TRACK_TIME("composer/create_prover:witness", compute_witness(circuit_constructor)); - AVM_TRACK_TIME("composer/create_prover:commitment_key", - compute_commitment_key(circuit_constructor.get_circuit_subgroup_size())); - auto output_state = AVM_TRACK_TIME_V("composer/create_prover:construct_prover", - AvmProver(proving_key, proving_key->commitment_key)); - return output_state; -} - -AvmVerifier AvmComposer::create_verifier(CircuitConstructor& circuit_constructor) -{ - auto verification_key = compute_verification_key(circuit_constructor); - return AvmVerifier(std::move(verification_key)); -} - -std::shared_ptr AvmComposer::compute_proving_key(CircuitConstructor& circuit_constructor) -{ - if (proving_key) { - return proving_key; - } - - const size_t subgroup_size = circuit_constructor.get_circuit_subgroup_size(); - proving_key = std::make_shared(subgroup_size, 0); - return proving_key; -} - -std::shared_ptr AvmComposer::compute_verification_key(CircuitConstructor& circuit_constructor) -{ - if (verification_key) { - return verification_key; - } - - if (!proving_key) { - compute_proving_key(circuit_constructor); - } - - verification_key = std::make_shared(proving_key); - - return verification_key; -} - -} // namespace bb::{{snakeCase name}} \ No newline at end of file diff --git a/bb-pilcom/bb-pil-backend/templates/composer.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/composer.hpp.hbs deleted file mode 100644 index 068e4602e3d1..000000000000 --- a/bb-pilcom/bb-pil-backend/templates/composer.hpp.hbs +++ /dev/null @@ -1,66 +0,0 @@ -// AUTOGENERATED FILE -#pragma once - -#include "barretenberg/srs/global_crs.hpp" -#include "circuit_builder.hpp" -#include "prover.hpp" -#include "verifier.hpp" - -namespace bb::{{snakeCase name}} { - -class AvmComposer { - public: - using Flavor = AvmFlavor; - using CircuitConstructor = AvmCircuitBuilder; - using ProvingKey = Flavor::ProvingKey; - using VerificationKey = Flavor::VerificationKey; - using PCS = Flavor::PCS; - using CommitmentKey = Flavor::CommitmentKey; - using VerifierCommitmentKey = Flavor::VerifierCommitmentKey; - - // TODO: which of these will we really need - static constexpr std::string_view NAME_STRING = "Avm"; - static constexpr size_t NUM_RESERVED_GATES = 0; - static constexpr size_t NUM_WIRES = Flavor::NUM_WIRES; - - std::shared_ptr proving_key; - std::shared_ptr verification_key; - - // The crs_factory holds the path to the srs and exposes methods to extract the srs elements - std::shared_ptr> crs_factory_; - - // The commitment key is passed to the prover but also used herein to compute the verification key commitments - std::shared_ptr commitment_key; - - bool computed_witness = false; - - AvmComposer() { crs_factory_ = bb::srs::get_bn254_crs_factory(); } - - AvmComposer(std::shared_ptr p_key, std::shared_ptr v_key) - : proving_key(std::move(p_key)) - , verification_key(std::move(v_key)) - {} - - AvmComposer(AvmComposer&& other) noexcept = default; - AvmComposer(AvmComposer const& other) noexcept = default; - AvmComposer& operator=(AvmComposer&& other) noexcept = default; - AvmComposer& operator=(AvmComposer const& other) noexcept = default; - ~AvmComposer() = default; - - std::shared_ptr compute_proving_key(CircuitConstructor& circuit_constructor); - std::shared_ptr compute_verification_key(CircuitConstructor& circuit_constructor); - - void compute_witness(CircuitConstructor& circuit_constructor); - - AvmProver create_prover(CircuitConstructor& circuit_constructor); - AvmVerifier create_verifier(CircuitConstructor& circuit_constructor); - - void add_table_column_selector_poly_to_proving_key(bb::polynomial& small, const std::string& tag); - - void compute_commitment_key(size_t circuit_size) - { - proving_key->commitment_key = std::make_shared(circuit_size); - }; -}; - -} // namespace bb::{{snakeCase name}} \ No newline at end of file diff --git a/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs index db649c4c7d9e..e1d574d54e45 100644 --- a/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs +++ b/bb-pilcom/bb-pil-backend/templates/flavor.hpp.hbs @@ -364,9 +364,9 @@ class AvmFlavor { public: VerifierCommitments_(const std::shared_ptr& verification_key) { - {{#each fixed as |item|}} - this->{{item}} = verification_key->{{item}}; - {{/each}} + for (auto [commitment, vk_commitment] : zip_view(this->get_precomputed(), verification_key->get_all())) { + commitment = vk_commitment; + } } }; diff --git a/bb-pilcom/bb-pil-backend/templates/full_row.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/full_row.hpp.hbs deleted file mode 100644 index b050afe089fe..000000000000 --- a/bb-pilcom/bb-pil-backend/templates/full_row.hpp.hbs +++ /dev/null @@ -1,37 +0,0 @@ -// AUTOGENERATED FILE -#pragma once - -#include "columns.hpp" - -namespace bb::{{snakeCase name}} { - -template -struct AvmFullRow { - using FF = FF_; - - FF {{shoutySnakeCase name}}_ALL_ENTITIES; - - // Risky but oh so efficient. - FF& get_column(ColumnAndShifts col) - { - static_assert(sizeof(*this) == sizeof(FF) * static_cast(ColumnAndShifts::SENTINEL_DO_NOT_USE)); - return reinterpret_cast(this)[static_cast(col)]; - } - - const FF& get_column(ColumnAndShifts col) const - { - static_assert(sizeof(*this) == sizeof(FF) * static_cast(ColumnAndShifts::SENTINEL_DO_NOT_USE)); - return reinterpret_cast(this)[static_cast(col)]; - } -}; - -} // namespace bb::{{snakeCase name}} - -{{!-- VM1 needs this --}} -{{#if (ne name "Avm2")}} -namespace bb { - -using {{snakeCase name}}::AvmFullRow; - -} // namespace bb -{{/if}} diff --git a/bb-pilcom/bb-pil-backend/templates/prover.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/prover.cpp.hbs deleted file mode 100644 index 8c7ad47e6b4f..000000000000 --- a/bb-pilcom/bb-pil-backend/templates/prover.cpp.hbs +++ /dev/null @@ -1,156 +0,0 @@ -// AUTOGENERATED FILE -#include "prover.hpp" -#include "barretenberg/commitment_schemes/claim.hpp" -#include "barretenberg/commitment_schemes/commitment_key.hpp" -#include "barretenberg/commitment_schemes/shplonk/shplemini.hpp" -#include "barretenberg/common/constexpr_utils.hpp" -#include "barretenberg/common/thread.hpp" -#include "barretenberg/honk/proof_system/logderivative_library.hpp" -#include "barretenberg/plonk_honk_shared/library/grand_product_library.hpp" -#include "barretenberg/relations/permutation_relation.hpp" -#include "barretenberg/sumcheck/sumcheck.hpp" -#include "barretenberg/vm/stats.hpp" - -namespace bb::{{snakeCase name}} { - -using Flavor = AvmFlavor; -using FF = Flavor::FF; - -/** - * Create AvmProver from proving key, witness and manifest. - * - * @param input_key Proving key. - * @param input_manifest Input manifest - * - * @tparam settings Settings class. - */ -AvmProver::AvmProver(std::shared_ptr input_key, - std::shared_ptr commitment_key) - : key(std::move(input_key)) - , prover_polynomials(*key) - , commitment_key(std::move(commitment_key)) -{} - -/** - * @brief Add circuit size, public input size, and public inputs to transcript - * - */ -void AvmProver::execute_preamble_round() -{ - const auto circuit_size = static_cast(key->circuit_size); - - transcript->send_to_verifier("circuit_size", circuit_size); -} - -/** - * @brief Compute commitments to all of the witness wires (apart from the logderivative inverse wires) - * - */ -void AvmProver::execute_wire_commitments_round() -{ - // Commit to all polynomials (apart from logderivative inverse polynomials, which are committed to in the later logderivative phase) - auto wire_polys = prover_polynomials.get_wires(); - const auto& labels = prover_polynomials.get_wires_labels(); - for (size_t idx = 0; idx < wire_polys.size(); ++idx) { - transcript->send_to_verifier(labels[idx], commitment_key->commit(wire_polys[idx])); - } -} - -void AvmProver::execute_log_derivative_inverse_round() -{ - auto [beta, gamma] = transcript->template get_challenges("beta", "gamma"); - relation_parameters.beta = beta; - relation_parameters.gamma = gamma; - std::vector> tasks; - - bb::constexpr_for<0, std::tuple_size_v, 1>([&]() { - using Relation = std::tuple_element_t; - tasks.push_back([&]() { - AVM_TRACK_TIME(std::string("prove/execute_log_derivative_inverse_round/") + std::string(Relation::NAME), - (compute_logderivative_inverse( - prover_polynomials, relation_parameters, key->circuit_size))); - }); - }); - - bb::parallel_for(tasks.size(), [&](size_t i) { tasks[i](); }); -} - -void AvmProver::execute_log_derivative_inverse_commitments_round() -{ - // Commit to all logderivative inverse polynomials - for (auto [commitment, key_poly] : zip_view(witness_commitments.get_derived(), key->get_derived())) { - commitment = commitment_key->commit(key_poly); - } - - // Send all commitments to the verifier - for (auto [label, commitment] : zip_view(prover_polynomials.get_derived_labels(), witness_commitments.get_derived())) { - transcript->send_to_verifier(label, commitment); - } -} - -/** - * @brief Run Sumcheck resulting in u = (u_1,...,u_d) challenges and all evaluations at u being calculated. - * - */ -void AvmProver::execute_relation_check_rounds() -{ - using Sumcheck = SumcheckProver; - - auto sumcheck = Sumcheck(key->circuit_size, transcript); - - FF alpha = transcript->template get_challenge("Sumcheck:alpha"); - std::vector gate_challenges(numeric::get_msb(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)); - } - sumcheck_output = sumcheck.prove(prover_polynomials, relation_parameters, alpha, gate_challenges); -} - -void AvmProver::execute_pcs_rounds() -{ - using OpeningClaim = ProverOpeningClaim; - using PolynomialBatcher = GeminiProver_::PolynomialBatcher; - - PolynomialBatcher polynomial_batcher(key->circuit_size); - polynomial_batcher.set_unshifted(prover_polynomials.get_unshifted()); - polynomial_batcher.set_to_be_shifted_by_one(prover_polynomials.get_to_be_shifted()); - - const OpeningClaim prover_opening_claim = ShpleminiProver_::prove( - key->circuit_size, polynomial_batcher, sumcheck_output.challenge, commitment_key, transcript); - - PCS::compute_opening_proof(commitment_key, prover_opening_claim, transcript); -} - -HonkProof AvmProver::export_proof() -{ - proof = transcript->proof_data; - return proof; -} - -HonkProof AvmProver::construct_proof() -{ - // Add circuit size public input size and public inputs to transcript. - execute_preamble_round(); - - // Compute wire commitments - AVM_TRACK_TIME("prove/execute_wire_commitments_round", execute_wire_commitments_round()); - - // Compute sorted list accumulator - AVM_TRACK_TIME("prove/execute_log_derivative_inverse_round", execute_log_derivative_inverse_round()); - - // Compute commitments to logderivative inverse polynomials - AVM_TRACK_TIME("prove/execute_log_derivative_inverse_commitments_round", execute_log_derivative_inverse_commitments_round()); - - // Fiat-Shamir: alpha - // Run sumcheck subprotocol. - AVM_TRACK_TIME("prove/execute_relation_check_rounds", execute_relation_check_rounds()); - - // Fiat-Shamir: rho, y, x, z - // Execute Shplemini PCS - AVM_TRACK_TIME("prove/execute_pcs_rounds", execute_pcs_rounds()); - - return export_proof(); -} - -} // namespace bb::{{snakeCase name}} \ No newline at end of file diff --git a/bb-pilcom/bb-pil-backend/templates/prover.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/prover.hpp.hbs deleted file mode 100644 index 89ca39dd0844..000000000000 --- a/bb-pilcom/bb-pil-backend/templates/prover.hpp.hbs +++ /dev/null @@ -1,64 +0,0 @@ -// AUTOGENERATED FILE -#pragma once - -#include "barretenberg/plonk/proof_system/types/proof.hpp" -#include "barretenberg/relations/relation_parameters.hpp" -#include "barretenberg/sumcheck/sumcheck_output.hpp" -#include "barretenberg/transcript/transcript.hpp" -#include "flavor.hpp" - -namespace bb::{{snakeCase name}} { - -class AvmProver { - public: - using Flavor = AvmFlavor; - using FF = Flavor::FF; - using PCS = Flavor::PCS; - using Curve = Flavor::Curve; - using PCSCommitmentKey = Flavor::CommitmentKey; - using ProvingKey = Flavor::ProvingKey; - using Polynomial = Flavor::Polynomial; - using ProverPolynomials = Flavor::ProverPolynomials; - using Transcript = Flavor::Transcript; - using Proof = HonkProof; - - explicit AvmProver(std::shared_ptr input_key, std::shared_ptr commitment_key); - AvmProver(AvmProver&& prover) = default; - virtual ~AvmProver() = default; - - // Note: all the following methods are virtual to allow Avm2 to tweak the behaviour. - // We can remove this once the transition is done. - virtual void execute_preamble_round(); - virtual void execute_wire_commitments_round(); - virtual void execute_log_derivative_inverse_round(); - virtual void execute_log_derivative_inverse_commitments_round(); - virtual void execute_relation_check_rounds(); - virtual void execute_pcs_rounds(); - - virtual HonkProof export_proof(); - virtual HonkProof construct_proof(); - - std::shared_ptr transcript = std::make_shared(); - - std::vector public_inputs; - - bb::RelationParameters relation_parameters; - - std::shared_ptr key; - - // Container for spans of all polynomials required by the prover (i.e. all multivariates evaluated by Sumcheck). - ProverPolynomials prover_polynomials; - - typename Flavor::WitnessCommitments witness_commitments; - - Polynomial quotient_W; - - SumcheckOutput sumcheck_output; - - std::shared_ptr commitment_key; - - protected: - HonkProof proof; -}; - -} // namespace bb::{{snakeCase name}} \ No newline at end of file diff --git a/bb-pilcom/bb-pil-backend/templates/recursive_verifier.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/recursive_verifier.cpp.hbs deleted file mode 100644 index dd5f3f112f26..000000000000 --- a/bb-pilcom/bb-pil-backend/templates/recursive_verifier.cpp.hbs +++ /dev/null @@ -1,157 +0,0 @@ -// AUTOGENERATED FILE -#include "barretenberg/vm/{{snakeCase name}}/recursion/recursive_verifier.hpp" -#include "barretenberg/commitment_schemes/shplonk/shplemini.hpp" -#include "barretenberg/plonk_honk_shared/types/aggregation_object_type.hpp" -#include "barretenberg/polynomials/polynomial.hpp" -#include "barretenberg/polynomials/shared_shifted_virtual_zeroes_array.hpp" -#include "barretenberg/stdlib/primitives/field/field.hpp" -#include "barretenberg/transcript/transcript.hpp" -#include "barretenberg/vm/aztec_constants.hpp" -#include -#include -#include - -namespace bb::{{snakeCase name}} { - -template -AvmRecursiveVerifier_::AvmRecursiveVerifier_( - Builder* builder, const std::shared_ptr& native_verification_key) - : key(std::make_shared(builder, native_verification_key)) - , builder(builder) -{} - -template -AvmRecursiveVerifier_::AvmRecursiveVerifier_(Builder* builder, const std::shared_ptr& vkey) - : key(vkey) - , builder(builder) -{} - -// Evaluate the given public input column over the multivariate challenge points -template -Flavor::FF AvmRecursiveVerifier_::evaluate_public_input_column(const std::vector& points, - const std::vector& challenges) -{ - auto coefficients = SharedShiftedVirtualZeroesArray{ - .start_ = 0, - .end_ = points.size(), - .virtual_size_ = key->circuit_size, // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays) - .backing_memory_ = std::static_pointer_cast(get_mem_slab(sizeof(FF) * points.size())), - }; - - memcpy( - static_cast(coefficients.data()), static_cast(points.data()), sizeof(FF) * points.size()); - - return generic_evaluate_mle(challenges, coefficients); -} - -template -AvmRecursiveVerifier_::AggregationObject AvmRecursiveVerifier_::verify_proof( - const HonkProof& proof, const std::vector>& public_inputs_vec_nt, AggregationObject agg_obj) -{ - StdlibProof stdlib_proof = bb::convert_native_proof_to_stdlib(builder, proof); - - std::vector> public_inputs_ct; - public_inputs_ct.reserve(public_inputs_vec_nt.size()); - - for (const auto& vec : public_inputs_vec_nt) { - std::vector vec_ct; - vec_ct.reserve(vec.size()); - for (const auto& el : vec) { - vec_ct.push_back(bb::stdlib::witness_t(builder, el)); - } - public_inputs_ct.push_back(vec_ct); - } - - return verify_proof(stdlib_proof, public_inputs_ct, agg_obj); -} - -// TODO(#991): (see https://github.com/AztecProtocol/barretenberg/issues/991) -template -AvmRecursiveVerifier_::AggregationObject AvmRecursiveVerifier_::verify_proof( - const StdlibProof& stdlib_proof, - const std::vector>& public_inputs, - AggregationObject agg_obj) -{ - using Curve = typename Flavor::Curve; - using PCS = typename Flavor::PCS; - using VerifierCommitments = typename Flavor::VerifierCommitments; - using RelationParams = ::bb::RelationParameters; - using Transcript = typename Flavor::Transcript; - using Shplemini = ::bb::ShpleminiVerifier_; - using ClaimBatcher = ClaimBatcher_; - using ClaimBatch = ClaimBatcher::Batch; - - transcript = std::make_shared(stdlib_proof); - - RelationParams relation_parameters; - VerifierCommitments commitments{ key }; - - const auto circuit_size = transcript->template receive_from_prover("circuit_size"); - if (static_cast(circuit_size.get_value()) != key->circuit_size) { - throw_or_abort("AvmRecursiveVerifier::verify_proof: proof circuit size does not match verification key!"); - } - - // Get commitments to VM wires - for (auto [comm, label] : zip_view(commitments.get_wires(), commitments.get_wires_labels())) { - comm = transcript->template receive_from_prover(label); - } - - auto [beta, gamma] = transcript->template get_challenges("beta", "gamma"); - relation_parameters.beta = beta; - relation_parameters.gamma = gamma; - - // Get commitments to inverses - for (auto [label, commitment] : zip_view(commitments.get_derived_labels(), commitments.get_derived())) { - commitment = transcript->template receive_from_prover(label); - } - - // unconstrained - const size_t log_circuit_size = numeric::get_msb(static_cast(circuit_size.get_value())); - auto sumcheck = SumcheckVerifier(log_circuit_size, transcript); - - FF alpha = transcript->template get_challenge("Sumcheck:alpha"); - - auto gate_challenges = std::vector(log_circuit_size); - for (size_t idx = 0; idx < log_circuit_size; idx++) { - gate_challenges[idx] = transcript->template get_challenge("Sumcheck:gate_challenge_" + std::to_string(idx)); - } - - // No need to constrain that sumcheck_verified is true as this is guaranteed by the implementation of - // when called over a "circuit field" types. - SumcheckOutput output = sumcheck.verify(relation_parameters, alpha, gate_challenges); - - vinfo("verified sumcheck: ", (output.verified)); - - // Public columns evaluation checks - std::vector mle_challenge(output.challenge.begin(), - output.challenge.begin() + static_cast(log_circuit_size)); - - {{#each public_cols}} - FF {{col}}_evaluation = evaluate_public_input_column(public_inputs[{{idx}}], mle_challenge); - {{col}}_evaluation.assert_equal(output.claimed_evaluations.{{col}}, - "{{col}}_evaluation failed"); - - {{/each}} - - // Execute Shplemini rounds. - ClaimBatcher claim_batcher{ - .unshifted = ClaimBatch{ commitments.get_unshifted(), output.claimed_evaluations.get_unshifted() }, - .shifted = ClaimBatch{ commitments.get_to_be_shifted(), output.claimed_evaluations.get_shifted() } - }; - const BatchOpeningClaim opening_claim = Shplemini::compute_batch_opening_claim( - circuit_size, claim_batcher, output.challenge, Commitment::one(builder), transcript); - - auto pairing_points = PCS::reduce_verify_batch_opening_claim(opening_claim, transcript); - - pairing_points[0] = pairing_points[0].normalize(); - pairing_points[1] = pairing_points[1].normalize(); - // TODO(https://github.com/AztecProtocol/barretenberg/issues/995): generate this challenge properly. - typename Curve::ScalarField recursion_separator = - Curve::ScalarField::from_witness_index(builder, builder->add_variable(42)); - agg_obj.aggregate(pairing_points, recursion_separator); - return agg_obj; -} - -template class AvmRecursiveVerifier_>; - -} // namespace bb::{{snakeCase name}} \ No newline at end of file diff --git a/bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs b/bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs deleted file mode 100644 index 28a9894940b1..000000000000 --- a/bb-pilcom/bb-pil-backend/templates/verifier.cpp.hbs +++ /dev/null @@ -1,126 +0,0 @@ -// AUTOGENERATED FILE -#include "verifier.hpp" -#include "barretenberg/commitment_schemes/shplonk/shplemini.hpp" -#include "barretenberg/common/log.hpp" -#include "barretenberg/numeric/bitop/get_msb.hpp" -#include "barretenberg/transcript/transcript.hpp" -#include "barretenberg/vm/constants.hpp" - -namespace bb::{{snakeCase name}} { - -AvmVerifier::AvmVerifier(std::shared_ptr verifier_key) - : key(std::move(verifier_key)) -{} - -AvmVerifier::AvmVerifier(AvmVerifier&& other) noexcept - : key(std::move(other.key)) -{} - -AvmVerifier& AvmVerifier::operator=(AvmVerifier&& other) noexcept -{ - key = other.key; - commitments.clear(); - return *this; -} - -using FF = AvmFlavor::FF; - -// Evaluate the given public input column over the multivariate challenge points -inline FF AvmVerifier::evaluate_public_input_column(const std::vector& points, std::vector challenges) -{ - Polynomial polynomial(points, key->circuit_size); - return polynomial.evaluate_mle(challenges); -} - -/** - * @brief This function verifies an Avm Honk proof for given program settings. - * - */ -bool AvmVerifier::verify_proof(const HonkProof& proof, const std::vector>& public_inputs) -{ - using Flavor = AvmFlavor; - using FF = Flavor::FF; - using Commitment = Flavor::Commitment; - using PCS = Flavor::PCS; - using Curve = Flavor::Curve; - using VerifierCommitments = Flavor::VerifierCommitments; - using Shplemini = ShpleminiVerifier_; - using ClaimBatcher = ClaimBatcher_; - using ClaimBatch = ClaimBatcher::Batch; - - RelationParameters relation_parameters; - - transcript = std::make_shared(proof); - - VerifierCommitments commitments{ key }; - - const auto circuit_size = transcript->template receive_from_prover("circuit_size"); - if (circuit_size != key->circuit_size) { - vinfo("Circuit size mismatch: expected", key->circuit_size, " got ", circuit_size); - return false; - } - - // Get commitments to VM wires - for (auto [comm, label] : zip_view(commitments.get_wires(), commitments.get_wires_labels())) { - comm = transcript->template receive_from_prover(label); - } - - auto [beta, gamm] = transcript->template get_challenges("beta", "gamma"); - relation_parameters.beta = beta; - relation_parameters.gamma = gamm; - - // Get commitments to inverses - for (auto [label, commitment] : zip_view(commitments.get_derived_labels(), commitments.get_derived())) { - commitment = transcript->template receive_from_prover(label); - } - - // Execute Sumcheck Verifier - const size_t log_circuit_size = numeric::get_msb(circuit_size); - auto sumcheck = SumcheckVerifier(log_circuit_size, transcript); - - FF alpha = transcript->template get_challenge("Sumcheck:alpha"); - - auto gate_challenges = std::vector(log_circuit_size); - for (size_t idx = 0; idx < log_circuit_size; idx++) { - gate_challenges[idx] = transcript->template get_challenge("Sumcheck:gate_challenge_" + std::to_string(idx)); - } - - SumcheckOutput output = sumcheck.verify(relation_parameters, alpha, gate_challenges); - - // If Sumcheck did not verify, return false - if (!output.verified) { - vinfo("Sumcheck verification failed"); - return false; - } - - // Public columns evaluation checks - std::vector mle_challenge(output.challenge.begin(), - output.challenge.begin() + static_cast(log_circuit_size)); - - {{#each public_cols}} - FF {{col}}_evaluation = evaluate_public_input_column(public_inputs[{{idx}}], mle_challenge); - if ({{col}}_evaluation != output.claimed_evaluations.{{col}}) { - vinfo("{{col}}_evaluation failed"); - return false; - } - {{/each}} - - ClaimBatcher claim_batcher{ - .unshifted = ClaimBatch{ commitments.get_unshifted(), output.claimed_evaluations.get_unshifted() }, - .shifted = ClaimBatch{ commitments.get_to_be_shifted(), output.claimed_evaluations.get_shifted() } - }; - const BatchOpeningClaim opening_claim = Shplemini::compute_batch_opening_claim( - circuit_size, claim_batcher, output.challenge, Commitment::one(), transcript); - - const auto pairing_points = PCS::reduce_verify_batch_opening_claim(opening_claim, transcript); - const auto shplemini_verified = key->pcs_verification_key->pairing_check(pairing_points[0], pairing_points[1]); - - if (!shplemini_verified) { - vinfo("Shplemini verification failed"); - return false; - } - - return true; -} - -} // namespace bb::{{snakeCase name}} diff --git a/bb-pilcom/bb-pil-backend/templates/verifier.hpp.hbs b/bb-pilcom/bb-pil-backend/templates/verifier.hpp.hbs deleted file mode 100644 index c7011d56e540..000000000000 --- a/bb-pilcom/bb-pil-backend/templates/verifier.hpp.hbs +++ /dev/null @@ -1,39 +0,0 @@ -// AUTOGENERATED FILE -#pragma once - -#include "barretenberg/plonk/proof_system/types/proof.hpp" -#include "barretenberg/sumcheck/sumcheck.hpp" -#include "flavor.hpp" - -namespace bb::{{snakeCase name}} { - -class AvmVerifier { - public: - using Flavor = AvmFlavor; - using FF = Flavor::FF; - using Commitment = Flavor::Commitment; - using VerificationKey = Flavor::VerificationKey; - using VerifierCommitmentKey = Flavor::VerifierCommitmentKey; - using Transcript = Flavor::Transcript; - - explicit AvmVerifier(std::shared_ptr verifier_key); - AvmVerifier(AvmVerifier&& other) noexcept; - AvmVerifier(const AvmVerifier& other) = delete; - virtual ~AvmVerifier() = default; - - AvmVerifier& operator=(const AvmVerifier& other) = delete; - AvmVerifier& operator=(AvmVerifier&& other) noexcept; - - // Note: all the following methods are virtual to allow Avm2 to tweak the behaviour. - // We can remove this once the transition is done. - virtual bool verify_proof(const HonkProof& proof, const std::vector>& public_inputs); - - std::shared_ptr key; - std::map commitments; - std::shared_ptr transcript; - - private: - FF evaluate_public_input_column(const std::vector& points, std::vector challenges); -}; - -} // namespace bb::{{snakeCase name}} \ No newline at end of file