Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
get_contract_instance_impl.hpp
Go to the documentation of this file.
1// AUTOGENERATED FILE
2#pragma once
3
5
6namespace bb::avm2 {
7
8template <typename FF_>
9template <typename ContainerOverSubrelations, typename AllEntities>
10void get_contract_instanceImpl<FF_>::accumulate(ContainerOverSubrelations& evals,
11 const AllEntities& in,
12 [[maybe_unused]] const RelationParameters<FF_>&,
13 [[maybe_unused]] const FF_& scaling_factor)
14{
15 using C = ColumnAndShifts;
16
17 PROFILE_THIS_NAME("accumulate/get_contract_instance");
18
19 const auto constants_MEM_TAG_FF = FF(0);
20 const auto constants_MEM_TAG_U1 = FF(1);
21 const auto constants_AVM_HIGHEST_MEM_ADDRESS = FF(4294967295UL);
22 const auto get_contract_instance_WRITES_OUT_OF_BOUNDS =
23 (FF(1) - in.get(C::get_contract_instance_is_valid_writes_in_bounds));
24 const auto get_contract_instance_DST_OFFSET_DIFF_MAX =
25 (constants_AVM_HIGHEST_MEM_ADDRESS - in.get(C::get_contract_instance_dst_offset));
26
27 {
28 using Accumulator = typename std::tuple_element_t<0, ContainerOverSubrelations>;
29 auto tmp = in.get(C::get_contract_instance_sel) * (FF(1) - in.get(C::get_contract_instance_sel));
30 tmp *= scaling_factor;
31 std::get<0>(evals) += typename Accumulator::View(tmp);
32 }
33 { // WRITE_OUT_OF_BOUNDS_CHECK
34 using Accumulator = typename std::tuple_element_t<1, ContainerOverSubrelations>;
35 auto tmp = in.get(C::get_contract_instance_sel) *
36 ((get_contract_instance_DST_OFFSET_DIFF_MAX *
37 (get_contract_instance_WRITES_OUT_OF_BOUNDS *
38 (FF(1) - in.get(C::get_contract_instance_dst_offset_diff_max_inv)) +
39 in.get(C::get_contract_instance_dst_offset_diff_max_inv)) -
40 FF(1)) +
41 get_contract_instance_WRITES_OUT_OF_BOUNDS);
42 tmp *= scaling_factor;
43 std::get<1>(evals) += typename Accumulator::View(tmp);
44 }
45 { // IS_VALID_MEMBER_ENUM_ONLY_SET_BY_PRECOMPUTED_LOOKUP
46 using Accumulator = typename std::tuple_element_t<2, ContainerOverSubrelations>;
47 auto tmp = get_contract_instance_WRITES_OUT_OF_BOUNDS * in.get(C::get_contract_instance_is_valid_member_enum);
48 tmp *= scaling_factor;
49 std::get<2>(evals) += typename Accumulator::View(tmp);
50 }
51 { // ERROR_AGGREGATION
52 using Accumulator = typename std::tuple_element_t<3, ContainerOverSubrelations>;
53 auto tmp = (in.get(C::get_contract_instance_sel_error) -
54 in.get(C::get_contract_instance_sel) *
55 (FF(1) - in.get(C::get_contract_instance_is_valid_writes_in_bounds) *
56 in.get(C::get_contract_instance_is_valid_member_enum)));
57 tmp *= scaling_factor;
58 std::get<3>(evals) += typename Accumulator::View(tmp);
59 }
60 { // SELECTED_MEMBER
61 using Accumulator = typename std::tuple_element_t<4, ContainerOverSubrelations>;
62 auto tmp =
63 (in.get(C::get_contract_instance_selected_member) -
64 (in.get(C::get_contract_instance_is_deployer) * in.get(C::get_contract_instance_retrieved_deployer_addr) +
65 in.get(C::get_contract_instance_is_class_id) * in.get(C::get_contract_instance_retrieved_class_id) +
66 in.get(C::get_contract_instance_is_init_hash) * in.get(C::get_contract_instance_retrieved_init_hash)));
67 tmp *= scaling_factor;
68 std::get<4>(evals) += typename Accumulator::View(tmp);
69 }
70 {
71 using Accumulator = typename std::tuple_element_t<5, ContainerOverSubrelations>;
72 auto tmp = (in.get(C::get_contract_instance_member_write_offset) -
73 in.get(C::get_contract_instance_is_valid_writes_in_bounds) *
74 (in.get(C::get_contract_instance_dst_offset) + FF(1)));
75 tmp *= scaling_factor;
76 std::get<5>(evals) += typename Accumulator::View(tmp);
77 }
78 {
79 using Accumulator = typename std::tuple_element_t<6, ContainerOverSubrelations>;
80 auto tmp = (in.get(C::get_contract_instance_exists_tag) -
81 in.get(C::get_contract_instance_is_valid_writes_in_bounds) * constants_MEM_TAG_U1);
82 tmp *= scaling_factor;
83 std::get<6>(evals) += typename Accumulator::View(tmp);
84 }
85 {
86 using Accumulator = typename std::tuple_element_t<7, ContainerOverSubrelations>;
87 auto tmp = (in.get(C::get_contract_instance_member_tag) -
88 in.get(C::get_contract_instance_is_valid_writes_in_bounds) * constants_MEM_TAG_FF);
89 tmp *= scaling_factor;
90 std::get<7>(evals) += typename Accumulator::View(tmp);
91 }
92}
93
94} // namespace bb::avm2
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const RelationParameters< FF > &, const FF &scaling_factor)
ColumnAndShifts
Definition columns.hpp:35
AvmFlavorSettings::FF FF
Definition field.hpp:10
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
#define PROFILE_THIS_NAME(name)
Definition op_count.hpp:16
Container for parameters used by the grand product (permutation, lookup) Honk relations.