Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
fuzzer_lib.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <random>
5#include <tuple>
6#include <vector>
7
18
19// A transaction with multiple enqueued calls and tx-level parameters
20// Almost identical to the fast simulation input
22 // Enqueued calls data
23 std::vector<FuzzerData> input_programs;
24 // These are the contract classes and instances that will be registered to addresses in the WS
25 // The contract addresses may contain duplicates if multiple contracts derive to the same address
28 std::vector<AztecAddress> contract_addresses;
29
30 Tx tx; // This tx has placeholders for enqueued calls, they will be filled in during fuzzing
33
34 // Public data tree writes to be applied during state setup (e.g., for bytecode upgrades)
35 std::vector<bb::crypto::merkle_tree::PublicDataLeafValue> public_data_writes;
36 std::vector<FF> note_hashes;
37
42 tx,
47};
48
49inline std::ostream& operator<<(std::ostream& os, const FuzzerTxData& data)
50{
51 os << "FuzzerTxData { "
52 << "\n tx: " << data.tx << ","
53 << "\n global_variables: " << data.global_variables << ","
54 << "\n protocol_contracts: " << data.protocol_contracts << "\n}";
55 return os;
56}
57
58using Bytecode = std::vector<uint8_t>;
61
62// Mutation configuration
72
74
83});
84
85// Build bytecode and contract artifacts from fuzzer data
87
88// Create a default FuzzerTxData with sensible defaults
91
92// Setup fuzzer state: register contracts and addresses in the world state
95 const FuzzerTxData& tx_data);
96
97// Fund the fee payer with enough balance for the transaction
99
100// Run the differential fuzzer comparing CPP vs JS simulator
103 FuzzerTxData& tx_data);
104
105// Run the prover fuzzer: fast simulation, hint collection, comparison, and check_circuit
106// Returns simulation result on success, throws if the input should be rejected
109 FuzzerTxData& tx_data);
110
111// Common custom mutator logic shared between fuzzers
112// Returns the new size of the mutated data, or 0 if mutation failed
114 uint8_t* serialized_fuzzer_data,
115 size_t serialized_fuzzer_data_size,
116 size_t max_size,
117 unsigned int seed);
118
120
StrictMock< MockContractDB > contract_db
const std::vector< MemoryValue > data
FuzzerWorldStateManager * ws_mgr
Definition fuzz.test.cpp:16
void setup_fuzzer_state(bb::avm2::fuzzer::FuzzerWorldStateManager &ws_mgr, bb::avm2::fuzzer::FuzzerContractDB &contract_db, const FuzzerTxData &tx_data)
void fund_fee_payer(bb::avm2::fuzzer::FuzzerWorldStateManager &ws_mgr, const Tx &tx)
void populate_context_from_tx_data(FuzzerContext &context, const FuzzerTxData &tx_data)
FuzzerTxDataMutationType
WeightedSelectionConfig< FuzzerTxDataMutationType, 7 > FuzzerTxDataMutationConfig
SimulatorResult fuzz_tx(bb::avm2::fuzzer::FuzzerWorldStateManager &ws_mgr, bb::avm2::fuzzer::FuzzerContractDB &contract_db, FuzzerTxData &tx_data)
Fuzz CPP vs JS simulator with a full transaction containing multiple enqueued calls.
ContractArtifacts build_bytecode_and_artifacts(FuzzerData &fuzzer_data)
std::ostream & operator<<(std::ostream &os, const FuzzerTxData &data)
std::tuple< Bytecode, ContractClassWithCommitment, ContractInstance > ContractArtifacts
TxSimulationResult fuzz_prover(bb::avm2::fuzzer::FuzzerWorldStateManager &ws_mgr, bb::avm2::fuzzer::FuzzerContractDB &contract_db, FuzzerTxData &tx_data)
Run the prover fuzzer: fast simulation, hint collection, comparison, and check_circuit.
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)
std::vector< uint8_t > Bytecode
constexpr FuzzerTxDataMutationConfig FUZZER_TX_DATA_MUTATION_CONFIGURATION
FuzzerTxData create_default_tx_data(std::mt19937_64 &rng, FuzzerContext &context)
bool compare_cpp_simulator_results(const std::vector< TxSimulationResult > &results)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
describes the data which will be used for fuzzing Should contain instructions, calldata,...
std::vector< AztecAddress > contract_addresses
MSGPACK_FIELDS(input_programs, contract_classes, contract_instances, contract_addresses, tx, global_variables, protocol_contracts, public_data_writes, note_hashes)
ProtocolContracts protocol_contracts
std::vector< FF > note_hashes
std::vector< FuzzerData > input_programs
std::vector< ContractInstance > contract_instances
std::vector< ContractClassWithCommitment > contract_classes
GlobalVariables global_variables
std::vector< bb::crypto::merkle_tree::PublicDataLeafValue > public_data_writes