Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
shplonk.test.cpp
Go to the documentation of this file.
7#include <gtest/gtest.h>
8
9using namespace bb;
10
11static constexpr size_t LOG_DEGREE = 4;
12static constexpr size_t MAX_POLY_DEGREE = 1UL << LOG_DEGREE;
13template <class Builder> class ShplonkRecursionTest : public CommitmentTest<typename curve::BN254> {
14 public:
19
21 Builder* builder, std::vector<OpeningClaim<NativeCurve>>& opening_claims, const size_t num_claims)
22 {
24 for (size_t idx = 0; idx < num_claims; idx++) {
25 auto r = Fr::from_witness(builder, opening_claims[idx].opening_pair.challenge);
26 auto eval = Fr::from_witness(builder, opening_claims[idx].opening_pair.evaluation);
27 auto commit = Commitment::from_witness(builder, opening_claims[idx].commitment);
28 // Removing the free witness tag, since the opening claims in the full scheme are supposed to
29 // be fiat-shamirred or derived from the transcript earlier
30 r.unset_free_witness_tag();
31 eval.unset_free_witness_tag();
32 commit.unset_free_witness_tag();
33 stdlib_opening_claims.emplace_back(OpeningClaim<Curve>({ r, eval }, commit));
34 }
35
36 return stdlib_opening_claims;
37 }
38};
39
40using BuilderTypes = ::testing::Types<UltraCircuitBuilder, MegaCircuitBuilder>;
42
44{
45 using Builder = TypeParam;
49 using ShplonkVerifier = ShplonkVerifier_<Curve>;
50 using Fr = typename Curve::ScalarField;
51 using Commitment = typename Curve::AffineElement;
53 using StdlibProof = stdlib::Proof<Builder>;
54
55 // Prover transcript
56 auto prover_transcript = NativeTranscript::prover_init_empty();
57
58 // Test data
59 auto setup = this->generate_claim_data({ MAX_POLY_DEGREE, MAX_POLY_DEGREE / 2 });
60
61 // Shplonk prover functionality
62 auto prover_opening_claims = ClaimData::prover_opening_claims(setup);
63 auto batched_prover_claim = ShplonkProver::prove(this->ck(), prover_opening_claims, prover_transcript);
64 this->verify_opening_pair(batched_prover_claim.opening_pair, batched_prover_claim.polynomial);
65
66 // Convert proof to stdlib
68 StdlibProof stdlib_proof(builder, prover_transcript->export_proof());
69
70 // Convert opening claims to witnesses
71 auto native_verifier_claims = ClaimData::verifier_opening_claims(setup);
72 auto stdlib_opening_claims =
73 this->native_to_stdlib_opening_claims(&builder, native_verifier_claims, native_verifier_claims.size());
74
75 // Shplonk verifier functionality
76 auto verifier_transcript = std::make_shared<Transcript>(stdlib_proof);
77 [[maybe_unused]] auto _ = verifier_transcript->template receive_from_prover<Fr>("Init");
78 [[maybe_unused]] auto batched_verifier_claim =
79 ShplonkVerifier::reduce_verification(Commitment::one(&builder), stdlib_opening_claims, verifier_transcript);
80
81 EXPECT_TRUE(CircuitChecker::check(builder));
82}
Curve::AffineElement Commitment
std::vector< OpeningClaim< Curve > > native_to_stdlib_opening_claims(Builder *builder, std::vector< OpeningClaim< NativeCurve > > &opening_claims, const size_t num_claims)
Common transcript class for both parties. Stores the data for the current round, as well as the manif...
static std::shared_ptr< BaseTranscript > prover_init_empty()
For testing: initializes transcript with some arbitrary data so that a challenge can be generated aft...
Commitment commit(const Polynomial &polynomial)
Unverified claim (C,r,v) for some witness polynomial p(X) such that.
Definition claim.hpp:53
Shplonk Prover.
Definition shplonk.hpp:36
Shplonk Verifier.
Definition shplonk.hpp:343
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
typename Group::affine_element AffineElement
Definition grumpkin.hpp:63
A simple wrapper around a vector of stdlib field elements representing a proof.
Definition proof.hpp:19
static field_t from_witness(Builder *ctx, const bb::fr &input)
Definition field.hpp:454
AluTraceBuilder builder
Definition alu.test.cpp:124
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
TYPED_TEST_SUITE(ShpleminiTest, TestSettings)
TYPED_TEST(ShpleminiTest, CorrectnessOfMultivariateClaimBatching)
CommitmentKey< Curve > ck
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
::testing::Types< UltraCircuitBuilder, MegaCircuitBuilder > BuilderTypes
field_t< CircuitBuilder > ScalarField
Definition bn254.hpp:33
Group AffineElement
Definition bn254.hpp:37
curve::BN254 NativeCurve
Definition bn254.hpp:21