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 try {
45 cpp_result = cpp_simulator.simulate(*ws_mgr, contract_db, tx);
46 ws_mgr->revert();
47 } catch (const std::exception& e) {
48 throw std::runtime_error(std::string("CppSimulator threw an exception: ") + e.what());
49 }
50
52 auto js_result = js_simulator->simulate(*ws_mgr, contract_db, tx);
53
54 context.reset();
55
56 // If the results does not match
57 if (!compare_simulator_results(cpp_result, js_result)) {
58 fuzz_info("CppSimulator ", cpp_result);
59 fuzz_info("JsSimulator ", js_result);
60 throw std::runtime_error("Simulator results are different");
61 }
62 fuzz_info("Simulator results match successfully");
63 fuzz_info("CppSimulator ", cpp_result);
64 fuzz_info("JsSimulator ", js_result);
65 return cpp_result;
66}
#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:54
uses the yarn-project/simulator to simulate the bytecode Singleton, because initializing the simulato...
Definition simulator.hpp:63
static JsSimulator * getInstance()
SimulatorResult simulate(fuzzer::FuzzerWorldStateManager &ws_mgr, fuzzer::FuzzerContractDB &contract_db, const Tx &tx) override
static FuzzerWorldStateManager * getInstance()
Definition dbs.hpp:80
void write_fee_payer_balance(const AztecAddress &fee_payer, const FF &balance)
Definition dbs.cpp:227
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)
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< std::vector< FuzzInstruction > > instruction_blocks