31 bool error =
event.error_memory_out_of_bounds ||
event.error_too_many_log_fields ||
event.error_tag_mismatch ||
35 bool seen_wrong_tag =
false;
38 bool is_log_length_row = i == 0;
39 bool is_contract_address_row = i == 1;
40 bool is_value_row = i > 1;
48 if (value_index <
event.values.size()) {
49 value =
event.values[value_index].as_ff();
50 tag =
event.values[value_index].get_tag();
56 seen_wrong_tag =
true;
59 uint32_t expected_next_log_fields =
62 FF public_inputs_value = 0;
64 if (is_log_length_row) {
65 public_inputs_value =
event.log_size;
66 }
else if (is_contract_address_row) {
67 public_inputs_value =
event.contract_address;
68 }
else if (is_value_row) {
69 public_inputs_value =
value;
74 { C::emit_public_log_sel, 1 },
75 { C::emit_public_log_execution_clk,
event.execution_clk },
76 { C::emit_public_log_space_id,
event.space_id },
77 { C::emit_public_log_log_address, log_address },
78 { C::emit_public_log_log_size,
event.log_size },
79 { C::emit_public_log_contract_address,
event.contract_address },
80 { C::emit_public_log_prev_num_public_log_fields,
event.prev_num_public_log_fields },
81 { C::emit_public_log_next_num_public_log_fields,
event.next_num_public_log_fields },
82 { C::emit_public_log_is_static,
event.is_static },
83 { C::emit_public_log_error, error },
84 { C::emit_public_log_discard,
discard },
85 { C::emit_public_log_start, i == 0 },
87 { C::emit_public_log_remaining_rows, remaining_rows },
88 { C::emit_public_log_remaining_rows_inv, remaining_rows },
89 { C::emit_public_log_error_out_of_bounds,
event.error_memory_out_of_bounds },
90 { C::emit_public_log_max_mem_size,
static_cast<uint64_t
>(
AVM_MEMORY_SIZE) },
91 { C::emit_public_log_end_log_address_upper_bound, log_address +
event.log_size },
92 { C::emit_public_log_error_too_many_log_fields,
event.error_too_many_log_fields },
93 { C::emit_public_log_expected_next_log_fields, expected_next_log_fields },
95 { C::emit_public_log_error_tag_mismatch,
event.error_tag_mismatch },
96 { C::emit_public_log_seen_wrong_tag, seen_wrong_tag },
97 { C::emit_public_log_sel_write_to_public_inputs, !error && !
discard },
98 { C::emit_public_log_is_write_contract_address, is_contract_address_row },
99 { C::emit_public_log_is_write_memory_value, is_value_row },
100 { C::emit_public_log_sel_read_memory, is_value_row && !
event.error_memory_out_of_bounds },
101 { C::emit_public_log_value,
value },
102 { C::emit_public_log_tag,
static_cast<uint8_t
>(
tag) },
103 { C::emit_public_log_correct_tag, correct_tag },
104 { C::emit_public_log_tag_inv,
static_cast<uint8_t
>(
tag) },
105 { C::emit_public_log_public_inputs_index,
108 { C::emit_public_log_public_inputs_value, public_inputs_value },
119 trace.invert_columns({ { C::emit_public_log_remaining_rows_inv, C::emit_public_log_tag_inv } });