38 static constexpr size_t comm_frs = FrCodec::calc_num_fields<Commitment>();
39 static constexpr size_t eval_frs = FrCodec::calc_num_fields<FF>();
52 table_commitments[0] = table_commitments[0] *
FF(2);
63 const size_t idx = translator_proof.size() - tail_size;
66 translator_proof[idx] = translator_proof[idx] + translator_proof[idx];
76 static constexpr size_t evals_after_op = 3;
77 const size_t op_eval_idx = eccvm_proof.size() - evals_after_op;
80 eccvm_proof[op_eval_idx] +=
FF(1);
95 auto goblin_proof = goblin.
prove();
99 auto ultra_ops_table_columns = goblin.
op_queue->construct_ultra_ops_table_columns(
false);
102 table_commitments[idx] = pcs_commitment_key.
commit(ultra_ops_table_columns[idx]);
107 recursive_table_commitments[idx] = RecursiveCommitment::from_witness(outer_builder, table_commitments[idx]);
110 recursive_table_commitments[idx].unset_free_witness_tag();
114 return { goblin_proof, table_commitments, recursive_table_commitments };
126 auto [proof, table_commitments, recursive_table_commitments] = create_goblin_avm_prover_output(&
builder);
131 auto output = verifier.reduce_to_pairing_check_and_ipa_opening();
134 inputs.pairing_inputs = output.translator_pairing_points;
135 inputs.ipa_claim = output.ipa_claim;
138 builder.ipa_proof = output.ipa_proof.get_value();
140 info(
"Recursive Verifier: num gates = ",
builder.num_gates());
149 auto verification_key =
152 OuterProver prover(prover_instance, verification_key);
153 OuterVerifier verifier(vk_and_hash);
154 auto proof = prover.construct_proof();
155 bool verified = verifier.verify_proof(proof).result;
157 ASSERT_TRUE(verified);
170 auto [proof, table_commitments, recursive_table_commitments] = create_goblin_avm_prover_output(&
builder);
173 for (
auto& val : proof.eccvm_proof) {
183 auto goblin_rec_verifier_output = verifier.reduce_to_pairing_check_and_ipa_opening();
194 EXPECT_FALSE(native_result);
207 auto [proof, table_commitments, _] = create_goblin_avm_prover_output(&
builder);
208 TableCommitments tampered_table_commitments = table_commitments;
209 tamper_with_op_commitment(tampered_table_commitments);
211 RecursiveTableCommitments recursive_table_commitments;
213 recursive_table_commitments[idx] =
214 RecursiveCommitment::from_witness(&
builder, tampered_table_commitments[idx]);
215 recursive_table_commitments[idx].fix_witness();
221 auto goblin_rec_verifier_output = verifier.reduce_to_pairing_check_and_ipa_opening();
227 bool pairing_result = goblin_rec_verifier_output.translator_pairing_points.check();
228 EXPECT_FALSE(pairing_result);
234 auto [proof, table_commitments, recursive_table_commitments] = create_goblin_avm_prover_output(&
builder);
235 auto tampered_proof = proof;
236 tamper_with_libra_eval(tampered_proof.translator_proof);
241 [[maybe_unused]]
auto goblin_rec_verifier_output = verifier.reduce_to_pairing_check_and_ipa_opening();
254 auto [proof, table_commitments, recursive_table_commitments] = create_goblin_avm_prover_output(&
builder);
256 tamper_with_eccvm_op_eval(proof.eccvm_proof);
261 [[maybe_unused]]
auto goblin_rec_verifier_output = verifier.reduce_to_pairing_check_and_ipa_opening();
#define BB_DISABLE_ASSERTS()
Common transcript class for both parties. Stores the data for the current round, as well as the manif...
CommitmentKey object over a pairing group 𝔾₁.
Commitment commit(PolynomialSpan< const Fr > polynomial) const
Uses the ProverSRS to create a commitment to p(X)
Simple verification key class for fixed-size circuits (ECCVM, Translator, AVM).
Specialization of Goblin for the AVM.
GoblinAvmProof prove()
Constuct a full GoblinAvm proof (ECCVM, Translator)
TranslatorFlavor::VerificationKey TranslatorVerificationKey
ECCVMFlavor::VerificationKey ECCVMVerificationKey
Curve::AffineElement Commitment
std::array< Commitment, UltraCircuitBuilder::NUM_WIRES > TableCommitments
std::shared_ptr< OpQueue > op_queue
IPA (inner product argument) commitment scheme class.
static constexpr size_t NUM_WIRES
static void construct_arithmetic_circuit(Builder &builder, const size_t target_log2_dyadic_size=4, bool include_public_inputs=true)
Populate a builder with a specified number of arithmetic gates; includes a PI.
Unverified claim (C,r,v) for some witness polynomial p(X) such that.
auto get_native_opening_claim() const
Contains all the information required by a Honk prover to create a proof, constructed from a finalize...
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
Curve::AffineElement Commitment
UltraCircuitBuilder CircuitBuilder
Representation of the Grumpkin Verifier Commitment Key inside a bn254 circuit.
bb::GoblinAvmRecursiveVerifier::Commitment RecursiveCommitment
bb::GoblinAvmRecursiveVerifier::TableCommitments RecursiveTableCommitments
static void tamper_with_libra_eval(HonkProof &translator_proof)
static void SetUpTestSuite()
static ProverOutput create_goblin_avm_prover_output(OuterBuilder *outer_builder)
Create a goblin proof and the VM verification keys needed by the goblin recursive verifier.
static constexpr size_t comm_frs
std::array< Commitment, UltraCircuitBuilder::NUM_WIRES > TableCommitments
UltraFlavor::Commitment Commitment
static constexpr size_t eval_frs
static void tamper_with_op_commitment(TableCommitments &table_commitments)
static void tamper_with_eccvm_op_eval(HonkProof &eccvm_proof)
The data that is propagated on the public inputs of a rollup circuit.
std::filesystem::path bb_crs_path()
void init_file_crs_factory(const std::filesystem::path &path)
std::shared_ptr< factories::CrsFactory< curve::Grumpkin > > get_grumpkin_crs_factory()
TEST_F(BoomerangGoblinRecursiveVerifierTests, graph_description_basic)
Construct and check a goblin recursive verification circuit.
std::vector< fr > HonkProof
UltraVerifier_< UltraFlavor, RollupIO > UltraRollupVerifier
BaseTranscript< stdlib::StdlibCodec< stdlib::field_t< UltraCircuitBuilder > >, stdlib::poseidon2< UltraCircuitBuilder > > UltraStdlibTranscript
MegaCircuitBuilder_< field< Bn254FrParams > > MegaCircuitBuilder
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
RecursiveTableCommitments recursive_table_commitments
TableCommitments table_commitments