41 const std::vector<bb::crypto::merkle_tree::PublicDataLeafValue>& public_data_writes,
42 const std::vector<FF>& note_hashes,
54 .contract_classes =
std::move(classes_vec),
55 .contract_instances =
std::move(instances_vec),
56 .public_data_writes = public_data_writes,
57 .note_hashes = note_hashes,
58 .protocol_contracts = protocol_contracts,
87 [[maybe_unused]]
const std::vector<bb::crypto::merkle_tree::PublicDataLeafValue>& public_data_writes,
88 [[maybe_unused]]
const std::vector<FF>& note_hashes,
95 .collect_call_metadata =
true,
96 .collect_public_inputs =
true,
97 .collection_limits = {
108 bool reverted = result.
revert_code != RevertCode::OK;
111 "C++ Simulator result - reverted: ", reverted,
", output size: ", result.
call_stack_metadata[0].output.size());
112 std::vector<FF> values = {};
116 if (metadata.phase == CoarseTransactionPhase::APP_LOGIC) {
117 for (
const auto& output : metadata.output) {
118 values.push_back(output);
124 return { .reverted = reverted,
126 .end_tree_snapshots = result.
public_inputs->end_tree_snapshots,
129 return { .reverted = reverted, .output = values, .public_tx_effect = result.
public_tx_effect };
134 : simulator_path(simulator_path)
135 , process(
"LOG_LEVEL=silent node " + simulator_path +
" 2>/dev/null")
141 throw std::runtime_error(
"JsSimulator should be initializing in FUZZ INIT");
151 throw std::runtime_error(
"JsSimulator already initialized");
161 const std::vector<bb::crypto::merkle_tree::PublicDataLeafValue>& public_data_writes,
162 const std::vector<FF>& note_hashes,
165 std::string serialized =
171 while (response.empty()) {
173 std::this_thread::sleep_for(std::chrono::milliseconds(10));
177 response.erase(response.find_last_not_of(
'\n') + 1);
182 result = msgpack::unpack(res_buffer.data(), res_buffer.size()).get().convert(result);
200 l2_to_l1_msg.message.recipient =
FF(
static_cast<uint256_t>(l2_to_l1_msg.message.recipient).
slice(0, 20));
204 l2_to_l1_msg.message.recipient =
FF(
static_cast<uint256_t>(l2_to_l1_msg.message.recipient).
slice(0, 20));
216 [[maybe_unused]]
const FF& transaction_fee,
218 const Gas& gas_limit)
239 .app_logic_enqueued_calls = {
252 .fee_payer = sender_address,
const std::optional< PublicCallRequestWithCalldata > TEARDOWN_ENQUEUED_CALLS
const std::vector< ScopedL2ToL1Message > NON_REVERTIBLE_ACCUMULATED_DATA_L2_TO_L1_MESSAGES
const uint32_t BLOCK_NUMBER
const std::vector< FF > NON_REVERTIBLE_ACCUMULATED_DATA_NULLIFIERS
const AztecAddress FEE_RECIPIENT
const std::vector< FF > NON_REVERTIBLE_ACCUMULATED_DATA_NOTE_HASHES
constexpr GasFees EFFECTIVE_GAS_FEES
const std::vector< PublicCallRequestWithCalldata > SETUP_ENQUEUED_CALLS
const EthAddress COINBASE
const std::string TRANSACTION_HASH
constexpr uint128_t FEE_PER_DA_GAS
const std::vector< ScopedL2ToL1Message > REVERTIBLE_ACCUMULATED_DATA_L2_TO_L1_MESSAGES
const Gas GAS_USED_BY_PRIVATE
const std::vector< FF > REVERTIBLE_ACCUMULATED_DATA_NOTE_HASHES
const std::vector< FF > REVERTIBLE_ACCUMULATED_DATA_NULLIFIERS
constexpr uint128_t FEE_PER_L2_GAS
std::string base64_decode(std::string const &s, bool remove_linebreaks)
std::string base64_encode(unsigned char const *bytes_to_encode, size_t in_len, bool url)
StrictMock< MockContractDB > contract_db
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 > ¬e_hashes, const ProtocolContracts &protocol_contracts) override
uses the yarn-project/simulator to simulate the bytecode Singleton, because initializing the simulato...
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 > ¬e_hashes, const ProtocolContracts &protocol_contracts) override
static JsSimulator * getInstance()
static JsSimulator * instance
std::string simulator_path
static void initialize(std::string &simulator_path)
JsSimulator(std::string &simulator_path)
std::string read_line() const
Reads a line from the process.
void write_line(const std::string &line) const
Ends line with a newline character, sends to the process.
TxSimulationResult simulate_fast_with_existing_ws(simulation::ContractDBInterface &raw_contract_db, const world_state::WorldStateRevision &world_state_revision, world_state::WorldState &ws, const PublicSimulatorConfig &config, const Tx &tx, const GlobalVariables &global_variables, const ProtocolContracts &protocol_contracts, simulation::CancellationTokenPtr cancellation_token=nullptr)
world_state::WorldState & get_world_state()
static const char * get_data_dir()
world_state::WorldStateRevision get_current_revision() const
static uint64_t get_map_size_kb()
constexpr uint256_t slice(uint64_t start, uint64_t end) const
Holds the Merkle trees responsible for storing the state of the Aztec protocol.
AztecAddress contract_address
uint8_t buffer[RANDOM_BUFFER_SIZE]
FuzzerWorldStateManager * ws_mgr
std::pair< uint8_t *, size_t > msgpack_encode_buffer(auto &&obj, uint8_t *scratch_buf=nullptr, size_t scratch_size=0)
FF compute_calldata_hash(std::span< const FF > calldata)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
bool compare_simulator_results(SimulatorResult &result1, SimulatorResult &result2)
std::string serialize_simulation_request(const Tx &tx, const GlobalVariables &globals, const FuzzerContractDB &contract_db, const std::vector< bb::crypto::merkle_tree::PublicDataLeafValue > &public_data_writes, const std::vector< FF > ¬e_hashes, const ProtocolContracts &protocol_contracts)
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()
constexpr auto MAX_RETURN_DATA_SIZE_IN_FIELDS
TreeSnapshots end_tree_snapshots
PublicTxEffect public_tx_effect
std::vector< FF > note_hashes
PublicCallRequest request
bool skip_fee_enforcement
std::vector< ScopedL2ToL1Message > l2_to_l1_msgs
PublicTxEffect public_tx_effect
std::vector< CallStackMetadata > call_stack_metadata
std::optional< PublicInputs > public_inputs