38 if (public_data_writes_size > 0) {
40 throw std::runtime_error(
41 "Should be unreachable: generated " +
std::to_string(public_data_writes_size) +
44 public_data_writes_counter[public_data_writes_size - 1]++;
47 size_t note_hashes_size = tx_effect.note_hashes.size();
48 if (note_hashes_size > 0) {
50 throw std::runtime_error(
"Should be unreachable: generated " +
std::to_string(note_hashes_size) +
53 note_hashes_counter[note_hashes_size - 1]++;
56 size_t nullifiers_size = tx_effect.nullifiers.size();
57 if (nullifiers_size > 0) {
59 throw std::runtime_error(
"Should be unreachable: generated " +
std::to_string(nullifiers_size) +
62 nullifiers_counter[nullifiers_size - 1]++;
65 size_t l2_to_l1_size = tx_effect.l2_to_l1_msgs.size();
66 if (l2_to_l1_size > 0) {
68 throw std::runtime_error(
"Should be unreachable: generated " +
std::to_string(l2_to_l1_size) +
71 l2_to_l1_msgs_counter[l2_to_l1_size - 1]++;
76 uint32_t logs_field_count = 0;
77 for (
const auto& log : tx_effect.public_logs) {
78 logs_field_count += 2 +
static_cast<uint32_t
>(log.fields.size());
80 if (logs_field_count > 0) {
81 uint8_t bucket =
static_cast<uint8_t
>(31 -
std::countl_zero(logs_field_count));
83 throw std::runtime_error(
"Should be unreachable: generated " +
std::to_string(logs_field_count) +
86 public_logs_counter[bucket]++;
95 memset(enqueued_calls_counter, 0,
sizeof(enqueued_calls_counter));
96 memset(public_data_writes_counter, 0,
sizeof(public_data_writes_counter));
97 memset(note_hashes_counter, 0,
sizeof(note_hashes_counter));
98 memset(nullifiers_counter, 0,
sizeof(nullifiers_counter));
99 memset(l2_to_l1_msgs_counter, 0,
sizeof(l2_to_l1_msgs_counter));
100 memset(public_logs_counter, 0,
sizeof(public_logs_counter));
102 const char* simulator_path =
std::getenv(
"AVM_SIMULATOR_BIN");
103 if (simulator_path ==
nullptr) {
104 throw std::runtime_error(
"AVM_SIMULATOR_BIN is not set");
106 std::string simulator_path_str(simulator_path);
113 size_t serialized_fuzzer_data_size,
133 msgpack::unpack((
reinterpret_cast<const char*
>(
data)), size).get().convert(tx_data);
134 }
catch (
const std::exception& e) {
135 fuzz_info(
"Failed to deserialize input in TestOneInput, using default. Exception: ", e.what());
142 enqueued_calls_counter[num_calls - 1]++;
150 update_effects_counters(simulation_result);
#define MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
#define MAX_L2_TO_L1_MSGS_PER_TX
#define MAX_NOTE_HASHES_PER_TX
#define MAX_NULLIFIERS_PER_TX
StrictMock< MockContractDB > contract_db
static void initialize(std::string &simulator_path)
static FuzzerWorldStateManager * getInstance()
world_state::WorldStateRevision fork()
const std::vector< MemoryValue > data
FuzzerWorldStateManager * ws_mgr
SimulatorResult fuzz_tx(FuzzerWorldStateManager &ws_mgr, FuzzerContractDB &contract_db, FuzzerTxData &tx_data)
Fuzz CPP vs JS simulator with a full transaction containing multiple enqueued calls.
void setup_fuzzer_state(FuzzerWorldStateManager &ws_mgr, FuzzerContractDB &contract_db, const FuzzerTxData &tx_data)
size_t mutate_tx_data(FuzzerContext &context, uint8_t *serialized_fuzzer_data, size_t serialized_fuzzer_data_size, size_t max_size, unsigned int seed)
FuzzerTxData create_default_tx_data(std::mt19937_64 &rng, FuzzerContext &context)
void fund_fee_payer(FuzzerWorldStateManager &ws_mgr, const Tx &tx)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::string to_string(bb::avm2::ValueTag tag)
PublicTxEffect public_tx_effect
std::vector< PublicDataWrite > public_data_writes
std::vector< PublicCallRequestWithCalldata > setup_enqueued_calls
std::vector< PublicCallRequestWithCalldata > app_logic_enqueued_calls
constexpr size_t MAX_ENQUEUED_CALLS_COUNTER
__attribute__((section("__libfuzzer_extra_counters"))) uint8_t enqueued_calls_counter[MAX_ENQUEUED_CALLS_COUNTER]
int LLVMFuzzerInitialize(int *, char ***)
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
constexpr size_t MAX_PUBLIC_LOGS_COUNTER
size_t LLVMFuzzerCustomMutator(uint8_t *serialized_fuzzer_data, size_t serialized_fuzzer_data_size, size_t max_size, unsigned int seed)