35 return c.
proof_type ==
static_cast<uint32_t
>(expected);
38 BB_ASSERT(!constraints.empty(),
"At least one recursion constraint is required to determine Chonk state");
42 const bool is_reset_or_tail = (constraints.size() == 1 && has_proof_type(constraints[0],
PROOF_TYPE::HN));
43 const bool is_hiding = (constraints.size() == 1 && has_proof_type(constraints[0],
PROOF_TYPE::HN_FINAL));
44 const size_t upper_bound = is_init ? MAX_APPS_PER_KERNEL : MAX_APPS_PER_KERNEL + 1;
45 BB_ASSERT_LTE(constraints.size(), upper_bound,
"Too many recursion constraints encountered when mocking IVC state");
55 std::vector<CircuitKind> kinds;
61 size_t target_idx = 0;
66 group.push_back({
false,
false });
67 for (
size_t idx = 1; idx < constraints.size(); idx++) {
69 "Subsequent constraints in init kernel must be HN");
70 group.push_back({
false,
false });
72 kinds.assign(
group.size(), CircuitKind::App);
73 target_idx = kinds.size();
74 kinds.push_back(CircuitKind::Kernel);
75 kinds.push_back(CircuitKind::Kernel);
76 kinds.push_back(CircuitKind::HidingKernel);
77 }
else if (is_hiding) {
79 group.push_back({
true,
true });
80 kinds = { CircuitKind::App, CircuitKind::Kernel, CircuitKind::Kernel, CircuitKind::HidingKernel };
81 target_idx = kinds.size() - 1;
86 "First constraint in inner/reset kernel must verify the previous kernel (HN)");
87 group.push_back({
true,
false });
88 for (
size_t idx = 1; idx < constraints.size(); idx++) {
90 "Subsequent constraints in inner kernel must be HN");
91 group.push_back({
false,
false });
94 "Single-proof non-init kernel must be a reset/tail (HN) kernel");
95 const size_t num_apps =
group.size() - 1;
96 kinds.push_back(CircuitKind::App);
97 kinds.push_back(CircuitKind::Kernel);
98 kinds.insert(kinds.end(), num_apps, CircuitKind::App);
99 target_idx = kinds.size();
100 kinds.push_back(CircuitKind::Kernel);
101 kinds.push_back(CircuitKind::Kernel);
102 kinds.push_back(CircuitKind::HidingKernel);
106 for (
const auto& entry :
group) {
110 ivc->set_num_circuits_accumulated_for_mocking(target_idx);
126 using IvcType =
Chonk;
127 using AppFlavor = IvcType::AppFlavor;
128 using KernelFlavor = IvcType::KernelFlavor;
131 entry.
kind = is_kernel ? Chonk::CircuitKind::Kernel : Chonk::CircuitKind::App;
135 entry.
proof = create_mock_sumcheck_to_accumulator_proof<KernelFlavor, KernelIO>();
136 entry.
kernel_honk_vk = create_mock_honk_vk<KernelFlavor, KernelIO>(1 << KernelFlavor::VIRTUAL_LOG_N);
139 entry.
proof = create_mock_sumcheck_to_accumulator_proof<AppFlavor, AppIO>();
140 entry.
app_honk_vk = create_mock_honk_vk<AppFlavor, AppIO>(1 << AppFlavor::VIRTUAL_LOG_N);
168 ivc->recursive_verifier_native_accum.non_shifted_evaluation =
FF::zero();
169 ivc->recursive_verifier_native_accum.shifted_evaluation =
FF::zero();
170 ivc->recursive_verifier_native_accum.non_shifted_commitment = Commitment::one();
171 ivc->recursive_verifier_native_accum.shifted_commitment = Commitment::one();
174 ivc->verification_queue.emplace_back(entry);
180 !ivc->verification_queue.empty() && ivc->verification_queue.front().kind == Chonk::CircuitKind::App;
181 const size_t num_claims =
183 if (num_claims >= 2) {
186 if (is_hiding_kernel) {
190 ivc->decider_proof = acir_format::create_mock_pcs_proof<Chonk::KernelFlavor>();
192 ivc->set_num_circuits_accumulated_for_mocking(ivc->get_num_circuits_accumulated() + 1);