Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bb::avm2::fuzzer Namespace Reference

Classes

class  FuzzerContext
 
class  FuzzerContractDB
 
class  FuzzerWorldStateManager
 
struct  InstructionBlock
 
class  InstructionMutator
 

Typedefs

using ValueTag = bb::avm2::ValueTag
 
using ProtocolContractsMutationConfig = WeightedSelectionConfig< ProtocolContractsMutationOptions, 2 >
 
using AccumulatedDataMutationConfig = WeightedSelectionConfig< AccumulatedDataMutationOptions, 6 >
 
using GasSettingsMutationConfig = WeightedSelectionConfig< GasSettingsMutationOptions, 4 >
 
using PublicCallRequestMutationConfig = WeightedSelectionConfig< PublicCallRequestMutationOptions, 4 >
 

Enumerations

enum class  ProtocolContractsMutationOptions : uint8_t { Mutate , Remove }
 
enum class  AccumulatedDataMutationOptions : uint8_t {
  NoteHashes , NoteHashesLimit , Nullifiers , NullifiersLimit ,
  L2ToL1Messages , L2ToL1MessagesLimit
}
 
enum class  GasSettingsMutationOptions : uint8_t { GasLimits , TeardownGasLimits , MaxFeesPerGas , MaxPriorityFeesPerGas }
 
enum class  PublicCallRequestMutationOptions : uint8_t { ContractAddress , MsgSender , IsStaticCall , Calldata }
 

Functions

void mutate_bytecode (std::vector< ContractClassWithCommitment > &contract_classes, std::vector< ContractInstance > &contract_instances, const std::vector< AztecAddress > &contract_addresses, std::vector< bb::crypto::merkle_tree::PublicDataLeafValue > &public_data_writes, std::mt19937_64 &rng)
 
void mutate_contract_classes (std::vector< ContractClassWithCommitment > &contract_classes, std::vector< ContractInstance > &contract_instances, std::vector< AztecAddress > &contract_addresses, std::mt19937_64 &rng)
 
void mutate_contract_instances (std::vector< ContractInstance > &contract_instances, std::vector< AztecAddress > &contract_addresses, std::mt19937_64 &rng)
 
void mutate_fuzzer_data (FuzzerData &fuzzer_data, std::mt19937_64 &rng, const FuzzerContext &context)
 
void add_default_instruction_block_if_empty (FuzzerData &fuzzer_data, std::mt19937_64 &rng, const FuzzerContext &context)
 
FuzzerData generate_fuzzer_data (std::mt19937_64 &rng, const FuzzerContext &context)
 
InstructionBlock generate_instruction_block (std::mt19937_64 &rng, const FuzzerContext &context)
 
void mutate_instruction_block (InstructionBlock &instruction_block, std::mt19937_64 &rng, const FuzzerContext &context)
 
std::ostream & operator<< (std::ostream &os, const InstructionBlock &instruction_block)
 
void mutate_protocol_contracts (ProtocolContracts &protocol_contracts, Tx &tx, const std::vector< AztecAddress > &contract_addresses, std::mt19937_64 &rng)
 
void mutate_tx (Tx &tx, std::vector< AztecAddress > &contract_addresses, std::mt19937_64 &rng)
 
void mutate_fuzzer_data_vec (const FuzzerContext &context, std::vector< FuzzerData > &enqueued_calls, std::mt19937_64 &rng, size_t max_size)
 
AccumulatedData generate_non_revertible_accumulated_data (std::mt19937_64 &rng)
 
void mutate_non_revertible_accumulated_data (AccumulatedData &data, std::mt19937_64 &rng)
 
AccumulatedData generate_revertible_accumulated_data (std::mt19937_64 &rng)
 
void mutate_revertible_accumulated_data (AccumulatedData &data, std::mt19937_64 &rng)
 
template<typename T >
void mutate_vec_with_limit (std::vector< T > &vec, std::mt19937_64 &rng, const std::function< void(T &, std::mt19937_64 &)> &mutate_element_function, const std::function< T(std::mt19937_64 &)> &generate_random_element_function, const VecMutationConfig &config, size_t vec_limit)
 
Gas generate_gas (std::mt19937_64 &rng)
 
void mutate_gas (Gas &gas, std::mt19937_64 &rng, const Gas &max)
 
GasFees generate_gas_fees (std::mt19937_64 &rng)
 
void mutate_gas_fees (GasFees &fees, std::mt19937_64 &rng)
 
GasSettings generate_gas_settings (std::mt19937_64 &rng)
 
void mutate_gas_settings (GasSettings &gas_settings, std::mt19937_64 &rng)
 
GasFees compute_effective_gas_fees (const GasFees &gas_fees, const GasSettings &gas_settings)
 
