Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
simulator.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <vector>
4
12
13using namespace bb::avm2::simulation;
14using namespace bb::avm2;
15
21 std::string ws_data_dir;
26 // Having addresses here avoids doing re-work in TS.
28 // Public data tree writes to apply before simulation (e.g., for bytecode upgrades)
29 std::vector<bb::crypto::merkle_tree::PublicDataLeafValue> public_data_writes;
30 // Note hashes to be applied before simulation
31 std::vector<FF> note_hashes;
32 // Protocol contracts mapping (canonical address index -> derived address)
34
37 tx,
38 globals,
44};
45
55
56class Simulator {
57 public:
58 virtual ~Simulator() = default;
59 Simulator(const Simulator&) = delete;
60 Simulator& operator=(const Simulator&) = delete;
61 Simulator(Simulator&&) = delete;
63 Simulator() = default;
67 const Tx& tx,
68 const GlobalVariables& globals,
69 const std::vector<bb::crypto::merkle_tree::PublicDataLeafValue>& public_data_writes,
70 const std::vector<FF>& note_hashes,
71 const ProtocolContracts& protocol_contracts) = 0;
72};
73
75class CppSimulator : public Simulator {
76 public:
79 const Tx& tx,
80 const GlobalVariables& globals,
81 const std::vector<bb::crypto::merkle_tree::PublicDataLeafValue>& public_data_writes,
82 const std::vector<FF>& note_hashes,
83 const ProtocolContracts& protocol_contracts) override;
84};
85
88class JsSimulator : public Simulator {
89 protected:
91 std::string simulator_path;
92 JsSimulator(std::string& simulator_path);
94
95 public:
96 JsSimulator(JsSimulator& other) = delete;
97 void operator=(const JsSimulator&) = delete;
100 ~JsSimulator() = default;
101
102 static JsSimulator* getInstance();
103 static void initialize(std::string& simulator_path);
104
107 const Tx& tx,
108 const GlobalVariables& globals,
109 const std::vector<bb::crypto::merkle_tree::PublicDataLeafValue>& public_data_writes,
110 const std::vector<FF>& note_hashes,
111 const ProtocolContracts& protocol_contracts) override;
112};
113
115
117 const AztecAddress& sender_address,
118 const std::vector<FF>& calldata,
119 [[maybe_unused]] const FF& transaction_fee,
120 bool is_static_call,
121 const Gas& gas_limit);
122
StrictMock< MockContractDB > contract_db
uses barretenberg/vm2 to simulate the bytecode
Definition simulator.hpp:75
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
Definition simulator.cpp:82
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()
JsSimulator(JsSimulator &other)=delete
static JsSimulator * instance
Definition simulator.hpp:90
JsSimulator & operator=(JsSimulator &&)=delete
JsSimulator(JsSimulator &&)=delete
std::string simulator_path
Definition simulator.hpp:91
void operator=(const JsSimulator &)=delete
static void initialize(std::string &simulator_path)
Process process
Definition simulator.hpp:93
~JsSimulator()=default
Simulator & operator=(const Simulator &)=delete
Simulator(Simulator &&)=delete
Simulator(const Simulator &)=delete
Simulator()=default
virtual ~Simulator()=default
virtual 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)=0
Simulator & operator=(Simulator &&)=delete
FuzzerWorldStateManager * ws_mgr
Definition fuzz.test.cpp:16
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
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
std::vector< std::pair< AztecAddress, ContractInstance > > contract_instances
Definition simulator.hpp:27
std::vector< FF > note_hashes
Definition simulator.hpp:31
MSGPACK_CAMEL_CASE_FIELDS(ws_data_dir, ws_map_size_kb, tx, globals, contract_classes, contract_instances, public_data_writes, note_hashes, protocol_contracts)
std::vector< bb::crypto::merkle_tree::PublicDataLeafValue > public_data_writes
Definition simulator.hpp:29
GlobalVariables globals
Definition simulator.hpp:24
std::vector< ContractClass > contract_classes
Definition simulator.hpp:25
ProtocolContracts protocol_contracts
Definition simulator.hpp:33
MSGPACK_CAMEL_CASE_FIELDS(reverted, output, end_tree_snapshots, revert_reason, public_tx_effect)
TreeSnapshots end_tree_snapshots
Definition simulator.hpp:49
PublicTxEffect public_tx_effect
Definition simulator.hpp:51
std::string revert_reason
Definition simulator.hpp:50
std::vector< FF > output
Definition simulator.hpp:48