Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
tx.fuzzer.cpp
Go to the documentation of this file.
2
3#include <cstdint>
4#include <string>
5
9
10using namespace bb::avm2::fuzzer;
11using namespace bb::avm2::simulation;
12
13extern "C" int LLVMFuzzerInitialize(int*, char***)
14{
15 const char* simulator_path = std::getenv("AVM_SIMULATOR_BIN");
16 if (simulator_path == nullptr) {
17 throw std::runtime_error("AVM_SIMULATOR_BIN is not set");
18 }
19 std::string simulator_path_str(simulator_path);
20 JsSimulator::initialize(simulator_path_str);
22 return 0;
23}
24
25extern "C" size_t LLVMFuzzerCustomMutator(uint8_t* serialized_fuzzer_data,
26 size_t serialized_fuzzer_data_size,
27 size_t max_size,
28 unsigned int seed)
29{
30 // Haven't thought much about the lifecycle of this in the tx fuzzer. Maybe we want it in the serialized data?
31 // Or we can regenerate from the serialized data.
33 return mutate_tx_data(context, serialized_fuzzer_data, serialized_fuzzer_data_size, max_size, seed);
34}
35
36extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
37{
40 ws_mgr->fork();
41
43
44 FuzzerTxData tx_data;
45 try {
46 msgpack::unpack((reinterpret_cast<const char*>(data)), size).get().convert(tx_data);
47 } catch (const std::exception& e) {
48 fuzz_info("Failed to deserialize input in TestOneInput, using default. Exception: ", e.what());
50 }
51
52 // Setup contracts and fund fee payer
54 fund_fee_payer(*ws_mgr, tx_data.tx);
55
56 fuzz_tx(*ws_mgr, contract_db, tx_data);
58
59 return 0;
60}
#define fuzz_info(...)
Definition constants.hpp:51
StrictMock< MockContractDB > contract_db
static void initialize(std::string &simulator_path)
static FuzzerWorldStateManager * getInstance()
Definition dbs.hpp:80
world_state::WorldStateRevision fork()
Definition dbs.cpp:204
const std::vector< MemoryValue > data
FuzzerWorldStateManager * ws_mgr
Definition fuzz.test.cpp:16
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.
FuzzerTxData create_default_tx_data(std::mt19937_64 &rng, const FuzzerContext &context)
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)
void fund_fee_payer(FuzzerWorldStateManager &ws_mgr, const Tx &tx)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
int LLVMFuzzerInitialize(int *, char ***)
Definition tx.fuzzer.cpp:13
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
Definition tx.fuzzer.cpp:36
size_t LLVMFuzzerCustomMutator(uint8_t *serialized_fuzzer_data, size_t serialized_fuzzer_data_size, size_t max_size, unsigned int seed)
Definition tx.fuzzer.cpp:25