void mutate_public_call_request (PublicCallRequestWithCalldata &request, std::vector< AztecAddress > &contract_addresses, std::mt19937_64 &rng)
 
PublicCallRequestWithCalldata generate_public_call_request (std::vector< AztecAddress > &contract_addresses, std::mt19937_64 &rng)
 

Variables

constexpr uint16_t MAX_INSTRUCTION_BLOCK_SIZE_ON_GENERATION = 10
 
constexpr ProtocolContractsMutationConfig PROTOCOL_CONTRACTS_MUTATION_CONFIGURATION
 
constexpr AccumulatedDataMutationConfig ACCUMULATED_DATA_MUTATION_CONFIGURATION
 
constexpr uint128_t MIN_FEE = 1
 
constexpr uint128_t MAX_FEE = 1000
 
constexpr uint32_t MIN_GAS = 0
 
constexpr uint32_t AVM_MAX_PROCESSABLE_DA_GAS
 
constexpr GasSettingsMutationConfig GAS_SETTINGS_MUTATION_CONFIGURATION
 
constexpr uint16_t MAX_CALLDATA_SIZE = 256
 
constexpr PublicCallRequestMutationConfig PUB_REQUEST_MUTATION_CONFIGURATION
 

Detailed Description

FuzzerContext holds environment data for fuzzer instruction generation and contract management. Top-level fuzzers create and modify this context, but it's passed as const& to instruction generation functions (read-only access during generation).

Typedef Documentation

◆ AccumulatedDataMutationConfig

◆ GasSettingsMutationConfig

◆ ProtocolContractsMutationConfig

◆ PublicCallRequestMutationConfig

◆ ValueTag

Definition at line 15 of file fuzzer_data.cpp.

Enumeration Type Documentation

◆ AccumulatedDataMutationOptions

Enumerator
NoteHashes 
NoteHashesLimit 
Nullifiers 
NullifiersLimit 
L2ToL1Messages 
L2ToL1MessagesLimit 

Definition at line 11 of file accumulated_data.hpp.

◆ GasSettingsMutationOptions

enum class bb::avm2::fuzzer::GasSettingsMutationOptions : uint8_t
strong
Enumerator
GasLimits 
TeardownGasLimits 
MaxFeesPerGas 
MaxPriorityFeesPerGas 

Definition at line 25 of file gas.hpp.

◆ ProtocolContractsMutationOptions

Enumerator
Mutate 
Remove 

Definition at line 11 of file protocol_contracts.hpp.

◆ PublicCallRequestMutationOptions

Enumerator
ContractAddress 
MsgSender 
IsStaticCall 
Calldata 

Definition at line 14 of file public_call_request.hpp.

Function Documentation

◆ add_default_instruction_block_if_empty()

void bb::avm2::fuzzer::add_default_instruction_block_if_empty ( FuzzerData fuzzer_data,
std::mt19937_64 rng,
const FuzzerContext context 
)

Definition at line 52 of file fuzzer_data.cpp.

◆ compute_effective_gas_fees()

GasFees bb::avm2::fuzzer::compute_effective_gas_fees ( const GasFees gas_fees,
const GasSettings gas_settings 
)

Definition at line 121 of file gas.cpp.

◆ generate_fuzzer_data()

FuzzerData bb::avm2::fuzzer::generate_fuzzer_data ( std::mt19937_64 rng,
const FuzzerContext context 
)

Definition at line 78 of file fuzzer_data.cpp.

◆ generate_gas()

Gas bb::avm2::fuzzer::generate_gas ( std::mt19937_64 rng)

Definition at line 31 of file gas.cpp.

◆ generate_gas_fees()

GasFees bb::avm2::fuzzer::generate_gas_fees ( std::mt19937_64 rng)

Definition at line 55 of file gas.cpp.

◆ generate_gas_settings()

GasSettings bb::avm2::fuzzer::generate_gas_settings ( std::mt19937_64 rng)

Definition at line 82 of file gas.cpp.

◆ generate_instruction_block()

InstructionBlock bb::avm2::fuzzer::generate_instruction_block ( std::mt19937_64 rng,
const FuzzerContext context 
)

Definition at line 14 of file instruction_block.cpp.

◆ generate_non_revertible_accumulated_data()

AccumulatedData bb::avm2::fuzzer::generate_non_revertible_accumulated_data ( std::mt19937_64 rng)

Definition at line 167 of file accumulated_data.cpp.

◆ generate_public_call_request()

PublicCallRequestWithCalldata bb::avm2::fuzzer::generate_public_call_request ( std::vector< AztecAddress > &  contract_addresses,
std::mt19937_64 rng 
)

Definition at line 74 of file public_call_request.cpp.

◆ generate_revertible_accumulated_data()

AccumulatedData bb::avm2::fuzzer::generate_revertible_accumulated_data ( std::mt19937_64 rng)

