Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
fuzz.cpp
Go to the documentation of this file.
2
11
12using namespace bb::avm2::fuzzer;
13
15{
17 for (const auto& cfg_instruction : fuzzer_data.cfg_instructions) {
18 control_flow.process_cfg_instruction(cfg_instruction);
19 }
20 fuzz_info("Instructions: ", fuzzer_data.instruction_blocks);
21 fuzz_info("Calldata: ", fuzzer_data.calldata);
22
23 auto bytecode = control_flow.build_bytecode(fuzzer_data.return_options);
24 fuzz_info("Bytecode: ", bytecode);
25
26 auto cpp_simulator = CppSimulator();
27 JsSimulator* js_simulator = JsSimulator::getInstance();
28 SimulatorResult cpp_result;
29
31
32 auto contract_address = context.register_contract_from_bytecode(bytecode);
33 FuzzerContractDB contract_db = context.get_contract_db();
34
35 // Create the transaction
36 auto tx = create_default_tx(
38
39 FF fee_required_da = FF(tx.effective_gas_fees.fee_per_da_gas) * FF(tx.gas_settings.gas_limits.da_gas);
40 FF fee_required_l2 = FF(tx.effective_gas_fees.fee_per_l2_gas) * FF(tx.gas_settings.gas_limits.l2_gas);
41 ws_mgr->write_fee_payer_balance(tx.fee_payer, fee_required_da + fee_required_l2);
42
43 auto globals = create_default_globals();
44
45 try {
47 cpp_result = cpp_simulator.simulate(*ws_mgr,
49 tx,
50 globals,
51 /*public_data_writes=*/{},
52 /*note_hashes=*/{},
53 /*protocol_contracts=*/{});
54 ws_mgr->revert();
55 } catch (const std::exception& e) {
56 throw std::runtime_error(std::string("CppSimulator threw an exception: ") + e.what());
57 }
58
60 auto js_result = js_simulator->simulate(*ws_mgr,
62 tx,
63 globals,
64 /*public_data_writes=*/{},
65 /*note_hashes=*/{},
66 /*protocol_contracts=*/{});
67
68 context.reset();
69
70 // If the results does not match
71 if (!compare_simulator_results(cpp_result, js_result)) {
72 fuzz_info("CppSimulator ", cpp_result);
73 fuzz_info("JsSimulator ", js_result);
74 throw std::runtime_error("Simulator results are different");
75 }
76 fuzz_info("Simulator results match successfully");
77 fuzz_info("CppSimulator ", cpp_result);
78 fuzz_info("JsSimulator ", js_result);
79 return cpp_result;
80}
#define fuzz_info(...)
Definition constants.hpp:51
const Gas GAS_LIMIT
Definition constants.hpp:40
const FF TRANSACTION_FEE
Definition constants.hpp:38
const FF MSG_SENDER
Definition constants.hpp:33
const bool IS_STATIC_CALL
Definition constants.hpp:39
std::shared_ptr< Napi::ThreadSafeFunction > bytecode
StrictMock< MockContractDB > contract_db
uses barretenberg/vm2 to simulate the bytecode
Definition simulator.hpp:75
uses the yarn-project/simulator to simulate the bytecode Singleton, because initializing the simulato...
Definition simulator.hpp:88
SimulatorResult simulate(fuzzer::FuzzerWorldStateManager &ws_mgr, fuzzer::FuzzerContractDB &contract_db, const Tx &tx, const GlobalVariables &globals, const std::vector< bb::crypto::merkle_tree::PublicDataLeafValue > &public_data_writes, const std::vector< FF > &note_hashes, const ProtocolContracts &protocol_contracts) override
static JsSimulator * getInstance()
static FuzzerWorldStateManager * getInstance()
Definition dbs.hpp:80
void write_fee_payer_balance(const AztecAddress &fee_payer, const FF &balance)
Definition dbs.cpp:234
SimulatorResult fuzz_against_ts_simulator(FuzzerData &fuzzer_data, FuzzerContext &context)
fuzz CPP vs JS simulator with the given fuzzer data
Definition fuzz.cpp:14
FuzzerWorldStateManager * ws_mgr
Definition fuzz.test.cpp:16
AvmFlavorSettings::FF FF
Definition field.hpp:10
bool compare_simulator_results(SimulatorResult &result1, SimulatorResult &result2)
Tx create_default_tx(const AztecAddress &contract_address, const AztecAddress &sender_address, const std::vector< FF > &calldata, const FF &transaction_fee, bool is_static_call, const Gas &gas_limit)
GlobalVariables create_default_globals()
Definition simulator.cpp:68
describes the data which will be used for fuzzing Should contain instructions, calldata,...
ReturnOptions return_options
std::vector< bb::avm2::FF > calldata
std::vector< CFGInstruction > cfg_instructions
std::vector< InstructionBlock > instruction_blocks