Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
ultra_starknet_zk_flavor.hpp
Go to the documentation of this file.
1#ifdef STARKNET_GARAGA_FLAVORS
2#pragma once
3
6
7namespace bb {
8
9class UltraStarknetZKFlavor : public UltraKeccakZKFlavor {
10 public:
17 class Transcript : public Transcript_<starknet::StarknetTranscriptParams> {
18 public:
19 using Base = Transcript_<starknet::StarknetTranscriptParams>;
20 // Note: we have a different vector of univariates because the degree for ZK flavors differs
22 Commitment libra_concatenation_commitment;
23 FF libra_sum;
24 FF libra_claimed_evaluation;
25 Commitment libra_grand_sum_commitment;
26 Commitment libra_quotient_commitment;
27 FF libra_concatenation_eval;
28 FF libra_shifted_grand_sum_eval;
29 FF libra_grand_sum_eval;
30 FF libra_quotient_eval;
31 Commitment hiding_polynomial_commitment;
32 FF hiding_polynomial_eval;
33
34 Transcript() = default;
35
36 static std::shared_ptr<Transcript> prover_init_empty()
37 {
38 auto transcript = Base::prover_init_empty();
39 return std::static_pointer_cast<Transcript>(transcript);
40 };
41
42 static std::shared_ptr<Transcript> verifier_init_empty(const std::shared_ptr<Transcript>& transcript)
43 {
44 auto verifier_transcript = Base::verifier_init_empty(transcript);
45 return std::static_pointer_cast<Transcript>(verifier_transcript);
46 };
47
54 void deserialize_full_transcript(size_t public_input_size)
55 {
56 // take current proof and put them into the struct
57 size_t num_frs_read = 0;
58 auto& proof_data = this->proof_data;
59 for (size_t i = 0; i < public_input_size; ++i) {
60 this->public_inputs.push_back(Base::template deserialize_from_buffer<FF>(proof_data, num_frs_read));
61 }
62 this->w_l_comm = Base::template deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
63 this->w_r_comm = Base::template deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
64 this->w_o_comm = Base::template deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
65 this->lookup_read_counts_comm =
66 Base::template deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
67 this->lookup_read_tags_comm = Base::template deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
68 this->w_4_comm = Base::template deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
69 this->lookup_inverses_comm = Base::template deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
70 this->z_perm_comm = Base::template deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
71 libra_concatenation_commitment =
72 Base::template deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
73 libra_sum = Base::template deserialize_from_buffer<FF>(proof_data, num_frs_read);
74
75 for (size_t i = 0; i < CONST_PROOF_SIZE_LOG_N; ++i) {
76 zk_sumcheck_univariates.push_back(
77 Base::template deserialize_from_buffer<bb::Univariate<FF, BATCHED_RELATION_PARTIAL_LENGTH>>(
78 proof_data, num_frs_read));
79 }
80 libra_claimed_evaluation = Base::template deserialize_from_buffer<FF>(proof_data, num_frs_read);
81 this->sumcheck_evaluations =
82 Base::template deserialize_from_buffer<std::array<FF, NUM_ALL_ENTITIES>>(proof_data, num_frs_read);
83 libra_grand_sum_commitment = Base::template deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
84 libra_quotient_commitment = Base::template deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
85 hiding_polynomial_commitment = Base::template deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
86 hiding_polynomial_eval = Base::template deserialize_from_buffer<FF>(proof_data, num_frs_read);
87 for (size_t i = 0; i < CONST_PROOF_SIZE_LOG_N - 1; ++i) {
88 this->gemini_fold_comms.push_back(
89 Base::template deserialize_from_buffer<Commitment>(proof_data, num_frs_read));
90 }
91 for (size_t i = 0; i < CONST_PROOF_SIZE_LOG_N; ++i) {
92 this->gemini_fold_evals.push_back(Base::template deserialize_from_buffer<FF>(proof_data, num_frs_read));
93 }
94 libra_concatenation_eval = Base::template deserialize_from_buffer<FF>(proof_data, num_frs_read);
95 libra_shifted_grand_sum_eval = Base::template deserialize_from_buffer<FF>(proof_data, num_frs_read);
96 libra_grand_sum_eval = Base::template deserialize_from_buffer<FF>(proof_data, num_frs_read);
97 libra_quotient_eval = Base::template deserialize_from_buffer<FF>(proof_data, num_frs_read);
98 this->shplonk_q_comm = Base::template deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
99
100 this->kzg_w_comm = Base::template deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
101 }
102
109 void serialize_full_transcript()
110 {
111 auto& proof_data = this->proof_data;
112 size_t old_proof_length = proof_data.size();
113 proof_data.clear(); // clear proof_data so the rest of the function can replace it
114 for (const auto& public_input : this->public_inputs) {
115 Base::template serialize_to_buffer(public_input, proof_data);
116 }
117 Base::template serialize_to_buffer(this->w_l_comm, proof_data);
118 Base::template serialize_to_buffer(this->w_r_comm, proof_data);
119 Base::template serialize_to_buffer(this->w_o_comm, proof_data);
120 Base::template serialize_to_buffer(this->lookup_read_counts_comm, proof_data);
121 Base::template serialize_to_buffer(this->lookup_read_tags_comm, proof_data);
122 Base::template serialize_to_buffer(this->w_4_comm, proof_data);
123 Base::template serialize_to_buffer(this->lookup_inverses_comm, proof_data);
124 Base::template serialize_to_buffer(this->z_perm_comm, proof_data);
125 Base::template serialize_to_buffer(libra_concatenation_commitment, proof_data);
126 Base::template serialize_to_buffer(libra_sum, proof_data);
127
128 for (size_t i = 0; i < CONST_PROOF_SIZE_LOG_N; ++i) {
129 Base::template serialize_to_buffer(zk_sumcheck_univariates[i], proof_data);
130 }
131 Base::template serialize_to_buffer(libra_claimed_evaluation, proof_data);
132
133 Base::template serialize_to_buffer(this->sumcheck_evaluations, proof_data);
134 Base::template serialize_to_buffer(libra_grand_sum_commitment, proof_data);
135 Base::template serialize_to_buffer(libra_quotient_commitment, proof_data);
136 Base::template serialize_to_buffer(hiding_polynomial_commitment, proof_data);
137 Base::template serialize_to_buffer(hiding_polynomial_eval, proof_data);
138 for (size_t i = 0; i < CONST_PROOF_SIZE_LOG_N - 1; ++i) {
139 Base::template serialize_to_buffer(this->gemini_fold_comms[i], proof_data);
140 }
141 for (size_t i = 0; i < CONST_PROOF_SIZE_LOG_N; ++i) {
142 Base::template serialize_to_buffer(this->gemini_fold_evals[i], proof_data);
143 }
144 Base::template serialize_to_buffer(libra_concatenation_eval, proof_data);
145 Base::template serialize_to_buffer(libra_shifted_grand_sum_eval, proof_data);
146 Base::template serialize_to_buffer(libra_grand_sum_eval, proof_data);
147 Base::template serialize_to_buffer(libra_quotient_eval, proof_data);
148 Base::template serialize_to_buffer(this->shplonk_q_comm, proof_data);
149 Base::template serialize_to_buffer(this->kzg_w_comm, proof_data);
150
151 BB_ASSERT_EQ(proof_data.size(), old_proof_length);
152 }
153 };
154};
155} // namespace bb
156#endif
#define BB_ASSERT_EQ(actual, expected,...)
Definition assert.hpp:59
Common transcript class for both parties. Stores the data for the current round, as well as the manif...
A univariate polynomial represented by its values on {domain_start, domain_start + 1,...
ECCVMFlavor::Transcript Transcript
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13