barretenberg
Loading...
Searching...
No Matches
program_settings.hpp
1#pragma once
2
3#include "barretenberg/plonk/proof_system/types/program_settings.hpp"
4#include "barretenberg/stdlib/recursion/transcript/transcript.hpp"
5
6namespace proof_system::plonk {
7namespace stdlib {
8namespace recursion {
9
10template <typename Curve> class recursive_ultra_verifier_settings : public plonk::ultra_verifier_settings {
11 public:
12 typedef typename Curve::ScalarField fr_ct;
13 typedef typename Curve::GroupNative::affine_element g1;
14 typedef typename Curve::Builder Builder;
18
20
27
28 static constexpr size_t num_challenge_bytes = 16;
29 static constexpr transcript::HashType hash_type = transcript::HashType::PedersenBlake3s;
30 // idpolys is a flag that describes whether we're using Vitalik's trick of using trivial identity permutation
31 // polynomials (id_poly = false); OR whether the identity permutation polynomials are circuit-specific and stored in
32 // the proving/verification key (id_poly = true).
33 static constexpr bool idpolys = true;
34
35 static fr_ct append_scalar_multiplication_inputs(typename Transcript_pt::Key* key,
36 const fr_ct& alpha_base,
37 const Transcript_pt& transcript,
38 std::map<std::string, fr_ct>& scalars)
39 {
40 auto updated_alpha = PermutationWidget::append_scalar_multiplication_inputs(key, alpha_base, transcript);
41
42 updated_alpha = PlookupWidget::append_scalar_multiplication_inputs(key, updated_alpha, transcript, scalars);
43
44 updated_alpha =
45 PlookupArithmeticWidget::append_scalar_multiplication_inputs(key, updated_alpha, transcript, scalars);
46
47 updated_alpha = GenPermSortWidget::append_scalar_multiplication_inputs(key, updated_alpha, transcript, scalars);
48
49 updated_alpha = EllipticWidget::append_scalar_multiplication_inputs(key, updated_alpha, transcript, scalars);
50
51 updated_alpha =
52 PlookupAuxiliaryWidget::append_scalar_multiplication_inputs(key, updated_alpha, transcript, scalars);
53
54 return updated_alpha;
55 }
56
57 static fr_ct compute_quotient_evaluation_contribution(typename Transcript_pt::Key* key,
58 const fr_ct& alpha_base,
59 const Transcript_pt& transcript,
60 fr_ct& quotient_numerator_eval)
61 {
63 key, alpha_base, transcript, quotient_numerator_eval, idpolys);
64
66 key, updated_alpha_base, transcript, quotient_numerator_eval);
67
68 updated_alpha_base = PlookupArithmeticWidget::compute_quotient_evaluation_contribution(
69 key, updated_alpha_base, transcript, quotient_numerator_eval);
70
71 updated_alpha_base = GenPermSortWidget::compute_quotient_evaluation_contribution(
72 key, updated_alpha_base, transcript, quotient_numerator_eval);
73
74 updated_alpha_base = EllipticWidget::compute_quotient_evaluation_contribution(
75 key, updated_alpha_base, transcript, quotient_numerator_eval);
76
77 updated_alpha_base = PlookupAuxiliaryWidget::compute_quotient_evaluation_contribution(
78 key, updated_alpha_base, transcript, quotient_numerator_eval);
79
80 return updated_alpha_base;
81 }
82};
83
84// Only needed because ultra-to-standard recursion requires us to use a Pedersen hash which is common to both Ultra &
85// Standard plonk i.e. the non-ultra version.
86template <typename Curve>
88 public:
89 typedef typename Curve::ScalarField fr_ct;
90 typedef typename Curve::GroupNative::affine_element g1;
91 typedef typename Curve::Builder Builder;
95
97
104
105 static constexpr transcript::HashType hash_type = transcript::HashType::PedersenBlake3s;
106};
107
108} // namespace recursion
109} // namespace stdlib
110} // namespace proof_system::plonk
Definition: permutation_widget.hpp:9
static Field compute_quotient_evaluation_contribution(typename Transcript::Key *, const Field &alpha_base, const Transcript &transcript, Field &quotient_numerator_eval, const bool idpolys=false)
This function computes the part of the quotient polynomial evaluation relevant to PLONK's permutation...
Definition: permutation_widget_impl.hpp:563
Definition: plookup_widget.hpp:9
static Field compute_quotient_evaluation_contribution(typename Transcript::Key *, const Field &alpha_base, const Transcript &transcript, Field &quotient_numerator_eval)
Computes the evaluation at challenge point 'z' of the terms in the quotient polynomial associated wit...
Definition: plookup_widget_impl.hpp:590
Definition: prover_settings.hpp:27
Definition: prover_settings.hpp:42
Definition: program_settings.hpp:58
Definition: transition_widget.hpp:341
Definition: widget.bench.cpp:13