48template <
typename Builder>
57 auto result = cycle_group_ct::batch_mul(input.
points, input.
scalars);
58 cycle_group_ct to_be_asserted_equal = cycle_group_ct::conditional_assign(input.
predicate, input.
result, result);
59 result.assert_equal(to_be_asserted_equal);
73template <
typename Builder>
74static MsmInputs<Builder> reconstruct_msm_inputs(
Builder&
builder,
const MultiScalarMul& input)
77 using cycle_scalar_ct =
typename cycle_group_ct::cycle_scalar;
89 if (
builder.is_write_vk_mode()) {
92 builder.set_variable(input_result_infinite.get_witness_index(),
bb::fr(0));
97 cycle_group_ct input_result(input_result_x, input_result_y, input_result_infinite,
false);
104 BB_ASSERT(input.points.size() * 2 == input.scalars.size() * 3,
"MultiScalarMul input size mismatch");
106 for (
size_t i = 0; i < input.points.size(); i += 3) {
107 cycle_group_ct input_point =
110 cycle_scalar_ct scalar =
113 points.push_back(input_point);
114 scalars.push_back(scalar);
117 return { predicate, input_result, points, scalars };
#define BB_ASSERT(expression,...)
static constexpr affine_element affine_one
Implements boolean logic in-circuit.
cycle_group represents a group Element of the proving system's embedded curve, i.e....
static field_t from_witness_index(Builder *ctx, uint32_t witness_index)
uint32_t get_witness_index() const
Get the witness index of the current field element.
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept