37template <
typename T>
static std::vector<uint8_t> serialize_to_msgpack(
const T&
value)
40 msgpack::pack(buf,
value);
41 return std::vector<uint8_t>(buf.data(), buf.data() + buf.size());
44template <
typename T>
static T deserialize_from_msgpack(
const std::vector<uint8_t>& bytes)
46 auto unpacked = msgpack::unpack(
reinterpret_cast<const char*
>(bytes.data()), bytes.size());
48 unpacked.get().convert(
value);
60 auto sim_inputs = deserialize_from_msgpack<AvmFastSimulationInputs>(command.inputs);
64 uint64_t fork_id = sim_inputs.ws_revision.forkId;
65 vinfo(
"Using external WSDB fork ", fork_id,
" for AVM simulation");
76 .includeUncommitted =
true,
82 auto result = sim_inputs.config.collect_hints
87 sim_inputs.global_variables,
88 sim_inputs.protocol_contracts,
94 sim_inputs.global_variables,
95 sim_inputs.protocol_contracts,
100 respond.ok(wire::AvmSimulateResponse{ .result = serialize_to_msgpack(
result) });
101 }
catch (
const std::exception& e) {
103 respond.error(e.what());
109 wire::AvmSimulateWithHints&& command,
110 Responder<wire::AvmSimulateWithHintsResponse> respond)
115 auto proving_inputs = deserialize_from_msgpack<AvmProvingInputs>(command.inputs);
120 respond.ok(wire::AvmSimulateWithHintsResponse{ .result = serialize_to_msgpack(
result) });
121 }
catch (
const std::exception& e) {
122 respond.error(e.what());
StrictMock< MockHighLevelMerkleDB > merkle_db
TxSimulationResult simulate_with_hinted_dbs(const AvmProvingInputs &inputs)
TxSimulationResult simulate_fast_internal(simulation::ContractDBInterface &raw_contract_db, simulation::LowLevelMerkleDBInterface &raw_merkle_db, const PublicSimulatorConfig &config, const Tx &tx, const GlobalVariables &global_variables, const ProtocolContracts &protocol_contracts, simulation::CancellationTokenPtr cancellation_token=nullptr)
TxSimulationResult simulate_for_hint_collection_internal(simulation::ContractDBInterface &raw_contract_db, simulation::LowLevelMerkleDBInterface &raw_merkle_db, const PublicSimulatorConfig &config, const Tx &tx, const GlobalVariables &global_variables, const ProtocolContracts &protocol_contracts, simulation::CancellationTokenPtr cancellation_token=nullptr)
void set_fork_id(uint64_t fork_id)
std::shared_ptr< CancellationToken > CancellationTokenPtr
const avm2::simulation::CancellationTokenPtr g_sim_cancellation_token
void handle_simulate_with_hints(AvmRequest &request, wire::AvmSimulateWithHints &&command, Responder< wire::AvmSimulateWithHintsResponse > respond)
std::atomic< avm2::simulation::CancellationToken * > g_active_cancellation_token
void handle_simulate(AvmRequest &request, wire::AvmSimulate &&command, Responder< wire::AvmSimulateResponse > respond)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Context passed to each command's execute() method. Provides access to WSDB and CDB IPC clients.
cdb::CdbIpcContractDB & cdb_client
wsdb::WsdbIpcClient & wsdb_client
static constexpr block_number_t LATEST
LowLevelMerkleDBInterface implementation backed by WSDB IPC.