Definition at line 185 of file accumulated_data.cpp.

◆ mutate_bytecode()

void bb::avm2::fuzzer::mutate_bytecode ( std::vector< ContractClassWithCommitment > &  contract_classes,
std::vector< ContractInstance > &  contract_instances,
const std::vector< AztecAddress > &  contract_addresses,
std::vector< bb::crypto::merkle_tree::PublicDataLeafValue > &  public_data_writes,
std::mt19937_64 rng 
)

Definition at line 43 of file bytecode.cpp.

◆ mutate_contract_classes()

void bb::avm2::fuzzer::mutate_contract_classes ( std::vector< ContractClassWithCommitment > &  contract_classes,
std::vector< ContractInstance > &  contract_instances,
std::vector< AztecAddress > &  contract_addresses,
std::mt19937_64 rng 
)

Definition at line 115 of file bytecode.cpp.

◆ mutate_contract_instances()

void bb::avm2::fuzzer::mutate_contract_instances ( std::vector< ContractInstance > &  contract_instances,
std::vector< AztecAddress > &  contract_addresses,
std::mt19937_64 rng 
)

Definition at line 175 of file bytecode.cpp.

◆ mutate_fuzzer_data()

void bb::avm2::fuzzer::mutate_fuzzer_data ( FuzzerData fuzzer_data,
std::mt19937_64 rng,
const FuzzerContext context 
)

Definition at line 17 of file fuzzer_data.cpp.

◆ mutate_fuzzer_data_vec()

void bb::avm2::fuzzer::mutate_fuzzer_data_vec ( const FuzzerContext context,
std::vector< FuzzerData > &  enqueued_calls,
std::mt19937_64 rng,
size_t  max_size 
)

Definition at line 125 of file tx_data.cpp.

◆ mutate_gas()

void bb::avm2::fuzzer::mutate_gas ( Gas gas,
std::mt19937_64 rng,
const Gas max 
)

Definition at line 39 of file gas.cpp.

◆ mutate_gas_fees()

void bb::avm2::fuzzer::mutate_gas_fees ( GasFees fees,
std::mt19937_64 rng 
)

Definition at line 66 of file gas.cpp.

◆ mutate_gas_settings()

void bb::avm2::fuzzer::mutate_gas_settings ( GasSettings gas_settings,
std::mt19937_64 rng 
)

Definition at line 97 of file gas.cpp.

◆ mutate_instruction_block()

void bb::avm2::fuzzer::mutate_instruction_block ( InstructionBlock instruction_block,
std::mt19937_64 rng,
const FuzzerContext context 
)

Definition at line 28 of file instruction_block.cpp.

◆ mutate_non_revertible_accumulated_data()

void bb::avm2::fuzzer::mutate_non_revertible_accumulated_data ( AccumulatedData data,
std::mt19937_64 rng 
)

Definition at line 176 of file accumulated_data.cpp.

◆ mutate_protocol_contracts()

void bb::avm2::fuzzer::mutate_protocol_contracts ( ProtocolContracts protocol_contracts,
Tx tx,
const std::vector< AztecAddress > &  contract_addresses,
std::mt19937_64 rng 
)

Definition at line 34 of file protocol_contracts.cpp.

◆ mutate_public_call_request()

void bb::avm2::fuzzer::mutate_public_call_request ( PublicCallRequestWithCalldata request,
std::vector< AztecAddress > &  contract_addresses,
std::mt19937_64 rng 
)

Definition at line 47 of file public_call_request.cpp.

◆ mutate_revertible_accumulated_data()

void bb::avm2::fuzzer::mutate_revertible_accumulated_data ( AccumulatedData data,
std::mt19937_64 rng 
)

Definition at line 190 of file accumulated_data.cpp.

◆ mutate_tx()

void bb::avm2::fuzzer::mutate_tx ( Tx tx,
std::vector< AztecAddress > &  contract_addresses,
std::mt19937_64 rng 
)

Definition at line 62 of file tx_data.cpp.

◆ mutate_vec_with_limit()

template<typename T >
void bb::avm2::fuzzer::mutate_vec_with_limit ( std::vector< T > &  vec,
std::mt19937_64 rng,
const std::function< void(T &, std::mt19937_64 &)> &  mutate_element_function,
const std::function< T(std::mt19937_64 &)> &  generate_random_element_function,
const VecMutationConfig config,
size_t  vec_limit 
)

Definition at line 32 of file accumulated_data.hpp.

◆ operator<<()

std::ostream & bb::avm2::fuzzer::operator<< ( std::ostream &  os,
const InstructionBlock instruction_block 
)
inline

Definition at line 18 of file instruction_block.hpp.

Variable Documentation

