117 Napi::Env env = cb_info.Env();
124 if (cb_info.Length() < 4) {
125 throw Napi::TypeError::New(env,
126 "Wrong number of arguments. Expected 4 arguments: inputs Buffer, contractProvider "
127 "object, worldStateHandle, and logLevel.");
130 if (!cb_info[0].IsBuffer()) {
131 throw Napi::TypeError::New(env,
132 "First argument must be a Buffer containing serialized AvmFastSimulationInputs");
135 if (!cb_info[1].IsObject()) {
136 throw Napi::TypeError::New(env,
"Second argument must be a contractProvider object");
139 if (!cb_info[2].IsExternal()) {
140 throw Napi::TypeError::New(env,
"Third argument must be a WorldState handle (External)");
143 if (!cb_info[3].IsNumber()) {
144 throw Napi::TypeError::New(env,
"Fourth argument must be a log level number (0-7)");
148 int log_level = cb_info[3].As<Napi::Number>().Int32Value();
149 set_logging_from_level(log_level);
152 auto inputs_buffer = cb_info[0].As<Napi::Buffer<uint8_t>>();
153 size_t length = inputs_buffer.Length();
159 auto contract_provider = cb_info[1].As<Napi::Object>();
160 ContractCallbacks::validate(env, contract_provider);
165 .instance = make_tsfn(env,
166 ContractCallbacks::get(contract_provider, CALLBACK_GET_CONTRACT_INSTANCE),
167 CALLBACK_GET_CONTRACT_INSTANCE),
169 env, ContractCallbacks::get(contract_provider, CALLBACK_GET_CONTRACT_CLASS), CALLBACK_GET_CONTRACT_CLASS),
171 make_tsfn(env, ContractCallbacks::get(contract_provider, CALLBACK_ADD_CONTRACTS), CALLBACK_ADD_CONTRACTS),
173 make_tsfn(env, ContractCallbacks::get(contract_provider, CALLBACK_GET_BYTECODE), CALLBACK_GET_BYTECODE),
175 make_tsfn(env, ContractCallbacks::get(contract_provider, CALLBACK_GET_DEBUG_NAME), CALLBACK_GET_DEBUG_NAME),
176 .create_checkpoint = make_tsfn(
177 env, ContractCallbacks::get(contract_provider, CALLBACK_CREATE_CHECKPOINT), CALLBACK_CREATE_CHECKPOINT),
178 .commit_checkpoint = make_tsfn(
179 env, ContractCallbacks::get(contract_provider, CALLBACK_COMMIT_CHECKPOINT), CALLBACK_COMMIT_CHECKPOINT),
180 .revert_checkpoint = make_tsfn(
181 env, ContractCallbacks::get(contract_provider, CALLBACK_REVERT_CHECKPOINT), CALLBACK_REVERT_CHECKPOINT),
185 auto external = cb_info[2].As<Napi::External<world_state::WorldState>>();
192 auto* op =
new AsyncOperation(env, deferred, [
data, tsfns, ws_ptr](msgpack::sbuffer& result_buffer) {
194 TsfnReleaser releaser = TsfnReleaser(tsfns.to_vector());
199 msgpack::object_handle obj_handle =
200 msgpack::unpack(
reinterpret_cast<const char*
>(
data->data()),
data->size());
201 msgpack::object obj = obj_handle.get();
207 *tsfns.add_contracts,
210 *tsfns.create_checkpoint,
211 *tsfns.commit_checkpoint,
212 *tsfns.revert_checkpoint);
220 msgpack::pack(result_buffer, result);
221 }
catch (
const std::exception& e) {
223 throw std::runtime_error(std::string(
"AVM simulation failed: ") + e.what());
225 throw std::runtime_error(
"AVM simulation failed with unknown exception");
232 return deferred->Promise();
237 Napi::Env env = cb_info.Env();
242 if (cb_info.Length() < 2) {
243 throw Napi::TypeError::New(env,
244 "Wrong number of arguments. Expected 2 arguments: AvmProvingInputs/AvmCircuitInputs "
245 "msgpack Buffer and logLevel.");
248 if (!cb_info[0].IsBuffer()) {
249 throw Napi::TypeError::New(
250 env,
"First argument must be a Buffer containing serialized AvmProvingInputs/AvmCircuitInputs");
253 if (!cb_info[1].IsNumber()) {
254 throw Napi::TypeError::New(env,
"Second argument must be a log level number (0-7)");
258 int log_level = cb_info[1].As<Napi::Number>().Int32Value();
259 set_logging_from_level(log_level);
262 auto inputs_buffer = cb_info[0].As<Napi::Buffer<uint8_t>>();
263 size_t length = inputs_buffer.Length();
272 auto* op =
new AsyncOperation(env, deferred, [
data](msgpack::sbuffer& result_buffer) {
276 msgpack::object_handle obj_handle =
277 msgpack::unpack(
reinterpret_cast<const char*
>(
data->data()),
data->size());
278 msgpack::object obj = obj_handle.get();
287 msgpack::pack(result_buffer, result);
288 }
catch (
const std::exception& e) {
290 throw std::runtime_error(std::string(
"AVM simulation with hinted DBs failed: ") + e.what());
292 throw std::runtime_error(
"AVM simulation with hinted DBs failed with unknown exception");
299 return deferred->Promise();