@@ -14,7 +14,7 @@ template <typename FF_> class emit_notehashImpl {
1414 public:
1515 using FF = FF_;
1616
17- static constexpr std::array<size_t , 5 > SUBRELATION_PARTIAL_LENGTHS = { 5 , 3 , 4 , 3 , 3 };
17+ static constexpr std::array<size_t , 7 > SUBRELATION_PARTIAL_LENGTHS = { 3 , 5 , 4 , 3 , 4 , 3 , 3 };
1818
1919 template <typename AllEntities> inline static bool skip (const AllEntities& in)
2020 {
@@ -37,47 +37,63 @@ template <typename FF_> class emit_notehashImpl {
3737 const auto execution_REMAINING_NOTE_HASH_WRITES =
3838 (constants_MAX_NOTE_HASHES_PER_TX - in.get (C::execution_prev_num_note_hashes_emitted));
3939
40- { // EMIT_NOTEHASH_MAX_NOTE_HASH_WRITES_REACHED
40+ {
4141 using Accumulator = typename std::tuple_element_t <0 , ContainerOverSubrelations>;
42+ auto tmp = in.get (C::execution_sel_reached_max_note_hashes) *
43+ (FF (1 ) - in.get (C::execution_sel_reached_max_note_hashes));
44+ tmp *= scaling_factor;
45+ std::get<0 >(evals) += typename Accumulator::View (tmp);
46+ }
47+ { // MAX_NOTE_HASHES_REACHED
48+ using Accumulator = typename std::tuple_element_t <1 , ContainerOverSubrelations>;
4249 auto tmp =
4350 in.get (C::execution_sel_execute_emit_notehash) *
44- ((execution_REMAINING_NOTE_HASH_WRITES * (in.get (C::execution_sel_opcode_error ) *
51+ ((execution_REMAINING_NOTE_HASH_WRITES * (in.get (C::execution_sel_reached_max_note_hashes ) *
4552 (FF (1 ) - in.get (C::execution_remaining_note_hashes_inv)) +
4653 in.get (C::execution_remaining_note_hashes_inv)) -
4754 FF (1 )) +
48- in.get (C::execution_sel_opcode_error ));
55+ in.get (C::execution_sel_reached_max_note_hashes ));
4956 tmp *= scaling_factor;
50- std::get<0 >(evals) += typename Accumulator::View (tmp);
57+ std::get<1 >(evals) += typename Accumulator::View (tmp);
5158 }
52- { // EMIT_NOTEHASH_LIMIT_REACHED
53- using Accumulator = typename std::tuple_element_t <1 , ContainerOverSubrelations>;
59+ { // OPCODE_ERROR_IF_MAX_NOTE_HASHES_REACHED_OR_STATIC
60+ using Accumulator = typename std::tuple_element_t <2 , ContainerOverSubrelations>;
61+ auto tmp =
62+ in.get (C::execution_sel_execute_emit_notehash) *
63+ ((FF (1 ) - in.get (C::execution_sel_reached_max_note_hashes)) * (FF (1 ) - in.get (C::execution_is_static)) -
64+ (FF (1 ) - in.get (C::execution_sel_opcode_error)));
65+ tmp *= scaling_factor;
66+ std::get<2 >(evals) += typename Accumulator::View (tmp);
67+ }
68+ {
69+ using Accumulator = typename std::tuple_element_t <3 , ContainerOverSubrelations>;
5470 auto tmp = in.get (C::execution_sel_execute_emit_notehash) *
5571 ((FF (1 ) - in.get (C::execution_sel_opcode_error)) - in.get (C::execution_sel_write_note_hash));
5672 tmp *= scaling_factor;
57- std::get<1 >(evals) += typename Accumulator::View (tmp);
73+ std::get<3 >(evals) += typename Accumulator::View (tmp);
5874 }
5975 { // EMIT_NOTEHASH_TREE_ROOT_NOT_CHANGED
60- using Accumulator = typename std::tuple_element_t <2 , ContainerOverSubrelations>;
76+ using Accumulator = typename std::tuple_element_t <4 , ContainerOverSubrelations>;
6177 auto tmp = in.get (C::execution_sel_execute_emit_notehash) * in.get (C::execution_sel_opcode_error) *
6278 (in.get (C::execution_prev_note_hash_tree_root) - in.get (C::execution_note_hash_tree_root));
6379 tmp *= scaling_factor;
64- std::get<2 >(evals) += typename Accumulator::View (tmp);
80+ std::get<4 >(evals) += typename Accumulator::View (tmp);
6581 }
6682 { // EMIT_NOTEHASH_TREE_SIZE_INCREASE
67- using Accumulator = typename std::tuple_element_t <3 , ContainerOverSubrelations>;
83+ using Accumulator = typename std::tuple_element_t <5 , ContainerOverSubrelations>;
6884 auto tmp = in.get (C::execution_sel_execute_emit_notehash) *
6985 ((in.get (C::execution_prev_note_hash_tree_size) + in.get (C::execution_sel_write_note_hash)) -
7086 in.get (C::execution_note_hash_tree_size));
7187 tmp *= scaling_factor;
72- std::get<3 >(evals) += typename Accumulator::View (tmp);
88+ std::get<5 >(evals) += typename Accumulator::View (tmp);
7389 }
7490 { // EMIT_NOTEHASH_NUM_NOTE_HASHES_EMITTED_INCREASE
75- using Accumulator = typename std::tuple_element_t <4 , ContainerOverSubrelations>;
91+ using Accumulator = typename std::tuple_element_t <6 , ContainerOverSubrelations>;
7692 auto tmp = in.get (C::execution_sel_execute_emit_notehash) *
7793 ((in.get (C::execution_prev_num_note_hashes_emitted) + in.get (C::execution_sel_write_note_hash)) -
7894 in.get (C::execution_num_note_hashes_emitted));
7995 tmp *= scaling_factor;
80- std::get<4 >(evals) += typename Accumulator::View (tmp);
96+ std::get<6 >(evals) += typename Accumulator::View (tmp);
8197 }
8298 }
8399};
@@ -89,26 +105,26 @@ template <typename FF> class emit_notehash : public Relation<emit_notehashImpl<F
89105 static std::string get_subrelation_label (size_t index)
90106 {
91107 switch (index) {
92- case 0 :
93- return " EMIT_NOTEHASH_MAX_NOTE_HASH_WRITES_REACHED" ;
94108 case 1 :
95- return " EMIT_NOTEHASH_LIMIT_REACHED " ;
109+ return " MAX_NOTE_HASHES_REACHED " ;
96110 case 2 :
111+ return " OPCODE_ERROR_IF_MAX_NOTE_HASHES_REACHED_OR_STATIC" ;
112+ case 4 :
97113 return " EMIT_NOTEHASH_TREE_ROOT_NOT_CHANGED" ;
98- case 3 :
114+ case 5 :
99115 return " EMIT_NOTEHASH_TREE_SIZE_INCREASE" ;
100- case 4 :
116+ case 6 :
101117 return " EMIT_NOTEHASH_NUM_NOTE_HASHES_EMITTED_INCREASE" ;
102118 }
103119 return std::to_string (index);
104120 }
105121
106122 // Subrelation indices constants, to be used in tests.
107- static constexpr size_t SR_EMIT_NOTEHASH_MAX_NOTE_HASH_WRITES_REACHED = 0 ;
108- static constexpr size_t SR_EMIT_NOTEHASH_LIMIT_REACHED = 1 ;
109- static constexpr size_t SR_EMIT_NOTEHASH_TREE_ROOT_NOT_CHANGED = 2 ;
110- static constexpr size_t SR_EMIT_NOTEHASH_TREE_SIZE_INCREASE = 3 ;
111- static constexpr size_t SR_EMIT_NOTEHASH_NUM_NOTE_HASHES_EMITTED_INCREASE = 4 ;
123+ static constexpr size_t SR_MAX_NOTE_HASHES_REACHED = 1 ;
124+ static constexpr size_t SR_OPCODE_ERROR_IF_MAX_NOTE_HASHES_REACHED_OR_STATIC = 2 ;
125+ static constexpr size_t SR_EMIT_NOTEHASH_TREE_ROOT_NOT_CHANGED = 4 ;
126+ static constexpr size_t SR_EMIT_NOTEHASH_TREE_SIZE_INCREASE = 5 ;
127+ static constexpr size_t SR_EMIT_NOTEHASH_NUM_NOTE_HASHES_EMITTED_INCREASE = 6 ;
112128};
113129
114130} // namespace bb::avm2
0 commit comments