◆ ACCUMULATED_DATA_MUTATION_CONFIGURATION

constexpr AccumulatedDataMutationConfig bb::avm2::fuzzer::ACCUMULATED_DATA_MUTATION_CONFIGURATION
constexpr
Initial value:
{ AccumulatedDataMutationOptions::NoteHashes, 10 },
{ AccumulatedDataMutationOptions::NoteHashesLimit, 1 },
{ AccumulatedDataMutationOptions::Nullifiers, 10 },
{ AccumulatedDataMutationOptions::NullifiersLimit, 1 },
{ AccumulatedDataMutationOptions::L2ToL1Messages, 10 },
{ AccumulatedDataMutationOptions::L2ToL1MessagesLimit, 1 },
})
WeightedSelectionConfig< AccumulatedDataMutationOptions, 6 > AccumulatedDataMutationConfig

Definition at line 22 of file accumulated_data.hpp.

◆ AVM_MAX_PROCESSABLE_DA_GAS

constexpr uint32_t bb::avm2::fuzzer::AVM_MAX_PROCESSABLE_DA_GAS
constexpr
Initial value:
#define MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
#define AVM_EMITUNENCRYPTEDLOG_BASE_DA_GAS
#define AVM_EMITNULLIFIER_BASE_DA_GAS
#define MAX_L2_TO_L1_MSGS_PER_TX
#define AVM_SENDL2TOL1MSG_BASE_DA_GAS
#define MAX_NOTE_HASHES_PER_TX
#define AVM_EMITNOTEHASH_BASE_DA_GAS
#define MAX_NULLIFIERS_PER_TX
#define AVM_SSTORE_DYN_DA_GAS
#define PUBLIC_LOGS_LENGTH

Definition at line 19 of file gas.hpp.

◆ GAS_SETTINGS_MUTATION_CONFIGURATION

constexpr GasSettingsMutationConfig bb::avm2::fuzzer::GAS_SETTINGS_MUTATION_CONFIGURATION
constexpr
Initial value:
{ GasSettingsMutationOptions::GasLimits, 20 },
{ GasSettingsMutationOptions::TeardownGasLimits, 10 },
{ GasSettingsMutationOptions::MaxFeesPerGas, 20 },
{ GasSettingsMutationOptions::MaxPriorityFeesPerGas, 5 },
})
WeightedSelectionConfig< GasSettingsMutationOptions, 4 > GasSettingsMutationConfig
Definition gas.hpp:32

Definition at line 34 of file gas.hpp.

◆ MAX_CALLDATA_SIZE

constexpr uint16_t bb::avm2::fuzzer::MAX_CALLDATA_SIZE = 256
constexpr

Definition at line 12 of file public_call_request.hpp.

◆ MAX_FEE

constexpr uint128_t bb::avm2::fuzzer::MAX_FEE = 1000
constexpr

Definition at line 15 of file gas.hpp.

◆ MAX_INSTRUCTION_BLOCK_SIZE_ON_GENERATION

constexpr uint16_t bb::avm2::fuzzer::MAX_INSTRUCTION_BLOCK_SIZE_ON_GENERATION = 10
constexpr

Definition at line 12 of file instruction_block.cpp.

◆ MIN_FEE

constexpr uint128_t bb::avm2::fuzzer::MIN_FEE = 1
constexpr

Definition at line 14 of file gas.hpp.

◆ MIN_GAS

constexpr uint32_t bb::avm2::fuzzer::MIN_GAS = 0
constexpr

Definition at line 18 of file gas.hpp.

◆ PROTOCOL_CONTRACTS_MUTATION_CONFIGURATION

constexpr ProtocolContractsMutationConfig bb::avm2::fuzzer::PROTOCOL_CONTRACTS_MUTATION_CONFIGURATION
constexpr
Initial value:
{ ProtocolContractsMutationOptions::Mutate, 3 },
{ ProtocolContractsMutationOptions::Remove, 1 },
})
WeightedSelectionConfig< ProtocolContractsMutationOptions, 2 > ProtocolContractsMutationConfig

Definition at line 18 of file protocol_contracts.hpp.

◆ PUB_REQUEST_MUTATION_CONFIGURATION

constexpr PublicCallRequestMutationConfig bb::avm2::fuzzer::PUB_REQUEST_MUTATION_CONFIGURATION
constexpr
Initial value:
{ PublicCallRequestMutationOptions::ContractAddress, 3 },
{ PublicCallRequestMutationOptions::MsgSender, 1 },
{ PublicCallRequestMutationOptions::IsStaticCall, 3 },
{ PublicCallRequestMutationOptions::Calldata, 5 },
})
WeightedSelectionConfig< PublicCallRequestMutationOptions, 4 > PublicCallRequestMutationConfig

Definition at line 23 of file public_call_request.hpp.