Skip to content

Commit

Permalink
Surface module cache for reuse. (#1506)
Browse files Browse the repository at this point in the history
The goals of this PR are:

1. Surface the `ModuleCache` from inside soroban to its embedding
environment.
2. Allow a module cache to _outlive_ the soroban `Host`, and be reused
from one `Host` to the next.
3. Allow the `ModuleCache` to be _pre-populated_ from before the
lifetime of a single `Host`, (eg. by stellar-core, with all the
non-archived contracts currently live in the ledger, at startup or
such.)

These goals are accomplished by the following structural changes:

1. Factoring out error-handling / error-mapping functionality of `Host`
into a separate trait `ErrorHandler` that `Host` implements, and adding
a new trait `CompilationContext` that extends both `ErrorHandler +
AsBudget`. This abstracts the services the `ModuleCache` _needs_ from
the `Host`, such that the embedding environment can provide its own
`CompilationContext` in the times pre- or post-`Host` lifetime.
2. Modifying the internal map that stores `Module`s inside the
`ModuleCache` to use a refcounted-shared-mutable `std::map::BtreeMap`
that can be incrementally and efficiently added-to or removed-from, and
is _not_ metered.
3. `Module` storage and arguments that were `Rc<>` are made `Arc<>` and
the whole `ModuleCache` is made `Send+Sync`. This is mainly because we
want to work with the reusable `ModuleCache` across C++ threads, and
while Rust has no idea about C++ threads it at least helps us shoot
ourselves in the foot less if all the Rust code that works with it
preserves the sense of "this would be threadsafe in Rust if Rust was
making the threads".
4. There is also a bit of gratuitous churn where things get renamed from
`foo` => `wasmi_foo` and `Foo` => `wasmi::Foo`. This is because this
change was done as part of (and there'll be a followup PR including)
work equipping the `Vm` and `ModuleCache` with an experimental
wasmtime/winch backend. It turns out this PR's work (on just the
`ModuleCache` reuse part) is high enough value, and agnostic enough to
which backend it's using, that we want to split this work out, move it
up in the schedule and explore getting it into as early a release as
possible. But I didn't bother reverting-out the `wasmi_`-qualification
since it's intertwined with other changes here and harmless to keep.

This PR is a continuation of
#1511 and should be merged
after it.

This PR implements
[CAP-0065](https://github.com/stellar/stellar-protocol/blob/master/core/cap-0065.md)
  • Loading branch information
graydon authored Jan 22, 2025
1 parent c6c25a6 commit 0b7883d
Show file tree
Hide file tree
Showing 307 changed files with 17,526 additions and 17,378 deletions.
2 changes: 1 addition & 1 deletion soroban-env-host/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ backtrace = ["dep:backtrace"]
next = ["soroban-env-common/next", "stellar-xdr/next"]
tracy = ["dep:tracy-client", "soroban-env-common/tracy"]
recording_mode = []
bench = []
bench = ["testutils"]
# This feature guards the work-in-progress changes in soroban-env-host
# API. Its main purpose is to be able to make API changes without bumping
# the crate version.
Expand Down
2 changes: 2 additions & 0 deletions soroban-env-host/benches/common/cost_types/vm_ops.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,12 @@ macro_rules! impl_measurement_for_instantiation_cost_type {
let module =
ParsedModule::new_with_isolated_engine(_host, &wasm, cost_inputs.clone())
.unwrap();
let linker = module.make_wasmi_linker(_host).unwrap();
VmInstantiationSample {
id: Some(id),
wasm,
module,
linker,
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@
" 17 call symbol_copy_to_slice(Symbol(obj#13), U32(0), 13)": "",
" 18 ret symbol_copy_to_slice -> Ok(())": "cpu:1620079",
" 19 pop VM:6028fede:sym#13 -> Ok(Void)": "",
" 20 ret create_contract -> Ok(Address(obj#17))": "cpu:1621202, mem:757006, objs:-/9@26185682, vm:-/-, stk:-, auth:-/-",
" 21 call call(Address(obj#17), Symbol(test), Vec(obj#19))": "cpu:1622163, mem:757086, objs:-/10@180649dc",
" 22 push VM:6028fede:test()": "cpu:1843362, mem:925676, objs:-/11@9b03b895, vm:65536@6644521a/2@2f94d90d, stk:1@4b1f87e4, auth:1@b1b428e/-",
" 23 call bytes_new_from_linear_memory(U32(0), U32(100))": "cpu:1845831, mem:925706, vm:-/-",
" 24 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#23))": "cpu:1847365, mem:925886, objs:-/12@a811f368",
" 25 pop VM:6028fede:test -> Ok(Bytes(obj#23))": "cpu:1847861, mem:925910, objs:1@b5962073/12@a811f368, vm:65536@6644521a/2@2f94d90d, stk:1@ebe92dfe",
" 26 ret call -> Ok(Bytes(obj#23))": "cpu:1848544, mem:925926, objs:-/12@a811f368, vm:-/-, stk:-, auth:-/-",
" 20 ret create_contract -> Ok(Address(obj#17))": "cpu:1620580, mem:756990, objs:-/9@26185682, vm:-/-, stk:-, auth:-/-",
" 21 call call(Address(obj#17), Symbol(test), Vec(obj#19))": "cpu:1621541, mem:757070, objs:-/10@180649dc",
" 22 push VM:6028fede:test()": "cpu:1841772, mem:925524, objs:-/11@9b03b895, vm:65536@6644521a/2@2f94d90d, stk:1@4b1f87e4, auth:1@b1b428e/-",
" 23 call bytes_new_from_linear_memory(U32(0), U32(100))": "cpu:1844241, mem:925554, vm:-/-",
" 24 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#23))": "cpu:1845775, mem:925734, objs:-/12@a811f368",
" 25 pop VM:6028fede:test -> Ok(Bytes(obj#23))": "cpu:1846271, mem:925758, objs:1@b5962073/12@a811f368, vm:65536@6644521a/2@2f94d90d, stk:1@ebe92dfe",
" 26 ret call -> Ok(Bytes(obj#23))": "cpu:1846332, objs:-/12@a811f368, vm:-/-, stk:-, auth:-/-",
" 27 call bytes_len(Bytes(obj#23))": "",
" 28 ret bytes_len -> Ok(U32(100))": "cpu:1848666",
" 28 ret bytes_len -> Ok(U32(100))": "cpu:1846454",
" 29 call bytes_new_from_slice(16000142)": "cpu:47, mem:0",
" 30 ret bytes_new_from_slice -> Ok(Bytes(obj#25))": "cpu:4001042, mem:16000222, objs:-/13@7db3dbd3",
" 31 call upload_wasm(Bytes(obj#25))": "",
Expand All @@ -47,8 +47,8 @@
" 45 call symbol_copy_to_slice(Symbol(obj#37), U32(0), 13)": "",
" 46 ret symbol_copy_to_slice -> Ok(())": "cpu:12341035214",
" 47 pop VM:5f0cbe36:sym#37 -> Ok(Void)": "",
" 48 ret create_contract -> Ok(Address(obj#41))": "cpu:12341036354, mem:1626596305, objs:-/21@c8f9c73, vm:-/-, stk:-, auth:-/-",
" 48 ret create_contract -> Ok(Address(obj#41))": "cpu:12341035715, mem:1626596289, objs:-/21@c8f9c73, vm:-/-, stk:-, auth:-/-",
" 49 call call(Address(obj#41), Symbol(test), Vec(obj#43))": "cpu:961, mem:80, objs:-/22@c0b25b0f",
" 50 ret call -> Err(Error(Budget, ExceededLimit))": "cpu:7651761, mem:48152997",
" 51 end": "cpu:7651761, mem:48152997, prngs:-/9b4a753, objs:-/22@c0b25b0f, vm:-/-, evt:-, store:-/4@b780ab86, foot:4@47f76852, stk:-, auth:-/-"
" 50 ret call -> Err(Error(Budget, ExceededLimit))": "cpu:7650772, mem:48152861",
" 51 end": "cpu:7650772, mem:48152861, prngs:-/9b4a753, objs:-/22@c0b25b0f, vm:-/-, evt:-, store:-/4@b780ab86, foot:4@47f76852, stk:-, auth:-/-"
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,24 @@
" 15 call bytes_new_from_linear_memory(U32(1048572), U32(4))": "cpu:4041947, mem:4152936, vm:-/-",
" 16 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#19))": "cpu:4043929, mem:4153020, objs:-/10@8f3713f0",
" 17 pop VM:75130317:bin_word -> Ok(Bytes(obj#19))": "cpu:4044425, mem:4153044, objs:1@7f18fa80/10@8f3713f0, vm:1114112@a2a6f9c8/12@d32baa7b, stk:1@b4a13456",
" 18 ret call -> Ok(Bytes(obj#19))": "cpu:4045108, mem:4153060, objs:-/10@8f3713f0, vm:-/-, stk:-, auth:-/-",
" 19 call obj_cmp(Bytes(obj#19), Bytes(obj#21))": "cpu:4046069, mem:4153144, objs:-/11@3023d359",
" 20 ret obj_cmp -> Ok(0)": "cpu:4046357",
" 21 call vec_new()": "cpu:4047318, mem:4153228, objs:-/12@82e455c7",
" 22 ret vec_new -> Ok(Vec(obj#25))": "cpu:4047819, mem:4153292, objs:-/13@40e25a5c",
" 18 ret call -> Ok(Bytes(obj#19))": "cpu:4044486, objs:-/10@8f3713f0, vm:-/-, stk:-, auth:-/-",
" 19 call obj_cmp(Bytes(obj#19), Bytes(obj#21))": "cpu:4045447, mem:4153128, objs:-/11@3023d359",
" 20 ret obj_cmp -> Ok(0)": "cpu:4045735",
" 21 call vec_new()": "cpu:4046696, mem:4153212, objs:-/12@82e455c7",
" 22 ret vec_new -> Ok(Vec(obj#25))": "cpu:4047197, mem:4153276, objs:-/13@40e25a5c",
" 23 call vec_push_back(Vec(obj#25), Bytes(obj#23))": "",
" 24 ret vec_push_back -> Ok(Vec(obj#27))": "cpu:4049026, mem:4153380, objs:-/14@b6924a77",
" 24 ret vec_push_back -> Ok(Vec(obj#27))": "cpu:4048404, mem:4153364, objs:-/14@b6924a77",
" 25 call call(Address(obj#13), Symbol(bin_inc), Vec(obj#27))": "",
" 26 push VM:75130317:bin_inc(Bytes(obj#23))": "cpu:4701160, mem:5411352, objs:-/15@c506ccd2, vm:1114112@67b8985c/12@d32baa7b, stk:1@47d8fa40, auth:1@251a9ba2/-",
" 27 call bytes_len(Bytes(obj#23))": "cpu:4704068, mem:5411422, objs:1@b5962073/15@c506ccd2, vm:-/-, stk:1@1e1dc600",
" 28 ret bytes_len -> Ok(U32(4))": "cpu:4705508",
" 26 push VM:75130317:bin_inc(Bytes(obj#23))": "cpu:4699570, mem:5411200, objs:-/15@c506ccd2, vm:1114112@67b8985c/12@d32baa7b, stk:1@47d8fa40, auth:1@251a9ba2/-",
" 27 call bytes_len(Bytes(obj#23))": "cpu:4702478, mem:5411270, objs:1@b5962073/15@c506ccd2, vm:-/-, stk:1@1e1dc600",
" 28 ret bytes_len -> Ok(U32(4))": "cpu:4703918",
" 29 call bytes_copy_to_linear_memory(Bytes(obj#23), U32(0), U32(1048572), U32(4))": "",
" 30 ret bytes_copy_to_linear_memory -> Ok(Void)": "cpu:4705982",
" 30 ret bytes_copy_to_linear_memory -> Ok(Void)": "cpu:4704392",
" 31 call bytes_new_from_linear_memory(U32(1048572), U32(4))": "",
" 32 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#31))": "cpu:4708076, mem:5411506, objs:1@b5962073/16@4c245c5f",
" 33 pop VM:75130317:bin_inc -> Ok(Bytes(obj#31))": "cpu:4708572, mem:5411530, objs:2@a8b6a51c/16@4c245c5f, vm:1114112@2206e62e/12@d32baa7b, stk:1@aa3c8413",
" 34 ret call -> Ok(Bytes(obj#31))": "cpu:4709255, mem:5411546, objs:-/16@4c245c5f, vm:-/-, stk:-, auth:-/-",
" 35 call obj_cmp(Bytes(obj#31), Bytes(obj#33))": "cpu:4710216, mem:5411630, objs:-/17@397f6f02",
" 36 ret obj_cmp -> Ok(0)": "cpu:4710504",
" 37 end": "cpu:4710504, mem:5411630, prngs:-/9b4a753, objs:-/17@397f6f02, vm:-/-, evt:-, store:-/2@619f32b5, foot:2@73444153, stk:-, auth:-/-"
" 32 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#31))": "cpu:4706486, mem:5411354, objs:1@b5962073/16@4c245c5f",
" 33 pop VM:75130317:bin_inc -> Ok(Bytes(obj#31))": "cpu:4706982, mem:5411378, objs:2@a8b6a51c/16@4c245c5f, vm:1114112@2206e62e/12@d32baa7b, stk:1@aa3c8413",
" 34 ret call -> Ok(Bytes(obj#31))": "cpu:4707043, objs:-/16@4c245c5f, vm:-/-, stk:-, auth:-/-",
" 35 call obj_cmp(Bytes(obj#31), Bytes(obj#33))": "cpu:4708004, mem:5411462, objs:-/17@397f6f02",
" 36 ret obj_cmp -> Ok(0)": "cpu:4708292",
" 37 end": "cpu:4708292, mem:5411462, prngs:-/9b4a753, objs:-/17@397f6f02, vm:-/-, evt:-, store:-/2@619f32b5, foot:2@73444153, stk:-, auth:-/-"
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,6 @@
" 41 call put_contract_data(Symbol(data), Map(obj#35), Temporary)": "cpu:2989867, mem:4021383, objs:7@929806d2/18@bcb9b937, stk:1@8b608bf2",
" 42 ret put_contract_data -> Ok(Void)": "cpu:2997516, mem:4023015, store:-/3@87a693d7, foot:3@2f0e11c9",
" 43 pop VM:2c0dcac5:go -> Ok(Void)": " vm:1114112@afb7d9b2/5@8d05851",
" 44 ret call -> Ok(Void)": "cpu:2998146, mem:4023031, objs:-/18@bcb9b937, vm:-/-, stk:-, auth:-/-",
" 45 end": "cpu:2998146, mem:4023031, prngs:-/9b4a753, objs:-/18@bcb9b937, vm:-/-, evt:1@4403228c, store:-/3@87a693d7, foot:3@2f0e11c9, stk:-, auth:-/-"
" 44 ret call -> Ok(Void)": " objs:-/18@bcb9b937, vm:-/-, stk:-, auth:-/-",
" 45 end": "cpu:2997516, mem:4023015, prngs:-/9b4a753, objs:-/18@bcb9b937, vm:-/-, evt:1@4403228c, store:-/3@87a693d7, foot:3@2f0e11c9, stk:-, auth:-/-"
}
54 changes: 27 additions & 27 deletions soroban-env-host/observations/23/test__complex__run_complex_2.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,38 +11,38 @@
" 9 ret obj_cmp -> Ok(0)": "cpu:1775608",
" 10 call get_ledger_network_id()": "cpu:1775658, auth:1@a922d798/1@f8f51757",
" 11 ret get_ledger_network_id -> Ok(Bytes(obj#11))": "cpu:1776688, mem:1526150, objs:-/6@af28baea",
" 12 ret create_contract -> Ok(Address(obj#13))": "cpu:2366901, mem:2774098, objs:-/7@622c8fae, store:-/3@260f872b, auth:-/1@e32c10cb",
" 13 call call(Address(obj#13), Symbol(go), Vec(obj#15))": "cpu:2367341, mem:2774162, objs:-/8@52c37e3f, auth:-/-",
" 14 push VM:2c0dcac5:go()": "cpu:2671804, mem:3974225, objs:-/9@cbedd2d9, vm:1114112@c58cc467/5@8d05851, stk:1@34f84bc5, auth:1@afe23e00/-",
" 15 call get_ledger_network_id()": "cpu:2674273, mem:3974255, vm:-/-",
" 16 ret get_ledger_network_id -> Ok(Bytes(obj#19))": "cpu:2679544, mem:3974367, objs:-/10@e159b064",
" 17 call get_ledger_version()": "cpu:2680040, mem:3974391, objs:1@7f18fa80/10@e159b064, stk:1@31469f88",
" 18 ret get_ledger_version -> Ok(U32(23))": "cpu:2680350",
" 12 ret create_contract -> Ok(Address(obj#13))": "cpu:2365923, mem:2774299, objs:-/7@622c8fae, store:-/3@260f872b, auth:-/1@e32c10cb",
" 13 call call(Address(obj#13), Symbol(go), Vec(obj#15))": "cpu:2366363, mem:2774363, objs:-/8@52c37e3f, auth:-/-",
" 14 push VM:2c0dcac5:go()": "cpu:2944359, mem:4020562, objs:-/9@cbedd2d9, vm:1114112@c58cc467/5@8d05851, stk:1@34f84bc5, auth:1@afe23e00/-",
" 15 call get_ledger_network_id()": "cpu:2946828, mem:4020592, vm:-/-",
" 16 ret get_ledger_network_id -> Ok(Bytes(obj#19))": "cpu:2952099, mem:4020704, objs:-/10@e159b064",
" 17 call get_ledger_version()": "cpu:2952595, mem:4020728, objs:1@7f18fa80/10@e159b064, stk:1@31469f88",
" 18 ret get_ledger_version -> Ok(U32(23))": "cpu:2952905",
" 19 call get_ledger_sequence()": "",
" 20 ret get_ledger_sequence -> Ok(U32(1234))": "cpu:2680660",
" 20 ret get_ledger_sequence -> Ok(U32(1234))": "cpu:2953215",
" 21 call get_ledger_timestamp()": "",
" 22 ret get_ledger_timestamp -> Ok(U64(1234))": "cpu:2680970",
" 22 ret get_ledger_timestamp -> Ok(U64(1234))": "cpu:2953525",
" 23 call compute_hash_sha256(Bytes(obj#19))": "",
" 24 ret compute_hash_sha256 -> Ok(Bytes(obj#21))": "cpu:2687902, mem:3974503, objs:1@7f18fa80/11@b06b5764",
" 25 call bytes_copy_to_linear_memory(Bytes(obj#21), U32(0), U32(1048504), U32(32))": "cpu:2688398, mem:3974527, objs:2@6b9b82ef/11@b06b5764, stk:1@f9a1a92",
" 26 ret bytes_copy_to_linear_memory -> Ok(Void)": "cpu:2688876",
" 24 ret compute_hash_sha256 -> Ok(Bytes(obj#21))": "cpu:2960457, mem:4020840, objs:1@7f18fa80/11@b06b5764",
" 25 call bytes_copy_to_linear_memory(Bytes(obj#21), U32(0), U32(1048504), U32(32))": "cpu:2960953, mem:4020864, objs:2@6b9b82ef/11@b06b5764, stk:1@f9a1a92",
" 26 ret bytes_copy_to_linear_memory -> Ok(Void)": "cpu:2961431",
" 27 call bytes_new_from_linear_memory(U32(1048504), U32(16))": "",
" 28 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#23))": "cpu:2690106, mem:3974623, objs:2@6b9b82ef/12@445b4c2d",
" 29 call vec_new()": "cpu:2690602, mem:3974647, objs:3@6a4b7989/12@445b4c2d, stk:1@b861e0c9",
" 30 ret vec_new -> Ok(Vec(obj#25))": "cpu:2691352, mem:3974711, objs:3@6a4b7989/13@9ebb839d",
" 31 call vec_push_back(Vec(obj#25), Bytes(obj#23))": "cpu:2691848, mem:3974735, objs:4@93597833/13@9ebb839d, stk:1@8bc54bac",
" 32 ret vec_push_back -> Ok(Vec(obj#27))": "cpu:2693624, mem:3974823, objs:4@93597833/14@5f2c3dea",
" 33 call vec_new_from_linear_memory(U32(1048544), U32(1))": "cpu:2694120, mem:3974847, objs:5@93e8cf26/14@5f2c3dea, stk:1@6a9a3154",
" 34 ret vec_new_from_linear_memory -> Ok(Vec(obj#29))": "cpu:2695559, mem:3974935, objs:5@93e8cf26/15@42aa2aeb",
" 35 call contract_event(Vec(obj#29), Bytes(obj#21))": "cpu:2696055, mem:3974959, objs:6@e37e9bd8/15@42aa2aeb, stk:1@a1d9300d",
" 36 ret contract_event -> Ok(Void)": "cpu:2698035, mem:3975136, objs:6@e37e9bd8/16@8c92b752, evt:1@4403228c",
" 28 ret bytes_new_from_linear_memory -> Ok(Bytes(obj#23))": "cpu:2962661, mem:4020960, objs:2@6b9b82ef/12@445b4c2d",
" 29 call vec_new()": "cpu:2963157, mem:4020984, objs:3@6a4b7989/12@445b4c2d, stk:1@b861e0c9",
" 30 ret vec_new -> Ok(Vec(obj#25))": "cpu:2963907, mem:4021048, objs:3@6a4b7989/13@9ebb839d",
" 31 call vec_push_back(Vec(obj#25), Bytes(obj#23))": "cpu:2964403, mem:4021072, objs:4@93597833/13@9ebb839d, stk:1@8bc54bac",
" 32 ret vec_push_back -> Ok(Vec(obj#27))": "cpu:2966179, mem:4021160, objs:4@93597833/14@5f2c3dea",
" 33 call vec_new_from_linear_memory(U32(1048544), U32(1))": "cpu:2966675, mem:4021184, objs:5@93e8cf26/14@5f2c3dea, stk:1@6a9a3154",
" 34 ret vec_new_from_linear_memory -> Ok(Vec(obj#29))": "cpu:2968114, mem:4021272, objs:5@93e8cf26/15@42aa2aeb",
" 35 call contract_event(Vec(obj#29), Bytes(obj#21))": "cpu:2968610, mem:4021296, objs:6@e37e9bd8/15@42aa2aeb, stk:1@a1d9300d",
" 36 ret contract_event -> Ok(Void)": "cpu:2970590, mem:4021473, objs:6@e37e9bd8/16@8c92b752, evt:1@4403228c",
" 37 call map_new_from_linear_memory(U32(1048600), U32(1048544), U32(4))": "",
" 38 call obj_cmp(Symbol(obj#33), Symbol(seq))": "cpu:2701357, mem:3975434, objs:6@e37e9bd8/17@82f590b9",
" 39 ret obj_cmp -> Ok(-1)": "cpu:2701523",
" 40 ret map_new_from_linear_memory -> Ok(Map(obj#35))": "cpu:2701963, mem:3975498, objs:6@e37e9bd8/18@bcb9b937",
" 41 call put_contract_data(Symbol(data), Map(obj#35), Temporary)": "cpu:2702459, mem:3975522, objs:7@929806d2/18@bcb9b937, stk:1@8b608bf2",
" 42 ret put_contract_data -> Ok(Void)": "cpu:2707623, mem:3976752, store:-/3@87a693d7",
" 38 call obj_cmp(Symbol(obj#33), Symbol(seq))": "cpu:2973912, mem:4021771, objs:6@e37e9bd8/17@82f590b9",
" 39 ret obj_cmp -> Ok(-1)": "cpu:2974078",
" 40 ret map_new_from_linear_memory -> Ok(Map(obj#35))": "cpu:2974518, mem:4021835, objs:6@e37e9bd8/18@bcb9b937",
" 41 call put_contract_data(Symbol(data), Map(obj#35), Temporary)": "cpu:2975014, mem:4021859, objs:7@929806d2/18@bcb9b937, stk:1@8b608bf2",
" 42 ret put_contract_data -> Ok(Void)": "cpu:2980178, mem:4023089, store:-/3@87a693d7",
" 43 pop VM:2c0dcac5:go -> Ok(Void)": " vm:1114112@afb7d9b2/5@8d05851",
" 44 ret call -> Ok(Void)": " objs:-/18@bcb9b937, vm:-/-, stk:-, auth:-/-",
" 45 end": "cpu:2707623, mem:3976752, prngs:-/-, objs:-/18@bcb9b937, vm:-/-, evt:1@4403228c, store:-/3@87a693d7, foot:3@2f0e11c9, stk:-, auth:-/-"
" 45 end": "cpu:2980178, mem:4023089, prngs:-/-, objs:-/18@bcb9b937, vm:-/-, evt:1@4403228c, store:-/3@87a693d7, foot:3@2f0e11c9, stk:-, auth:-/-"
}
Loading

0 comments on commit 0b7883d

Please sign in to comment.