11template <
typename Builder>
16 if (this->points_accumulator.has_data) {
22 if (update_ipa_data) {
24 this->nested_ipa_proofs.push_back(other.
ipa_proof);
25 this->nested_ipa_claims.push_back(other.
ipa_claim);
29template <
typename Builder>
34 if (this->points_accumulator.has_data) {
40 if (update_ipa_data) {
42 this->nested_ipa_proofs.insert(
44 this->nested_ipa_claims.insert(
54 nested_ipa_claims.size(), nested_ipa_proofs.size(),
"Mismatched number of nested IPA claims and proofs.");
59 if (nested_ipa_claims.size() == 2) {
67 commitment_key, ipa_transcript_1, nested_ipa_claims[0], ipa_transcript_2, nested_ipa_claims[1]);
69 final_ipa_claim = ipa_claim;
70 final_ipa_proof = ipa_proof;
71 }
else if (nested_ipa_claims.size() == 1) {
73 final_ipa_claim = nested_ipa_claims[0];
76 final_ipa_proof = nested_ipa_proofs[0].get_value();
77 }
else if (nested_ipa_claims.empty()) {
80 info(
"Proving with UltraRollupHonk but no IPA claims exist.");
81 auto [stdlib_opening_claim, ipa_proof] =
84 final_ipa_claim = stdlib_opening_claim;
85 final_ipa_proof = ipa_proof;
94 return { final_ipa_claim, final_ipa_proof };
104 nested_ipa_claims.size(), nested_ipa_proofs.size(),
"Mismatched number of nested IPA claims and proofs.");
105 BB_ASSERT_EQ(nested_ipa_claims.size(), 2U,
"Root rollup must have two nested IPA claims.");
107 auto [ipa_claim, ipa_proof] = perform_IPA_accumulation(
builder);
113 auto accumulated_ipa_transcript =
116 verifier_commitment_key, ipa_claim, accumulated_ipa_transcript);
121 [[maybe_unused]]
bool is_hn_recursion_constraints,
122 [[maybe_unused]]
bool has_ipa_claim)
128 auto [ipa_claim, ipa_proof] = perform_IPA_accumulation(
builder);
136 points_accumulator.has_data
139 inputs.ipa_claim = ipa_claim;
144 if (is_root_rollup) {
146 perform_full_IPA_verification(
builder);
149 BB_ASSERT_EQ(nested_ipa_proofs.size(),
static_cast<size_t>(0),
"IPA proofs present when not expected.");
153 if (points_accumulator.has_data) {
155 inputs.pairing_inputs = points_accumulator;
165 [[maybe_unused]]
bool is_hn_recursion_constraints,
166 [[maybe_unused]]
bool has_ipa_claim)
171 nested_ipa_claims.size(),
static_cast<size_t>(0),
"IPA claims present when not expected in MegaBuilder.");
175 if (!is_hn_recursion_constraints) {
176 if (points_accumulator.has_data) {
178 inputs.pairing_inputs = points_accumulator;
#define BB_ASSERT_EQ(actual, expected,...)
Common transcript class for both parties. Stores the data for the current round, as well as the manif...
CommitmentKey object over a pairing group 𝔾₁.
IPA (inner product argument) commitment scheme class.
Unverified claim (C,r,v) for some witness polynomial p(X) such that.
Representation of the Grumpkin Verifier Commitment Key inside a bn254 circuit.
A simple wrapper around a vector of stdlib field elements representing a proof.
Manages the data that is propagated on the public inputs of an application/function circuit.
The data that is propagated on the public inputs of a rollup circuit.
DefaultIO< MegaCircuitBuilder > AppIO
The data that is propagated on the public inputs of an application/function circuit.
std::vector< fr > HonkProof
BaseTranscript< stdlib::StdlibCodec< stdlib::field_t< UltraCircuitBuilder > >, stdlib::poseidon2< UltraCircuitBuilder > > UltraStdlibTranscript
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
An object storing two EC points that represent the inputs to a pairing check.
Output type for recursive ultra verification.
OpeningClaim< grumpkin< Builder > > ipa_claim
PairingPoints< Curve > points_accumulator
stdlib::Proof< Builder > ipa_proof
void throw_or_abort(std::string const &err)