Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
ecc_transcript_msm_transition_short_relation_impl.hpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: Planned, auditors: [], commit: }
3// external_1: { status: not started, auditors: [], commit: }
4// external_2: { status: not started, auditors: [], commit: }
5// =====================
6
7#pragma once
8
12
13namespace bb {
14
15template <typename FF>
16template <typename ContainerOverSubrelations, typename AllEntities, typename Parameters>
17void ECCVMTranscriptMsmTransitionShortRelationImpl<FF>::accumulate(ContainerOverSubrelations& accumulator,
18 const AllEntities& in,
19 const Parameters& /*unused*/,
20 const FF& scaling_factor)
21{
26
27 static const auto offset_generator_coords = [&]() {
28 static constexpr auto offset_generator_base = get_precomputed_generators<g1, "ECCVM_OFFSET_GENERATOR", 1>()[0];
29 static bb::g1::affine_element result =
30 bb::g1::affine_element(bb::g1::element(offset_generator_base) * grumpkin::fq(uint256_t(1) << 124));
31 return std::array<FF, 2>{ FF(result.x), FF(result.y) };
32 };
33
34 const auto msm_transition = View(in.transcript_msm_transition);
35 const auto transcript_msm_infinity = View(in.transcript_msm_infinity);
36
37 const auto offset = offset_generator_coords();
38 const auto x1 = offset[0];
39 const auto y1 = -offset[1];
40 const auto x2 = View(in.transcript_msm_x);
41 const auto y2 = View(in.transcript_msm_y);
42 const auto x3 = View(in.transcript_msm_intermediate_x);
43 const auto y3 = View(in.transcript_msm_intermediate_y);
44 const auto x2_minus_x1 = x2 - x1;
45 const auto y2_minus_y1 = y2 - y1;
46 const auto x3_plus_x2_plus_x1 = (x3 + x2) + x1;
47
48 // OFFSET_GENERATOR_X/Y: deg 5, length 6.
49 const auto x_term_acc6 = Acc6(x3_plus_x2_plus_x1) * Acc6(x2_minus_x1.sqr()) - Acc6(y2_minus_y1.sqr()); // deg 3
50 const auto y_term_acc6 = Acc6((-x3 + x1) * y2_minus_y1) - Acc6(x2_minus_x1 * (y3 + y1)); // deg 2
51 const auto not_msm_inf_short = -transcript_msm_infinity + FF(1); // length 2
52 const auto subtract_x_acc6 = x_term_acc6 * Acc6(not_msm_inf_short) + Acc6(transcript_msm_infinity * x3);
53 const auto subtract_y_acc6 = y_term_acc6 * Acc6(not_msm_inf_short) + Acc6(transcript_msm_infinity * y3);
54 std::get<OFFSET_GENERATOR_X>(accumulator) += Acc6(msm_transition * scaling_factor) * subtract_x_acc6;
55 std::get<OFFSET_GENERATOR_Y>(accumulator) += Acc6(msm_transition * scaling_factor) * subtract_y_acc6;
56
57 // MSM_INFINITY_X_DIFF / Y_SUM: deg 3, length 4.
58 const auto x_diff = x2 - x1;
59 const auto y_sum = y2 + y1;
60 std::get<MSM_INFINITY_X_DIFF>(accumulator) +=
61 Acc4((msm_transition * transcript_msm_infinity) * scaling_factor) * Acc4(x_diff);
62 std::get<MSM_INFINITY_Y_SUM>(accumulator) +=
63 Acc4((msm_transition * transcript_msm_infinity) * scaling_factor) * Acc4(y_sum);
64
65 // MSM_INFINITY_INVERSE: deg 4, length 5.
66 const auto transcript_msm_x_inverse = View(in.transcript_msm_x_inverse);
67 const auto inverse_inner = Acc5(x_diff * transcript_msm_x_inverse) - Acc5(FF(1));
68 std::get<MSM_INFINITY_INVERSE>(accumulator) +=
69 Acc5(msm_transition * scaling_factor) * Acc5(not_msm_inf_short) * inverse_inner;
70}
71
72} // namespace bb
bb::field< bb::Bn254FrParams > FF
Definition field.cpp:24
static void accumulate(ContainerOverSubrelations &accumulator, const AllEntities &in, const Parameters &params, const FF &scaling_factor)
element class. Implements ecc group arithmetic using Jacobian coordinates See https://hyperelliptic....
Definition element.hpp:35
group_elements::affine_element< Fq, Fr, Params > affine_element
Definition group.hpp:44
ssize_t offset
Definition engine.cpp:62
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
group< fq, fr, Bn254G1Params > g1
Definition g1.hpp:34
constexpr std::span< const typename Group::affine_element > get_precomputed_generators()
typename Accumulator::CoefficientAccumulator ECCVMShortMonomialView
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13