51 CommitmentLabels labels;
53 FF vk_hash = decider_vk->vk_and_hash->vk->hash_through_transcript(domain_separator, *transcript);
54 transcript->add_to_hash_buffer(domain_separator +
"vk_hash", vk_hash);
55 vinfo(
"vk hash in Oink recursive verifier: ", vk_hash);
56 vinfo(
"expected vk hash: ", decider_vk->vk_and_hash->hash);
58 decider_vk->vk_and_hash->hash.assert_equal(vk_hash);
60 size_t num_public_inputs =
61 static_cast<size_t>(
static_cast<uint32_t
>(decider_vk->vk_and_hash->vk->num_public_inputs.get_value()));
62 std::vector<FF> public_inputs;
63 for (
size_t i = 0; i < num_public_inputs; ++i) {
64 public_inputs.emplace_back(
65 transcript->template receive_from_prover<FF>(domain_separator +
"public_input_" +
std::to_string(i)));
69 commitments.w_l = transcript->template receive_from_prover<Commitment>(domain_separator + labels.w_l);
70 commitments.w_r = transcript->template receive_from_prover<Commitment>(domain_separator + labels.w_r);
71 commitments.w_o = transcript->template receive_from_prover<Commitment>(domain_separator + labels.w_o);
76 for (
auto [commitment, label] :
zip_view(commitments.get_ecc_op_wires(), labels.get_ecc_op_wires())) {
77 commitment = transcript->template receive_from_prover<Commitment>(domain_separator + label);
81 for (
auto [commitment, label] :
zip_view(commitments.get_databus_entities(), labels.get_databus_entities())) {
82 commitment = transcript->template receive_from_prover<Commitment>(domain_separator + label);
87 auto [eta, eta_two, eta_three] = transcript->template get_challenges<FF>(
88 domain_separator +
"eta", domain_separator +
"eta_two", domain_separator +
"eta_three");
91 commitments.lookup_read_counts =
92 transcript->template receive_from_prover<Commitment>(domain_separator + labels.lookup_read_counts);
93 commitments.lookup_read_tags =
94 transcript->template receive_from_prover<Commitment>(domain_separator + labels.lookup_read_tags);
95 commitments.w_4 = transcript->template receive_from_prover<Commitment>(domain_separator + labels.w_4);
98 auto [beta, gamma] = transcript->template get_challenges<FF>(domain_separator +
"beta", domain_separator +
"gamma");
100 commitments.lookup_inverses =
101 transcript->template receive_from_prover<Commitment>(domain_separator + labels.lookup_inverses);
105 for (
auto [commitment, label] :
zip_view(commitments.get_databus_inverses(), labels.get_databus_inverses())) {
106 commitment = transcript->template receive_from_prover<Commitment>(domain_separator + label);
110 const FF public_input_delta =
111 compute_public_input_delta<Flavor>(public_inputs, beta, gamma, decider_vk->vk_and_hash->vk->pub_inputs_offset);
114 commitments.z_perm = transcript->template receive_from_prover<Commitment>(domain_separator + labels.z_perm);
120 challenge_labels[idx] = domain_separator +
"alpha_" +
std::to_string(idx);
125 decider_vk->relation_parameters =
127 decider_vk->witness_commitments =
std::move(commitments);
129 decider_vk->public_inputs =
std::move(public_inputs);
130 decider_vk->is_complete =
true;