Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
ecc_msm_relation.hpp
Go to the documentation of this file.
1
// === AUDIT STATUS ===
2
// internal: { status: Complete, auditors: [Raju], commit: 2a49eb6 }
3
// external_1: { status: not started, auditors: [], commit: }
4
// external_2: { status: not started, auditors: [], commit: }
5
// =====================
6
7
#pragma once
8
#include "
barretenberg/relations/relation_types.hpp
"
9
10
namespace
bb
{
11
43
template
<
typename
FF_>
class
ECCVMMSMRelationImpl
{
44
public
:
45
using
FF
= FF_;
46
47
// Named subrelation indices — matches SUBRELATION_PARTIAL_LENGTHS ordering.
48
// Grouped by logical function within the Strauss MSM algorithm.
49
enum
SubrelationIndex
:
size_t
{
50
// Addition round: accumulator update and slope constraints
51
ADD_ACC_X
= 0,
52
ADD_ACC_Y
= 1,
53
ADD_SLOPE_1
= 2,
54
// Skew round: accumulator update and slope constraint
55
SKEW_ACC_X
= 3,
56
SKEW_ACC_Y
= 4,
57
SKEW_SLOPE_1
= 5,
58
// Collision checks: x-coordinate non-equality for point additions
59
COLLISION_CHECK_1
= 6,
60
COLLISION_CHECK_2
= 7,
61
COLLISION_CHECK_3
= 8,
62
COLLISION_CHECK_4
= 9,
63
// Doubling round: accumulator update and slope constraint
64
DOUBLE_ACC_X
= 10,
65
DOUBLE_ACC_Y
= 11,
66
DOUBLE_SLOPE_1
= 12,
67
// Inactive slice zeroing: force slice_i = 0 when add_i = 0
68
INACTIVE_SLICE_1
= 13,
69
INACTIVE_SLICE_2
= 14,
70
INACTIVE_SLICE_3
= 15,
71
INACTIVE_SLICE_4
= 16,
72
// Phase selector mutual exclusivity: at most one of q_add, q_double, q_skew active
73
PHASE_SELECTOR_MUTUAL_EXCLUSIVITY
= 17,
74
// Round transition forces round_delta == 1
75
ROUND_TRANSITION_FORCES_DELTA_ONE
= 18,
76
// Round transition with skew implies round == 31
77
ROUND_TRANSITION_SKEW_IMPLIES_ROUND_31
= 19,
78
// Round transition requires exactly one of double or skew on next row
79
ROUND_TRANSITION_EXACTLY_ONE_DOUBLE_OR_SKEW
= 20,
80
// Round transition needs double or skew (cannot have neither)
81
ROUND_TRANSITION_NEEDS_DOUBLE_OR_SKEW
= 21,
82
// Double implies next row is an add row
83
DOUBLE_IMPLIES_NEXT_IS_ADD
= 22,
84
// Count shift must be zero when round changes
85
COUNT_SHIFT_ZERO_ON_ROUND_CHANGE
= 23,
86
// Count increments within the same round by number of active adds
87
COUNT_INCREMENT_WITHIN_ROUND
= 24,
88
// Count must be zero at round boundary or MSM transition
89
COUNT_ZERO_AT_ROUND_BOUNDARY_OR_TRANSITION
= 25,
90
// MSM transition implies round = 0
91
MSM_TRANSITION_ROUND_ZERO
= 26,
92
// MSM transition: pc = pc_shift + msm_size
93
MSM_TRANSITION_PC
= 27,
94
// Addition continuity: add2 requires add1
95
ADD_CONTINUITY_2
= 28,
96
// Addition continuity: add3 requires add2
97
ADD_CONTINUITY_3
= 29,
98
// Addition continuity: add4 requires add3
99
ADD_CONTINUITY_4
= 30,
100
// Cross-row continuity: if add spans two rows, add4 must be 1
101
ADD_CROSS_ROW_CONTINUITY
= 31,
102
// add1 = q_add + q_skew
103
ADD1_DECOMPOSITION
= 32,
104
// q_skew persists until MSM transition: q_skew && !msm_transition_shift => q_skew_shift
105
SKEW_PERSISTS_UNTIL_MSM_TRANSITION
= 33,
106
// q_skew implies round == 32
107
SKEW_IMPLIES_ROUND_32
= 34,
108
// Doubling requires a round change (round_delta must be 1 if q_double_shift)
109
DOUBLE_REQUIRES_ROUND_CHANGE
= 35,
110
// Additional addition slope constraints (split to prevent cancellation)
111
ADD_SLOPE_2
= 36,
112
ADD_SLOPE_3
= 37,
113
ADD_SLOPE_4
= 38,
114
// Additional doubling slope constraints (split to prevent cancellation)
115
DOUBLE_SLOPE_2
= 39,
116
DOUBLE_SLOPE_3
= 40,
117
DOUBLE_SLOPE_4
= 41,
118
// Additional skew slope constraints (split to prevent cancellation)
119
SKEW_SLOPE_2
= 42,
120
SKEW_SLOPE_3
= 43,
121
SKEW_SLOPE_4
= 44,
122
// Idle row: accumulator preserved when no phase selector is active
123
IDLE_ROW_PRESERVES_ACC_X
= 45,
124
IDLE_ROW_PRESERVES_ACC_Y
= 46,
125
NUM_SUBRELATIONS
,
126
};
127
128
static
constexpr
std::array<size_t, 47>
SUBRELATION_PARTIAL_LENGTHS
{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
129
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
130
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 };
131
static_assert
(
NUM_SUBRELATIONS
==
SUBRELATION_PARTIAL_LENGTHS
.size());
132
133
template
<
typename
ContainerOverSubrelations,
typename
AllEntities,
typename
Parameters>
134
static
void
accumulate
(ContainerOverSubrelations& accumulator,
135
const
AllEntities& in,
136
const
Parameters&
/* unused */
,
137
const
FF
& scaling_factor);
138
};
139
140
template
<
typename
FF>
using
ECCVMMSMRelation
=
Relation<ECCVMMSMRelationImpl<FF>
>;
141
142
}
// namespace bb
bb::ECCVMMSMRelationImpl
MSM relations that evaluate the Strauss multiscalar multiplication algorithm.
Definition
ecc_msm_relation.hpp:43
bb::ECCVMMSMRelationImpl::accumulate
static void accumulate(ContainerOverSubrelations &accumulator, const AllEntities &in, const Parameters &, const FF &scaling_factor)
MSM relations that evaluate the Strauss multiscalar multiplication algorithm.
Definition
ecc_msm_relation_impl.hpp:48
bb::ECCVMMSMRelationImpl::SUBRELATION_PARTIAL_LENGTHS
static constexpr std::array< size_t, 47 > SUBRELATION_PARTIAL_LENGTHS
Definition
ecc_msm_relation.hpp:128
bb::ECCVMMSMRelationImpl::FF
FF_ FF
Definition
ecc_msm_relation.hpp:45
bb::ECCVMMSMRelationImpl::SubrelationIndex
SubrelationIndex
Definition
ecc_msm_relation.hpp:49
bb::ECCVMMSMRelationImpl::DOUBLE_SLOPE_4
@ DOUBLE_SLOPE_4
Definition
ecc_msm_relation.hpp:117
bb::ECCVMMSMRelationImpl::ADD_CONTINUITY_3
@ ADD_CONTINUITY_3
Definition
ecc_msm_relation.hpp:97
bb::ECCVMMSMRelationImpl::COUNT_INCREMENT_WITHIN_ROUND
@ COUNT_INCREMENT_WITHIN_ROUND
Definition
ecc_msm_relation.hpp:87
bb::ECCVMMSMRelationImpl::COUNT_SHIFT_ZERO_ON_ROUND_CHANGE
@ COUNT_SHIFT_ZERO_ON_ROUND_CHANGE
Definition
ecc_msm_relation.hpp:85
bb::ECCVMMSMRelationImpl::COLLISION_CHECK_4
@ COLLISION_CHECK_4
Definition
ecc_msm_relation.hpp:62
bb::ECCVMMSMRelationImpl::DOUBLE_SLOPE_2
@ DOUBLE_SLOPE_2
Definition
ecc_msm_relation.hpp:115
bb::ECCVMMSMRelationImpl::SKEW_ACC_Y
@ SKEW_ACC_Y
Definition
ecc_msm_relation.hpp:56
bb::ECCVMMSMRelationImpl::IDLE_ROW_PRESERVES_ACC_Y
@ IDLE_ROW_PRESERVES_ACC_Y
Definition
ecc_msm_relation.hpp:124
bb::ECCVMMSMRelationImpl::ROUND_TRANSITION_SKEW_IMPLIES_ROUND_31
@ ROUND_TRANSITION_SKEW_IMPLIES_ROUND_31
Definition
ecc_msm_relation.hpp:77
bb::ECCVMMSMRelationImpl::NUM_SUBRELATIONS
@ NUM_SUBRELATIONS
Definition
ecc_msm_relation.hpp:125
bb::ECCVMMSMRelationImpl::ADD_SLOPE_1
@ ADD_SLOPE_1
Definition
ecc_msm_relation.hpp:53
bb::ECCVMMSMRelationImpl::ADD_ACC_X
@ ADD_ACC_X
Definition
ecc_msm_relation.hpp:51
bb::ECCVMMSMRelationImpl::COLLISION_CHECK_1
@ COLLISION_CHECK_1
Definition
ecc_msm_relation.hpp:59
bb::ECCVMMSMRelationImpl::INACTIVE_SLICE_3
@ INACTIVE_SLICE_3
Definition
ecc_msm_relation.hpp:70
bb::ECCVMMSMRelationImpl::ROUND_TRANSITION_NEEDS_DOUBLE_OR_SKEW
@ ROUND_TRANSITION_NEEDS_DOUBLE_OR_SKEW
Definition
ecc_msm_relation.hpp:81
bb::ECCVMMSMRelationImpl::INACTIVE_SLICE_4
@ INACTIVE_SLICE_4
Definition
ecc_msm_relation.hpp:71
bb::ECCVMMSMRelationImpl::SKEW_IMPLIES_ROUND_32
@ SKEW_IMPLIES_ROUND_32
Definition
ecc_msm_relation.hpp:107
bb::ECCVMMSMRelationImpl::ADD_CONTINUITY_2
@ ADD_CONTINUITY_2
Definition
ecc_msm_relation.hpp:95
bb::ECCVMMSMRelationImpl::DOUBLE_REQUIRES_ROUND_CHANGE
@ DOUBLE_REQUIRES_ROUND_CHANGE
Definition
ecc_msm_relation.hpp:109
bb::ECCVMMSMRelationImpl::SKEW_SLOPE_2
@ SKEW_SLOPE_2
Definition
ecc_msm_relation.hpp:119
bb::ECCVMMSMRelationImpl::INACTIVE_SLICE_1
@ INACTIVE_SLICE_1
Definition
ecc_msm_relation.hpp:68
bb::ECCVMMSMRelationImpl::ADD_CONTINUITY_4
@ ADD_CONTINUITY_4
Definition
ecc_msm_relation.hpp:99
bb::ECCVMMSMRelationImpl::INACTIVE_SLICE_2
@ INACTIVE_SLICE_2
Definition
ecc_msm_relation.hpp:69
bb::ECCVMMSMRelationImpl::ADD1_DECOMPOSITION
@ ADD1_DECOMPOSITION
Definition
ecc_msm_relation.hpp:103
bb::ECCVMMSMRelationImpl::IDLE_ROW_PRESERVES_ACC_X
@ IDLE_ROW_PRESERVES_ACC_X
Definition
ecc_msm_relation.hpp:123
bb::ECCVMMSMRelationImpl::DOUBLE_ACC_X
@ DOUBLE_ACC_X
Definition
ecc_msm_relation.hpp:64
bb::ECCVMMSMRelationImpl::COLLISION_CHECK_2
@ COLLISION_CHECK_2
Definition
ecc_msm_relation.hpp:60
bb::ECCVMMSMRelationImpl::SKEW_SLOPE_3
@ SKEW_SLOPE_3
Definition
ecc_msm_relation.hpp:120
bb::ECCVMMSMRelationImpl::COLLISION_CHECK_3
@ COLLISION_CHECK_3
Definition
ecc_msm_relation.hpp:61
bb::ECCVMMSMRelationImpl::ADD_SLOPE_4
@ ADD_SLOPE_4
Definition
ecc_msm_relation.hpp:113
bb::ECCVMMSMRelationImpl::ADD_CROSS_ROW_CONTINUITY
@ ADD_CROSS_ROW_CONTINUITY
Definition
ecc_msm_relation.hpp:101
bb::ECCVMMSMRelationImpl::ADD_SLOPE_3
@ ADD_SLOPE_3
Definition
ecc_msm_relation.hpp:112
bb::ECCVMMSMRelationImpl::DOUBLE_SLOPE_1
@ DOUBLE_SLOPE_1
Definition
ecc_msm_relation.hpp:66
bb::ECCVMMSMRelationImpl::SKEW_PERSISTS_UNTIL_MSM_TRANSITION
@ SKEW_PERSISTS_UNTIL_MSM_TRANSITION
Definition
ecc_msm_relation.hpp:105
bb::ECCVMMSMRelationImpl::DOUBLE_SLOPE_3
@ DOUBLE_SLOPE_3
Definition
ecc_msm_relation.hpp:116
bb::ECCVMMSMRelationImpl::SKEW_SLOPE_4
@ SKEW_SLOPE_4
Definition
ecc_msm_relation.hpp:121
bb::ECCVMMSMRelationImpl::DOUBLE_ACC_Y
@ DOUBLE_ACC_Y
Definition
ecc_msm_relation.hpp:65
bb::ECCVMMSMRelationImpl::ROUND_TRANSITION_EXACTLY_ONE_DOUBLE_OR_SKEW
@ ROUND_TRANSITION_EXACTLY_ONE_DOUBLE_OR_SKEW
Definition
ecc_msm_relation.hpp:79
bb::ECCVMMSMRelationImpl::ADD_SLOPE_2
@ ADD_SLOPE_2
Definition
ecc_msm_relation.hpp:111
bb::ECCVMMSMRelationImpl::ADD_ACC_Y
@ ADD_ACC_Y
Definition
ecc_msm_relation.hpp:52
bb::ECCVMMSMRelationImpl::DOUBLE_IMPLIES_NEXT_IS_ADD
@ DOUBLE_IMPLIES_NEXT_IS_ADD
Definition
ecc_msm_relation.hpp:83
bb::ECCVMMSMRelationImpl::COUNT_ZERO_AT_ROUND_BOUNDARY_OR_TRANSITION
@ COUNT_ZERO_AT_ROUND_BOUNDARY_OR_TRANSITION
Definition
ecc_msm_relation.hpp:89
bb::ECCVMMSMRelationImpl::MSM_TRANSITION_ROUND_ZERO
@ MSM_TRANSITION_ROUND_ZERO
Definition
ecc_msm_relation.hpp:91
bb::ECCVMMSMRelationImpl::MSM_TRANSITION_PC
@ MSM_TRANSITION_PC
Definition
ecc_msm_relation.hpp:93
bb::ECCVMMSMRelationImpl::SKEW_SLOPE_1
@ SKEW_SLOPE_1
Definition
ecc_msm_relation.hpp:57
bb::ECCVMMSMRelationImpl::SKEW_ACC_X
@ SKEW_ACC_X
Definition
ecc_msm_relation.hpp:55
bb::ECCVMMSMRelationImpl::PHASE_SELECTOR_MUTUAL_EXCLUSIVITY
@ PHASE_SELECTOR_MUTUAL_EXCLUSIVITY
Definition
ecc_msm_relation.hpp:73
bb::ECCVMMSMRelationImpl::ROUND_TRANSITION_FORCES_DELTA_ONE
@ ROUND_TRANSITION_FORCES_DELTA_ONE
Definition
ecc_msm_relation.hpp:75
bb::Relation
A wrapper for Relations to expose methods used by the Sumcheck prover or verifier to add the contribu...
Definition
relation_types.hpp:96
bb
Entry point for Barretenberg command-line interface.
Definition
api.hpp:5
relation_types.hpp
bb::field< bb::Bn254FrParams >
src
barretenberg
relations
ecc_vm
ecc_msm_relation.hpp
Generated by
1.9.8