barretenberg
Loading...
Searching...
No Matches
prover.hpp
1#pragma once
2#include "../commitment_scheme/commitment_scheme.hpp"
3#include "../types/program_settings.hpp"
4#include "../types/proof.hpp"
5#include "../widgets/random_widgets/random_widget.hpp"
6#include "../widgets/transition_widgets/transition_widget.hpp"
7#include "barretenberg/plonk/proof_system/proving_key/proving_key.hpp"
8#include "barretenberg/plonk/work_queue/work_queue.hpp"
9
10namespace proof_system::plonk {
11
12template <typename settings> class ProverBase {
13
14 public:
15 ProverBase(std::shared_ptr<proving_key> input_key = nullptr,
16 const transcript::Manifest& manifest = transcript::Manifest());
17 ProverBase(ProverBase&& other);
18 ProverBase(const ProverBase& other) = delete;
19 ProverBase& operator=(const ProverBase& other) = delete;
20 ProverBase& operator=(ProverBase&& other);
21
22 BBERG_PROFILE void execute_preamble_round();
23 BBERG_PROFILE void execute_first_round();
24 BBERG_PROFILE void execute_second_round();
25 BBERG_PROFILE void execute_third_round();
26 BBERG_PROFILE void execute_fourth_round();
27 BBERG_PROFILE void execute_fifth_round();
28 BBERG_PROFILE void execute_sixth_round();
29
30 void add_polynomial_evaluations_to_transcript();
31 void compute_batch_opening_polynomials();
33 void compute_quotient_commitments();
34 void init_quotient_polynomials();
35 void compute_opening_elements();
36 void add_plookup_memory_records_to_w_4();
37
38 void compute_quotient_evaluation();
39 void add_blinding_to_quotient_polynomial_parts();
40 void compute_lagrange_1_fft();
41 plonk::proof& export_proof();
42 plonk::proof& construct_proof();
43
44 size_t get_circuit_size() const { return circuit_size; }
45
46 void flush_queued_work_items() { queue.flush_queue(); }
47
48 work_queue::work_item_info get_queued_work_item_info() const { return queue.get_queued_work_item_info(); }
49
50 std::shared_ptr<barretenberg::fr[]> get_scalar_multiplication_data(const size_t work_item_number) const
51 {
52 return queue.get_scalar_multiplication_data(work_item_number);
53 }
54
55 size_t get_scalar_multiplication_size(const size_t work_item_number) const
56 {
57 return queue.get_scalar_multiplication_size(work_item_number);
58 }
59
60 std::shared_ptr<fr[]> get_ifft_data(const size_t work_item_number) const
61 {
62 return queue.get_ifft_data(work_item_number);
63 }
64
65 work_queue::queued_fft_inputs get_fft_data(const size_t work_item_number) const
66 {
67 return queue.get_fft_data(work_item_number);
68 }
69
70 void put_scalar_multiplication_data(const barretenberg::g1::affine_element result, const size_t work_item_number)
71 {
72 queue.put_scalar_multiplication_data(result, work_item_number);
73 }
74
75 void put_fft_data(std::shared_ptr<fr[]> result, const size_t work_item_number)
76 {
77 queue.put_fft_data(result, work_item_number);
78 }
79
80 void put_ifft_data(std::shared_ptr<fr[]> result, const size_t work_item_number)
81 {
82 queue.put_ifft_data(result, work_item_number);
83 }
84
85 void reset();
86
87 size_t circuit_size;
88
89 std::vector<std::unique_ptr<ProverRandomWidget>> random_widgets;
90 std::vector<std::unique_ptr<widget::TransitionWidgetBase<barretenberg::fr>>> transition_widgets;
92
93 std::shared_ptr<proving_key> key;
94 std::unique_ptr<CommitmentScheme> commitment_scheme;
95
96 work_queue queue;
97
98 private:
100};
101extern template class ProverBase<standard_settings>;
102extern template class ProverBase<ultra_settings>;
103extern template class ProverBase<ultra_to_standard_settings>;
104
106typedef ProverBase<ultra_settings> UltraProver; // TODO(Mike): maybe just return a templated proverbase so that I don't
107 // need separate cases for ultra vs ultra_to_standard...???
108 // TODO(Cody): Make this into an issue?
111
112} // namespace proof_system::plonk
Definition: affine_element.hpp:11
Definition: prover.hpp:12
BBERG_PROFILE void execute_preamble_round()
Definition: prover.cpp:157
void compute_wire_commitments()
Definition: prover.cpp:73
BBERG_PROFILE void execute_second_round()
Definition: prover.cpp:280
BBERG_PROFILE void execute_third_round()
Definition: prover.cpp:333
BBERG_PROFILE void execute_fourth_round()
Computes the quotient polynomial, then commits to its degree-n split parts.
Definition: prover.cpp:358
BBERG_PROFILE void execute_first_round()
Definition: prover.cpp:237
Definition: work_queue.hpp:11
Definition: manifest.hpp:11
Definition: transcript_wrappers.hpp:13
Definition: widget.bench.cpp:13
Definition: proof.hpp:11