From 05847c1b1acdd04a705f86c4e4f0169ee9ef029c Mon Sep 17 00:00:00 2001 From: vezenovm Date: Thu, 25 Apr 2024 19:16:48 +0000 Subject: [PATCH 1/9] use one agg object in build_constraints --- .../dsl/acir_format/acir_format.cpp | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) 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 5ece3c031d4..c1e6638ef45 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp @@ -126,10 +126,7 @@ void build_constraints(Builder& builder, AcirFormat const& constraint_system, bo // TODO(maxim): input_aggregation_object to be non-zero. // TODO(maxim): if not, we can add input_aggregation_object to the proof too for all recursive proofs // TODO(maxim): This might be the case for proof trees where the proofs are created on different machines - std::array current_input_aggregation_object = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }; - std::array current_output_aggregation_object = { + std::array current_aggregation_object = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; @@ -174,12 +171,11 @@ void build_constraints(Builder& builder, AcirFormat const& constraint_system, bo constraint.proof.begin() + static_cast(RecursionConstraint::AGGREGATION_OBJECT_SIZE)); } - current_output_aggregation_object = create_recursion_constraints(builder, - constraint, - current_input_aggregation_object, - nested_aggregation_object, - has_valid_witness_assignments); - current_input_aggregation_object = current_output_aggregation_object; + current_aggregation_object = create_recursion_constraints(builder, + constraint, + current_aggregation_object, + nested_aggregation_object, + has_valid_witness_assignments); } // Now that the circuit has been completely built, we add the output aggregation as public @@ -189,14 +185,14 @@ void build_constraints(Builder& builder, AcirFormat const& constraint_system, bo // First add the output aggregation object as public inputs // Set the indices as public inputs because they are no longer being // created in ACIR - for (const auto& idx : current_output_aggregation_object) { + for (const auto& idx : current_aggregation_object) { builder.set_public_input(idx); } // Make sure the verification key records the public input indices of the // final recursion output. - std::vector proof_output_witness_indices(current_output_aggregation_object.begin(), - current_output_aggregation_object.end()); + std::vector proof_output_witness_indices(current_aggregation_object.begin(), + current_aggregation_object.end()); builder.set_recursive_proof(proof_output_witness_indices); } } From b30c253966b98eccde357e09369506411ce9f95a Mon Sep 17 00:00:00 2001 From: vezenovm Date: Fri, 26 Apr 2024 18:11:47 +0000 Subject: [PATCH 2/9] initial work to remove difference in proof sizes for non-nested proofs in dsl --- .../dsl/acir_format/acir_format.cpp | 88 ++++++++++++- .../dsl/acir_format/recursion_constraint.cpp | 8 +- .../acir_format/recursion_constraint.test.cpp | 124 ++++++++++++------ .../plonk_recursion/verifier/verifier.hpp | 23 +++- 4 files changed, 195 insertions(+), 48 deletions(-) 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 c1e6638ef45..d922ff3fbe2 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp @@ -1,5 +1,8 @@ #include "acir_format.hpp" #include "barretenberg/common/log.hpp" +#include "barretenberg/ecc/fields/field_conversion.hpp" +#include "barretenberg/stdlib/primitives/bigfield/bigfield.hpp" +#include "barretenberg/stdlib/primitives/field/field_conversion.hpp" #include "barretenberg/stdlib_circuit_builders/goblin_ultra_circuit_builder.hpp" #include "barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp" #include @@ -146,14 +149,18 @@ void build_constraints(Builder& builder, AcirFormat const& constraint_system, bo std::array nested_aggregation_object = {}; // If the proof has public inputs attached to it, we should handle setting the nested aggregation object if (constraint.proof.size() > proof_size_no_pub_inputs) { + info("constraint.proof.size(): ", constraint.proof.size()); + info("proof_size_no_pub_inputs: ", proof_size_no_pub_inputs); // The public inputs attached to a proof should match the aggregation object in size if (constraint.proof.size() - proof_size_no_pub_inputs != RecursionConstraint::AGGREGATION_OBJECT_SIZE) { auto error_string = format( "Public inputs are always stripped from proofs unless we have a recursive proof.\n" "Thus, public inputs attached to a proof must match the recursive aggregation object in size " - "which is {}\n", + "which is ", RecursionConstraint::AGGREGATION_OBJECT_SIZE); + info("constraint.proof.size(): ", constraint.proof.size()); + info("proof_size_no_pub_inputs: ", proof_size_no_pub_inputs); throw_or_abort(error_string); } for (size_t i = 0; i < RecursionConstraint::AGGREGATION_OBJECT_SIZE; ++i) { @@ -163,6 +170,8 @@ void build_constraints(Builder& builder, AcirFormat const& constraint_system, bo nested_aggregation_object[i] = static_cast(constraint.public_inputs.size()); // Attach the nested aggregation object to the end of the public inputs to fill in // the slot where the nested aggregation object index will point into + // info("nested_aggregation_object[", i, "]: ", nested_aggregation_object[i]); + // info("constraint.proof[", i, "]: ", constraint.proof[i]); constraint.public_inputs.emplace_back(constraint.proof[i]); } // Remove the aggregation object so that they can be handled as normal public inputs @@ -188,7 +197,84 @@ void build_constraints(Builder& builder, AcirFormat const& constraint_system, bo for (const auto& idx : current_aggregation_object) { builder.set_public_input(idx); } + // Make sure the verification key records the public input indices of the + // final recursion output. + std::vector proof_output_witness_indices(current_aggregation_object.begin(), + current_aggregation_object.end()); + builder.set_recursive_proof(proof_output_witness_indices); + } else if (builder.is_recursive_circuit) { + info("g1 infinity: ", bb::g1::affine_point_at_infinity); + // const auto zero = bb::fr::zero(); + // const auto group_zero = bb::g1::affine_one * zero; + // info("group_zero: ", group_zero); + info("fq_ct::NUM_LAST_LIMB_BITS: ", fq_ct::NUM_LAST_LIMB_BITS); + info("bb::stdlib::field_conversion::TOTAL_BITS: ", bb::stdlib::field_conversion::TOTAL_BITS); + for (size_t i = 0; i < RecursionConstraint::AGGREGATION_OBJECT_SIZE / 8; ++i) { + const auto group_element = bb::g1::affine_point_at_infinity; + info("is group_element infinity: ", group_element.is_point_at_infinity()); + + // const auto x = bb::field_conversion::convert_to_bn254_frs(const T &val); + const uint256_t x = group_element.x; + const uint256_t y = group_element.y; + const bb::fr x_1 = x.slice(0, stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION); + + const bb::fr x_2 = + x.slice(stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION, stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION * 2); + const bb::fr x_3 = x.slice(stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION * 2, + stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION * 3); + const bb::fr x_4 = + x.slice(stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION * 3, bb::stdlib::field_conversion::TOTAL_BITS); + + const bb::fr y_1 = y.slice(0, stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION); + const bb::fr y_2 = + y.slice(stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION, stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION * 2); + const bb::fr y_3 = y.slice(stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION * 2, + stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION * 3); + const bb::fr y_4 = + y.slice(stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION * 3, bb::stdlib::field_conversion::TOTAL_BITS); + + info("x_1: ", x_1); + info("x_2: ", x_2); + info("x_3: ", x_3); + info("x_4: ", x_4); + + info("y_1: ", y_1); + info("y_2: ", y_2); + info("y_3: ", y_3); + info("y_4: ", y_4); + + uint32_t idx = builder.add_variable(x_1); + builder.set_public_input(idx); + current_aggregation_object[i * 8] = idx; + + idx = builder.add_variable(x_2); + builder.set_public_input(idx); + current_aggregation_object[i * 8 + 1] = idx; + + idx = builder.add_variable(x_3); + builder.set_public_input(idx); + current_aggregation_object[i * 8 + 2] = idx; + idx = builder.add_variable(x_4); + builder.set_public_input(idx); + current_aggregation_object[i * 8 + 3] = idx; + + idx = builder.add_variable(y_1); + builder.set_public_input(idx); + current_aggregation_object[i * 8 + 4] = idx; + + idx = builder.add_variable(y_2); + builder.set_public_input(idx); + current_aggregation_object[i * 8 + 5] = idx; + + idx = builder.add_variable(y_3); + builder.set_public_input(idx); + current_aggregation_object[i * 8 + 6] = idx; + + idx = builder.add_variable(y_4); + builder.set_public_input(idx); + current_aggregation_object[i * 8 + 7] = idx; + } // Make sure the verification key records the public input indices of the // final recursion output. std::vector proof_output_witness_indices(current_aggregation_object.begin(), diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.cpp index a31bc080d4f..8dfde6d4eb9 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.cpp @@ -10,7 +10,7 @@ namespace acir_format { using namespace bb::plonk; // `NUM_LIMB_BITS_IN_FIELD_SIMULATION` is the limb size when simulating a non-native field using the bigfield class -// A aggregation object is two acir_format::g1_ct types where each coordinate in a point is a non-native field. +// An aggregation object is two acir_format::g1_ct types where each coordinate in a point is a non-native field. // Each field is represented as four limbs. We split those limbs in half when serializing to/from buffer. static constexpr uint64_t TWO_LIMBS_BITS_IN_FIELD_SIMULATION = stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION * 2; static constexpr uint64_t FOUR_LIMBS_BITS_IN_FIELD_SIMULATION = stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION * 4; @@ -42,7 +42,7 @@ std::array create_recurs nested_aggregation_indices_all_zero &= (idx == 0); } const bool inner_proof_contains_recursive_proof = !nested_aggregation_indices_all_zero; - + info("inner_proof_contains_recursive_proof: ", inner_proof_contains_recursive_proof); // If we do not have a witness, we must ensure that our dummy witness will not trigger // on-curve errors and inverting-zero errors { @@ -94,7 +94,7 @@ std::array create_recurs const auto& aggregation_input = input_aggregation_object; aggregation_state_ct previous_aggregation; - // If we have previously recursively verified proofs, `is_aggregation_object_nonzero = true` + // If we have previously recursively verified proofs, `inner_aggregation_indices_all_zero = true` // For now this is a complile-time constant i.e. whether this is true/false is fixed for the circuit! bool inner_aggregation_indices_all_zero = true; for (const auto& idx : aggregation_input) { @@ -133,10 +133,12 @@ std::array create_recurs // Prepend the public inputs to the proof fields because this is how the // core barretenberg library processes proofs (with the public inputs first and not separated) proof_fields.reserve(input.proof.size() + input.public_inputs.size()); + info("input.public_inputs.size(): ", input.public_inputs.size()); for (const auto& idx : input.public_inputs) { auto field = field_ct::from_witness_index(&builder, idx); proof_fields.emplace_back(field); } + for (const auto& idx : input.proof) { auto field = field_ct::from_witness_index(&builder, idx); proof_fields.emplace_back(field); diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp index bbf7768abc9..94830d70fc6 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp @@ -128,12 +128,12 @@ Builder create_outer_circuit(std::vector& inner_circuits) std::vector recursion_constraints; size_t witness_offset = 0; - std::array output_aggregation_object; + // std::array output_aggregation_object; std::vector> witness; - size_t circuit_idx = 0; + // size_t circuit_idx = 0; for (auto& inner_circuit : inner_circuits) { - const bool has_input_aggregation_object = circuit_idx > 0; + // const bool has_input_aggregation_object = circuit_idx > 0; auto inner_composer = Composer(); auto inner_prover = inner_composer.create_prover(inner_circuit); @@ -141,7 +141,7 @@ Builder create_outer_circuit(std::vector& inner_circuits) auto inner_verifier = inner_composer.create_verifier(inner_circuit); const bool has_nested_proof = inner_verifier.key->contains_recursive_proof; - + info("has_nested_proof: ", has_nested_proof); const size_t num_inner_public_inputs = inner_circuit.get_public_inputs().size(); transcript::StandardTranscript transcript(inner_proof.proof_data, Composer::create_manifest(num_inner_public_inputs), @@ -152,44 +152,67 @@ Builder create_outer_circuit(std::vector& inner_circuits) // - Save the public inputs so that we can set their values. // - Then truncate them from the proof because the ACIR API expects proofs without public inputs std::vector inner_public_input_values( - proof_witnesses.begin(), proof_witnesses.begin() + static_cast(num_inner_public_inputs)); + proof_witnesses.begin(), + proof_witnesses.begin() + + static_cast(num_inner_public_inputs - RecursionConstraint::AGGREGATION_OBJECT_SIZE)); // We want to make sure that we do not remove the nested aggregation object in the case of the proof we want to // recursively verify contains a recursive proof itself. We are safe to keep all the inner public inputs // as in these tests the outer circuits do not have public inputs themselves - if (!has_nested_proof) { - proof_witnesses.erase(proof_witnesses.begin(), - proof_witnesses.begin() + static_cast(num_inner_public_inputs)); - } - - const std::vector key_witnesses = export_key_in_recursion_format(inner_verifier.key); + // if (!has_nested_proof) { + // proof_witnesses.erase(proof_witnesses.begin(), + // proof_witnesses.begin() + + // static_cast(num_inner_public_inputs - + // RecursionConstraint::AGGREGATION_OBJECT_SIZE)); + // } + // info("num_inner_public_inputs: ", num_inner_public_inputs); + proof_witnesses.erase( + proof_witnesses.begin(), + proof_witnesses.begin() + + static_cast(num_inner_public_inputs - RecursionConstraint::AGGREGATION_OBJECT_SIZE)); + // proof_witnesses.erase(proof_witnesses.begin(), + // proof_witnesses.begin() + static_cast(num_inner_public_inputs)); + + std::vector key_witnesses = export_key_in_recursion_format(inner_verifier.key); + bb::fr key_hash = key_witnesses.back(); + key_witnesses.pop_back(); const uint32_t key_hash_start_idx = static_cast(witness_offset); const uint32_t public_input_start_idx = key_hash_start_idx + 1; - const uint32_t output_aggregation_object_start_idx = - static_cast(public_input_start_idx + num_inner_public_inputs + (has_nested_proof ? 16 : 0)); - const uint32_t proof_indices_start_idx = output_aggregation_object_start_idx + 16; + // const uint32_t output_aggregation_object_start_idx = + // static_cast(public_input_start_idx + num_inner_public_inputs + (has_nested_proof ? 16 : 0)); + // const uint32_t output_aggregation_object_start_idx = + // static_cast(public_input_start_idx + num_inner_public_inputs); + // const uint32_t proof_indices_start_idx = output_aggregation_object_start_idx + 16; + const uint32_t proof_indices_start_idx = static_cast( + public_input_start_idx + num_inner_public_inputs - RecursionConstraint::AGGREGATION_OBJECT_SIZE); const uint32_t key_indices_start_idx = static_cast(proof_indices_start_idx + proof_witnesses.size()); std::vector proof_indices; std::vector key_indices; std::vector inner_public_inputs; - std::array input_aggregation_object = {}; - std::array nested_aggregation_object = {}; - if (has_input_aggregation_object) { - input_aggregation_object = output_aggregation_object; - } - for (size_t i = 0; i < 16; ++i) { - output_aggregation_object[i] = (static_cast(i + output_aggregation_object_start_idx)); - } - if (has_nested_proof) { - for (size_t i = 0; i < 16; ++i) { - nested_aggregation_object[i] = inner_circuit.recursive_proof_public_input_indices[i]; - } - } + + // std::array input_aggregation_object = {}; + // std::array nested_aggregation_object = {}; + // if (has_input_aggregation_object) { + // input_aggregation_object = output_aggregation_object; + // } + // for (size_t i = 0; i < 16; ++i) { + // output_aggregation_object[i] = (static_cast(i + output_aggregation_object_start_idx)); + // } + // if (has_nested_proof) { + // for (size_t i = 0; i < 16; ++i) { + // nested_aggregation_object[i] = inner_circuit.recursive_proof_public_input_indices[i]; + // } + // } + + // info("proof_witnesses.size(): ", proof_witnesses.size()); + // info("proof_indices_start_idx: ", proof_indices_start_idx); for (size_t i = 0; i < proof_witnesses.size(); ++i) { + // info("i: ", i); proof_indices.emplace_back(static_cast(i + proof_indices_start_idx)); } + // info("proof_indices.size(): ", proof_indices.size()); const size_t key_size = key_witnesses.size(); for (size_t i = 0; i < key_size; ++i) { key_indices.emplace_back(static_cast(i + key_indices_start_idx)); @@ -197,12 +220,15 @@ Builder create_outer_circuit(std::vector& inner_circuits) // In the case of a nested proof we keep the nested aggregation object attached to the proof, // thus we do not explicitly have to keep the public inputs while setting up the initial recursion constraint. // They will later be attached as public inputs when creating the circuit. - if (!has_nested_proof) { - for (size_t i = 0; i < num_inner_public_inputs; ++i) { - inner_public_inputs.push_back(static_cast(i + public_input_start_idx)); - } + // if (!has_nested_proof) { + // for (size_t i = 0; i < num_inner_public_inputs; ++i) { + // inner_public_inputs.push_back(static_cast(i + public_input_start_idx)); + // } + // } + for (size_t i = 0; i < num_inner_public_inputs - RecursionConstraint::AGGREGATION_OBJECT_SIZE; ++i) { + inner_public_inputs.push_back(static_cast(i + public_input_start_idx)); } - + // info("key_hash_start_idx: ", key_hash_start_idx); RecursionConstraint recursion_constraint{ .key = key_indices, .proof = proof_indices, @@ -210,37 +236,51 @@ Builder create_outer_circuit(std::vector& inner_circuits) .key_hash = key_hash_start_idx, }; recursion_constraints.push_back(recursion_constraint); + // info("made recursion_constraint"); + // info("witness.size(): ", witness.size()); + // info("proof_indices_start_idx: ", proof_indices_start_idx); + // info("witness_offset: ", witness_offset); - for (size_t i = 0; i < proof_indices_start_idx - witness_offset; ++i) { + witness.emplace_back(key_hash); + for (size_t i = 0; i < proof_indices_start_idx - public_input_start_idx; ++i) { witness.emplace_back(0); } + info("proof_witnesses.size(): ", proof_witnesses.size()); for (const auto& wit : proof_witnesses) { witness.emplace_back(wit); } - + // info("key_witnesses.size(): ", key_witnesses.size()); for (const auto& wit : key_witnesses) { witness.emplace_back(wit); } // Set the values for the inner public inputs + // TODO(maxim): check this is wrong I think // Note: this is confusing, but we minus one here due to the fact that the // witness values have not taken into account that zero is taken up by the zero_idx // // We once again have to check whether we have a nested proof, because if we do have one // then we could get a segmentation fault as `inner_public_inputs` was never filled with values. - if (!has_nested_proof) { - for (size_t i = 0; i < num_inner_public_inputs; ++i) { - witness[inner_public_inputs[i]] = inner_public_input_values[i]; - } + // if (!has_nested_proof) { + // for (size_t i = 0; i < num_inner_public_inputs; ++i) { + // witness[inner_public_inputs[i]] = inner_public_input_values[i]; + // } + // } + for (size_t i = 0; i < num_inner_public_inputs - RecursionConstraint::AGGREGATION_OBJECT_SIZE; ++i) { + // info("inner_public_inputs[", i, "]: ", inner_public_inputs[i]); + // info("inner_public_input_values[", i, "]: ", inner_public_input_values[i]); + + witness[inner_public_inputs[i]] = inner_public_input_values[i]; } witness_offset = key_indices_start_idx + key_witnesses.size(); - circuit_idx++; + // circuit_idx++; } - + info("witness.size(): ", witness.size()); AcirFormat constraint_system{ .varnum = static_cast(witness.size()), .recursive = false, - .public_inputs = {}, + .public_inputs = { 1, 2 }, + // .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, .sha256_constraints = {}, @@ -275,7 +315,7 @@ TEST_F(AcirRecursionConstraint, TestBasicDoubleRecursionConstraints) std::vector layer_1_circuits; layer_1_circuits.push_back(create_inner_circuit()); - layer_1_circuits.push_back(create_inner_circuit()); + // layer_1_circuits.push_back(create_inner_circuit()); auto layer_2_circuit = create_outer_circuit(layer_1_circuits); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp b/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp index 61b509eaede..18f7178cf39 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp @@ -341,6 +341,12 @@ aggregation_state verify_proof_(typename Curve::Builder* context, const fr_ct l1 = public_inputs[idx1]; const fr_ct l2 = public_inputs[idx2]; const fr_ct l3 = public_inputs[idx3]; + + info("l0: ", l0.get_value()); + info("l1: ", l1.get_value()); + info("l2: ", l2.get_value()); + info("l3: ", l3.get_value()); + l0.create_range_constraint(fq_ct::NUM_LIMB_BITS, "l0"); l1.create_range_constraint(fq_ct::NUM_LIMB_BITS, "l1"); l2.create_range_constraint(fq_ct::NUM_LIMB_BITS, "l2"); @@ -350,27 +356,40 @@ aggregation_state verify_proof_(typename Curve::Builder* context, fr_ct recursion_separator_challenge = transcript.get_challenge_field_element("separator", 2); + info("x0: "); const auto x0 = recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[0], key->recursive_proof_public_input_indices[1], key->recursive_proof_public_input_indices[2], key->recursive_proof_public_input_indices[3]); + info("y0: "); const auto y0 = recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[4], key->recursive_proof_public_input_indices[5], key->recursive_proof_public_input_indices[6], key->recursive_proof_public_input_indices[7]); + info("x1: "); + const auto x1 = recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[8], key->recursive_proof_public_input_indices[9], key->recursive_proof_public_input_indices[10], key->recursive_proof_public_input_indices[11]); + info("y1: "); const auto y1 = recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[12], key->recursive_proof_public_input_indices[13], key->recursive_proof_public_input_indices[14], key->recursive_proof_public_input_indices[15]); - opening_elements.push_back(g1_ct(x0, y0)); + auto g1_0 = g1_ct(x0, y0); + info("is g1_0 infinity: ", g1_0.get_value().is_point_at_infinity()); + info("g1_0: ", g1_0.get_value()); + + opening_elements.push_back(g1_0); opening_scalars.push_back(recursion_separator_challenge); - rhs_elements.push_back((-g1_ct(x1, y1))); + auto g1_1 = -g1_ct(x1, y1); + info("is g1_1 infinity: ", g1_1.get_value().is_point_at_infinity()); + info("g1_1: ", g1_0.get_value()); + + rhs_elements.push_back((g1_1)); rhs_scalars.push_back(recursion_separator_challenge); } From 652c118e31b7f565a0807fd3af704b45fc6ed035 Mon Sep 17 00:00:00 2001 From: lucasxia01 Date: Fri, 26 Apr 2024 20:34:13 +0000 Subject: [PATCH 3/9] failed hacky fix -> we want a biggroup pt at infty to make this worm --- .../stdlib/plonk_recursion/verifier/verifier.hpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp b/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp index 18f7178cf39..7160fd10324 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp @@ -381,6 +381,11 @@ aggregation_state verify_proof_(typename Curve::Builder* context, auto g1_0 = g1_ct(x0, y0); info("is g1_0 infinity: ", g1_0.get_value().is_point_at_infinity()); info("g1_0: ", g1_0.get_value()); + uint256_t inf_check = uint256_t("0x198081f92aa7d12390d80414519d2544f5c5f489fbcf084fb20f07c72b1f0420"); + if (x0.get_value() == inf_check) { + g1_0 = g1_ct(Curve::AffineElementNative::infinity()); + } + info("is g1_0 infinity: ", g1_0.get_value().is_point_at_infinity()); opening_elements.push_back(g1_0); opening_scalars.push_back(recursion_separator_challenge); @@ -388,7 +393,9 @@ aggregation_state verify_proof_(typename Curve::Builder* context, auto g1_1 = -g1_ct(x1, y1); info("is g1_1 infinity: ", g1_1.get_value().is_point_at_infinity()); info("g1_1: ", g1_0.get_value()); - + if (x1.get_value() == inf_check) { + g1_1 = g1_ct(Curve::AffineElementNative::infinity()); + } rhs_elements.push_back((g1_1)); rhs_scalars.push_back(recursion_separator_challenge); } From f9885438f7371febd9428842e524d81591a39d04 Mon Sep 17 00:00:00 2001 From: lucasxia01 Date: Thu, 2 May 2024 23:14:59 +0000 Subject: [PATCH 4/9] hardcode valid aggregation object --- .../barretenberg/dsl/acir_format/acir_format.cpp | 9 ++++++++- .../plonk/proof_system/verifier/verifier.cpp | 2 +- .../stdlib/plonk_recursion/verifier/verifier.hpp | 14 ++------------ 3 files changed, 11 insertions(+), 14 deletions(-) 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 d922ff3fbe2..a409a8440ca 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp @@ -209,8 +209,15 @@ void build_constraints(Builder& builder, AcirFormat const& constraint_system, bo // info("group_zero: ", group_zero); info("fq_ct::NUM_LAST_LIMB_BITS: ", fq_ct::NUM_LAST_LIMB_BITS); info("bb::stdlib::field_conversion::TOTAL_BITS: ", bb::stdlib::field_conversion::TOTAL_BITS); + fq x0("0x031e97a575e9d05a107acb64952ecab75c020998797da7842ab5d6d1986846cf"); + fq x1("0x0f94656a2ca489889939f81e9c74027fd51009034b3357f0e91b8a11e7842c38"); + std::array xs = { x0, x1 }; + + fq y0("0x178cbf4206471d722669117f9758a4c410db10a01750aebb5666547acf8bd5a4"); + fq y1("0x1b52c2020d7464a0c80c0da527a08193fe27776f50224bd6fb128b46c1ddb67f"); + std::array ys = { y0, y1 }; for (size_t i = 0; i < RecursionConstraint::AGGREGATION_OBJECT_SIZE / 8; ++i) { - const auto group_element = bb::g1::affine_point_at_infinity; + const auto group_element = g1::element(xs[i], ys[i], 1); info("is group_element infinity: ", group_element.is_point_at_infinity()); // const auto x = bb::field_conversion::convert_to_bn254_frs(const T &val); diff --git a/barretenberg/cpp/src/barretenberg/plonk/proof_system/verifier/verifier.cpp b/barretenberg/cpp/src/barretenberg/plonk/proof_system/verifier/verifier.cpp index db39862b02e..973c6a48136 100644 --- a/barretenberg/cpp/src/barretenberg/plonk/proof_system/verifier/verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/plonk/proof_system/verifier/verifier.cpp @@ -184,7 +184,7 @@ template bool VerifierBase::verify P[0] = bb::scalar_multiplication::pippenger(&scalars[0], &elements[0], num_elements, state); P[1] = -(g1::element(PI_Z_OMEGA) * separator_challenge + PI_Z); - + info("contains recursive proof: ", key->contains_recursive_proof); if (key->contains_recursive_proof) { ASSERT(key->recursive_proof_public_input_indices.size() == 16); const auto& inputs = transcript.get_field_element_vector("public_inputs"); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp b/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp index 7160fd10324..b3196944e21 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp @@ -377,25 +377,15 @@ aggregation_state verify_proof_(typename Curve::Builder* context, key->recursive_proof_public_input_indices[13], key->recursive_proof_public_input_indices[14], key->recursive_proof_public_input_indices[15]); - + info(x0, y0, x1, y1); auto g1_0 = g1_ct(x0, y0); info("is g1_0 infinity: ", g1_0.get_value().is_point_at_infinity()); info("g1_0: ", g1_0.get_value()); - uint256_t inf_check = uint256_t("0x198081f92aa7d12390d80414519d2544f5c5f489fbcf084fb20f07c72b1f0420"); - if (x0.get_value() == inf_check) { - g1_0 = g1_ct(Curve::AffineElementNative::infinity()); - } - info("is g1_0 infinity: ", g1_0.get_value().is_point_at_infinity()); opening_elements.push_back(g1_0); opening_scalars.push_back(recursion_separator_challenge); - auto g1_1 = -g1_ct(x1, y1); - info("is g1_1 infinity: ", g1_1.get_value().is_point_at_infinity()); - info("g1_1: ", g1_0.get_value()); - if (x1.get_value() == inf_check) { - g1_1 = g1_ct(Curve::AffineElementNative::infinity()); - } + auto g1_1 = g1_ct(x1, y1); rhs_elements.push_back((g1_1)); rhs_scalars.push_back(recursion_separator_challenge); } From 259b2fb80f4f182383ed270b5f84d76797f24275 Mon Sep 17 00:00:00 2001 From: lucasxia01 Date: Fri, 3 May 2024 18:11:21 +0000 Subject: [PATCH 5/9] fixed, negate the rhs element --- barretenberg/acir_tests/reset_acir_tests.sh | 7 +++++++ barretenberg/cpp/src/barretenberg/bb/main.cpp | 2 +- .../stdlib/plonk_recursion/verifier/verifier.hpp | 16 +++++++++++++++- 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100755 barretenberg/acir_tests/reset_acir_tests.sh diff --git a/barretenberg/acir_tests/reset_acir_tests.sh b/barretenberg/acir_tests/reset_acir_tests.sh new file mode 100755 index 00000000000..e83bea9189e --- /dev/null +++ b/barretenberg/acir_tests/reset_acir_tests.sh @@ -0,0 +1,7 @@ +cd ~/aztec-packages/noir/noir-repo +cargo clean +noirup -p . +cd test_programs && ./rebuild.sh + +cd ~/aztec-packages/barretenberg/acir_tests +rm -rf acir_tests diff --git a/barretenberg/cpp/src/barretenberg/bb/main.cpp b/barretenberg/cpp/src/barretenberg/bb/main.cpp index 9db639ea0a5..90ec79288e4 100644 --- a/barretenberg/cpp/src/barretenberg/bb/main.cpp +++ b/barretenberg/cpp/src/barretenberg/bb/main.cpp @@ -128,8 +128,8 @@ bool proveAndVerify(const std::string& bytecodePath, const std::string& witnessP auto witness = get_witness(witnessPath); acir_proofs::AcirComposer acir_composer{ 0, verbose }; + // init_bn254_crs(acir_composer.get_dyadic_circuit_size()); acir_composer.create_circuit(constraint_system, witness); - init_bn254_crs(acir_composer.get_dyadic_circuit_size()); Timer pk_timer; diff --git a/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp b/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp index 7a3bf172a73..1660e2f9518 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp @@ -386,8 +386,22 @@ aggregation_state verify_proof_(typename Curve::Builder* context, opening_scalars.push_back(recursion_separator_challenge); auto g1_1 = g1_ct(x1, y1); - rhs_elements.push_back((g1_1)); + info("g1_1: ", g1_1.get_value()); + rhs_elements.push_back(-g1_1); rhs_scalars.push_back(recursion_separator_challenge); + + // g1::element P[2] = { g1_0.get_value(), g1_1.get_value() }; + // g1::element::batch_normalize(P, 2); + // // just run the native pairing check here + // g1::affine_element P_affine[2]{ + // { P[0].x, P[0].y }, + // { P[1].x, P[1].y }, + // }; + // key->reference_string = srs::get_bn254_crs_factory()->get_verifier_crs(); + // info("before pairing", key->reference_string); + // bb::fq12 result = bb::pairing::reduced_ate_pairing_batch_precomputed( + // P_affine, key->reference_string->get_precomputed_g2_lines(), 2); + // info("result of pairing: ", (result == bb::fq12::one())); } auto opening_result = g1_ct::template bn254_endo_batch_mul_with_generator( From 6eae187e081b0c09be0d947cae6b8a5da4e34b03 Mon Sep 17 00:00:00 2001 From: lucasxia01 Date: Thu, 9 May 2024 21:11:54 +0000 Subject: [PATCH 6/9] added check to make sure that proof always contains aggregation object, updated input proof/vks for double_verify_proof to reflect --- .../cpp/src/barretenberg/dsl/acir_format/acir_format.cpp | 2 ++ .../stdlib/plonk_recursion/verifier/verifier.hpp | 1 + .../execution_success/double_verify_proof/Prover.toml | 8 ++++---- .../execution_success/double_verify_proof/src/main.nr | 4 ++-- .../double_verify_proof_recursive/Prover.toml | 8 ++++---- .../double_verify_proof_recursive/src/main.nr | 4 ++-- 6 files changed, 15 insertions(+), 12 deletions(-) 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 f3c82e9dc92..1548b19e5ca 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp @@ -185,6 +185,8 @@ void build_constraints(Builder& builder, AcirFormat const& constraint_system, bo constraint.proof.erase(constraint.proof.begin(), constraint.proof.begin() + static_cast(RecursionConstraint::AGGREGATION_OBJECT_SIZE)); + } else { + throw_or_abort("proof does not contain aggregation object!"); } current_aggregation_object = create_recursion_constraints(builder, constraint, diff --git a/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp b/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp index 1660e2f9518..65c4d966595 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp @@ -390,6 +390,7 @@ aggregation_state verify_proof_(typename Curve::Builder* context, rhs_elements.push_back(-g1_1); rhs_scalars.push_back(recursion_separator_challenge); + // Need to move init_bn254_crs() above the create_circuit call to make sure we don't error here // g1::element P[2] = { g1_0.get_value(), g1_1.get_value() }; // g1::element::batch_normalize(P, 2); // // just run the native pairing check here diff --git a/noir/noir-repo/test_programs/execution_success/double_verify_proof/Prover.toml b/noir/noir-repo/test_programs/execution_success/double_verify_proof/Prover.toml index dff48212e50..4629fced1f2 100644 --- a/noir/noir-repo/test_programs/execution_success/double_verify_proof/Prover.toml +++ b/noir/noir-repo/test_programs/execution_success/double_verify_proof/Prover.toml @@ -1,5 +1,5 @@ -key_hash = "0x096129b1c6e108252fc5c829c4cc9b7e8f0d1fd9f29c2532b563d6396645e08f" -proof = ["0x000000000000000000000000000000d62b795bec274279129a71195796825fcc","0x00000000000000000000000000000000000793ab763140f20a68a6bd2721fd74","0x00000000000000000000000000000053141d06d3307b36153f321511199e579c","0x00000000000000000000000000000000000a4b55d6c21f98a9c434911dcb5c67","0x0000000000000000000000000000005f9d324c0abd22cec92d99dbec438e9491","0x0000000000000000000000000000000000240dfafe1b53dc27147cbab14ea893","0x000000000000000000000000000000044a61d3aac32c6931247cf334a19d9611","0x000000000000000000000000000000000003f0f8cf4207bfa85c23ec9f8d0c88","0x00000000000000000000000000000002168a470e39ba2ac266f6b474de12045f","0x000000000000000000000000000000000025791e7d3feab542345c00ec5a30df","0x000000000000000000000000000000dcafd76d4c3640969c80e017b951ef6397","0x00000000000000000000000000000000001d27f75a1256771e88e0c86fc42dbc","0x0000000000000000000000000000007347ae7d2d9d7fc2b8f0baa014ee1fed9f","0x000000000000000000000000000000000018bd927f42bf7caf9555f56f09000d","0x000000000000000000000000000000041f765f83cbe5904c8f453f70a4531d10","0x00000000000000000000000000000000001858aabeeb5331a221419f4fed1c19","0x000000000000000000000000000000d254a54caaedf8287b9af951b2f2611121","0x000000000000000000000000000000000005ab493623c9563cf2e55ba5f18200","0x00000000000000000000000000000014f24cddc1a02440dc63637df8032c8074","0x000000000000000000000000000000000011950c16cef98471b1d78b935195a4","0x000000000000000000000000000000b0340b459e6bd5cc8f031c8654a502897f","0x00000000000000000000000000000000000e1cf3968dac4545a76a2ae58e512c","0x0000000000000000000000000000002adf7218aa06ca0d2c2e600dcc39193a2d","0x00000000000000000000000000000000001302e7e4b0f14749bd885ca25588b6","0x00000000000000000000000000000092009ce4056e79ab815d8cdfd4491138ae","0x000000000000000000000000000000000018af11e853c6cf2f0f6274b0da8133","0x000000000000000000000000000000dd3dc6f49232141718527b3a0e4b26e21d","0x00000000000000000000000000000000001a877853348a8b695c4f9a9aa4ce68","0x000000000000000000000000000000aecfc56ba07155450b368140d6324023b5","0x000000000000000000000000000000000029c11052798c57ece614617d33fcc2","0x000000000000000000000000000000eb106ffc816d16fb84e84b0b61157b2603","0x000000000000000000000000000000000026c3cac16206899a21cb5126841446","0x000000000000000000000000000000a782ed54805fe845068b362b58e2fa34ec","0x00000000000000000000000000000000000cf046a1bfcc666b7f28b572676073","0x000000000000000000000000000000b931c8dda60bb4aca4cc817f5540f1209f","0x000000000000000000000000000000000024ad50c3936fafc3d190e6a4874223","0x000000000000000000000000000000cce90cfbaf5671c8c8652db28a3a9566f7","0x000000000000000000000000000000000003574db9d0f84380c9635660f86354","0x0000000000000000000000000000003eb3e1dc31846a90f721e7a08c6d6dc4f7","0x000000000000000000000000000000000028999a700cd1abae1a288eebb9a91c","0x000000000000000000000000000000c1be4d385b11387e14eb9817050d772f78","0x000000000000000000000000000000000003c56b5bad8b4484c66ac921f1f102","0x000000000000000000000000000000ace245cabf0f00dc7fd253dd8af0377a14","0x0000000000000000000000000000000000107f1731fcf34b364c813599fa1df7","0x035b937d404932b542b706eb810ef4a7dca4566d4dde1ad6a8717f46167ead7e","0x17608cef3dc7960f41cb1295706df663727d45ee598a61e05e989d111449fb65","0x054712a950ad67da3aa860e49e6891f99b586b7f37caff94eb013fdb374b61ee","0x04b755083086c769b7f593e0e48d68dc54be808203351380ca5566a48149d8bb","0x17d7670b0915235f626fdc1d7e1134d2be906ef138d7843384b3ebc23b1d630f","0x064cf544ab5f4e3dab47960502cccc83321fb275068dfbdd3a2fcbc6dddcaa65","0x083338262712e2b66769ea40d9f412b18caa1bc81a51ff5a50b6c41f8c4b3d23","0x0cdd38958cab97defde00f4a5961b6fd676e29d9f2c352f6bb2c68b91f83f8af","0x02c8bdd005c2f43a0a8cbb2744916ce5c322dfa5b23367a829c12699f4036d32","0x25bac73c7e7b659fbea3135b7a0decf9db8dc3045bd2837dae337c64cc722546","0x19eb361aa419d37bce3d2e8b2b7692a02a9559e83d7f3d8fe9169970fbbc2cba","0x2494bd5106d00e05c7ea60e632e9fe03773b7f2c5b662aa37ec512a01f4a0775","0x18c52c2f2c6e7be1d7847c15e452a3a9c64316103d12e4b5b9a82fac4e940ee9","0x0e0342810456ef78f498c1bfa085a5f3cbc06db1f32fabd0ea9ad27dccac1680","0x024c13d6ef56af33ed7164ea8e47ddecc8a487b000d8b1b45edcd3895a503ba2","0x26e0d127f626bd39b55bc5d0c131dbf03fe006dc5c3edc57dda1e629799a4317","0x1b1140061bc52b15c4f5e100729a81968ee79dc03deb966a18850335a8e44a8b","0x1bb76f945199e71d531a89288912087a02dd0e83020e65d671485bf2e5e86e1a","0x29269900859c6d86e404185b415bf3b279cd100f38cfdb0077e8d6a299c4fd35","0x22b5e94bae2f6f0cdb424a3b12c4bf82cec3fb228e012c1974ed457827bbe012","0x18d3543a93249778e7a57936170dae85ffc47c2567f2d0076a32c0bb86fcf10a","0x03721dc2670206cde42a175fd56bcce32cf6cb8801450a8e8e4b3d4e07785973","0x2806db136dd214d3ac1478460855cae6a4324ab45cab35320d104fee26c260e8","0x1c3749f1937082afbbae9375b9be708cf339e1983e57ef4447f36cfa560c685c","0x1067b8cfb90ef08bcb48aea56b2716334241787c2004a95682d68a0685566fd0","0x0f41aee4416398f1d48ffc302403273cddef34a41f98507c53682041d82e51ff","0x10d854c9f0bfbdff7ca91a68f4978e9a79e7b14243d92f465f17bdf88d9f64f8","0x00000000000000000000000000000000018938b11099e0cdc05ddab84a153a97","0x0000000000000000000000000000000001d7dda1471f0dc3b3a3d3438c197982","0x00000000000000000000000000000000022682917da43ab9a6e9cbcece1db86d","0x2453913e6b0f36eab883ac4b0e0604d56aaeb9c55e641135173e63c342f1a660","0x05216c1b58dc43a49d01aaba3113b0e86be450fc17d28016e648e7162a1b67fb","0x152b34845a0222a2b41354c0d395a250d8363dc18748647d85acd89d6934ec56","0x1dfc6e971ce82b7dcda1f7f282713c6e22a8c79258a61209bda69719806da544","0x2968dd8b3af8e3953f1fbbd72f4c49b8270597bb27d4037adc157ac6083bee60","0x1b9425b88a4c7d39b3d75afe66917a9aa1d2055724392bc01fb918d84ff1410e","0x04ab571f236d8e750904dc307dd274003d9130f1a7110e4c1521cfb408877c73","0x2ad84f26fdc5831545272d02b806bb0e6dae44e71f73552c4eb9ff06030748c7","0x020e632b99d325db774b8630fb50b9a4e74d35b7f27d9fc02c65087ee747e42c","0x09a8c5a3171268cb61c02515c01c109889200ed13f415ae54df2078bbb887f92","0x1143281a9451abbb4c34c3fa84e7678c2af2e7ea8c05160a6f7f06988fc91af8","0x000000000000000000000000000000cbda736ca5cf6bc75413c2cc9e28ab0a68","0x00000000000000000000000000000000001ee78c9cc56aa5991062ae2e338587","0x000000000000000000000000000000bc9bfcdebb486f4cb314e681d2cc5f8df6","0x00000000000000000000000000000000000ad538431d04771bca7f633cb659ff","0x000000000000000000000000000000d45b317afcefa466a59bba9e171f1af70c","0x0000000000000000000000000000000000133c50180ea17932e4881124e7a7c6","0x000000000000000000000000000000fc9ed37f543775849f3e84eaa06f77f992","0x00000000000000000000000000000000001372873c9c051d1baff99248b8f70e"] +key_hash = "0x1e56457faaacf850871707c2e93dd4e1b4edd5fec60c042d5b314ea30b9ef2b2" +proof = ["0x0000000000000000000000000000000000000000000000042ab5d6d1986846cf","0x00000000000000000000000000000000000000000000000b75c020998797da78","0x0000000000000000000000000000000000000000000000005a107acb64952eca","0x000000000000000000000000000000000000000000000000000031e97a575e9d","0x00000000000000000000000000000000000000000000000b5666547acf8bd5a4","0x00000000000000000000000000000000000000000000000c410db10a01750aeb","0x00000000000000000000000000000000000000000000000d722669117f9758a4","0x000000000000000000000000000000000000000000000000000178cbf4206471","0x000000000000000000000000000000000000000000000000e91b8a11e7842c38","0x000000000000000000000000000000000000000000000007fd51009034b3357f","0x000000000000000000000000000000000000000000000009889939f81e9c7402","0x0000000000000000000000000000000000000000000000000000f94656a2ca48","0x000000000000000000000000000000000000000000000006fb128b46c1ddb67f","0x0000000000000000000000000000000000000000000000093fe27776f50224bd","0x000000000000000000000000000000000000000000000004a0c80c0da527a081","0x0000000000000000000000000000000000000000000000000001b52c2020d746","0x0000000000000000000000000000008099adc4f06eb3c34acf9dadfd2bc08251","0x0000000000000000000000000000000000267853d29d78d7d04342608ec39ace","0x0000000000000000000000000000002a574ea02cc61603e86ca3c45271dc125b","0x0000000000000000000000000000000000000030773f7b86fd1b65208199af25","0x000000000000000000000000000000475437bdaedc6fecf787d6c72ce56f8d02","0x000000000000000000000000000000000001521be79ab63224467af78c478749","0x0000000000000000000000000000007e547868d9b33b543457e8318795d38a7c","0x0000000000000000000000000000000000065ca7b45c3eae2b466d0ca15cb946","0x0000000000000000000000000000003e5ba1754eacf94b403098e2b5f2d21263","0x00000000000000000000000000000000002c7a7ad065bb496e0d26b7e71c9323","0x000000000000000000000000000000deaa1b7a4fa682da44553b4711d20c5a1a","0x0000000000000000000000000000000000212ac0280cd6238aa8743dfe8c7637","0x0000000000000000000000000000005f9319ad40432111e9d86ae991046b6f2e","0x00000000000000000000000000000000001cd1bcec744df591dcd66a1b527ae6","0x000000000000000000000000000000361842a8cdc3ef386c82f92b674562e5bc","0x00000000000000000000000000000000002a348177f720348a72aa0ab79c42fe","0x000000000000000000000000000000846ba973ef3969dbcaf8572df71fabdde4","0x000000000000000000000000000000000001cf9671b18d1d6e9f2e13a627add9","0x00000000000000000000000000000060ed3cbdec521cacd85e02a40b42084291","0x00000000000000000000000000000000001f2ce205037a6ddaa7f4278820e0a3","0x000000000000000000000000000000fc07d2d63e96384ab014349437c41fbe3b","0x000000000000000000000000000000000018c446ac7b70364bf063d454554149","0x00000000000000000000000000000077b9330cd96042225d005001bdea707c79","0x00000000000000000000000000000000001c0b4a982df907e24ecf694b1cba89","0x000000000000000000000000000000ba734f4d54bf9acc7df5dfe661fbd112fb","0x00000000000000000000000000000000002d7a8e2477a50b7eec66fe535a692f","0x0000000000000000000000000000000a37b159df5dd564e8b14fa1f52a4b7a7f","0x000000000000000000000000000000000006ea4b0a965fe00d59f6b02df045ab","0x00000000000000000000000000000039799e31989930bfb221ca0a67731dcdff","0x00000000000000000000000000000000001c904bb8d8ef520307b8deba5426f4","0x000000000000000000000000000000377f69610ed5ac8e7606467c5a006e7ae3","0x00000000000000000000000000000000001fbf52061e359d5abf3118821a433d","0x0000000000000000000000000000005412dc0b8fd9094f38e901e303b164558c","0x00000000000000000000000000000000002d60f948030d1bebd70fd9a4faa7ac","0x000000000000000000000000000000c68f5b9703031db0f84149d268184cfbff","0x00000000000000000000000000000000001d1f94a2a5f9e15f2852f368884877","0x000000000000000000000000000000a8b69dca29ec1d4d55ea9b10a81e20f408","0x00000000000000000000000000000000001f6c0f9f8c7196d24f3812801acbf0","0x0000000000000000000000000000001b92f83cbcf6ed55473d2c4fcfea9d3aab","0x0000000000000000000000000000000000120c6c6b95afc49f2872daac653e8d","0x0000000000000000000000000000001cc99b1305185b4c06578dcec414b0d76d","0x00000000000000000000000000000000002ef60725be98e63262bcf67d3d96c7","0x000000000000000000000000000000928beb48f07322fca418b5e1add86a9d0e","0x000000000000000000000000000000000005fcff0f76aa0231da6733081d6bc1","0x00477df6574f635f42ec0b29b2c212251a6fdeed2b9cf8e908d08b2d19f1eaa3","0x027b9675c69a40ce75dfd8a2378a9bb9b9c638148d196772e3baf6d8de323e16","0x06318131835ddd0308ffd7fdfd8a3efbe52638856ac6b8a5deb20958f51d40ef","0x2a715ed6f22e73d24bedf34e58ff5b80daef7986adc197b7b740637683ef6ba4","0x2108da5cef80bc454776be6b4113cf5026f7b5c375920f8baf15fe07556c46b5","0x23ca5f7fb8d657aeb9b875cf2371d26b26ac6adbcd9bdcb67a067c1d0affaa34","0x141018ec9cda07e7302059f382dbaa8ffe1915467e7d9485765da9bc0746abfd","0x0fa1bc78aea964c3d9133cb98817009f99c2041e1ef7adc3002160668e6ae9e8","0x0a30c58664091c298b0fde9802a46b181a9e368c65d32fb08ff439cfa053984c","0x0d690b6038c78654065984daf03b245f458d812cf6c9e643160a38c79540f7d8","0x2123fb5091d081c879d07bbdd269245e691ef896a344f6bd0b0abad1caea7d6b","0x1a7081a09ee64f83e977be77117eec0147fcd5b2fbb3e59a85d7a9f60df70467","0x0cd852f5a2694e93b7393996b3cf4ba80ab3fddcbef699b3021c87d36599afc0","0x222235c000b217ecc05a80fc823c983ef15349b1c546558652a08cd5c4d9f483","0x02f89a4e82ec54f4326c1e343be05505fb0346e407caedfade81825ba9d69b87","0x283956461f0d0744e8e2f6a0811b3d75b452fcfc7ea91344c65e3dfc79d0c20c","0x2e77a71f07964a0a0db053c02c269245189e3554637838a84ff82a8e655d1a5e","0x2d0e6ed64c639f69b304bc89bf0875f2e18edc077f771b5af08621fdc7e7f7b9","0x1c093d7ccb755d7893b97d7b494829b6d6aae6dd8de0865bb59afc9c066b8fff","0x11a9eda6e3cb6b660b4edd69e379b8828d6dd9859c44243868c8ca476da53409","0x27efbcc9034ee2cf156e8486e9a583ae95d75506bc4f76ca857a2f6fc7aed076","0x2491587b1bd3ce80e80a9e3e7aa71f409d2ddaf2831b8e7a50328bbf5cb8e26a","0x056df1f485054f08f4e9de0e709ed25831cf25a2aee46e387d670b1a2bd56e7b","0x035b121790a2ed4d93155dc121a186e8228624937b3c523761221114251bc961","0x1ec97cdbc58042e86661ce8e79c5b2120d57199920f89862a691cfa330f9226f","0x14d47ea7c72805cb9fad4dda2be39e619e320c22e90d8166bd6b168d23e19e6b","0x22b101f887868ae31a034feb00873984af15bdc09ce196be8f53b9ad6644bcff","0x165766c4f824ab049039505b298c5e1277922914bc513a2bac502ca3d4822a65","0x1e0295168b15cfc6091afe8006c4af9e30142c59aa2f27a3ef35467b7ac09da5","0x0000000000000000000000000000000148b7a2d3ef4cb24c2ecde298d94237ee","0x1cdde8042d58b55a686a40fa88e2cfe12c625969a7ef0ae19c4c0e1728175965","0x0a76949acf541e81627c7978cbafb3445dd072b402a9152412d6e8a6b712e726","0x058f2c383e4f7353c280d951e50e1f27aa760bbc66ff3fe8d4a870c60a1f038d","0x24751a92f67d948d47f428307a87b585d5004ab1b2fb1ee2d9d3936c57d6ee28","0x0d95c94014d07650d96f4248792ccc22139a53f8a56306a676b0edf9a6c3c647","0x22f27c2dea72f0b43e2f133301f0bba14825ceb3cb6c451d7b60c5e897ccba1a","0x1b94424198cbb9295a8370fe11b27dd14f45b8f2f48ddddec209a5bfedc2cdee","0x195af75393f4f23adf73556f15f14259b22790d143279a957dfd8c164c03d7db","0x12237424b04cd652456bbef5249e2b9076c31c880a2f5fb463365341de75fe3f","0x0daa86b82c3071c3def1f456b615f1dbecf29387e0e3151343923f942a1020a1","0x1885e72322a21a19eb7ffcd7bcf3f5f5c7f55fbce1b533c14ae7c993b5520e91","0x000000000000000000000000000000544c048e4d7d81da1dd2a423552aeabe83","0x0000000000000000000000000000000000059c4c9dec0fe3217e0a2bc146a91a","0x0000000000000000000000000000007fe210ecccb8fa659a976715bf7d54db1a","0x000000000000000000000000000000000002f51d5f82e0cc0cc866482e6a68af","0x00000000000000000000000000000024ba1031c4b07408663b0cf6865c2a0ff6","0x0000000000000000000000000000000000120e60353fc825d1f732cb0ca18627","0x000000000000000000000000000000c224ae34e221aa774c9016f1a8c77ed53c","0x00000000000000000000000000000000002fbe6b306186e59b6420191c1b267b"] public_inputs = ["0x0000000000000000000000000000000000000000000000000000000000000003"] -verification_key = ["0x2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e80","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000000000092139c61bae1a44f0fc7689507414be688","0x00000000000000000000000000000000000160ce4e279582f91bde4f03f5e9a2","0x0000000000000000000000000000005dc2d37f658c3b2d60f24740eb13b65d79","0x000000000000000000000000000000000007e3e8a5d98a1177ec85bf88f163a5","0x000000000000000000000000000000dc3035fbd7ff16412a8fd7da587a935298","0x000000000000000000000000000000000023d08e2817ac16990004ed11d8fc66","0x000000000000000000000000000000356a5ad59c646c746a8d09f5d154e47c4f","0x00000000000000000000000000000000000708529196af3c8e16ffa580c26182","0x0000000000000000000000000000002ddfe70eb7a1280596e8e4a804f118a6dd","0x000000000000000000000000000000000013757e15a0905f298303784a161b21","0x000000000000000000000000000000a23a729df796935c7824e3a26be794829b","0x000000000000000000000000000000000005775b6c146c4a59856e869fe5a70e","0x000000000000000000000000000000eef0c9e088fd2d45aa40311082d1f2809b","0x00000000000000000000000000000000001d539ccbfc556d0ad59307a218de65","0x000000000000000000000000000000a2c848beceb6ab7806fd3b88037b8410fc","0x0000000000000000000000000000000000177004deeb1f9d401fd7b1af1a5ac8","0x0000000000000000000000000000002508eb63672a733f20de1a97644be4f540","0x00000000000000000000000000000000000d82d51f2f75d806285fd248c819b8","0x000000000000000000000000000000d002f9100cbba8a29f13b11513c53c59d0","0x000000000000000000000000000000000006cd3b0e3460533b9e5ea2cdc0fcbb","0x000000000000000000000000000000f45ea38a93b2f810c5633ddb54927c1c96","0x000000000000000000000000000000000021791de65f9a28ec7024b1a87ab4f3","0x000000000000000000000000000000926511a0439502c86885a8c6f0327aa7ad","0x000000000000000000000000000000000029fa14a969c5d81ed3abbbfb11220a","0x000000000000000000000000000000b84c3258e8206f560e5b5b18cbeafef87e","0x00000000000000000000000000000000002a910445cd8fc895e5d235cd8ea185","0x000000000000000000000000000000887e67f15e84bcb8507a5064a363f6043b","0x000000000000000000000000000000000014dc6643d801c3ef27c2066b6e2bb4","0x000000000000000000000000000000e38e900b42c314ba803088e8fbf125203f","0x000000000000000000000000000000000020690fd4869db418306046b38161dc","0x0000000000000000000000000000001e2fa856bf7951b8292b1e88185993629c","0x0000000000000000000000000000000000048a85e0bbac7c60ad3d78f601f63c","0x0000000000000000000000000000006f457719495073d3666d77a625aeab0c51","0x00000000000000000000000000000000002623ad892dc62b1fa7d0a650f0d470","0x000000000000000000000000000000dbfcc8a467e021c03b13f74a9f79c3a10c","0x0000000000000000000000000000000000295f6f10976c37bd9c6f96bb7187d5","0x000000000000000000000000000000c13ef9a937cc12420fb38d9ab8e848e85e","0x000000000000000000000000000000000003560a3b334e887532f605c9cb7628","0x0000000000000000000000000000009bcebf08a4599cdda0fb96312d4dc0c7a9","0x000000000000000000000000000000000015adc8bb1e01c835f48959d1237bd6","0x00000000000000000000000000000047762ab839e4ff63c77605a9f383da37c2","0x000000000000000000000000000000000016a8c3c53d89660cf271522cd301fb","0x000000000000000000000000000000f0c8539a0b5f94420a513f9c305b932bfe","0x00000000000000000000000000000000002957ba01d9de5638f808f88a692533","0x000000000000000000000000000000ab17c6189d67d3bf5dd2f3885de0151b6f","0x0000000000000000000000000000000000060d8aa43fdc434d1942263f364d95","0x0000000000000000000000000000005d292333b3adb497f00b4bc32d45229060","0x00000000000000000000000000000000001a1018a66221883639f2898a66f345","0x00000000000000000000000000000006555a806b1993291deba0dc44e2abf431","0x00000000000000000000000000000000000cacff7099a9d5e35a21f4a00b2dc3","0x000000000000000000000000000000f50c11ba95d349c36d143eefd12e494950","0x00000000000000000000000000000000001022e8c5f02d639bc9dd8bc4407f99","0x000000000000000000000000000000c76828795098eda73d50b4b585c60afc60","0x00000000000000000000000000000000002bf09c0ec7011e93888962f2406630","0x00000000000000000000000000000049e5c83a8978d832fb8e144548e3ca1adb","0x00000000000000000000000000000000000e0ec242c2e160a984f61ca5adf5f5","0x0000000000000000000000000000009c5d6e08a6605ab4513748ac0fa017dd1c","0x00000000000000000000000000000000001f54baa07558e5fb055bd9ba49c067","0x0000000000000000000000000000001e1ee7ee29bbb5e4b080c6091c1433ce62","0x000000000000000000000000000000000024aec62a9d9763499267dc98c33428","0x0000000000000000000000000000001a96755946ff16f0d6632365f0eb0ab4d4","0x000000000000000000000000000000000028cf3e22bcd53782ebc3e0490e27e5","0x00000000000000000000000000000043148d7d8c9ba43f2133fab4201435a364","0x0000000000000000000000000000000000234ce541f1f5117dd404cfaf01a229","0x000000000000000000000000000000a7fb95ffb461d9514a1070e2d2403982ef","0x00000000000000000000000000000000003016955028b6390f446c3fd0c5b424","0x00000000000000000000000000000008863c3b7cd7cddc20ba79ce915051c56e","0x000000000000000000000000000000000013ef666111b0be56a235983d397d2a","0x000000000000000000000000000000e3993f465fc9f56e93ac769e597b752c1c","0x0000000000000000000000000000000000217f7c4235161e9a3c16c45b6ca499","0x0000000000000000000000000000008ffa4cd96bc67b0b7df5678271e1114075","0x0000000000000000000000000000000000256467bfcb63d9fdcb5dde397757ad","0x00000000000000000000000000000054e5eb270bb64bde6e6ececadfd8c3236c","0x00000000000000000000000000000000000e52d1bd75812c33c6f3d79ee4b94c","0x000000000000000000000000000000484a2c641dce55bc2dd64ef0cd790a7fea","0x00000000000000000000000000000000000ff417d256be43e73c8b1aa85bdda3","0x0000000000000000000000000000000b72e7b7713ab5da44e0f864182e748a23","0x00000000000000000000000000000000001a221055f1625ad833a44705f5f74e","0x00000000000000000000000000000067a99a34e9b81a17ad001db02e29bcb82a","0x000000000000000000000000000000000018a6c02e398389827568fa960e86e2","0x000000000000000000000000000000bb29f26f9890d6cc6401f4921d5884edca","0x00000000000000000000000000000000000868357b28039385c5a5058b6d358e","0x00000000000000000000000000000036fb6e229dde8edf7ec858b12d7e8be485","0x00000000000000000000000000000000001060afe929554ca473103f5e68193c","0x00000000000000000000000000000015226e07e207744c0857074dcab883af4a","0x00000000000000000000000000000000000b1c02619282755533457230b19b4a","0x0000000000000000000000000000001f2a0277e4807e6e1cbabca21dde5eb5e1","0x00000000000000000000000000000000000d928deafed363659688ed4ccdef52","0x000000000000000000000000000000363f0c994e91cecad25835338edee2294f","0x00000000000000000000000000000000002eea648c8732596b1314fe2a4d2f05","0x000000000000000000000000000000b2671d2ae51d31c1210433c3972bb64578","0x00000000000000000000000000000000000ab49886c2b94bd0bd3f6ed1dbbe2c"] -proof_b = ["0x000000000000000000000000000000f05c69448ca29bdf52076f9b073bb30fed","0x000000000000000000000000000000000028c86bb3e27b4aaaaef126f7df5349","0x00000000000000000000000000000026ae031fc93594375dfc7f3bbe027f97d5","0x000000000000000000000000000000000000dd12c7290fe7f775796a233b8590","0x000000000000000000000000000000c1ee6631704de424d010c5c4ac8293ac49","0x00000000000000000000000000000000002f41818c9aa83f5c8d9bdd128015b9","0x000000000000000000000000000000b50a5801482f7e3a5de8ab3cce0f10b0d3","0x000000000000000000000000000000000022a0bc69c293dbf293b25bc9eef7f8","0x0000000000000000000000000000003b02abf1967ef394154dc15d763135e903","0x00000000000000000000000000000000000d8a2ee46acc6d1ed8d517b56d47c8","0x00000000000000000000000000000039bf0d1b3d8cf9de898f101c626e978d78","0x0000000000000000000000000000000000008faa7df2451a24d291a9b584f1a5","0x000000000000000000000000000000c1dae329ed7adf63a2d89a5f16fb98b6d8","0x00000000000000000000000000000000001ff0bc16fc0bd4aa2d6255690453c2","0x000000000000000000000000000000d12d7589f853a9b472613efa56689beaf1","0x00000000000000000000000000000000002d6fbc798f4403751df6aeee8bedd3","0x0000000000000000000000000000007c1fa069cb17194fecf88db9dd54a4ee36","0x0000000000000000000000000000000000268e026f9814822a42b2d59eec5d24","0x000000000000000000000000000000c3fb56beab774218cd63498fc050a5fd9b","0x00000000000000000000000000000000000071c014d7b5063f005a0bc2ee1af4","0x000000000000000000000000000000ae12b25371c6af42bbe0a85cddd2eaebc7","0x000000000000000000000000000000000026d270e1ffc9c7c344c694dfadda83","0x00000000000000000000000000000080280858c6be461716921caa3c26f3f6f3","0x000000000000000000000000000000000001dcdd3f39e27d0ce6aa5d14dff4c1","0x000000000000000000000000000000080e1d2c913c834ebcf7e0600c076c08fd","0x00000000000000000000000000000000002df3d142217694e65fb7c355d62764","0x000000000000000000000000000000e5e336f3f59d77e500f49771bfbeb12e83","0x000000000000000000000000000000000028fffe08bdc4c0690643d2e1a1275f","0x000000000000000000000000000000db5618b32afc13e18f21b39f3fbede9d11","0x00000000000000000000000000000000001d244818370d43fb7e8bc67e03787b","0x0000000000000000000000000000006bcc1fd3f9f78449ad1df1bc11bc379edd","0x000000000000000000000000000000000009ac9cbb285edbf5b3a973f3f5f1cb","0x000000000000000000000000000000fd885905b6c0fc95bb4dd0b11f6797d4b3","0x000000000000000000000000000000000021f07995cdd835145e19c38127c562","0x000000000000000000000000000000bbbf2b975c2c97ae4b45c4a52059e53ee3","0x000000000000000000000000000000000024158163788841cf4590bbc1e89a90","0x0000000000000000000000000000009aca93d2b1386ea412d4b36ea5bb9894a8","0x00000000000000000000000000000000002532d1d210e8ed4c2f5c00cbaaa475","0x000000000000000000000000000000634a88caa1d77cb6b5fe77cac31458fc31","0x00000000000000000000000000000000000bdf18bae92fce7cfddab5520cac6e","0x000000000000000000000000000000622e9626255170ccec77602c755aa193e1","0x000000000000000000000000000000000001d4edba370e04436a988bad05dada","0x000000000000000000000000000000b52934323a0aec8f803cdaafee2ab7bfb2","0x0000000000000000000000000000000000155312af5e0e25ca9fd61aef9e58ed","0x06270b517855f6f6a608e432883d1d1030a12a1e33022dc142b7728691421da2","0x2af7c794d7b720b25eb1df0afd8c8e3c15b6e518194c3caea7966a5f8210ff04","0x073fe573aeb27d81a5713be93e1365390dcbc3c8e7439ff1d36a84cc014f5642","0x11351b961147431e54535248b58b35cf5cddb9b13827899167617d7a96794d64","0x297c9421c9c3db286770787c35b86bc41583386491b4ae55e5fa81aefa21efc4","0x0f4eeca3ff4a3495f859898937688652d33f9b4dd3e003e12adf15278e0997c3","0x133e3d8b82721d40d919f2326810ba6f07eff3f7d20d86b2bde692a811522019","0x2c502f53c9698b73bb8c8f9b9cf2d705d16a64a7040348b4b39c637a2064316c","0x0cbc1971e1c566cde9d9125c91cdc88e817db182692f836c1a5170a6246eaf73","0x12c47793e7db706c637cd4b4d96d227f569850176b852b1fe8ad522ddb38ef0e","0x0cd7b300e9309a135285be1aeb02b152f97931a7357ab6d609a2cb1970aab877","0x2a7789dfe286c9d0a7592f1c9316e730cb14c9d843aefc4764d76e7f8571c96a","0x248ac54ce3dbf37796621882a4ac76046df5ab680da487fd85cce76b1ae392d3","0x149d1d07cebe320f77b03533e34912545cedeae62bd9778d37724728762b5710","0x00fe29daebdaed61309790e70e2dcefa3f3af4c6c965ce424b8dbcf09b8e4b49","0x2b75b3bace61b731d7f0c003a144b62b0a4fbe9f0d14ca89b0652b70210014b3","0x2588ef27cfb6e0d8c6f9a969b2da44fead30a02ed70a563fd15aa45bb671de1c","0x2b74d7674b55642697b4a1e226eddb0e4918b2d57aa5b99093dc46cadcdea000","0x244c626845d3a5040f08f01e9611f968ad675ca857789149b13a0cfa83a2e064","0x2cb8d02f90cae33fd7bcfb80af4aff067c4f5fc4b3f9228d5b8f768bc8f6c971","0x1372f3d1f04e0c39a50e823d5da03d70bebe19a1b8e28f8c2ff601cc0bfc0095","0x19af6601d2613426a50b7c35d60562a5f2f2634e6af56dac13459632e15570ee","0x13c2a16ed3b65dcd9414659be79af17995d344de34eaf962343b0f1e76c73a57","0x0dd5dcdbd50b8774831d4f01f930804d38b4266dfee085185530880a0c3903c0","0x07e91848d660b11b722638680ac60f20db9507fdc8d610ce762600f5a1aacd29","0x1f9c2a94d10c0a7fb60292cfc46fd3d2501181bea0ffe1f5f2501d474be3a785","0x14edb9c5bd389eae08a5ea2a7a1662894e1e878c142084d966a625bef68cf7c3","0x00000000000000000000000000000000cecd01810814d175f0a533f0067618c4","0x00000000000000000000000000000000f82935013ce5c82720c63e533af41db8","0x000000000000000000000000000000012185688171b6bed850e748b66f7222ac","0x2dd7f5ff2150155c2ac86ebe28d9ecbca2eea812b0021ab2bceae111cfea8325","0x04ea6c2daf2b9e827d2213c3d03953410dcf1ed67ba34a3c00e772be92606a8b","0x163f2bd18dcde52f99b9867c944780fd718d1612927053b139b280fc55013d1b","0x05e388fd160ccac30a8f7b18a4bd042f705e92b5937e8c0e9478e2ff623907c6","0x00ba3f6f527d6ed3ff17a63b1d5be3c42bdfae88fdf63311fc7b871157939309","0x16187d9daa8c2e5a1a9ab15be7ca6a8feebfb31bea76f9a3ca69381881c70561","0x0f64522e4904edb7377b14a7b9dad848829167324ef5c016346b3ad8251191ee","0x273bbe6000a4001dce369e5a36cc0b0ca3fd351665b688238aa8c556a6ca6b8e","0x022d2232efb2faa8307846c9a4c697aabad1b7f1336b35ad72fa8922975b49d9","0x0d82d478bff3955c4b0a34ef94427ca5f9da23147ad953c89f2e428277ec2825","0x18d886be90343010659c231583be61a138e28e37c24771e3cb61fbe2587d0671","0x000000000000000000000000000000196ba6a58dbeb7c34cb1d6287e23d434de","0x00000000000000000000000000000000001df8ae8a1589590f8863c1fefd8dfd","0x000000000000000000000000000000f30e11b2c5fbefa166cbb9f58c5f8e1a4c","0x000000000000000000000000000000000026420ade7666bc0ab1cf1fd9d0c534","0x0000000000000000000000000000000feb5b7d8260d25a1ee1ce76ff461673fc","0x00000000000000000000000000000000002bd2ac6223a80671b777bf5dca70a4","0x000000000000000000000000000000690f757006d2fa1ddb0114c9f268783537","0x000000000000000000000000000000000023ad36feadd91e50118f32e97a0204"] \ No newline at end of file +verification_key = ["0x1418144d5b080fcac24cdb7649bdadf246a6cb2426e324bedb94fb05118f023a","0x0000000000000000000000000000000000000000000000000000000000000040","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000040","0x0000000000000000000000000000000000000000000000000000000000000011","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x000000000000000000000000000000000000000000000000000000000000000b","0x000000000000000000000000000000000000000000000000000000000000000c","0x000000000000000000000000000000000000000000000000000000000000000d","0x000000000000000000000000000000000000000000000000000000000000000e","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000010","0x000000000000000000000000000000b52cb57cd80884ea9af7333e1a47573603","0x00000000000000000000000000000000002b5ee82ebaa79f642bbb8d2fa10904","0x00000000000000000000000000000052499b97c8c9988d11dce5481e3cd056b5","0x000000000000000000000000000000000016170e75737d01ad3e10042ccd6489","0x0000000000000000000000000000003a18044c3dbe774fd82125d96dad79ef0d","0x000000000000000000000000000000000029b77ac64d86cf1b70d2e0e29b763c","0x00000000000000000000000000000003c46154d370373bed4379d55cbc575e9e","0x00000000000000000000000000000000000b6c8d0ae113b14be2ca1c5eb6293b","0x000000000000000000000000000000c6ab3f860c3d8f13b0fae501536075ea4b","0x00000000000000000000000000000000002950cfbc78c6d23e887c8cf89f90ea","0x000000000000000000000000000000ac1dcd2b1074747b02998d16abeece9d6b","0x00000000000000000000000000000000000b4e885406b49801ae92cd7cad82a7","0x000000000000000000000000000000d18905f4ffa727ab2638fae9574e54f897","0x0000000000000000000000000000000000124b5ff88c88121bc5c5b0ba01e954","0x00000000000000000000000000000061c1156d81f3cf7b7c5c572c63b1f487fd","0x00000000000000000000000000000000002305f3d858674c1b3a1394f87cbbf4","0x000000000000000000000000000000e43e78f6b6cc2b432e137f3ec44526c2aa","0x000000000000000000000000000000000016eee7cec4b663d68fdff48dcfc4b4","0x0000000000000000000000000000006e770b01fceeb4f266a2a66811db661d38","0x00000000000000000000000000000000001660fed6cdd711215597619ca4a4a6","0x000000000000000000000000000000309ca73399d0895a6755d711e51dc35ca6","0x0000000000000000000000000000000000023c6bef50134061fbbe7a862ea9c1","0x00000000000000000000000000000029620d4effa4823eecad5b482f0596d178","0x000000000000000000000000000000000016ac3e74c20c3f9622f03b5d1452c7","0x000000000000000000000000000000bf169908886f063223f0d0b81e81ca470f","0x0000000000000000000000000000000000236dec29141b3a6f562798c88c0a9b","0x0000000000000000000000000000000e13a4d0a7f68e8a8093516cd071925767","0x00000000000000000000000000000000002e024e71d9dc06c5817870b67ca5fb","0x000000000000000000000000000000bf79617e88459bf5d499779cb83bbf9663","0x00000000000000000000000000000000001d435b23e1228bbb9242a18015363a","0x000000000000000000000000000000e980d20c3800cbc46d200f1242fc0f541c","0x0000000000000000000000000000000000108bb7e0f105b748d57032e96a4720","0x000000000000000000000000000000bfe5aa1d4616f7619428f1d19bb792b271","0x00000000000000000000000000000000000cf9ff164ed6f3468a142ddf2e8945","0x000000000000000000000000000000ac032fa4469b47a06dab942dee58abd647","0x000000000000000000000000000000000018e95d4ef380b60d791d68fa211462","0x000000000000000000000000000000b4a4c87b4c9e0226a0ed33037a92b08d7d","0x000000000000000000000000000000000014b43fa61bf31f572c96b33bd1693c","0x0000000000000000000000000000003e2d3893ac9fd9207e50180198c40b972a","0x00000000000000000000000000000000000ea47b71dc2d7c36e1439ba592d18f","0x000000000000000000000000000000fd11ab56b5cd280991b73de0a02cd70039","0x00000000000000000000000000000000001c784d4399e58ab06eafb4f1dc6396","0x000000000000000000000000000000bda838fca5e15bf8a6bb01be2857aed563","0x000000000000000000000000000000000025708d8b3059f50b9a311419aa847a","0x0000000000000000000000000000007b5da7da95da83d0f3d7091134a79dd96f","0x0000000000000000000000000000000000288480dc25ea3d3c7a55ac77ae1e5a","0x00000000000000000000000000000014814f6daada5d5c2c6f4afc6364e9145a","0x000000000000000000000000000000000023bcaed571c82f082d5913fa1c95d0","0x000000000000000000000000000000a0841ff0c2197d7d9ef488c80e260e3853","0x000000000000000000000000000000000029ed2d827a2aebcf029d5fbd20a168","0x000000000000000000000000000000fed658f44fb221728c89ba1645f52dea5a","0x00000000000000000000000000000000000c8981fd9758142985abf64edcd500","0x000000000000000000000000000000141a7d1608e3ca1e7f7478a4058dbf4adc","0x000000000000000000000000000000000025aad024807112ffd41443a7b5788e","0x000000000000000000000000000000b226594145cd3e3e952e344143aca3a61b","0x000000000000000000000000000000000008bcce07e1499b92a6123687cad4d1","0x000000000000000000000000000000cca54a0f328af7a14bd710d0f3f143951f","0x00000000000000000000000000000000001da8f2f91a7d7f0bea177e2681182e","0x00000000000000000000000000000042b7ba84f62ada4f2bffe35868cadc12d0","0x00000000000000000000000000000000000c6c2baaefc1c48f5577af7b502a0a","0x000000000000000000000000000000c8f24f7fe07b1b4ef3482fc5b73f6664da","0x000000000000000000000000000000000003fc8010084fa2ff6d17e11e585b46","0x00000000000000000000000000000081db5b0225f55c969cf2f2dfa594a94e4a","0x00000000000000000000000000000000002f352887fccf3b6415a9aa517f9efb","0x0000000000000000000000000000002dfd78ce6f955e204eee8d26650a040ed7","0x00000000000000000000000000000000000c93e8c2cf2cfd83a13fd58817ab84","0x0000000000000000000000000000006eff1317b5320a81e9dbc77102442e6dd6","0x0000000000000000000000000000000000248aef4083465c80b4cd40a4f260c9","0x000000000000000000000000000000f981a0820abb3926f839cf446777d65034","0x00000000000000000000000000000000001ee78b7c53409f4d2a13a75d7be547","0x000000000000000000000000000000075f06a8518a4a1b712afdc782e1d765a8","0x000000000000000000000000000000000009b57a7a8015bd0840358350588334","0x0000000000000000000000000000002d3ec839d80c423edfb967336bdb009e4e","0x000000000000000000000000000000000012d78ebc4ac36acd0201f2e6000805","0x000000000000000000000000000000f56344365e40b8d6f01186ec861697ea41","0x00000000000000000000000000000000002b0af3b984172e9fe1eb1a535a4ad4","0x000000000000000000000000000000207a0e9e878c6a451d84a0560cfa2b130c","0x000000000000000000000000000000000008e75c1e10486474e9ec5fc92fa93a","0x000000000000000000000000000000967da3b68de72c73b22c77eaae3b4a2f82","0x0000000000000000000000000000000000164dcdbd859f5fd2735d6c8968e94c","0x00000000000000000000000000000098afd956cf1b379a5fe5baa1bc5ae0a36c","0x000000000000000000000000000000000008944fb3284c1d45a0d44cee1e54ad","0x0000000000000000000000000000006ae02fe91a02477f1dff2a2535934b4ea2","0x0000000000000000000000000000000000021b57d4a890272cb8b66f1bc18028","0x000000000000000000000000000000c1f3217a11cef798afd1bd57cc3a4fde99","0x00000000000000000000000000000000000c6a8e0f3c640458292d4a8e16167d","0x000000000000000000000000000000db678b04102d198926ab7106181b18c648","0x000000000000000000000000000000000019fb5499e109ece0b19dabc2c87b04","0x000000000000000000000000000000363f0c994e91cecad25835338edee2294f","0x00000000000000000000000000000000002eea648c8732596b1314fe2a4d2f05","0x000000000000000000000000000000b2671d2ae51d31c1210433c3972bb64578","0x00000000000000000000000000000000000ab49886c2b94bd0bd3f6ed1dbbe2c"] +proof_b = ["0x0000000000000000000000000000000000000000000000042ab5d6d1986846cf","0x00000000000000000000000000000000000000000000000b75c020998797da78","0x0000000000000000000000000000000000000000000000005a107acb64952eca","0x000000000000000000000000000000000000000000000000000031e97a575e9d","0x00000000000000000000000000000000000000000000000b5666547acf8bd5a4","0x00000000000000000000000000000000000000000000000c410db10a01750aeb","0x00000000000000000000000000000000000000000000000d722669117f9758a4","0x000000000000000000000000000000000000000000000000000178cbf4206471","0x000000000000000000000000000000000000000000000000e91b8a11e7842c38","0x000000000000000000000000000000000000000000000007fd51009034b3357f","0x000000000000000000000000000000000000000000000009889939f81e9c7402","0x0000000000000000000000000000000000000000000000000000f94656a2ca48","0x000000000000000000000000000000000000000000000006fb128b46c1ddb67f","0x0000000000000000000000000000000000000000000000093fe27776f50224bd","0x000000000000000000000000000000000000000000000004a0c80c0da527a081","0x0000000000000000000000000000000000000000000000000001b52c2020d746","0x0000000000000000000000000000008099adc4f06eb3c34acf9dadfd2bc08251","0x0000000000000000000000000000000000267853d29d78d7d04342608ec39ace","0x0000000000000000000000000000002a574ea02cc61603e86ca3c45271dc125b","0x0000000000000000000000000000000000000030773f7b86fd1b65208199af25","0x000000000000000000000000000000475437bdaedc6fecf787d6c72ce56f8d02","0x000000000000000000000000000000000001521be79ab63224467af78c478749","0x0000000000000000000000000000007e547868d9b33b543457e8318795d38a7c","0x0000000000000000000000000000000000065ca7b45c3eae2b466d0ca15cb946","0x0000000000000000000000000000003e5ba1754eacf94b403098e2b5f2d21263","0x00000000000000000000000000000000002c7a7ad065bb496e0d26b7e71c9323","0x000000000000000000000000000000deaa1b7a4fa682da44553b4711d20c5a1a","0x0000000000000000000000000000000000212ac0280cd6238aa8743dfe8c7637","0x0000000000000000000000000000005f9319ad40432111e9d86ae991046b6f2e","0x00000000000000000000000000000000001cd1bcec744df591dcd66a1b527ae6","0x000000000000000000000000000000361842a8cdc3ef386c82f92b674562e5bc","0x00000000000000000000000000000000002a348177f720348a72aa0ab79c42fe","0x000000000000000000000000000000846ba973ef3969dbcaf8572df71fabdde4","0x000000000000000000000000000000000001cf9671b18d1d6e9f2e13a627add9","0x00000000000000000000000000000060ed3cbdec521cacd85e02a40b42084291","0x00000000000000000000000000000000001f2ce205037a6ddaa7f4278820e0a3","0x000000000000000000000000000000fc07d2d63e96384ab014349437c41fbe3b","0x000000000000000000000000000000000018c446ac7b70364bf063d454554149","0x00000000000000000000000000000077b9330cd96042225d005001bdea707c79","0x00000000000000000000000000000000001c0b4a982df907e24ecf694b1cba89","0x000000000000000000000000000000ba734f4d54bf9acc7df5dfe661fbd112fb","0x00000000000000000000000000000000002d7a8e2477a50b7eec66fe535a692f","0x0000000000000000000000000000000a37b159df5dd564e8b14fa1f52a4b7a7f","0x000000000000000000000000000000000006ea4b0a965fe00d59f6b02df045ab","0x00000000000000000000000000000039799e31989930bfb221ca0a67731dcdff","0x00000000000000000000000000000000001c904bb8d8ef520307b8deba5426f4","0x000000000000000000000000000000377f69610ed5ac8e7606467c5a006e7ae3","0x00000000000000000000000000000000001fbf52061e359d5abf3118821a433d","0x0000000000000000000000000000005412dc0b8fd9094f38e901e303b164558c","0x00000000000000000000000000000000002d60f948030d1bebd70fd9a4faa7ac","0x000000000000000000000000000000c68f5b9703031db0f84149d268184cfbff","0x00000000000000000000000000000000001d1f94a2a5f9e15f2852f368884877","0x000000000000000000000000000000a8b69dca29ec1d4d55ea9b10a81e20f408","0x00000000000000000000000000000000001f6c0f9f8c7196d24f3812801acbf0","0x0000000000000000000000000000001b92f83cbcf6ed55473d2c4fcfea9d3aab","0x0000000000000000000000000000000000120c6c6b95afc49f2872daac653e8d","0x0000000000000000000000000000001cc99b1305185b4c06578dcec414b0d76d","0x00000000000000000000000000000000002ef60725be98e63262bcf67d3d96c7","0x000000000000000000000000000000928beb48f07322fca418b5e1add86a9d0e","0x000000000000000000000000000000000005fcff0f76aa0231da6733081d6bc1","0x00477df6574f635f42ec0b29b2c212251a6fdeed2b9cf8e908d08b2d19f1eaa3","0x027b9675c69a40ce75dfd8a2378a9bb9b9c638148d196772e3baf6d8de323e16","0x06318131835ddd0308ffd7fdfd8a3efbe52638856ac6b8a5deb20958f51d40ef","0x2a715ed6f22e73d24bedf34e58ff5b80daef7986adc197b7b740637683ef6ba4","0x2108da5cef80bc454776be6b4113cf5026f7b5c375920f8baf15fe07556c46b5","0x23ca5f7fb8d657aeb9b875cf2371d26b26ac6adbcd9bdcb67a067c1d0affaa34","0x141018ec9cda07e7302059f382dbaa8ffe1915467e7d9485765da9bc0746abfd","0x0fa1bc78aea964c3d9133cb98817009f99c2041e1ef7adc3002160668e6ae9e8","0x0a30c58664091c298b0fde9802a46b181a9e368c65d32fb08ff439cfa053984c","0x0d690b6038c78654065984daf03b245f458d812cf6c9e643160a38c79540f7d8","0x2123fb5091d081c879d07bbdd269245e691ef896a344f6bd0b0abad1caea7d6b","0x1a7081a09ee64f83e977be77117eec0147fcd5b2fbb3e59a85d7a9f60df70467","0x0cd852f5a2694e93b7393996b3cf4ba80ab3fddcbef699b3021c87d36599afc0","0x222235c000b217ecc05a80fc823c983ef15349b1c546558652a08cd5c4d9f483","0x02f89a4e82ec54f4326c1e343be05505fb0346e407caedfade81825ba9d69b87","0x283956461f0d0744e8e2f6a0811b3d75b452fcfc7ea91344c65e3dfc79d0c20c","0x2e77a71f07964a0a0db053c02c269245189e3554637838a84ff82a8e655d1a5e","0x2d0e6ed64c639f69b304bc89bf0875f2e18edc077f771b5af08621fdc7e7f7b9","0x1c093d7ccb755d7893b97d7b494829b6d6aae6dd8de0865bb59afc9c066b8fff","0x11a9eda6e3cb6b660b4edd69e379b8828d6dd9859c44243868c8ca476da53409","0x27efbcc9034ee2cf156e8486e9a583ae95d75506bc4f76ca857a2f6fc7aed076","0x2491587b1bd3ce80e80a9e3e7aa71f409d2ddaf2831b8e7a50328bbf5cb8e26a","0x056df1f485054f08f4e9de0e709ed25831cf25a2aee46e387d670b1a2bd56e7b","0x035b121790a2ed4d93155dc121a186e8228624937b3c523761221114251bc961","0x1ec97cdbc58042e86661ce8e79c5b2120d57199920f89862a691cfa330f9226f","0x14d47ea7c72805cb9fad4dda2be39e619e320c22e90d8166bd6b168d23e19e6b","0x22b101f887868ae31a034feb00873984af15bdc09ce196be8f53b9ad6644bcff","0x165766c4f824ab049039505b298c5e1277922914bc513a2bac502ca3d4822a65","0x1e0295168b15cfc6091afe8006c4af9e30142c59aa2f27a3ef35467b7ac09da5","0x0000000000000000000000000000000148b7a2d3ef4cb24c2ecde298d94237ee","0x1cdde8042d58b55a686a40fa88e2cfe12c625969a7ef0ae19c4c0e1728175965","0x0a76949acf541e81627c7978cbafb3445dd072b402a9152412d6e8a6b712e726","0x058f2c383e4f7353c280d951e50e1f27aa760bbc66ff3fe8d4a870c60a1f038d","0x24751a92f67d948d47f428307a87b585d5004ab1b2fb1ee2d9d3936c57d6ee28","0x0d95c94014d07650d96f4248792ccc22139a53f8a56306a676b0edf9a6c3c647","0x22f27c2dea72f0b43e2f133301f0bba14825ceb3cb6c451d7b60c5e897ccba1a","0x1b94424198cbb9295a8370fe11b27dd14f45b8f2f48ddddec209a5bfedc2cdee","0x195af75393f4f23adf73556f15f14259b22790d143279a957dfd8c164c03d7db","0x12237424b04cd652456bbef5249e2b9076c31c880a2f5fb463365341de75fe3f","0x0daa86b82c3071c3def1f456b615f1dbecf29387e0e3151343923f942a1020a1","0x1885e72322a21a19eb7ffcd7bcf3f5f5c7f55fbce1b533c14ae7c993b5520e91","0x000000000000000000000000000000544c048e4d7d81da1dd2a423552aeabe83","0x0000000000000000000000000000000000059c4c9dec0fe3217e0a2bc146a91a","0x0000000000000000000000000000007fe210ecccb8fa659a976715bf7d54db1a","0x000000000000000000000000000000000002f51d5f82e0cc0cc866482e6a68af","0x00000000000000000000000000000024ba1031c4b07408663b0cf6865c2a0ff6","0x0000000000000000000000000000000000120e60353fc825d1f732cb0ca18627","0x000000000000000000000000000000c224ae34e221aa774c9016f1a8c77ed53c","0x00000000000000000000000000000000002fbe6b306186e59b6420191c1b267b"] \ No newline at end of file diff --git a/noir/noir-repo/test_programs/execution_success/double_verify_proof/src/main.nr b/noir/noir-repo/test_programs/execution_success/double_verify_proof/src/main.nr index d832ce0f049..25def097421 100644 --- a/noir/noir-repo/test_programs/execution_success/double_verify_proof/src/main.nr +++ b/noir/noir-repo/test_programs/execution_success/double_verify_proof/src/main.nr @@ -6,12 +6,12 @@ fn main( // This is the proof without public inputs attached. // // This means: the size of this does not change with the number of public inputs. - proof: [Field; 93], + proof: [Field; 109], public_inputs: pub [Field; 1], // This is currently not public. It is fine given that the vk is a part of the circuit definition. // I believe we want to eventually make it public too though. key_hash: Field, - proof_b: [Field; 93] + proof_b: [Field; 109] ) { std::verify_proof( verification_key.as_slice(), diff --git a/noir/noir-repo/test_programs/execution_success/double_verify_proof_recursive/Prover.toml b/noir/noir-repo/test_programs/execution_success/double_verify_proof_recursive/Prover.toml index dff48212e50..4629fced1f2 100644 --- a/noir/noir-repo/test_programs/execution_success/double_verify_proof_recursive/Prover.toml +++ b/noir/noir-repo/test_programs/execution_success/double_verify_proof_recursive/Prover.toml @@ -1,5 +1,5 @@ -key_hash = "0x096129b1c6e108252fc5c829c4cc9b7e8f0d1fd9f29c2532b563d6396645e08f" -proof = ["0x000000000000000000000000000000d62b795bec274279129a71195796825fcc","0x00000000000000000000000000000000000793ab763140f20a68a6bd2721fd74","0x00000000000000000000000000000053141d06d3307b36153f321511199e579c","0x00000000000000000000000000000000000a4b55d6c21f98a9c434911dcb5c67","0x0000000000000000000000000000005f9d324c0abd22cec92d99dbec438e9491","0x0000000000000000000000000000000000240dfafe1b53dc27147cbab14ea893","0x000000000000000000000000000000044a61d3aac32c6931247cf334a19d9611","0x000000000000000000000000000000000003f0f8cf4207bfa85c23ec9f8d0c88","0x00000000000000000000000000000002168a470e39ba2ac266f6b474de12045f","0x000000000000000000000000000000000025791e7d3feab542345c00ec5a30df","0x000000000000000000000000000000dcafd76d4c3640969c80e017b951ef6397","0x00000000000000000000000000000000001d27f75a1256771e88e0c86fc42dbc","0x0000000000000000000000000000007347ae7d2d9d7fc2b8f0baa014ee1fed9f","0x000000000000000000000000000000000018bd927f42bf7caf9555f56f09000d","0x000000000000000000000000000000041f765f83cbe5904c8f453f70a4531d10","0x00000000000000000000000000000000001858aabeeb5331a221419f4fed1c19","0x000000000000000000000000000000d254a54caaedf8287b9af951b2f2611121","0x000000000000000000000000000000000005ab493623c9563cf2e55ba5f18200","0x00000000000000000000000000000014f24cddc1a02440dc63637df8032c8074","0x000000000000000000000000000000000011950c16cef98471b1d78b935195a4","0x000000000000000000000000000000b0340b459e6bd5cc8f031c8654a502897f","0x00000000000000000000000000000000000e1cf3968dac4545a76a2ae58e512c","0x0000000000000000000000000000002adf7218aa06ca0d2c2e600dcc39193a2d","0x00000000000000000000000000000000001302e7e4b0f14749bd885ca25588b6","0x00000000000000000000000000000092009ce4056e79ab815d8cdfd4491138ae","0x000000000000000000000000000000000018af11e853c6cf2f0f6274b0da8133","0x000000000000000000000000000000dd3dc6f49232141718527b3a0e4b26e21d","0x00000000000000000000000000000000001a877853348a8b695c4f9a9aa4ce68","0x000000000000000000000000000000aecfc56ba07155450b368140d6324023b5","0x000000000000000000000000000000000029c11052798c57ece614617d33fcc2","0x000000000000000000000000000000eb106ffc816d16fb84e84b0b61157b2603","0x000000000000000000000000000000000026c3cac16206899a21cb5126841446","0x000000000000000000000000000000a782ed54805fe845068b362b58e2fa34ec","0x00000000000000000000000000000000000cf046a1bfcc666b7f28b572676073","0x000000000000000000000000000000b931c8dda60bb4aca4cc817f5540f1209f","0x000000000000000000000000000000000024ad50c3936fafc3d190e6a4874223","0x000000000000000000000000000000cce90cfbaf5671c8c8652db28a3a9566f7","0x000000000000000000000000000000000003574db9d0f84380c9635660f86354","0x0000000000000000000000000000003eb3e1dc31846a90f721e7a08c6d6dc4f7","0x000000000000000000000000000000000028999a700cd1abae1a288eebb9a91c","0x000000000000000000000000000000c1be4d385b11387e14eb9817050d772f78","0x000000000000000000000000000000000003c56b5bad8b4484c66ac921f1f102","0x000000000000000000000000000000ace245cabf0f00dc7fd253dd8af0377a14","0x0000000000000000000000000000000000107f1731fcf34b364c813599fa1df7","0x035b937d404932b542b706eb810ef4a7dca4566d4dde1ad6a8717f46167ead7e","0x17608cef3dc7960f41cb1295706df663727d45ee598a61e05e989d111449fb65","0x054712a950ad67da3aa860e49e6891f99b586b7f37caff94eb013fdb374b61ee","0x04b755083086c769b7f593e0e48d68dc54be808203351380ca5566a48149d8bb","0x17d7670b0915235f626fdc1d7e1134d2be906ef138d7843384b3ebc23b1d630f","0x064cf544ab5f4e3dab47960502cccc83321fb275068dfbdd3a2fcbc6dddcaa65","0x083338262712e2b66769ea40d9f412b18caa1bc81a51ff5a50b6c41f8c4b3d23","0x0cdd38958cab97defde00f4a5961b6fd676e29d9f2c352f6bb2c68b91f83f8af","0x02c8bdd005c2f43a0a8cbb2744916ce5c322dfa5b23367a829c12699f4036d32","0x25bac73c7e7b659fbea3135b7a0decf9db8dc3045bd2837dae337c64cc722546","0x19eb361aa419d37bce3d2e8b2b7692a02a9559e83d7f3d8fe9169970fbbc2cba","0x2494bd5106d00e05c7ea60e632e9fe03773b7f2c5b662aa37ec512a01f4a0775","0x18c52c2f2c6e7be1d7847c15e452a3a9c64316103d12e4b5b9a82fac4e940ee9","0x0e0342810456ef78f498c1bfa085a5f3cbc06db1f32fabd0ea9ad27dccac1680","0x024c13d6ef56af33ed7164ea8e47ddecc8a487b000d8b1b45edcd3895a503ba2","0x26e0d127f626bd39b55bc5d0c131dbf03fe006dc5c3edc57dda1e629799a4317","0x1b1140061bc52b15c4f5e100729a81968ee79dc03deb966a18850335a8e44a8b","0x1bb76f945199e71d531a89288912087a02dd0e83020e65d671485bf2e5e86e1a","0x29269900859c6d86e404185b415bf3b279cd100f38cfdb0077e8d6a299c4fd35","0x22b5e94bae2f6f0cdb424a3b12c4bf82cec3fb228e012c1974ed457827bbe012","0x18d3543a93249778e7a57936170dae85ffc47c2567f2d0076a32c0bb86fcf10a","0x03721dc2670206cde42a175fd56bcce32cf6cb8801450a8e8e4b3d4e07785973","0x2806db136dd214d3ac1478460855cae6a4324ab45cab35320d104fee26c260e8","0x1c3749f1937082afbbae9375b9be708cf339e1983e57ef4447f36cfa560c685c","0x1067b8cfb90ef08bcb48aea56b2716334241787c2004a95682d68a0685566fd0","0x0f41aee4416398f1d48ffc302403273cddef34a41f98507c53682041d82e51ff","0x10d854c9f0bfbdff7ca91a68f4978e9a79e7b14243d92f465f17bdf88d9f64f8","0x00000000000000000000000000000000018938b11099e0cdc05ddab84a153a97","0x0000000000000000000000000000000001d7dda1471f0dc3b3a3d3438c197982","0x00000000000000000000000000000000022682917da43ab9a6e9cbcece1db86d","0x2453913e6b0f36eab883ac4b0e0604d56aaeb9c55e641135173e63c342f1a660","0x05216c1b58dc43a49d01aaba3113b0e86be450fc17d28016e648e7162a1b67fb","0x152b34845a0222a2b41354c0d395a250d8363dc18748647d85acd89d6934ec56","0x1dfc6e971ce82b7dcda1f7f282713c6e22a8c79258a61209bda69719806da544","0x2968dd8b3af8e3953f1fbbd72f4c49b8270597bb27d4037adc157ac6083bee60","0x1b9425b88a4c7d39b3d75afe66917a9aa1d2055724392bc01fb918d84ff1410e","0x04ab571f236d8e750904dc307dd274003d9130f1a7110e4c1521cfb408877c73","0x2ad84f26fdc5831545272d02b806bb0e6dae44e71f73552c4eb9ff06030748c7","0x020e632b99d325db774b8630fb50b9a4e74d35b7f27d9fc02c65087ee747e42c","0x09a8c5a3171268cb61c02515c01c109889200ed13f415ae54df2078bbb887f92","0x1143281a9451abbb4c34c3fa84e7678c2af2e7ea8c05160a6f7f06988fc91af8","0x000000000000000000000000000000cbda736ca5cf6bc75413c2cc9e28ab0a68","0x00000000000000000000000000000000001ee78c9cc56aa5991062ae2e338587","0x000000000000000000000000000000bc9bfcdebb486f4cb314e681d2cc5f8df6","0x00000000000000000000000000000000000ad538431d04771bca7f633cb659ff","0x000000000000000000000000000000d45b317afcefa466a59bba9e171f1af70c","0x0000000000000000000000000000000000133c50180ea17932e4881124e7a7c6","0x000000000000000000000000000000fc9ed37f543775849f3e84eaa06f77f992","0x00000000000000000000000000000000001372873c9c051d1baff99248b8f70e"] +key_hash = "0x1e56457faaacf850871707c2e93dd4e1b4edd5fec60c042d5b314ea30b9ef2b2" +proof = ["0x0000000000000000000000000000000000000000000000042ab5d6d1986846cf","0x00000000000000000000000000000000000000000000000b75c020998797da78","0x0000000000000000000000000000000000000000000000005a107acb64952eca","0x000000000000000000000000000000000000000000000000000031e97a575e9d","0x00000000000000000000000000000000000000000000000b5666547acf8bd5a4","0x00000000000000000000000000000000000000000000000c410db10a01750aeb","0x00000000000000000000000000000000000000000000000d722669117f9758a4","0x000000000000000000000000000000000000000000000000000178cbf4206471","0x000000000000000000000000000000000000000000000000e91b8a11e7842c38","0x000000000000000000000000000000000000000000000007fd51009034b3357f","0x000000000000000000000000000000000000000000000009889939f81e9c7402","0x0000000000000000000000000000000000000000000000000000f94656a2ca48","0x000000000000000000000000000000000000000000000006fb128b46c1ddb67f","0x0000000000000000000000000000000000000000000000093fe27776f50224bd","0x000000000000000000000000000000000000000000000004a0c80c0da527a081","0x0000000000000000000000000000000000000000000000000001b52c2020d746","0x0000000000000000000000000000008099adc4f06eb3c34acf9dadfd2bc08251","0x0000000000000000000000000000000000267853d29d78d7d04342608ec39ace","0x0000000000000000000000000000002a574ea02cc61603e86ca3c45271dc125b","0x0000000000000000000000000000000000000030773f7b86fd1b65208199af25","0x000000000000000000000000000000475437bdaedc6fecf787d6c72ce56f8d02","0x000000000000000000000000000000000001521be79ab63224467af78c478749","0x0000000000000000000000000000007e547868d9b33b543457e8318795d38a7c","0x0000000000000000000000000000000000065ca7b45c3eae2b466d0ca15cb946","0x0000000000000000000000000000003e5ba1754eacf94b403098e2b5f2d21263","0x00000000000000000000000000000000002c7a7ad065bb496e0d26b7e71c9323","0x000000000000000000000000000000deaa1b7a4fa682da44553b4711d20c5a1a","0x0000000000000000000000000000000000212ac0280cd6238aa8743dfe8c7637","0x0000000000000000000000000000005f9319ad40432111e9d86ae991046b6f2e","0x00000000000000000000000000000000001cd1bcec744df591dcd66a1b527ae6","0x000000000000000000000000000000361842a8cdc3ef386c82f92b674562e5bc","0x00000000000000000000000000000000002a348177f720348a72aa0ab79c42fe","0x000000000000000000000000000000846ba973ef3969dbcaf8572df71fabdde4","0x000000000000000000000000000000000001cf9671b18d1d6e9f2e13a627add9","0x00000000000000000000000000000060ed3cbdec521cacd85e02a40b42084291","0x00000000000000000000000000000000001f2ce205037a6ddaa7f4278820e0a3","0x000000000000000000000000000000fc07d2d63e96384ab014349437c41fbe3b","0x000000000000000000000000000000000018c446ac7b70364bf063d454554149","0x00000000000000000000000000000077b9330cd96042225d005001bdea707c79","0x00000000000000000000000000000000001c0b4a982df907e24ecf694b1cba89","0x000000000000000000000000000000ba734f4d54bf9acc7df5dfe661fbd112fb","0x00000000000000000000000000000000002d7a8e2477a50b7eec66fe535a692f","0x0000000000000000000000000000000a37b159df5dd564e8b14fa1f52a4b7a7f","0x000000000000000000000000000000000006ea4b0a965fe00d59f6b02df045ab","0x00000000000000000000000000000039799e31989930bfb221ca0a67731dcdff","0x00000000000000000000000000000000001c904bb8d8ef520307b8deba5426f4","0x000000000000000000000000000000377f69610ed5ac8e7606467c5a006e7ae3","0x00000000000000000000000000000000001fbf52061e359d5abf3118821a433d","0x0000000000000000000000000000005412dc0b8fd9094f38e901e303b164558c","0x00000000000000000000000000000000002d60f948030d1bebd70fd9a4faa7ac","0x000000000000000000000000000000c68f5b9703031db0f84149d268184cfbff","0x00000000000000000000000000000000001d1f94a2a5f9e15f2852f368884877","0x000000000000000000000000000000a8b69dca29ec1d4d55ea9b10a81e20f408","0x00000000000000000000000000000000001f6c0f9f8c7196d24f3812801acbf0","0x0000000000000000000000000000001b92f83cbcf6ed55473d2c4fcfea9d3aab","0x0000000000000000000000000000000000120c6c6b95afc49f2872daac653e8d","0x0000000000000000000000000000001cc99b1305185b4c06578dcec414b0d76d","0x00000000000000000000000000000000002ef60725be98e63262bcf67d3d96c7","0x000000000000000000000000000000928beb48f07322fca418b5e1add86a9d0e","0x000000000000000000000000000000000005fcff0f76aa0231da6733081d6bc1","0x00477df6574f635f42ec0b29b2c212251a6fdeed2b9cf8e908d08b2d19f1eaa3","0x027b9675c69a40ce75dfd8a2378a9bb9b9c638148d196772e3baf6d8de323e16","0x06318131835ddd0308ffd7fdfd8a3efbe52638856ac6b8a5deb20958f51d40ef","0x2a715ed6f22e73d24bedf34e58ff5b80daef7986adc197b7b740637683ef6ba4","0x2108da5cef80bc454776be6b4113cf5026f7b5c375920f8baf15fe07556c46b5","0x23ca5f7fb8d657aeb9b875cf2371d26b26ac6adbcd9bdcb67a067c1d0affaa34","0x141018ec9cda07e7302059f382dbaa8ffe1915467e7d9485765da9bc0746abfd","0x0fa1bc78aea964c3d9133cb98817009f99c2041e1ef7adc3002160668e6ae9e8","0x0a30c58664091c298b0fde9802a46b181a9e368c65d32fb08ff439cfa053984c","0x0d690b6038c78654065984daf03b245f458d812cf6c9e643160a38c79540f7d8","0x2123fb5091d081c879d07bbdd269245e691ef896a344f6bd0b0abad1caea7d6b","0x1a7081a09ee64f83e977be77117eec0147fcd5b2fbb3e59a85d7a9f60df70467","0x0cd852f5a2694e93b7393996b3cf4ba80ab3fddcbef699b3021c87d36599afc0","0x222235c000b217ecc05a80fc823c983ef15349b1c546558652a08cd5c4d9f483","0x02f89a4e82ec54f4326c1e343be05505fb0346e407caedfade81825ba9d69b87","0x283956461f0d0744e8e2f6a0811b3d75b452fcfc7ea91344c65e3dfc79d0c20c","0x2e77a71f07964a0a0db053c02c269245189e3554637838a84ff82a8e655d1a5e","0x2d0e6ed64c639f69b304bc89bf0875f2e18edc077f771b5af08621fdc7e7f7b9","0x1c093d7ccb755d7893b97d7b494829b6d6aae6dd8de0865bb59afc9c066b8fff","0x11a9eda6e3cb6b660b4edd69e379b8828d6dd9859c44243868c8ca476da53409","0x27efbcc9034ee2cf156e8486e9a583ae95d75506bc4f76ca857a2f6fc7aed076","0x2491587b1bd3ce80e80a9e3e7aa71f409d2ddaf2831b8e7a50328bbf5cb8e26a","0x056df1f485054f08f4e9de0e709ed25831cf25a2aee46e387d670b1a2bd56e7b","0x035b121790a2ed4d93155dc121a186e8228624937b3c523761221114251bc961","0x1ec97cdbc58042e86661ce8e79c5b2120d57199920f89862a691cfa330f9226f","0x14d47ea7c72805cb9fad4dda2be39e619e320c22e90d8166bd6b168d23e19e6b","0x22b101f887868ae31a034feb00873984af15bdc09ce196be8f53b9ad6644bcff","0x165766c4f824ab049039505b298c5e1277922914bc513a2bac502ca3d4822a65","0x1e0295168b15cfc6091afe8006c4af9e30142c59aa2f27a3ef35467b7ac09da5","0x0000000000000000000000000000000148b7a2d3ef4cb24c2ecde298d94237ee","0x1cdde8042d58b55a686a40fa88e2cfe12c625969a7ef0ae19c4c0e1728175965","0x0a76949acf541e81627c7978cbafb3445dd072b402a9152412d6e8a6b712e726","0x058f2c383e4f7353c280d951e50e1f27aa760bbc66ff3fe8d4a870c60a1f038d","0x24751a92f67d948d47f428307a87b585d5004ab1b2fb1ee2d9d3936c57d6ee28","0x0d95c94014d07650d96f4248792ccc22139a53f8a56306a676b0edf9a6c3c647","0x22f27c2dea72f0b43e2f133301f0bba14825ceb3cb6c451d7b60c5e897ccba1a","0x1b94424198cbb9295a8370fe11b27dd14f45b8f2f48ddddec209a5bfedc2cdee","0x195af75393f4f23adf73556f15f14259b22790d143279a957dfd8c164c03d7db","0x12237424b04cd652456bbef5249e2b9076c31c880a2f5fb463365341de75fe3f","0x0daa86b82c3071c3def1f456b615f1dbecf29387e0e3151343923f942a1020a1","0x1885e72322a21a19eb7ffcd7bcf3f5f5c7f55fbce1b533c14ae7c993b5520e91","0x000000000000000000000000000000544c048e4d7d81da1dd2a423552aeabe83","0x0000000000000000000000000000000000059c4c9dec0fe3217e0a2bc146a91a","0x0000000000000000000000000000007fe210ecccb8fa659a976715bf7d54db1a","0x000000000000000000000000000000000002f51d5f82e0cc0cc866482e6a68af","0x00000000000000000000000000000024ba1031c4b07408663b0cf6865c2a0ff6","0x0000000000000000000000000000000000120e60353fc825d1f732cb0ca18627","0x000000000000000000000000000000c224ae34e221aa774c9016f1a8c77ed53c","0x00000000000000000000000000000000002fbe6b306186e59b6420191c1b267b"] public_inputs = ["0x0000000000000000000000000000000000000000000000000000000000000003"] -verification_key = ["0x2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e80","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000000000092139c61bae1a44f0fc7689507414be688","0x00000000000000000000000000000000000160ce4e279582f91bde4f03f5e9a2","0x0000000000000000000000000000005dc2d37f658c3b2d60f24740eb13b65d79","0x000000000000000000000000000000000007e3e8a5d98a1177ec85bf88f163a5","0x000000000000000000000000000000dc3035fbd7ff16412a8fd7da587a935298","0x000000000000000000000000000000000023d08e2817ac16990004ed11d8fc66","0x000000000000000000000000000000356a5ad59c646c746a8d09f5d154e47c4f","0x00000000000000000000000000000000000708529196af3c8e16ffa580c26182","0x0000000000000000000000000000002ddfe70eb7a1280596e8e4a804f118a6dd","0x000000000000000000000000000000000013757e15a0905f298303784a161b21","0x000000000000000000000000000000a23a729df796935c7824e3a26be794829b","0x000000000000000000000000000000000005775b6c146c4a59856e869fe5a70e","0x000000000000000000000000000000eef0c9e088fd2d45aa40311082d1f2809b","0x00000000000000000000000000000000001d539ccbfc556d0ad59307a218de65","0x000000000000000000000000000000a2c848beceb6ab7806fd3b88037b8410fc","0x0000000000000000000000000000000000177004deeb1f9d401fd7b1af1a5ac8","0x0000000000000000000000000000002508eb63672a733f20de1a97644be4f540","0x00000000000000000000000000000000000d82d51f2f75d806285fd248c819b8","0x000000000000000000000000000000d002f9100cbba8a29f13b11513c53c59d0","0x000000000000000000000000000000000006cd3b0e3460533b9e5ea2cdc0fcbb","0x000000000000000000000000000000f45ea38a93b2f810c5633ddb54927c1c96","0x000000000000000000000000000000000021791de65f9a28ec7024b1a87ab4f3","0x000000000000000000000000000000926511a0439502c86885a8c6f0327aa7ad","0x000000000000000000000000000000000029fa14a969c5d81ed3abbbfb11220a","0x000000000000000000000000000000b84c3258e8206f560e5b5b18cbeafef87e","0x00000000000000000000000000000000002a910445cd8fc895e5d235cd8ea185","0x000000000000000000000000000000887e67f15e84bcb8507a5064a363f6043b","0x000000000000000000000000000000000014dc6643d801c3ef27c2066b6e2bb4","0x000000000000000000000000000000e38e900b42c314ba803088e8fbf125203f","0x000000000000000000000000000000000020690fd4869db418306046b38161dc","0x0000000000000000000000000000001e2fa856bf7951b8292b1e88185993629c","0x0000000000000000000000000000000000048a85e0bbac7c60ad3d78f601f63c","0x0000000000000000000000000000006f457719495073d3666d77a625aeab0c51","0x00000000000000000000000000000000002623ad892dc62b1fa7d0a650f0d470","0x000000000000000000000000000000dbfcc8a467e021c03b13f74a9f79c3a10c","0x0000000000000000000000000000000000295f6f10976c37bd9c6f96bb7187d5","0x000000000000000000000000000000c13ef9a937cc12420fb38d9ab8e848e85e","0x000000000000000000000000000000000003560a3b334e887532f605c9cb7628","0x0000000000000000000000000000009bcebf08a4599cdda0fb96312d4dc0c7a9","0x000000000000000000000000000000000015adc8bb1e01c835f48959d1237bd6","0x00000000000000000000000000000047762ab839e4ff63c77605a9f383da37c2","0x000000000000000000000000000000000016a8c3c53d89660cf271522cd301fb","0x000000000000000000000000000000f0c8539a0b5f94420a513f9c305b932bfe","0x00000000000000000000000000000000002957ba01d9de5638f808f88a692533","0x000000000000000000000000000000ab17c6189d67d3bf5dd2f3885de0151b6f","0x0000000000000000000000000000000000060d8aa43fdc434d1942263f364d95","0x0000000000000000000000000000005d292333b3adb497f00b4bc32d45229060","0x00000000000000000000000000000000001a1018a66221883639f2898a66f345","0x00000000000000000000000000000006555a806b1993291deba0dc44e2abf431","0x00000000000000000000000000000000000cacff7099a9d5e35a21f4a00b2dc3","0x000000000000000000000000000000f50c11ba95d349c36d143eefd12e494950","0x00000000000000000000000000000000001022e8c5f02d639bc9dd8bc4407f99","0x000000000000000000000000000000c76828795098eda73d50b4b585c60afc60","0x00000000000000000000000000000000002bf09c0ec7011e93888962f2406630","0x00000000000000000000000000000049e5c83a8978d832fb8e144548e3ca1adb","0x00000000000000000000000000000000000e0ec242c2e160a984f61ca5adf5f5","0x0000000000000000000000000000009c5d6e08a6605ab4513748ac0fa017dd1c","0x00000000000000000000000000000000001f54baa07558e5fb055bd9ba49c067","0x0000000000000000000000000000001e1ee7ee29bbb5e4b080c6091c1433ce62","0x000000000000000000000000000000000024aec62a9d9763499267dc98c33428","0x0000000000000000000000000000001a96755946ff16f0d6632365f0eb0ab4d4","0x000000000000000000000000000000000028cf3e22bcd53782ebc3e0490e27e5","0x00000000000000000000000000000043148d7d8c9ba43f2133fab4201435a364","0x0000000000000000000000000000000000234ce541f1f5117dd404cfaf01a229","0x000000000000000000000000000000a7fb95ffb461d9514a1070e2d2403982ef","0x00000000000000000000000000000000003016955028b6390f446c3fd0c5b424","0x00000000000000000000000000000008863c3b7cd7cddc20ba79ce915051c56e","0x000000000000000000000000000000000013ef666111b0be56a235983d397d2a","0x000000000000000000000000000000e3993f465fc9f56e93ac769e597b752c1c","0x0000000000000000000000000000000000217f7c4235161e9a3c16c45b6ca499","0x0000000000000000000000000000008ffa4cd96bc67b0b7df5678271e1114075","0x0000000000000000000000000000000000256467bfcb63d9fdcb5dde397757ad","0x00000000000000000000000000000054e5eb270bb64bde6e6ececadfd8c3236c","0x00000000000000000000000000000000000e52d1bd75812c33c6f3d79ee4b94c","0x000000000000000000000000000000484a2c641dce55bc2dd64ef0cd790a7fea","0x00000000000000000000000000000000000ff417d256be43e73c8b1aa85bdda3","0x0000000000000000000000000000000b72e7b7713ab5da44e0f864182e748a23","0x00000000000000000000000000000000001a221055f1625ad833a44705f5f74e","0x00000000000000000000000000000067a99a34e9b81a17ad001db02e29bcb82a","0x000000000000000000000000000000000018a6c02e398389827568fa960e86e2","0x000000000000000000000000000000bb29f26f9890d6cc6401f4921d5884edca","0x00000000000000000000000000000000000868357b28039385c5a5058b6d358e","0x00000000000000000000000000000036fb6e229dde8edf7ec858b12d7e8be485","0x00000000000000000000000000000000001060afe929554ca473103f5e68193c","0x00000000000000000000000000000015226e07e207744c0857074dcab883af4a","0x00000000000000000000000000000000000b1c02619282755533457230b19b4a","0x0000000000000000000000000000001f2a0277e4807e6e1cbabca21dde5eb5e1","0x00000000000000000000000000000000000d928deafed363659688ed4ccdef52","0x000000000000000000000000000000363f0c994e91cecad25835338edee2294f","0x00000000000000000000000000000000002eea648c8732596b1314fe2a4d2f05","0x000000000000000000000000000000b2671d2ae51d31c1210433c3972bb64578","0x00000000000000000000000000000000000ab49886c2b94bd0bd3f6ed1dbbe2c"] -proof_b = ["0x000000000000000000000000000000f05c69448ca29bdf52076f9b073bb30fed","0x000000000000000000000000000000000028c86bb3e27b4aaaaef126f7df5349","0x00000000000000000000000000000026ae031fc93594375dfc7f3bbe027f97d5","0x000000000000000000000000000000000000dd12c7290fe7f775796a233b8590","0x000000000000000000000000000000c1ee6631704de424d010c5c4ac8293ac49","0x00000000000000000000000000000000002f41818c9aa83f5c8d9bdd128015b9","0x000000000000000000000000000000b50a5801482f7e3a5de8ab3cce0f10b0d3","0x000000000000000000000000000000000022a0bc69c293dbf293b25bc9eef7f8","0x0000000000000000000000000000003b02abf1967ef394154dc15d763135e903","0x00000000000000000000000000000000000d8a2ee46acc6d1ed8d517b56d47c8","0x00000000000000000000000000000039bf0d1b3d8cf9de898f101c626e978d78","0x0000000000000000000000000000000000008faa7df2451a24d291a9b584f1a5","0x000000000000000000000000000000c1dae329ed7adf63a2d89a5f16fb98b6d8","0x00000000000000000000000000000000001ff0bc16fc0bd4aa2d6255690453c2","0x000000000000000000000000000000d12d7589f853a9b472613efa56689beaf1","0x00000000000000000000000000000000002d6fbc798f4403751df6aeee8bedd3","0x0000000000000000000000000000007c1fa069cb17194fecf88db9dd54a4ee36","0x0000000000000000000000000000000000268e026f9814822a42b2d59eec5d24","0x000000000000000000000000000000c3fb56beab774218cd63498fc050a5fd9b","0x00000000000000000000000000000000000071c014d7b5063f005a0bc2ee1af4","0x000000000000000000000000000000ae12b25371c6af42bbe0a85cddd2eaebc7","0x000000000000000000000000000000000026d270e1ffc9c7c344c694dfadda83","0x00000000000000000000000000000080280858c6be461716921caa3c26f3f6f3","0x000000000000000000000000000000000001dcdd3f39e27d0ce6aa5d14dff4c1","0x000000000000000000000000000000080e1d2c913c834ebcf7e0600c076c08fd","0x00000000000000000000000000000000002df3d142217694e65fb7c355d62764","0x000000000000000000000000000000e5e336f3f59d77e500f49771bfbeb12e83","0x000000000000000000000000000000000028fffe08bdc4c0690643d2e1a1275f","0x000000000000000000000000000000db5618b32afc13e18f21b39f3fbede9d11","0x00000000000000000000000000000000001d244818370d43fb7e8bc67e03787b","0x0000000000000000000000000000006bcc1fd3f9f78449ad1df1bc11bc379edd","0x000000000000000000000000000000000009ac9cbb285edbf5b3a973f3f5f1cb","0x000000000000000000000000000000fd885905b6c0fc95bb4dd0b11f6797d4b3","0x000000000000000000000000000000000021f07995cdd835145e19c38127c562","0x000000000000000000000000000000bbbf2b975c2c97ae4b45c4a52059e53ee3","0x000000000000000000000000000000000024158163788841cf4590bbc1e89a90","0x0000000000000000000000000000009aca93d2b1386ea412d4b36ea5bb9894a8","0x00000000000000000000000000000000002532d1d210e8ed4c2f5c00cbaaa475","0x000000000000000000000000000000634a88caa1d77cb6b5fe77cac31458fc31","0x00000000000000000000000000000000000bdf18bae92fce7cfddab5520cac6e","0x000000000000000000000000000000622e9626255170ccec77602c755aa193e1","0x000000000000000000000000000000000001d4edba370e04436a988bad05dada","0x000000000000000000000000000000b52934323a0aec8f803cdaafee2ab7bfb2","0x0000000000000000000000000000000000155312af5e0e25ca9fd61aef9e58ed","0x06270b517855f6f6a608e432883d1d1030a12a1e33022dc142b7728691421da2","0x2af7c794d7b720b25eb1df0afd8c8e3c15b6e518194c3caea7966a5f8210ff04","0x073fe573aeb27d81a5713be93e1365390dcbc3c8e7439ff1d36a84cc014f5642","0x11351b961147431e54535248b58b35cf5cddb9b13827899167617d7a96794d64","0x297c9421c9c3db286770787c35b86bc41583386491b4ae55e5fa81aefa21efc4","0x0f4eeca3ff4a3495f859898937688652d33f9b4dd3e003e12adf15278e0997c3","0x133e3d8b82721d40d919f2326810ba6f07eff3f7d20d86b2bde692a811522019","0x2c502f53c9698b73bb8c8f9b9cf2d705d16a64a7040348b4b39c637a2064316c","0x0cbc1971e1c566cde9d9125c91cdc88e817db182692f836c1a5170a6246eaf73","0x12c47793e7db706c637cd4b4d96d227f569850176b852b1fe8ad522ddb38ef0e","0x0cd7b300e9309a135285be1aeb02b152f97931a7357ab6d609a2cb1970aab877","0x2a7789dfe286c9d0a7592f1c9316e730cb14c9d843aefc4764d76e7f8571c96a","0x248ac54ce3dbf37796621882a4ac76046df5ab680da487fd85cce76b1ae392d3","0x149d1d07cebe320f77b03533e34912545cedeae62bd9778d37724728762b5710","0x00fe29daebdaed61309790e70e2dcefa3f3af4c6c965ce424b8dbcf09b8e4b49","0x2b75b3bace61b731d7f0c003a144b62b0a4fbe9f0d14ca89b0652b70210014b3","0x2588ef27cfb6e0d8c6f9a969b2da44fead30a02ed70a563fd15aa45bb671de1c","0x2b74d7674b55642697b4a1e226eddb0e4918b2d57aa5b99093dc46cadcdea000","0x244c626845d3a5040f08f01e9611f968ad675ca857789149b13a0cfa83a2e064","0x2cb8d02f90cae33fd7bcfb80af4aff067c4f5fc4b3f9228d5b8f768bc8f6c971","0x1372f3d1f04e0c39a50e823d5da03d70bebe19a1b8e28f8c2ff601cc0bfc0095","0x19af6601d2613426a50b7c35d60562a5f2f2634e6af56dac13459632e15570ee","0x13c2a16ed3b65dcd9414659be79af17995d344de34eaf962343b0f1e76c73a57","0x0dd5dcdbd50b8774831d4f01f930804d38b4266dfee085185530880a0c3903c0","0x07e91848d660b11b722638680ac60f20db9507fdc8d610ce762600f5a1aacd29","0x1f9c2a94d10c0a7fb60292cfc46fd3d2501181bea0ffe1f5f2501d474be3a785","0x14edb9c5bd389eae08a5ea2a7a1662894e1e878c142084d966a625bef68cf7c3","0x00000000000000000000000000000000cecd01810814d175f0a533f0067618c4","0x00000000000000000000000000000000f82935013ce5c82720c63e533af41db8","0x000000000000000000000000000000012185688171b6bed850e748b66f7222ac","0x2dd7f5ff2150155c2ac86ebe28d9ecbca2eea812b0021ab2bceae111cfea8325","0x04ea6c2daf2b9e827d2213c3d03953410dcf1ed67ba34a3c00e772be92606a8b","0x163f2bd18dcde52f99b9867c944780fd718d1612927053b139b280fc55013d1b","0x05e388fd160ccac30a8f7b18a4bd042f705e92b5937e8c0e9478e2ff623907c6","0x00ba3f6f527d6ed3ff17a63b1d5be3c42bdfae88fdf63311fc7b871157939309","0x16187d9daa8c2e5a1a9ab15be7ca6a8feebfb31bea76f9a3ca69381881c70561","0x0f64522e4904edb7377b14a7b9dad848829167324ef5c016346b3ad8251191ee","0x273bbe6000a4001dce369e5a36cc0b0ca3fd351665b688238aa8c556a6ca6b8e","0x022d2232efb2faa8307846c9a4c697aabad1b7f1336b35ad72fa8922975b49d9","0x0d82d478bff3955c4b0a34ef94427ca5f9da23147ad953c89f2e428277ec2825","0x18d886be90343010659c231583be61a138e28e37c24771e3cb61fbe2587d0671","0x000000000000000000000000000000196ba6a58dbeb7c34cb1d6287e23d434de","0x00000000000000000000000000000000001df8ae8a1589590f8863c1fefd8dfd","0x000000000000000000000000000000f30e11b2c5fbefa166cbb9f58c5f8e1a4c","0x000000000000000000000000000000000026420ade7666bc0ab1cf1fd9d0c534","0x0000000000000000000000000000000feb5b7d8260d25a1ee1ce76ff461673fc","0x00000000000000000000000000000000002bd2ac6223a80671b777bf5dca70a4","0x000000000000000000000000000000690f757006d2fa1ddb0114c9f268783537","0x000000000000000000000000000000000023ad36feadd91e50118f32e97a0204"] \ No newline at end of file +verification_key = ["0x1418144d5b080fcac24cdb7649bdadf246a6cb2426e324bedb94fb05118f023a","0x0000000000000000000000000000000000000000000000000000000000000040","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000040","0x0000000000000000000000000000000000000000000000000000000000000011","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000003","0x0000000000000000000000000000000000000000000000000000000000000004","0x0000000000000000000000000000000000000000000000000000000000000005","0x0000000000000000000000000000000000000000000000000000000000000006","0x0000000000000000000000000000000000000000000000000000000000000007","0x0000000000000000000000000000000000000000000000000000000000000008","0x0000000000000000000000000000000000000000000000000000000000000009","0x000000000000000000000000000000000000000000000000000000000000000a","0x000000000000000000000000000000000000000000000000000000000000000b","0x000000000000000000000000000000000000000000000000000000000000000c","0x000000000000000000000000000000000000000000000000000000000000000d","0x000000000000000000000000000000000000000000000000000000000000000e","0x000000000000000000000000000000000000000000000000000000000000000f","0x0000000000000000000000000000000000000000000000000000000000000010","0x000000000000000000000000000000b52cb57cd80884ea9af7333e1a47573603","0x00000000000000000000000000000000002b5ee82ebaa79f642bbb8d2fa10904","0x00000000000000000000000000000052499b97c8c9988d11dce5481e3cd056b5","0x000000000000000000000000000000000016170e75737d01ad3e10042ccd6489","0x0000000000000000000000000000003a18044c3dbe774fd82125d96dad79ef0d","0x000000000000000000000000000000000029b77ac64d86cf1b70d2e0e29b763c","0x00000000000000000000000000000003c46154d370373bed4379d55cbc575e9e","0x00000000000000000000000000000000000b6c8d0ae113b14be2ca1c5eb6293b","0x000000000000000000000000000000c6ab3f860c3d8f13b0fae501536075ea4b","0x00000000000000000000000000000000002950cfbc78c6d23e887c8cf89f90ea","0x000000000000000000000000000000ac1dcd2b1074747b02998d16abeece9d6b","0x00000000000000000000000000000000000b4e885406b49801ae92cd7cad82a7","0x000000000000000000000000000000d18905f4ffa727ab2638fae9574e54f897","0x0000000000000000000000000000000000124b5ff88c88121bc5c5b0ba01e954","0x00000000000000000000000000000061c1156d81f3cf7b7c5c572c63b1f487fd","0x00000000000000000000000000000000002305f3d858674c1b3a1394f87cbbf4","0x000000000000000000000000000000e43e78f6b6cc2b432e137f3ec44526c2aa","0x000000000000000000000000000000000016eee7cec4b663d68fdff48dcfc4b4","0x0000000000000000000000000000006e770b01fceeb4f266a2a66811db661d38","0x00000000000000000000000000000000001660fed6cdd711215597619ca4a4a6","0x000000000000000000000000000000309ca73399d0895a6755d711e51dc35ca6","0x0000000000000000000000000000000000023c6bef50134061fbbe7a862ea9c1","0x00000000000000000000000000000029620d4effa4823eecad5b482f0596d178","0x000000000000000000000000000000000016ac3e74c20c3f9622f03b5d1452c7","0x000000000000000000000000000000bf169908886f063223f0d0b81e81ca470f","0x0000000000000000000000000000000000236dec29141b3a6f562798c88c0a9b","0x0000000000000000000000000000000e13a4d0a7f68e8a8093516cd071925767","0x00000000000000000000000000000000002e024e71d9dc06c5817870b67ca5fb","0x000000000000000000000000000000bf79617e88459bf5d499779cb83bbf9663","0x00000000000000000000000000000000001d435b23e1228bbb9242a18015363a","0x000000000000000000000000000000e980d20c3800cbc46d200f1242fc0f541c","0x0000000000000000000000000000000000108bb7e0f105b748d57032e96a4720","0x000000000000000000000000000000bfe5aa1d4616f7619428f1d19bb792b271","0x00000000000000000000000000000000000cf9ff164ed6f3468a142ddf2e8945","0x000000000000000000000000000000ac032fa4469b47a06dab942dee58abd647","0x000000000000000000000000000000000018e95d4ef380b60d791d68fa211462","0x000000000000000000000000000000b4a4c87b4c9e0226a0ed33037a92b08d7d","0x000000000000000000000000000000000014b43fa61bf31f572c96b33bd1693c","0x0000000000000000000000000000003e2d3893ac9fd9207e50180198c40b972a","0x00000000000000000000000000000000000ea47b71dc2d7c36e1439ba592d18f","0x000000000000000000000000000000fd11ab56b5cd280991b73de0a02cd70039","0x00000000000000000000000000000000001c784d4399e58ab06eafb4f1dc6396","0x000000000000000000000000000000bda838fca5e15bf8a6bb01be2857aed563","0x000000000000000000000000000000000025708d8b3059f50b9a311419aa847a","0x0000000000000000000000000000007b5da7da95da83d0f3d7091134a79dd96f","0x0000000000000000000000000000000000288480dc25ea3d3c7a55ac77ae1e5a","0x00000000000000000000000000000014814f6daada5d5c2c6f4afc6364e9145a","0x000000000000000000000000000000000023bcaed571c82f082d5913fa1c95d0","0x000000000000000000000000000000a0841ff0c2197d7d9ef488c80e260e3853","0x000000000000000000000000000000000029ed2d827a2aebcf029d5fbd20a168","0x000000000000000000000000000000fed658f44fb221728c89ba1645f52dea5a","0x00000000000000000000000000000000000c8981fd9758142985abf64edcd500","0x000000000000000000000000000000141a7d1608e3ca1e7f7478a4058dbf4adc","0x000000000000000000000000000000000025aad024807112ffd41443a7b5788e","0x000000000000000000000000000000b226594145cd3e3e952e344143aca3a61b","0x000000000000000000000000000000000008bcce07e1499b92a6123687cad4d1","0x000000000000000000000000000000cca54a0f328af7a14bd710d0f3f143951f","0x00000000000000000000000000000000001da8f2f91a7d7f0bea177e2681182e","0x00000000000000000000000000000042b7ba84f62ada4f2bffe35868cadc12d0","0x00000000000000000000000000000000000c6c2baaefc1c48f5577af7b502a0a","0x000000000000000000000000000000c8f24f7fe07b1b4ef3482fc5b73f6664da","0x000000000000000000000000000000000003fc8010084fa2ff6d17e11e585b46","0x00000000000000000000000000000081db5b0225f55c969cf2f2dfa594a94e4a","0x00000000000000000000000000000000002f352887fccf3b6415a9aa517f9efb","0x0000000000000000000000000000002dfd78ce6f955e204eee8d26650a040ed7","0x00000000000000000000000000000000000c93e8c2cf2cfd83a13fd58817ab84","0x0000000000000000000000000000006eff1317b5320a81e9dbc77102442e6dd6","0x0000000000000000000000000000000000248aef4083465c80b4cd40a4f260c9","0x000000000000000000000000000000f981a0820abb3926f839cf446777d65034","0x00000000000000000000000000000000001ee78b7c53409f4d2a13a75d7be547","0x000000000000000000000000000000075f06a8518a4a1b712afdc782e1d765a8","0x000000000000000000000000000000000009b57a7a8015bd0840358350588334","0x0000000000000000000000000000002d3ec839d80c423edfb967336bdb009e4e","0x000000000000000000000000000000000012d78ebc4ac36acd0201f2e6000805","0x000000000000000000000000000000f56344365e40b8d6f01186ec861697ea41","0x00000000000000000000000000000000002b0af3b984172e9fe1eb1a535a4ad4","0x000000000000000000000000000000207a0e9e878c6a451d84a0560cfa2b130c","0x000000000000000000000000000000000008e75c1e10486474e9ec5fc92fa93a","0x000000000000000000000000000000967da3b68de72c73b22c77eaae3b4a2f82","0x0000000000000000000000000000000000164dcdbd859f5fd2735d6c8968e94c","0x00000000000000000000000000000098afd956cf1b379a5fe5baa1bc5ae0a36c","0x000000000000000000000000000000000008944fb3284c1d45a0d44cee1e54ad","0x0000000000000000000000000000006ae02fe91a02477f1dff2a2535934b4ea2","0x0000000000000000000000000000000000021b57d4a890272cb8b66f1bc18028","0x000000000000000000000000000000c1f3217a11cef798afd1bd57cc3a4fde99","0x00000000000000000000000000000000000c6a8e0f3c640458292d4a8e16167d","0x000000000000000000000000000000db678b04102d198926ab7106181b18c648","0x000000000000000000000000000000000019fb5499e109ece0b19dabc2c87b04","0x000000000000000000000000000000363f0c994e91cecad25835338edee2294f","0x00000000000000000000000000000000002eea648c8732596b1314fe2a4d2f05","0x000000000000000000000000000000b2671d2ae51d31c1210433c3972bb64578","0x00000000000000000000000000000000000ab49886c2b94bd0bd3f6ed1dbbe2c"] +proof_b = ["0x0000000000000000000000000000000000000000000000042ab5d6d1986846cf","0x00000000000000000000000000000000000000000000000b75c020998797da78","0x0000000000000000000000000000000000000000000000005a107acb64952eca","0x000000000000000000000000000000000000000000000000000031e97a575e9d","0x00000000000000000000000000000000000000000000000b5666547acf8bd5a4","0x00000000000000000000000000000000000000000000000c410db10a01750aeb","0x00000000000000000000000000000000000000000000000d722669117f9758a4","0x000000000000000000000000000000000000000000000000000178cbf4206471","0x000000000000000000000000000000000000000000000000e91b8a11e7842c38","0x000000000000000000000000000000000000000000000007fd51009034b3357f","0x000000000000000000000000000000000000000000000009889939f81e9c7402","0x0000000000000000000000000000000000000000000000000000f94656a2ca48","0x000000000000000000000000000000000000000000000006fb128b46c1ddb67f","0x0000000000000000000000000000000000000000000000093fe27776f50224bd","0x000000000000000000000000000000000000000000000004a0c80c0da527a081","0x0000000000000000000000000000000000000000000000000001b52c2020d746","0x0000000000000000000000000000008099adc4f06eb3c34acf9dadfd2bc08251","0x0000000000000000000000000000000000267853d29d78d7d04342608ec39ace","0x0000000000000000000000000000002a574ea02cc61603e86ca3c45271dc125b","0x0000000000000000000000000000000000000030773f7b86fd1b65208199af25","0x000000000000000000000000000000475437bdaedc6fecf787d6c72ce56f8d02","0x000000000000000000000000000000000001521be79ab63224467af78c478749","0x0000000000000000000000000000007e547868d9b33b543457e8318795d38a7c","0x0000000000000000000000000000000000065ca7b45c3eae2b466d0ca15cb946","0x0000000000000000000000000000003e5ba1754eacf94b403098e2b5f2d21263","0x00000000000000000000000000000000002c7a7ad065bb496e0d26b7e71c9323","0x000000000000000000000000000000deaa1b7a4fa682da44553b4711d20c5a1a","0x0000000000000000000000000000000000212ac0280cd6238aa8743dfe8c7637","0x0000000000000000000000000000005f9319ad40432111e9d86ae991046b6f2e","0x00000000000000000000000000000000001cd1bcec744df591dcd66a1b527ae6","0x000000000000000000000000000000361842a8cdc3ef386c82f92b674562e5bc","0x00000000000000000000000000000000002a348177f720348a72aa0ab79c42fe","0x000000000000000000000000000000846ba973ef3969dbcaf8572df71fabdde4","0x000000000000000000000000000000000001cf9671b18d1d6e9f2e13a627add9","0x00000000000000000000000000000060ed3cbdec521cacd85e02a40b42084291","0x00000000000000000000000000000000001f2ce205037a6ddaa7f4278820e0a3","0x000000000000000000000000000000fc07d2d63e96384ab014349437c41fbe3b","0x000000000000000000000000000000000018c446ac7b70364bf063d454554149","0x00000000000000000000000000000077b9330cd96042225d005001bdea707c79","0x00000000000000000000000000000000001c0b4a982df907e24ecf694b1cba89","0x000000000000000000000000000000ba734f4d54bf9acc7df5dfe661fbd112fb","0x00000000000000000000000000000000002d7a8e2477a50b7eec66fe535a692f","0x0000000000000000000000000000000a37b159df5dd564e8b14fa1f52a4b7a7f","0x000000000000000000000000000000000006ea4b0a965fe00d59f6b02df045ab","0x00000000000000000000000000000039799e31989930bfb221ca0a67731dcdff","0x00000000000000000000000000000000001c904bb8d8ef520307b8deba5426f4","0x000000000000000000000000000000377f69610ed5ac8e7606467c5a006e7ae3","0x00000000000000000000000000000000001fbf52061e359d5abf3118821a433d","0x0000000000000000000000000000005412dc0b8fd9094f38e901e303b164558c","0x00000000000000000000000000000000002d60f948030d1bebd70fd9a4faa7ac","0x000000000000000000000000000000c68f5b9703031db0f84149d268184cfbff","0x00000000000000000000000000000000001d1f94a2a5f9e15f2852f368884877","0x000000000000000000000000000000a8b69dca29ec1d4d55ea9b10a81e20f408","0x00000000000000000000000000000000001f6c0f9f8c7196d24f3812801acbf0","0x0000000000000000000000000000001b92f83cbcf6ed55473d2c4fcfea9d3aab","0x0000000000000000000000000000000000120c6c6b95afc49f2872daac653e8d","0x0000000000000000000000000000001cc99b1305185b4c06578dcec414b0d76d","0x00000000000000000000000000000000002ef60725be98e63262bcf67d3d96c7","0x000000000000000000000000000000928beb48f07322fca418b5e1add86a9d0e","0x000000000000000000000000000000000005fcff0f76aa0231da6733081d6bc1","0x00477df6574f635f42ec0b29b2c212251a6fdeed2b9cf8e908d08b2d19f1eaa3","0x027b9675c69a40ce75dfd8a2378a9bb9b9c638148d196772e3baf6d8de323e16","0x06318131835ddd0308ffd7fdfd8a3efbe52638856ac6b8a5deb20958f51d40ef","0x2a715ed6f22e73d24bedf34e58ff5b80daef7986adc197b7b740637683ef6ba4","0x2108da5cef80bc454776be6b4113cf5026f7b5c375920f8baf15fe07556c46b5","0x23ca5f7fb8d657aeb9b875cf2371d26b26ac6adbcd9bdcb67a067c1d0affaa34","0x141018ec9cda07e7302059f382dbaa8ffe1915467e7d9485765da9bc0746abfd","0x0fa1bc78aea964c3d9133cb98817009f99c2041e1ef7adc3002160668e6ae9e8","0x0a30c58664091c298b0fde9802a46b181a9e368c65d32fb08ff439cfa053984c","0x0d690b6038c78654065984daf03b245f458d812cf6c9e643160a38c79540f7d8","0x2123fb5091d081c879d07bbdd269245e691ef896a344f6bd0b0abad1caea7d6b","0x1a7081a09ee64f83e977be77117eec0147fcd5b2fbb3e59a85d7a9f60df70467","0x0cd852f5a2694e93b7393996b3cf4ba80ab3fddcbef699b3021c87d36599afc0","0x222235c000b217ecc05a80fc823c983ef15349b1c546558652a08cd5c4d9f483","0x02f89a4e82ec54f4326c1e343be05505fb0346e407caedfade81825ba9d69b87","0x283956461f0d0744e8e2f6a0811b3d75b452fcfc7ea91344c65e3dfc79d0c20c","0x2e77a71f07964a0a0db053c02c269245189e3554637838a84ff82a8e655d1a5e","0x2d0e6ed64c639f69b304bc89bf0875f2e18edc077f771b5af08621fdc7e7f7b9","0x1c093d7ccb755d7893b97d7b494829b6d6aae6dd8de0865bb59afc9c066b8fff","0x11a9eda6e3cb6b660b4edd69e379b8828d6dd9859c44243868c8ca476da53409","0x27efbcc9034ee2cf156e8486e9a583ae95d75506bc4f76ca857a2f6fc7aed076","0x2491587b1bd3ce80e80a9e3e7aa71f409d2ddaf2831b8e7a50328bbf5cb8e26a","0x056df1f485054f08f4e9de0e709ed25831cf25a2aee46e387d670b1a2bd56e7b","0x035b121790a2ed4d93155dc121a186e8228624937b3c523761221114251bc961","0x1ec97cdbc58042e86661ce8e79c5b2120d57199920f89862a691cfa330f9226f","0x14d47ea7c72805cb9fad4dda2be39e619e320c22e90d8166bd6b168d23e19e6b","0x22b101f887868ae31a034feb00873984af15bdc09ce196be8f53b9ad6644bcff","0x165766c4f824ab049039505b298c5e1277922914bc513a2bac502ca3d4822a65","0x1e0295168b15cfc6091afe8006c4af9e30142c59aa2f27a3ef35467b7ac09da5","0x0000000000000000000000000000000148b7a2d3ef4cb24c2ecde298d94237ee","0x1cdde8042d58b55a686a40fa88e2cfe12c625969a7ef0ae19c4c0e1728175965","0x0a76949acf541e81627c7978cbafb3445dd072b402a9152412d6e8a6b712e726","0x058f2c383e4f7353c280d951e50e1f27aa760bbc66ff3fe8d4a870c60a1f038d","0x24751a92f67d948d47f428307a87b585d5004ab1b2fb1ee2d9d3936c57d6ee28","0x0d95c94014d07650d96f4248792ccc22139a53f8a56306a676b0edf9a6c3c647","0x22f27c2dea72f0b43e2f133301f0bba14825ceb3cb6c451d7b60c5e897ccba1a","0x1b94424198cbb9295a8370fe11b27dd14f45b8f2f48ddddec209a5bfedc2cdee","0x195af75393f4f23adf73556f15f14259b22790d143279a957dfd8c164c03d7db","0x12237424b04cd652456bbef5249e2b9076c31c880a2f5fb463365341de75fe3f","0x0daa86b82c3071c3def1f456b615f1dbecf29387e0e3151343923f942a1020a1","0x1885e72322a21a19eb7ffcd7bcf3f5f5c7f55fbce1b533c14ae7c993b5520e91","0x000000000000000000000000000000544c048e4d7d81da1dd2a423552aeabe83","0x0000000000000000000000000000000000059c4c9dec0fe3217e0a2bc146a91a","0x0000000000000000000000000000007fe210ecccb8fa659a976715bf7d54db1a","0x000000000000000000000000000000000002f51d5f82e0cc0cc866482e6a68af","0x00000000000000000000000000000024ba1031c4b07408663b0cf6865c2a0ff6","0x0000000000000000000000000000000000120e60353fc825d1f732cb0ca18627","0x000000000000000000000000000000c224ae34e221aa774c9016f1a8c77ed53c","0x00000000000000000000000000000000002fbe6b306186e59b6420191c1b267b"] \ No newline at end of file diff --git a/noir/noir-repo/test_programs/execution_success/double_verify_proof_recursive/src/main.nr b/noir/noir-repo/test_programs/execution_success/double_verify_proof_recursive/src/main.nr index 86b4971c3a6..5a51a5b8447 100644 --- a/noir/noir-repo/test_programs/execution_success/double_verify_proof_recursive/src/main.nr +++ b/noir/noir-repo/test_programs/execution_success/double_verify_proof_recursive/src/main.nr @@ -7,12 +7,12 @@ fn main( // This is the proof without public inputs attached. // // This means: the size of this does not change with the number of public inputs. - proof: [Field; 93], + proof: [Field; 109], public_inputs: pub [Field; 1], // This is currently not public. It is fine given that the vk is a part of the circuit definition. // I believe we want to eventually make it public too though. key_hash: Field, - proof_b: [Field; 93] + proof_b: [Field; 109] ) { std::verify_proof( verification_key.as_slice(), From 7747ddeb330a0bd2ca41298d5e4d68a6cfa679ca Mon Sep 17 00:00:00 2001 From: lucasxia01 Date: Wed, 15 May 2024 21:40:34 +0000 Subject: [PATCH 7/9] removing double_verify_proof test that is now over memory limit --- barretenberg/acir_tests/Dockerfile.bb.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/barretenberg/acir_tests/Dockerfile.bb.js b/barretenberg/acir_tests/Dockerfile.bb.js index ebafd7da88c..1e6dfdee738 100644 --- a/barretenberg/acir_tests/Dockerfile.bb.js +++ b/barretenberg/acir_tests/Dockerfile.bb.js @@ -14,7 +14,7 @@ RUN cd headless-test && yarn && npx playwright install && npx playwright install COPY . . ENV VERBOSE=1 # Run double_verify_proof through bb.js on node to check 512k support. -RUN BIN=../ts/dest/node/main.js FLOW=prove_then_verify ./run_acir_tests.sh double_verify_proof +# RUN BIN=../ts/dest/node/main.js FLOW=prove_then_verify ./run_acir_tests.sh double_verify_proof # Run a single arbitrary test not involving recursion through bb.js for UltraHonk RUN BIN=../ts/dest/node/main.js FLOW=prove_then_verify_ultra_honk ./run_acir_tests.sh nested_array_dynamic # Run a single arbitrary test not involving recursion through bb.js for Plonk From bda9b4d735ca19e2e514ded145e2f43519121b04 Mon Sep 17 00:00:00 2001 From: lucasxia01 Date: Thu, 16 May 2024 16:57:55 +0000 Subject: [PATCH 8/9] initial cleanup --- barretenberg/cpp/src/barretenberg/bb/main.cpp | 2 +- .../dsl/acir_format/acir_format.cpp | 73 ++++++------------- .../dsl/acir_format/recursion_constraint.cpp | 2 - .../plonk/proof_system/verifier/verifier.cpp | 2 +- .../plonk_recursion/verifier/verifier.hpp | 34 +-------- 5 files changed, 26 insertions(+), 87 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/bb/main.cpp b/barretenberg/cpp/src/barretenberg/bb/main.cpp index 56a91b20e1d..9b1df668943 100644 --- a/barretenberg/cpp/src/barretenberg/bb/main.cpp +++ b/barretenberg/cpp/src/barretenberg/bb/main.cpp @@ -128,8 +128,8 @@ bool proveAndVerify(const std::string& bytecodePath, const std::string& witnessP auto witness = get_witness(witnessPath); acir_proofs::AcirComposer acir_composer{ 0, verbose }; - // init_bn254_crs(acir_composer.get_dyadic_circuit_size()); acir_composer.create_circuit(constraint_system, witness); + init_bn254_crs(acir_composer.get_dyadic_circuit_size()); Timer pk_timer; 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 1548b19e5ca..337aebae74b 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp @@ -153,41 +153,29 @@ void build_constraints(Builder& builder, AcirFormat const& constraint_system, bo // attached to the proof as public inputs. As this is the only object that can prepended to the proof if the // proof is above the expected size (with public inputs stripped) std::array nested_aggregation_object = {}; - // If the proof has public inputs attached to it, we should handle setting the nested aggregation object - if (constraint.proof.size() > proof_size_no_pub_inputs) { - info("constraint.proof.size(): ", constraint.proof.size()); - info("proof_size_no_pub_inputs: ", proof_size_no_pub_inputs); - // The public inputs attached to a proof should match the aggregation object in size - if (constraint.proof.size() - proof_size_no_pub_inputs != - RecursionConstraint::AGGREGATION_OBJECT_SIZE) { - auto error_string = format( - "Public inputs are always stripped from proofs unless we have a recursive proof.\n" - "Thus, public inputs attached to a proof must match the recursive aggregation object in size " - "which is ", - RecursionConstraint::AGGREGATION_OBJECT_SIZE); - info("constraint.proof.size(): ", constraint.proof.size()); - info("proof_size_no_pub_inputs: ", proof_size_no_pub_inputs); - throw_or_abort(error_string); - } - for (size_t i = 0; i < RecursionConstraint::AGGREGATION_OBJECT_SIZE; ++i) { - // Set the nested aggregation object indices to the current size of the public inputs - // This way we know that the nested aggregation object indices will always be the last - // indices of the public inputs - nested_aggregation_object[i] = static_cast(constraint.public_inputs.size()); - // Attach the nested aggregation object to the end of the public inputs to fill in - // the slot where the nested aggregation object index will point into - // info("nested_aggregation_object[", i, "]: ", nested_aggregation_object[i]); - // info("constraint.proof[", i, "]: ", constraint.proof[i]); - constraint.public_inputs.emplace_back(constraint.proof[i]); - } - // Remove the aggregation object so that they can be handled as normal public inputs - // in they way taht the recursion constraint expects - constraint.proof.erase(constraint.proof.begin(), - constraint.proof.begin() + - static_cast(RecursionConstraint::AGGREGATION_OBJECT_SIZE)); - } else { - throw_or_abort("proof does not contain aggregation object!"); + // The public inputs attached to a proof should match the aggregation object in size + if (constraint.proof.size() - proof_size_no_pub_inputs != RecursionConstraint::AGGREGATION_OBJECT_SIZE) { + auto error_string = format( + "Public inputs are always stripped from proofs unless we have a recursive proof.\n" + "Thus, public inputs attached to a proof must match the recursive aggregation object in size " + "which is ", + RecursionConstraint::AGGREGATION_OBJECT_SIZE); + throw_or_abort(error_string); } + for (size_t i = 0; i < RecursionConstraint::AGGREGATION_OBJECT_SIZE; ++i) { + // Set the nested aggregation object indices to the current size of the public inputs + // This way we know that the nested aggregation object indices will always be the last + // indices of the public inputs + nested_aggregation_object[i] = static_cast(constraint.public_inputs.size()); + // Attach the nested aggregation object to the end of the public inputs to fill in + // the slot where the nested aggregation object index will point into + constraint.public_inputs.emplace_back(constraint.proof[i]); + } + // Remove the aggregation object so that they can be handled as normal public inputs + // in they way taht the recursion constraint expects + constraint.proof.erase(constraint.proof.begin(), + constraint.proof.begin() + + static_cast(RecursionConstraint::AGGREGATION_OBJECT_SIZE)); current_aggregation_object = create_recursion_constraints(builder, constraint, current_aggregation_object, @@ -211,12 +199,6 @@ void build_constraints(Builder& builder, AcirFormat const& constraint_system, bo current_aggregation_object.end()); builder.set_recursive_proof(proof_output_witness_indices); } else if (builder.is_recursive_circuit) { - info("g1 infinity: ", bb::g1::affine_point_at_infinity); - // const auto zero = bb::fr::zero(); - // const auto group_zero = bb::g1::affine_one * zero; - // info("group_zero: ", group_zero); - info("fq_ct::NUM_LAST_LIMB_BITS: ", fq_ct::NUM_LAST_LIMB_BITS); - info("bb::stdlib::field_conversion::TOTAL_BITS: ", bb::stdlib::field_conversion::TOTAL_BITS); fq x0("0x031e97a575e9d05a107acb64952ecab75c020998797da7842ab5d6d1986846cf"); fq x1("0x0f94656a2ca489889939f81e9c74027fd51009034b3357f0e91b8a11e7842c38"); std::array xs = { x0, x1 }; @@ -226,7 +208,6 @@ void build_constraints(Builder& builder, AcirFormat const& constraint_system, bo std::array ys = { y0, y1 }; for (size_t i = 0; i < RecursionConstraint::AGGREGATION_OBJECT_SIZE / 8; ++i) { const auto group_element = g1::element(xs[i], ys[i], 1); - info("is group_element infinity: ", group_element.is_point_at_infinity()); // const auto x = bb::field_conversion::convert_to_bn254_frs(const T &val); const uint256_t x = group_element.x; @@ -248,16 +229,6 @@ void build_constraints(Builder& builder, AcirFormat const& constraint_system, bo const bb::fr y_4 = y.slice(stdlib::NUM_LIMB_BITS_IN_FIELD_SIMULATION * 3, bb::stdlib::field_conversion::TOTAL_BITS); - info("x_1: ", x_1); - info("x_2: ", x_2); - info("x_3: ", x_3); - info("x_4: ", x_4); - - info("y_1: ", y_1); - info("y_2: ", y_2); - info("y_3: ", y_3); - info("y_4: ", y_4); - uint32_t idx = builder.add_variable(x_1); builder.set_public_input(idx); current_aggregation_object[i * 8] = idx; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.cpp index 8dfde6d4eb9..a87a88a5b60 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.cpp @@ -42,7 +42,6 @@ std::array create_recurs nested_aggregation_indices_all_zero &= (idx == 0); } const bool inner_proof_contains_recursive_proof = !nested_aggregation_indices_all_zero; - info("inner_proof_contains_recursive_proof: ", inner_proof_contains_recursive_proof); // If we do not have a witness, we must ensure that our dummy witness will not trigger // on-curve errors and inverting-zero errors { @@ -133,7 +132,6 @@ std::array create_recurs // Prepend the public inputs to the proof fields because this is how the // core barretenberg library processes proofs (with the public inputs first and not separated) proof_fields.reserve(input.proof.size() + input.public_inputs.size()); - info("input.public_inputs.size(): ", input.public_inputs.size()); for (const auto& idx : input.public_inputs) { auto field = field_ct::from_witness_index(&builder, idx); proof_fields.emplace_back(field); diff --git a/barretenberg/cpp/src/barretenberg/plonk/proof_system/verifier/verifier.cpp b/barretenberg/cpp/src/barretenberg/plonk/proof_system/verifier/verifier.cpp index 973c6a48136..db39862b02e 100644 --- a/barretenberg/cpp/src/barretenberg/plonk/proof_system/verifier/verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/plonk/proof_system/verifier/verifier.cpp @@ -184,7 +184,7 @@ template bool VerifierBase::verify P[0] = bb::scalar_multiplication::pippenger(&scalars[0], &elements[0], num_elements, state); P[1] = -(g1::element(PI_Z_OMEGA) * separator_challenge + PI_Z); - info("contains recursive proof: ", key->contains_recursive_proof); + if (key->contains_recursive_proof) { ASSERT(key->recursive_proof_public_input_indices.size() == 16); const auto& inputs = transcript.get_field_element_vector("public_inputs"); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp b/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp index 65c4d966595..37b0b363961 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/plonk_recursion/verifier/verifier.hpp @@ -342,11 +342,6 @@ aggregation_state verify_proof_(typename Curve::Builder* context, const fr_ct l2 = public_inputs[idx2]; const fr_ct l3 = public_inputs[idx3]; - info("l0: ", l0.get_value()); - info("l1: ", l1.get_value()); - info("l2: ", l2.get_value()); - info("l3: ", l3.get_value()); - l0.create_range_constraint(fq_ct::NUM_LIMB_BITS, "l0"); l1.create_range_constraint(fq_ct::NUM_LIMB_BITS, "l1"); l2.create_range_constraint(fq_ct::NUM_LIMB_BITS, "l2"); @@ -356,53 +351,28 @@ aggregation_state verify_proof_(typename Curve::Builder* context, fr_ct recursion_separator_challenge = transcript.get_challenge_field_element("separator", 2); - info("x0: "); const auto x0 = recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[0], key->recursive_proof_public_input_indices[1], key->recursive_proof_public_input_indices[2], key->recursive_proof_public_input_indices[3]); - info("y0: "); const auto y0 = recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[4], key->recursive_proof_public_input_indices[5], key->recursive_proof_public_input_indices[6], key->recursive_proof_public_input_indices[7]); - info("x1: "); - const auto x1 = recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[8], key->recursive_proof_public_input_indices[9], key->recursive_proof_public_input_indices[10], key->recursive_proof_public_input_indices[11]); - info("y1: "); const auto y1 = recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[12], key->recursive_proof_public_input_indices[13], key->recursive_proof_public_input_indices[14], key->recursive_proof_public_input_indices[15]); - info(x0, y0, x1, y1); - auto g1_0 = g1_ct(x0, y0); - info("is g1_0 infinity: ", g1_0.get_value().is_point_at_infinity()); - info("g1_0: ", g1_0.get_value()); - opening_elements.push_back(g1_0); + opening_elements.push_back(g1_ct(x0, y0)); opening_scalars.push_back(recursion_separator_challenge); - auto g1_1 = g1_ct(x1, y1); - info("g1_1: ", g1_1.get_value()); - rhs_elements.push_back(-g1_1); + rhs_elements.push_back(-g1_ct(x1, y1)); rhs_scalars.push_back(recursion_separator_challenge); - - // Need to move init_bn254_crs() above the create_circuit call to make sure we don't error here - // g1::element P[2] = { g1_0.get_value(), g1_1.get_value() }; - // g1::element::batch_normalize(P, 2); - // // just run the native pairing check here - // g1::affine_element P_affine[2]{ - // { P[0].x, P[0].y }, - // { P[1].x, P[1].y }, - // }; - // key->reference_string = srs::get_bn254_crs_factory()->get_verifier_crs(); - // info("before pairing", key->reference_string); - // bb::fq12 result = bb::pairing::reduced_ate_pairing_batch_precomputed( - // P_affine, key->reference_string->get_precomputed_g2_lines(), 2); - // info("result of pairing: ", (result == bb::fq12::one())); } auto opening_result = g1_ct::template bn254_endo_batch_mul_with_generator( From 85529b942673375518ccec8b627dffe8bb3385d2 Mon Sep 17 00:00:00 2001 From: lucasxia01 Date: Thu, 16 May 2024 16:58:11 +0000 Subject: [PATCH 9/9] less certain cleanup --- .../acir_format/recursion_constraint.test.cpp | 74 +------------------ 1 file changed, 4 insertions(+), 70 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp index 34539b16354..6435b875d64 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp @@ -130,20 +130,15 @@ Builder create_outer_circuit(std::vector& inner_circuits) std::vector recursion_constraints; size_t witness_offset = 0; - // std::array output_aggregation_object; std::vector> witness; - // size_t circuit_idx = 0; for (auto& inner_circuit : inner_circuits) { - // const bool has_input_aggregation_object = circuit_idx > 0; auto inner_composer = Composer(); auto inner_prover = inner_composer.create_prover(inner_circuit); auto inner_proof = inner_prover.construct_proof(); auto inner_verifier = inner_composer.create_verifier(inner_circuit); - const bool has_nested_proof = inner_verifier.key->contains_recursive_proof; - info("has_nested_proof: ", has_nested_proof); const size_t num_inner_public_inputs = inner_circuit.get_public_inputs().size(); transcript::StandardTranscript transcript(inner_proof.proof_data, Composer::create_manifest(num_inner_public_inputs), @@ -157,23 +152,11 @@ Builder create_outer_circuit(std::vector& inner_circuits) proof_witnesses.begin(), proof_witnesses.begin() + static_cast(num_inner_public_inputs - RecursionConstraint::AGGREGATION_OBJECT_SIZE)); - - // We want to make sure that we do not remove the nested aggregation object in the case of the proof we want to - // recursively verify contains a recursive proof itself. We are safe to keep all the inner public inputs - // as in these tests the outer circuits do not have public inputs themselves - // if (!has_nested_proof) { - // proof_witnesses.erase(proof_witnesses.begin(), - // proof_witnesses.begin() + - // static_cast(num_inner_public_inputs - - // RecursionConstraint::AGGREGATION_OBJECT_SIZE)); - // } - // info("num_inner_public_inputs: ", num_inner_public_inputs); + // Don't remove the nested aggregation object. Erase the other inner public inputs. proof_witnesses.erase( proof_witnesses.begin(), proof_witnesses.begin() + static_cast(num_inner_public_inputs - RecursionConstraint::AGGREGATION_OBJECT_SIZE)); - // proof_witnesses.erase(proof_witnesses.begin(), - // proof_witnesses.begin() + static_cast(num_inner_public_inputs)); std::vector key_witnesses = export_key_in_recursion_format(inner_verifier.key); bb::fr key_hash = key_witnesses.back(); @@ -181,11 +164,6 @@ Builder create_outer_circuit(std::vector& inner_circuits) const uint32_t key_hash_start_idx = static_cast(witness_offset); const uint32_t public_input_start_idx = key_hash_start_idx + 1; - // const uint32_t output_aggregation_object_start_idx = - // static_cast(public_input_start_idx + num_inner_public_inputs + (has_nested_proof ? 16 : 0)); - // const uint32_t output_aggregation_object_start_idx = - // static_cast(public_input_start_idx + num_inner_public_inputs); - // const uint32_t proof_indices_start_idx = output_aggregation_object_start_idx + 16; const uint32_t proof_indices_start_idx = static_cast( public_input_start_idx + num_inner_public_inputs - RecursionConstraint::AGGREGATION_OBJECT_SIZE); const uint32_t key_indices_start_idx = static_cast(proof_indices_start_idx + proof_witnesses.size()); @@ -194,43 +172,19 @@ Builder create_outer_circuit(std::vector& inner_circuits) std::vector key_indices; std::vector inner_public_inputs; - // std::array input_aggregation_object = {}; - // std::array nested_aggregation_object = {}; - // if (has_input_aggregation_object) { - // input_aggregation_object = output_aggregation_object; - // } - // for (size_t i = 0; i < 16; ++i) { - // output_aggregation_object[i] = (static_cast(i + output_aggregation_object_start_idx)); - // } - // if (has_nested_proof) { - // for (size_t i = 0; i < 16; ++i) { - // nested_aggregation_object[i] = inner_circuit.recursive_proof_public_input_indices[i]; - // } - // } - - // info("proof_witnesses.size(): ", proof_witnesses.size()); - // info("proof_indices_start_idx: ", proof_indices_start_idx); for (size_t i = 0; i < proof_witnesses.size(); ++i) { - // info("i: ", i); proof_indices.emplace_back(static_cast(i + proof_indices_start_idx)); } - // info("proof_indices.size(): ", proof_indices.size()); const size_t key_size = key_witnesses.size(); for (size_t i = 0; i < key_size; ++i) { key_indices.emplace_back(static_cast(i + key_indices_start_idx)); } - // In the case of a nested proof we keep the nested aggregation object attached to the proof, + // We keep the nested aggregation object attached to the proof, // thus we do not explicitly have to keep the public inputs while setting up the initial recursion constraint. // They will later be attached as public inputs when creating the circuit. - // if (!has_nested_proof) { - // for (size_t i = 0; i < num_inner_public_inputs; ++i) { - // inner_public_inputs.push_back(static_cast(i + public_input_start_idx)); - // } - // } for (size_t i = 0; i < num_inner_public_inputs - RecursionConstraint::AGGREGATION_OBJECT_SIZE; ++i) { inner_public_inputs.push_back(static_cast(i + public_input_start_idx)); } - // info("key_hash_start_idx: ", key_hash_start_idx); RecursionConstraint recursion_constraint{ .key = key_indices, .proof = proof_indices, @@ -238,20 +192,14 @@ Builder create_outer_circuit(std::vector& inner_circuits) .key_hash = key_hash_start_idx, }; recursion_constraints.push_back(recursion_constraint); - // info("made recursion_constraint"); - // info("witness.size(): ", witness.size()); - // info("proof_indices_start_idx: ", proof_indices_start_idx); - // info("witness_offset: ", witness_offset); witness.emplace_back(key_hash); for (size_t i = 0; i < proof_indices_start_idx - public_input_start_idx; ++i) { witness.emplace_back(0); } - info("proof_witnesses.size(): ", proof_witnesses.size()); for (const auto& wit : proof_witnesses) { witness.emplace_back(wit); } - // info("key_witnesses.size(): ", key_witnesses.size()); for (const auto& wit : key_witnesses) { witness.emplace_back(wit); } @@ -260,30 +208,16 @@ Builder create_outer_circuit(std::vector& inner_circuits) // TODO(maxim): check this is wrong I think // Note: this is confusing, but we minus one here due to the fact that the // witness values have not taken into account that zero is taken up by the zero_idx - // - // We once again have to check whether we have a nested proof, because if we do have one - // then we could get a segmentation fault as `inner_public_inputs` was never filled with values. - // if (!has_nested_proof) { - // for (size_t i = 0; i < num_inner_public_inputs; ++i) { - // witness[inner_public_inputs[i]] = inner_public_input_values[i]; - // } - // } for (size_t i = 0; i < num_inner_public_inputs - RecursionConstraint::AGGREGATION_OBJECT_SIZE; ++i) { - // info("inner_public_inputs[", i, "]: ", inner_public_inputs[i]); - // info("inner_public_input_values[", i, "]: ", inner_public_input_values[i]); - witness[inner_public_inputs[i]] = inner_public_input_values[i]; } witness_offset = key_indices_start_idx + key_witnesses.size(); - // circuit_idx++; } - info("witness.size(): ", witness.size()); AcirFormat constraint_system{ .varnum = static_cast(witness.size()), .recursive = false, .num_acir_opcodes = static_cast(recursion_constraints.size()), - .public_inputs = { 1, 2 }, - // .public_inputs = {}, + .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, @@ -319,7 +253,7 @@ TEST_F(AcirRecursionConstraint, TestBasicDoubleRecursionConstraints) std::vector layer_1_circuits; layer_1_circuits.push_back(create_inner_circuit()); - // layer_1_circuits.push_back(create_inner_circuit()); + layer_1_circuits.push_back(create_inner_circuit()); auto layer_2_circuit = create_outer_circuit(layer_1_circuits);