106 uint64_t end_log_address =
static_cast<uint64_t
>(
log_offset) +
static_cast<uint64_t
>(
log_size) - 1;
117 return { .
id =
context->get_context_id(),
119 .contract_addr =
context->get_address(),
120 .is_static =
context->get_is_static(),
121 .numUnencryptedLogFields =
122 context->get_side_effect_tracker().get_side_effects().get_num_unencrypted_log_fields() };
128 std::vector<FF> log_fields;
130 log_fields.reserve(total_log_fields_size);
132 log_fields.emplace_back(input.
log_size);
137 for (
size_t j = 0; j < max_index; j++) {
145 auto entry_value = log_fields[entry_idx];
147 log_fields.emplace_back(modified_value);
158 size_t set_incorrect_tag_at = ((input.
selection_encoding >> max_index) % log_fields.size()) + 2;
162 while (incorrect_tag == MemoryTag::FF) {
166 static_cast<uint64_t
>(MemoryTag::MAX));
190 int choice = dist(rng);
195 input.
contract_address =
FF(addr_dist(rng), addr_dist(rng), addr_dist(rng), addr_dist(rng));
201 int new_addr =
static_cast<int>(input.
log_offset) + addr_change(rng);
202 input.
log_offset =
static_cast<uint32_t
>(new_addr);
208 input.
log_size = num_fields_dist(rng);
215 size_t entry_idx = entry_dist(rng);
223 size_t value_idx = index_dist(rng);
225 FF value =
FF(dist(rng), dist(rng), dist(rng), dist(rng));
234 int choice = err_dist(rng);
310 trace.
set(avm2::Column::public_inputs_cols_0_, pi_row, log_fields.size());
311 trace.
set(avm2::Column::public_inputs_sel, pi_row, 1);
314 for (
FF log_field : log_fields) {
316 trace.
set(avm2::Column::public_inputs_sel, pi_row, 1);
318 trace.
set(avm2::Column::public_inputs_cols_0_, pi_row, log_field);
332 .inputs = { MemoryValue::from<uint32_t>(input.
log_size) },
335 auto exec_log_row =
trace.
get_column_rows(avm2::Column::execution_sel_exec_dispatch_emit_unencrypted_log);
337 trace.
set(avm2::Column::execution_register_0_, exec_log_row - 1, input.
log_size);
338 trace.
set(avm2::Column::execution_sel_opcode_error, exec_log_row - 1, error ? 1 : 0);
345 if (getenv(
"AVM_DEBUG") !=
nullptr) {
346 info(
"Debugging trace:");
351 check_relation<emit_log_rel>(
trace);
352 check_all_interactions<EmitUnencryptedLogTraceBuilder>(
trace);
353 check_interaction<ExecutionTraceBuilder, bb::avm2::perm_execution_dispatch_to_emit_unencrypted_log_settings>(
trace);
#define FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH
#define PUBLIC_LOG_HEADER_LENGTH
#define AVM_HIGHEST_MEM_ADDRESS
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_PUBLIC_LOGS_ROW_IDX
void run(uint32_t starting_row=0)
static TaggedValue from(T value)
static TaggedValue from_tag_truncating(ValueTag tag, FF value)
Sets up gadgets and instance managers to provide a context for fuzzing. NOTE: rudimentary set up for ...
DeduplicatingEventEmitter< GreaterThanEvent > greater_than_emitter
std::unique_ptr< simulation::ContextInterface > make_enqueued_fuzzing_context(AztecAddress address=AztecAddress(0), AztecAddress msg_sender=AztecAddress(0), bool is_static=false, FF transaction_fee=FF(0), std::span< const FF > calldata={}, Gas gas_limit=GAS_LIMIT, Gas gas_used=GAS_USED_BY_PRIVATE, TransactionPhase phase=TransactionPhase::APP_LOGIC)
DeduplicatingEventEmitter< RangeCheckEvent > range_check_emitter
DeduplicatingEventEmitter< FieldGreaterThanEvent > field_gt_emitter
ExecutionIdManager execution_id_manager
simulation::Instruction build() const
void process(const simulation::EventEmitterInterface< simulation::AluEvent >::Container &events, TraceContainer &trace)
Process the ALU events and populate the ALU relevant columns in the trace.
void process(const simulation::EventEmitterInterface< simulation::ExecutionEvent >::Container &ex_events, TraceContainer &trace)
void process(const simulation::EventEmitterInterface< simulation::FieldGreaterThanEvent >::Container &events, TraceContainer &trace)
void process(const simulation::EventEmitterInterface< simulation::GreaterThanEvent >::Container &events, TraceContainer &trace)
void process_misc(TraceContainer &trace, const uint32_t num_rows=MAX_AVM_TRACE_SIZE)
void process_power_of_2(TraceContainer &trace)
void process_tag_parameters(TraceContainer &trace)
void process_sel_range_8(TraceContainer &trace)
void process(const simulation::EventEmitterInterface< simulation::RangeCheckEvent >::Container &events, TraceContainer &trace)
uint32_t get_column_rows(Column col) const
void set(Column col, uint32_t row, const FF &value)
RangeCheckTraceBuilder range_check_builder
PrecomputedTraceBuilder precomputed_builder
FieldGreaterThanTraceBuilder field_gt_builder
GreaterThanTraceBuilder gt_builder
const std::vector< MemoryValue > data
const uint32_t max_log_fields
const uint8_t default_log_fields
ContextEvent fill_context_event(std::unique_ptr< ContextInterface > &context)
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
size_t LLVMFuzzerCustomMutator(uint8_t *data, size_t size, size_t max_size, unsigned int seed)
std::vector< FF > generate_and_set_log_fields(const EmitUnencryptedLogFuzzerInput &input, MemoryInterface *mem)
uint8_t buffer[RANDOM_BUFFER_SIZE]
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Instruction wire_instruction