Repository: stellar/rs-soroban-env
Pull request #1212 (2023-11-15 01:17:53)

Cap persistent extension to max
### What

Cap the extension instead of returning an error when extending past max.


Patch:
diff --git a/soroban-env-host/src/storage.rs b/soroban-env-host/src/storage.rs
index d5b73052..fb2f1491 100644
--- a/soroban-env-host/src/storage.rs
+++ b/soroban-env-host/src/storage.rs
@@ -9,10 +9,11 @@
 
 use std::rc::Rc;
 
-use soroban_env_common::xdr::{ScErrorCode, ScErrorType};
+use soroban_env_common::xdr::{ContractDataDurability, ScErrorCode, ScErrorType};
 use soroban_env_common::{Env, Val};
 
 use crate::budget::Budget;
+use crate::host::ledger_info_helper::get_key_durability;
 use crate::xdr::{LedgerEntry, LedgerKey};
 use crate::Host;
 use crate::{host::metered_map::MeteredOrdMap, HostError};
@@ -404,16 +405,29 @@ impl Storage {
             ));
         }
 
-        let new_live_until =
+        let mut new_live_until =
             host.with_ledger_info(|li| Ok(li.sequence_number.saturating_add(extend_to)))?;
 
         if new_live_until > host.max_live_until_ledger()? {
-            return Err(host.err(
-                ScErrorType::Storage,
-                ScErrorCode::InvalidAction,
-                "trying to extend past max live_until ledger",
-                &[new_live_until.into()],
-            ));
+            if let Some(durability) = get_key_durability(&key) {
+                if matches!(durability, ContractDataDurability::Persistent) {
+                    new_live_until = host.max_live_until_ledger()?;
+                } else {
+                    return Err(host.err(
+                        ScErrorType::Storage,
+                        ScErrorCode::InvalidAction,
+                        "trying to extend past max live_until ledger",
+                        &[new_live_until.into()],
+                    ));
+                }
+            } else {
+                return Err(host.err(
+                    ScErrorType::Storage,
+                    ScErrorCode::InternalError,
+                    "durability is missing",
+                    &[],
+                ));
+            }
         }
 
         if new_live_until > old_live_until && old_live_until.saturating_sub(ledger_seq) <= threshold


Test patch:
diff --git a/soroban-env-host/observations/test__storage__test_instance_storage.json b/soroban-env-host/observations/test__storage__test_instance_storage.json
index 1074c1de..d704f621 100644
--- a/soroban-env-host/observations/test__storage__test_instance_storage.json
+++ b/soroban-env-host/observations/test__storage__test_instance_storage.json
@@ -109,250 +109,252 @@
   " 107 call extend_current_contract_instance_and_code(U32(1), U32(6312000))": " vmem:-",
   " 108 call get_ledger_sequence()": "cpu:17210935, mem:7905700, store:-/-",
   " 109 ret get_ledger_sequence -> Ok(U32(0))": "",
-  " 110 ret extend_current_contract_instance_and_code -> Err(Error(Storage, InvalidAction))": " store:-/2@323b0287",
-  " 111 pop VM:a67b4f64:sym#43 -> Err(Error(Storage, InvalidAction))": " vmem:1048576@2434eedc",
-  " 112 ret call -> Err(Error(Storage, InvalidAction))": " vmem:-",
-  " 113 call symbol_new_from_slice(12)": "",
-  " 114 ret symbol_new_from_slice -> Ok(Symbol(obj#47))": "cpu:17213972, mem:7905792, objs:-/24@e412b53c",
-  " 115 call obj_from_u64(18446744073709551615)": "",
-  " 116 ret obj_from_u64 -> Ok(U64(obj#49))": "cpu:17215113, mem:7905856, objs:-/25@f45e394c",
-  " 117 call vec_new_from_slice(2)": "",
-  " 118 ret vec_new_from_slice -> Ok(Vec(obj#51))": "cpu:17218116, mem:7905952, objs:-/26@5239328e",
-  " 119 call call(Address(obj#13), Symbol(obj#47), Vec(obj#51))": "",
-  " 120 call symbol_len(Symbol(obj#47))": "cpu:17220232, mem:7905984",
-  " 121 ret symbol_len -> Ok(U32(12))": "cpu:17220340",
-  " 122 call symbol_copy_to_slice(Symbol(obj#47), U32(0), 12)": "",
-  " 123 ret symbol_copy_to_slice -> Ok(())": "cpu:17220699",
-  " 124 push VM:a67b4f64:sym#47(Symbol(obj#15), U64(obj#49))": "cpu:20048329, mem:9222476, objs:-/27@58f63e3f, vmem:1048576@2434eedc",
-  " 125 call symbol_len(Symbol(obj#47))": "cpu:20053384, mem:9222586, objs:2@677e1124/27@58f63e3f",
-  " 126 ret symbol_len -> Ok(U32(12))": "cpu:20053492",
-  " 127 call symbol_copy_to_slice(Symbol(obj#47), U32(0), 12)": "",
-  " 128 ret symbol_copy_to_slice -> Ok(())": "cpu:20053851",
-  " 129 call obj_to_u64(U64(obj#49))": " vmem:-",
-  " 130 ret obj_to_u64 -> Ok(18446744073709551615)": "cpu:20055877",
-  " 131 call obj_from_u64(18446744073709551615)": "",
-  " 132 ret obj_from_u64 -> Ok(U64(obj#55))": "cpu:20058097, mem:9222650, objs:2@677e1124/28@60450b41",
-  " 133 call put_contract_data(Symbol(obj#15), U64(obj#55), Instance)": "cpu:20059238, mem:9222674, objs:3@531835a4/28@60450b41",
-  " 134 call obj_cmp(Symbol(key_1), Symbol(obj#15))": "cpu:20062130, mem:9222730, objs:-/28@60450b41",
-  " 135 ret obj_cmp -> Ok(-1)": "cpu:20062596",
-  " 136 call obj_cmp(Symbol(key_1), Symbol(obj#15))": "cpu:20064502, mem:9222794",
-  " 137 ret obj_cmp -> Ok(-1)": "cpu:20064968",
-  " 138 ret put_contract_data -> Ok(Void)": " objs:3@531835a4/28@60450b41, store:2@d122b816/2@323b0287",
-  " 139 pop VM:a67b4f64:sym#47 -> Ok(Void)": "cpu:20084533, mem:9223820, vmem:1048576@c812d930, store:2@d122b816/2@66ceb256",
-  " 140 ret call -> Ok(Void)": " objs:-/28@60450b41, vmem:-, store:-/2@66ceb256",
-  " 141 call symbol_new_from_slice(12)": "",
-  " 142 ret symbol_new_from_slice -> Ok(Symbol(obj#57))": "cpu:20087570, mem:9223912, objs:-/29@5dfb3f97",
-  " 143 call symbol_new_from_slice(13)": "",
-  " 144 ret symbol_new_from_slice -> Ok(Symbol(obj#59))": "cpu:20090607, mem:9224005, objs:-/30@a7abc7fb",
-  " 145 call vec_new_from_slice(1)": "",
-  " 146 ret vec_new_from_slice -> Ok(Vec(obj#61))": "cpu:20093501, mem:9224093, objs:-/31@7a6516f3",
-  " 147 call call(Address(obj#13), Symbol(obj#57), Vec(obj#61))": "",
-  " 148 call symbol_len(Symbol(obj#57))": "cpu:20095616, mem:9224117",
-  " 149 ret symbol_len -> Ok(U32(12))": "cpu:20095724",
-  " 150 call symbol_copy_to_slice(Symbol(obj#57), U32(0), 12)": "",
-  " 151 ret symbol_copy_to_slice -> Ok(())": "cpu:20096083",
-  " 152 push VM:a67b4f64:sym#57(Symbol(obj#59))": "cpu:22926530, mem:10540915, objs:-/32@50fd174d, vmem:1048576@2434eedc",
-  " 153 call symbol_len(Symbol(obj#57))": "cpu:22930442, mem:10540985, objs:1@d35380f8/32@50fd174d",
-  " 154 ret symbol_len -> Ok(U32(12))": "cpu:22930550",
-  " 155 call symbol_copy_to_slice(Symbol(obj#57), U32(0), 12)": "",
-  " 156 ret symbol_copy_to_slice -> Ok(())": "cpu:22930909",
-  " 157 call has_contract_data(Symbol(obj#59), Instance)": " vmem:-",
-  " 158 call obj_cmp(Symbol(key_1), Symbol(obj#65))": "cpu:22938402, mem:10541238, objs:-/34@68d0ca9f",
-  " 159 ret obj_cmp -> Ok(-1)": "cpu:22938868",
-  " 160 call obj_cmp(Symbol(obj#65), Symbol(obj#59))": "cpu:22939127",
-  " 161 ret obj_cmp -> Ok(0)": "cpu:22939810",
-  " 162 ret has_contract_data -> Ok(True)": "cpu:22940063, objs:1@d35380f8/34@68d0ca9f, store:2@d122b816/2@66ceb256",
-  " 163 pop VM:a67b4f64:sym#57 -> Ok(True)": " vmem:1048576@ca61953b",
-  " 164 ret call -> Ok(True)": " objs:-/34@68d0ca9f, vmem:-, store:-/2@66ceb256",
-  " 165 call symbol_new_from_slice(12)": "",
-  " 166 ret symbol_new_from_slice -> Ok(Symbol(obj#69))": "cpu:22943100, mem:10541330, objs:-/35@d3489d5a",
-  " 167 call vec_new_from_slice(1)": "",
-  " 168 ret vec_new_from_slice -> Ok(Vec(obj#71))": "cpu:22945886, mem:10541418, objs:-/36@e2369fa5",
-  " 169 call call(Address(obj#13), Symbol(obj#69), Vec(obj#71))": "",
-  " 170 call symbol_len(Symbol(obj#69))": "cpu:22948001, mem:10541442",
-  " 171 ret symbol_len -> Ok(U32(12))": "cpu:22948109",
-  " 172 call symbol_copy_to_slice(Symbol(obj#69), U32(0), 12)": "",
-  " 173 ret symbol_copy_to_slice -> Ok(())": "cpu:22948468",
-  " 174 push VM:a67b4f64:sym#69(Symbol(key_1))": "cpu:25778915, mem:11858240, objs:-/37@e3386b4, vmem:1048576@2434eedc",
-  " 175 call symbol_len(Symbol(obj#69))": "cpu:25781686, mem:11858286",
-  " 176 ret symbol_len -> Ok(U32(12))": "cpu:25781794",
-  " 177 call symbol_copy_to_slice(Symbol(obj#69), U32(0), 12)": "",
-  " 178 ret symbol_copy_to_slice -> Ok(())": "cpu:25782153",
-  " 179 call has_contract_data(Symbol(key_1), Instance)": " vmem:-",
-  " 180 call obj_cmp(Symbol(key_1), Symbol(obj#75))": "cpu:25790384, mem:11858539, objs:-/39@d3453ef4",
-  " 181 ret obj_cmp -> Ok(-1)": "cpu:25790850",
-  " 182 call obj_cmp(Symbol(obj#75), Symbol(key_1))": "cpu:25791109",
-  " 183 ret obj_cmp -> Ok(1)": "cpu:25791575",
-  " 184 ret has_contract_data -> Ok(True)": "cpu:25791828, store:2@d122b816/2@66ceb256",
-  " 185 call get_contract_data(Symbol(key_1), Instance)": "",
-  " 186 call obj_cmp(Symbol(obj#75), Symbol(key_1))": "cpu:25792350, store:-/2@66ceb256",
-  " 187 ret obj_cmp -> Ok(1)": "cpu:25792816",
-  " 188 ret get_contract_data -> Ok(U64(1234))": "cpu:25793069, store:2@d122b816/2@66ceb256",
-  " 189 pop VM:a67b4f64:sym#69 -> Ok(U64(1234))": "cpu:25793795, vmem:1048576@44e86686",
-  " 190 ret call -> Ok(U64(1234))": " vmem:-, store:-/2@66ceb256",
-  " 191 call symbol_new_from_slice(12)": "",
-  " 192 ret symbol_new_from_slice -> Ok(Symbol(obj#79))": "cpu:25796832, mem:11858631, objs:-/40@6b7a8a28",
-  " 193 call vec_new_from_slice(1)": "",
-  " 194 ret vec_new_from_slice -> Ok(Vec(obj#81))": "cpu:25799726, mem:11858719, objs:-/41@34cf42a4",
-  " 195 call call(Address(obj#13), Symbol(obj#79), Vec(obj#81))": "",
-  " 196 call symbol_len(Symbol(obj#79))": "cpu:25801841, mem:11858743",
-  " 197 ret symbol_len -> Ok(U32(12))": "cpu:25801949",
-  " 198 call symbol_copy_to_slice(Symbol(obj#79), U32(0), 12)": "",
-  " 199 ret symbol_copy_to_slice -> Ok(())": "cpu:25802308",
-  " 200 push VM:a67b4f64:sym#79(Symbol(obj#15))": "cpu:28632755, mem:13175541, objs:-/42@271e022b, vmem:1048576@2434eedc",
-  " 201 call symbol_len(Symbol(obj#79))": "cpu:28636667, mem:13175611, objs:1@af363297/42@271e022b",
-  " 202 ret symbol_len -> Ok(U32(12))": "cpu:28636775",
-  " 203 call symbol_copy_to_slice(Symbol(obj#79), U32(0), 12)": "",
-  " 204 ret symbol_copy_to_slice -> Ok(())": "cpu:28637134",
-  " 205 call has_contract_data(Symbol(obj#15), Instance)": " vmem:-",
-  " 206 call obj_cmp(Symbol(key_1), Symbol(obj#85))": "cpu:28645473, mem:13175864, objs:-/44@552878e1",
-  " 207 ret obj_cmp -> Ok(-1)": "cpu:28645939",
-  " 208 call obj_cmp(Symbol(obj#85), Symbol(obj#15))": "cpu:28646198",
-  " 209 ret obj_cmp -> Ok(0)": "cpu:28646881",
-  " 210 ret has_contract_data -> Ok(True)": "cpu:28647134, objs:1@af363297/44@552878e1, store:2@d122b816/2@66ceb256",
-  " 211 call get_contract_data(Symbol(obj#15), Instance)": "",
-  " 212 call obj_cmp(Symbol(obj#85), Symbol(obj#15))": "cpu:28647764, objs:-/44@552878e1, store:-/2@66ceb256",
-  " 213 ret obj_cmp -> Ok(0)": "cpu:28648447",
-  " 214 ret get_contract_data -> Ok(U64(obj#87))": "cpu:28648700, objs:1@af363297/44@552878e1, store:2@d122b816/2@66ceb256",
-  " 215 call obj_to_u64(U64(obj#87))": "cpu:28649841, mem:13175888, objs:2@6f333d59/44@552878e1",
-  " 216 ret obj_to_u64 -> Ok(18446744073709551615)": "cpu:28650805",
-  " 217 call obj_from_u64(18446744073709551615)": "",
-  " 218 ret obj_from_u64 -> Ok(U64(obj#89))": "cpu:28652497, mem:13175952, objs:2@6f333d59/45@58b14757",
-  " 219 pop VM:a67b4f64:sym#79 -> Ok(U64(obj#89))": "cpu:28653638, mem:13175976, objs:3@21d7e00e/45@58b14757, vmem:1048576@c812d930",
-  " 220 ret call -> Ok(U64(obj#89))": " objs:-/45@58b14757, vmem:-, store:-/2@66ceb256",
-  " 221 call obj_to_u64(U64(obj#89))": "",
-  " 222 ret obj_to_u64 -> Ok(18446744073709551615)": "cpu:28653997",
-  " 223 call symbol_new_from_slice(12)": "",
-  " 224 ret symbol_new_from_slice -> Ok(Symbol(obj#91))": "cpu:28657034, mem:13176068, objs:-/46@2152582b",
-  " 225 call vec_new_from_slice(2)": "",
-  " 226 ret vec_new_from_slice -> Ok(Vec(obj#93))": "cpu:28659929, mem:13176164, objs:-/47@d57c0b4",
-  " 227 call call(Address(obj#13), Symbol(obj#91), Vec(obj#93))": "",
-  " 228 call symbol_len(Symbol(obj#91))": "cpu:28662045, mem:13176196",
-  " 229 ret symbol_len -> Ok(U32(12))": "cpu:28662153",
-  " 230 call symbol_copy_to_slice(Symbol(obj#91), U32(0), 12)": "",
-  " 231 ret symbol_copy_to_slice -> Ok(())": "cpu:28662512",
-  " 232 push VM:a67b4f64:sym#91(Symbol(obj#15), U64(4321))": "cpu:31492960, mem:14493002, objs:-/48@4c1d7c59, vmem:1048576@2434eedc",
-  " 233 call symbol_len(Symbol(obj#91))": "cpu:31496874, mem:14493088, objs:1@af363297/48@4c1d7c59",
-  " 234 ret symbol_len -> Ok(U32(12))": "cpu:31496982",
-  " 235 call symbol_copy_to_slice(Symbol(obj#91), U32(0), 12)": "",
-  " 236 ret symbol_copy_to_slice -> Ok(())": "cpu:31497341",
-  " 237 call put_contract_data(Symbol(obj#15), U64(4321), Instance)": " vmem:-",
-  " 238 call obj_cmp(Symbol(key_1), Symbol(obj#97))": "cpu:31506118, mem:14493341, objs:-/50@4a19d239",
-  " 239 ret obj_cmp -> Ok(-1)": "cpu:31506584",
-  " 240 call obj_cmp(Symbol(obj#97), Symbol(obj#15))": "cpu:31507096",
-  " 241 ret obj_cmp -> Ok(0)": "cpu:31507779",
-  " 242 call obj_cmp(Symbol(key_1), Symbol(obj#15))": "cpu:31509685, mem:14493405",
-  " 243 ret obj_cmp -> Ok(-1)": "cpu:31510151",
-  " 244 ret put_contract_data -> Ok(Void)": " objs:1@af363297/50@4a19d239, store:2@d122b816/2@66ceb256",
-  " 245 pop VM:a67b4f64:sym#91 -> Ok(Void)": "cpu:31530766, mem:14494588, vmem:1048576@560ca1ef, store:2@d122b816/2@3d6fd49d",
-  " 246 ret call -> Ok(Void)": " objs:-/50@4a19d239, vmem:-, store:-/2@3d6fd49d",
-  " 247 call symbol_new_from_slice(12)": "",
-  " 248 ret symbol_new_from_slice -> Ok(Symbol(obj#101))": "cpu:31533803, mem:14494680, objs:-/51@1e93446d",
-  " 249 call vec_new_from_slice(1)": "",
-  " 250 ret vec_new_from_slice -> Ok(Vec(obj#103))": "cpu:31536697, mem:14494768, objs:-/52@fe20f36b",
-  " 251 call call(Address(obj#13), Symbol(obj#101), Vec(obj#103))": "",
-  " 252 call symbol_len(Symbol(obj#101))": "cpu:31538812, mem:14494792",
-  " 253 ret symbol_len -> Ok(U32(12))": "cpu:31538920",
-  " 254 call symbol_copy_to_slice(Symbol(obj#101), U32(0), 12)": "",
-  " 255 ret symbol_copy_to_slice -> Ok(())": "cpu:31539279",
-  " 256 push VM:a67b4f64:sym#101(Symbol(obj#15))": "cpu:34369726, mem:15811590, objs:-/53@44ba9993, vmem:1048576@2434eedc",
-  " 257 call symbol_len(Symbol(obj#101))": "cpu:34373638, mem:15811660, objs:1@af363297/53@44ba9993",
-  " 258 ret symbol_len -> Ok(U32(12))": "cpu:34373746",
-  " 259 call symbol_copy_to_slice(Symbol(obj#101), U32(0), 12)": "",
-  " 260 ret symbol_copy_to_slice -> Ok(())": "cpu:34374105",
-  " 261 call has_contract_data(Symbol(obj#15), Instance)": " vmem:-",
-  " 262 call obj_cmp(Symbol(key_1), Symbol(obj#107))": "cpu:34381052, mem:15811849, objs:-/54@5b53fe55",
-  " 263 ret obj_cmp -> Ok(-1)": "cpu:34381518",
-  " 264 call obj_cmp(Symbol(obj#107), Symbol(obj#15))": "cpu:34381777",
-  " 265 ret obj_cmp -> Ok(0)": "cpu:34382460",
-  " 266 ret has_contract_data -> Ok(True)": "cpu:34382713, objs:1@af363297/54@5b53fe55, store:2@d122b816/2@3d6fd49d",
-  " 267 call get_contract_data(Symbol(obj#15), Instance)": "",
-  " 268 call obj_cmp(Symbol(obj#107), Symbol(obj#15))": "cpu:34383343, objs:-/54@5b53fe55, store:-/2@3d6fd49d",
-  " 269 ret obj_cmp -> Ok(0)": "cpu:34384026",
-  " 270 ret get_contract_data -> Ok(U64(4321))": "cpu:34384279, objs:1@af363297/54@5b53fe55, store:2@d122b816/2@3d6fd49d",
-  " 271 pop VM:a67b4f64:sym#101 -> Ok(U64(4321))": "cpu:34385005, vmem:1048576@560ca1ef",
-  " 272 ret call -> Ok(U64(4321))": " objs:-/54@5b53fe55, vmem:-, store:-/2@3d6fd49d",
-  " 273 call symbol_new_from_slice(12)": "",
-  " 274 ret symbol_new_from_slice -> Ok(Symbol(obj#109))": "cpu:34388042, mem:15811941, objs:-/55@29bab145",
-  " 275 call vec_new_from_slice(1)": "",
-  " 276 ret vec_new_from_slice -> Ok(Vec(obj#111))": "cpu:34390828, mem:15812029, objs:-/56@5be61dcb",
-  " 277 call call(Address(obj#13), Symbol(obj#109), Vec(obj#111))": "",
-  " 278 call symbol_len(Symbol(obj#109))": "cpu:34392943, mem:15812053",
-  " 279 ret symbol_len -> Ok(U32(12))": "cpu:34393051",
-  " 280 call symbol_copy_to_slice(Symbol(obj#109), U32(0), 12)": "",
-  " 281 ret symbol_copy_to_slice -> Ok(())": "cpu:34393410",
-  " 282 push VM:a67b4f64:sym#109(Symbol(key_1))": "cpu:37223857, mem:17128851, objs:-/57@9cd66f08, vmem:1048576@2434eedc",
-  " 283 call symbol_len(Symbol(obj#109))": "cpu:37226628, mem:17128897",
-  " 284 ret symbol_len -> Ok(U32(12))": "cpu:37226736",
-  " 285 call symbol_copy_to_slice(Symbol(obj#109), U32(0), 12)": "",
-  " 286 ret symbol_copy_to_slice -> Ok(())": "cpu:37227095",
-  " 287 call del_contract_data(Symbol(key_1), Instance)": " vmem:-",
-  " 288 call obj_cmp(Symbol(key_1), Symbol(obj#115))": "cpu:37232812, mem:17129086, objs:-/58@5331cab6",
-  " 289 ret obj_cmp -> Ok(-1)": "cpu:37233278",
-  " 290 call obj_cmp(Symbol(obj#115), Symbol(key_1))": "cpu:37233537",
-  " 291 ret obj_cmp -> Ok(1)": "cpu:37234003",
-  " 292 ret del_contract_data -> Ok(Void)": "cpu:37236154, mem:17129126, store:1@61d62dd9/2@3d6fd49d",
-  " 293 pop VM:a67b4f64:sym#109 -> Ok(Void)": "cpu:37256749, mem:17130181, vmem:1048576@92d4cbdd, store:1@61d62dd9/2@52dc9cad",
-  " 294 ret call -> Ok(Void)": " vmem:-, store:-/2@52dc9cad",
-  " 295 call symbol_new_from_slice(12)": "",
-  " 296 ret symbol_new_from_slice -> Ok(Symbol(obj#117))": "cpu:37259786, mem:17130273, objs:-/59@15460bc1",
-  " 297 call vec_new_from_slice(1)": "",
-  " 298 ret vec_new_from_slice -> Ok(Vec(obj#119))": "cpu:37262572, mem:17130361, objs:-/60@751252e9",
-  " 299 call call(Address(obj#13), Symbol(obj#117), Vec(obj#119))": "",
-  " 300 call symbol_len(Symbol(obj#117))": "cpu:37264687, mem:17130385",
-  " 301 ret symbol_len -> Ok(U32(12))": "cpu:37264795",
-  " 302 call symbol_copy_to_slice(Symbol(obj#117), U32(0), 12)": "",
-  " 303 ret symbol_copy_to_slice -> Ok(())": "cpu:37265154",
-  " 304 push VM:a67b4f64:sym#117(Symbol(key_1))": "cpu:40092785, mem:18446885, objs:-/61@e5a50253, vmem:1048576@2434eedc",
-  " 305 call symbol_len(Symbol(obj#117))": "cpu:40095556, mem:18446931",
-  " 306 ret symbol_len -> Ok(U32(12))": "cpu:40095664",
-  " 307 call symbol_copy_to_slice(Symbol(obj#117), U32(0), 12)": "",
-  " 308 ret symbol_copy_to_slice -> Ok(())": "cpu:40096023",
-  " 309 call del_contract_data(Symbol(key_1), Instance)": " vmem:-",
-  " 310 call obj_cmp(Symbol(obj#123), Symbol(key_1))": "cpu:40101988, mem:18447080, objs:-/62@522ec3a7",
-  " 311 ret obj_cmp -> Ok(1)": "cpu:40102454",
-  " 312 ret del_contract_data -> Ok(Void)": " store:1@61d62dd9/2@52dc9cad",
-  " 313 pop VM:a67b4f64:sym#117 -> Ok(Void)": "cpu:40121641, mem:18447986, vmem:1048576@92d4cbdd",
-  " 314 ret call -> Ok(Void)": " vmem:-, store:-/2@52dc9cad",
-  " 315 call symbol_new_from_slice(12)": "",
-  " 316 ret symbol_new_from_slice -> Ok(Symbol(obj#125))": "cpu:40124678, mem:18448078, objs:-/63@ff7d9072",
-  " 317 call vec_new_from_slice(1)": "",
-  " 318 ret vec_new_from_slice -> Ok(Vec(obj#127))": "cpu:40127464, mem:18448166, objs:-/64@44faea14",
-  " 319 call call(Address(obj#13), Symbol(obj#125), Vec(obj#127))": "",
-  " 320 call symbol_len(Symbol(obj#125))": "cpu:40129579, mem:18448190",
-  " 321 ret symbol_len -> Ok(U32(12))": "cpu:40129687",
-  " 322 call symbol_copy_to_slice(Symbol(obj#125), U32(0), 12)": "",
-  " 323 ret symbol_copy_to_slice -> Ok(())": "cpu:40130046",
-  " 324 push VM:a67b4f64:sym#125(Symbol(key_1))": "cpu:42957677, mem:19764690, objs:-/65@2f41aff2, vmem:1048576@2434eedc",
-  " 325 call symbol_len(Symbol(obj#125))": "cpu:42960448, mem:19764736",
-  " 326 ret symbol_len -> Ok(U32(12))": "cpu:42960556",
-  " 327 call symbol_copy_to_slice(Symbol(obj#125), U32(0), 12)": "",
-  " 328 ret symbol_copy_to_slice -> Ok(())": "cpu:42960915",
-  " 329 call has_contract_data(Symbol(key_1), Instance)": " vmem:-",
-  " 330 call obj_cmp(Symbol(obj#131), Symbol(key_1))": "cpu:42967156, mem:19764885, objs:-/66@bb70b044",
-  " 331 ret obj_cmp -> Ok(1)": "cpu:42967622",
-  " 332 ret has_contract_data -> Ok(False)": " store:1@61d62dd9/2@52dc9cad",
-  " 333 pop VM:a67b4f64:sym#125 -> Ok(False)": " vmem:1048576@92d4cbdd",
-  " 334 ret call -> Ok(False)": " vmem:-, store:-/2@52dc9cad",
-  " 335 call symbol_new_from_slice(12)": "",
-  " 336 ret symbol_new_from_slice -> Ok(Symbol(obj#133))": "cpu:42970659, mem:19764977, objs:-/67@b0216622",
-  " 337 call vec_new_from_slice(1)": "",
-  " 338 ret vec_new_from_slice -> Ok(Vec(obj#135))": "cpu:42973553, mem:19765065, objs:-/68@9623dc93",
-  " 339 call call(Address(obj#13), Symbol(obj#133), Vec(obj#135))": "",
-  " 340 call symbol_len(Symbol(obj#133))": "cpu:42975668, mem:19765089",
-  " 341 ret symbol_len -> Ok(U32(12))": "cpu:42975776",
-  " 342 call symbol_copy_to_slice(Symbol(obj#133), U32(0), 12)": "",
-  " 343 ret symbol_copy_to_slice -> Ok(())": "cpu:42976135",
-  " 344 push VM:a67b4f64:sym#133(Symbol(obj#15))": "cpu:45803766, mem:21081589, objs:-/69@b8c90f48, vmem:1048576@2434eedc",
-  " 345 call symbol_len(Symbol(obj#133))": "cpu:45807678, mem:21081659, objs:1@af363297/69@b8c90f48",
-  " 346 ret symbol_len -> Ok(U32(12))": "cpu:45807786",
-  " 347 call symbol_copy_to_slice(Symbol(obj#133), U32(0), 12)": "",
-  " 348 ret symbol_copy_to_slice -> Ok(())": "cpu:45808145",
-  " 349 call has_contract_data(Symbol(obj#15), Instance)": " vmem:-",
-  " 350 call obj_cmp(Symbol(obj#139), Symbol(obj#15))": "cpu:45814494, mem:21081808, objs:-/70@a48a4de7",
-  " 351 ret obj_cmp -> Ok(0)": "cpu:45815177",
-  " 352 ret has_contract_data -> Ok(True)": "cpu:45815430, objs:1@af363297/70@a48a4de7, store:1@61d62dd9/2@52dc9cad",
-  " 353 pop VM:a67b4f64:sym#133 -> Ok(True)": " vmem:1048576@ca61953b",
-  " 354 ret call -> Ok(True)": " objs:-/70@a48a4de7, vmem:-, store:-/2@52dc9cad",
-  " 355 end": "cpu:45815430, mem:21081808, prngs:-/d8a09d57, objs:-/70@a48a4de7, vmem:-, evt:-, store:-/2@52dc9cad"
+  " 110 call get_ledger_sequence()": "cpu:17220301, mem:7906001",
+  " 111 ret get_ledger_sequence -> Ok(U32(0))": "",
+  " 112 ret extend_current_contract_instance_and_code -> Ok(Void)": " store:-/2@323b0287",
+  " 113 pop VM:a67b4f64:sym#43 -> Ok(Void)": " vmem:1048576@2434eedc",
+  " 114 ret call -> Ok(Void)": " vmem:-",
+  " 115 call symbol_new_from_slice(12)": "",
+  " 116 ret symbol_new_from_slice -> Ok(Symbol(obj#47))": "cpu:17223338, mem:7906093, objs:-/24@e412b53c",
+  " 117 call obj_from_u64(18446744073709551615)": "",
+  " 118 ret obj_from_u64 -> Ok(U64(obj#49))": "cpu:17224479, mem:7906157, objs:-/25@f45e394c",
+  " 119 call vec_new_from_slice(2)": "",
+  " 120 ret vec_new_from_slice -> Ok(Vec(obj#51))": "cpu:17227482, mem:7906253, objs:-/26@5239328e",
+  " 121 call call(Address(obj#13), Symbol(obj#47), Vec(obj#51))": "",
+  " 122 call symbol_len(Symbol(obj#47))": "cpu:17229598, mem:7906285",
+  " 123 ret symbol_len -> Ok(U32(12))": "cpu:17229706",
+  " 124 call symbol_copy_to_slice(Symbol(obj#47), U32(0), 12)": "",
+  " 125 ret symbol_copy_to_slice -> Ok(())": "cpu:17230065",
+  " 126 push VM:a67b4f64:sym#47(Symbol(obj#15), U64(obj#49))": "cpu:20057695, mem:9222777, objs:-/27@58f63e3f, vmem:1048576@2434eedc",
+  " 127 call symbol_len(Symbol(obj#47))": "cpu:20062750, mem:9222887, objs:2@677e1124/27@58f63e3f",
+  " 128 ret symbol_len -> Ok(U32(12))": "cpu:20062858",
+  " 129 call symbol_copy_to_slice(Symbol(obj#47), U32(0), 12)": "",
+  " 130 ret symbol_copy_to_slice -> Ok(())": "cpu:20063217",
+  " 131 call obj_to_u64(U64(obj#49))": " vmem:-",
+  " 132 ret obj_to_u64 -> Ok(18446744073709551615)": "cpu:20065243",
+  " 133 call obj_from_u64(18446744073709551615)": "",
+  " 134 ret obj_from_u64 -> Ok(U64(obj#55))": "cpu:20067463, mem:9222951, objs:2@677e1124/28@60450b41",
+  " 135 call put_contract_data(Symbol(obj#15), U64(obj#55), Instance)": "cpu:20068604, mem:9222975, objs:3@531835a4/28@60450b41",
+  " 136 call obj_cmp(Symbol(key_1), Symbol(obj#15))": "cpu:20071496, mem:9223031, objs:-/28@60450b41",
+  " 137 ret obj_cmp -> Ok(-1)": "cpu:20071962",
+  " 138 call obj_cmp(Symbol(key_1), Symbol(obj#15))": "cpu:20073868, mem:9223095",
+  " 139 ret obj_cmp -> Ok(-1)": "cpu:20074334",
+  " 140 ret put_contract_data -> Ok(Void)": " objs:3@531835a4/28@60450b41, store:2@d122b816/2@323b0287",
+  " 141 pop VM:a67b4f64:sym#47 -> Ok(Void)": "cpu:20093899, mem:9224121, vmem:1048576@c812d930, store:2@d122b816/2@66ceb256",
+  " 142 ret call -> Ok(Void)": " objs:-/28@60450b41, vmem:-, store:-/2@66ceb256",
+  " 143 call symbol_new_from_slice(12)": "",
+  " 144 ret symbol_new_from_slice -> Ok(Symbol(obj#57))": "cpu:20096936, mem:9224213, objs:-/29@5dfb3f97",
+  " 145 call symbol_new_from_slice(13)": "",
+  " 146 ret symbol_new_from_slice -> Ok(Symbol(obj#59))": "cpu:20099973, mem:9224306, objs:-/30@a7abc7fb",
+  " 147 call vec_new_from_slice(1)": "",
+  " 148 ret vec_new_from_slice -> Ok(Vec(obj#61))": "cpu:20102867, mem:9224394, objs:-/31@7a6516f3",
+  " 149 call call(Address(obj#13), Symbol(obj#57), Vec(obj#61))": "",
+  " 150 call symbol_len(Symbol(obj#57))": "cpu:20104982, mem:9224418",
+  " 151 ret symbol_len -> Ok(U32(12))": "cpu:20105090",
+  " 152 call symbol_copy_to_slice(Symbol(obj#57), U32(0), 12)": "",
+  " 153 ret symbol_copy_to_slice -> Ok(())": "cpu:20105449",
+  " 154 push VM:a67b4f64:sym#57(Symbol(obj#59))": "cpu:22935896, mem:10541216, objs:-/32@50fd174d, vmem:1048576@2434eedc",
+  " 155 call symbol_len(Symbol(obj#57))": "cpu:22939808, mem:10541286, objs:1@d35380f8/32@50fd174d",
+  " 156 ret symbol_len -> Ok(U32(12))": "cpu:22939916",
+  " 157 call symbol_copy_to_slice(Symbol(obj#57), U32(0), 12)": "",
+  " 158 ret symbol_copy_to_slice -> Ok(())": "cpu:22940275",
+  " 159 call has_contract_data(Symbol(obj#59), Instance)": " vmem:-",
+  " 160 call obj_cmp(Symbol(key_1), Symbol(obj#65))": "cpu:22947768, mem:10541539, objs:-/34@68d0ca9f",
+  " 161 ret obj_cmp -> Ok(-1)": "cpu:22948234",
+  " 162 call obj_cmp(Symbol(obj#65), Symbol(obj#59))": "cpu:22948493",
+  " 163 ret obj_cmp -> Ok(0)": "cpu:22949176",
+  " 164 ret has_contract_data -> Ok(True)": "cpu:22949429, objs:1@d35380f8/34@68d0ca9f, store:2@d122b816/2@66ceb256",
+  " 165 pop VM:a67b4f64:sym#57 -> Ok(True)": " vmem:1048576@ca61953b",
+  " 166 ret call -> Ok(True)": " objs:-/34@68d0ca9f, vmem:-, store:-/2@66ceb256",
+  " 167 call symbol_new_from_slice(12)": "",
+  " 168 ret symbol_new_from_slice -> Ok(Symbol(obj#69))": "cpu:22952466, mem:10541631, objs:-/35@d3489d5a",
+  " 169 call vec_new_from_slice(1)": "",
+  " 170 ret vec_new_from_slice -> Ok(Vec(obj#71))": "cpu:22955252, mem:10541719, objs:-/36@e2369fa5",
+  " 171 call call(Address(obj#13), Symbol(obj#69), Vec(obj#71))": "",
+  " 172 call symbol_len(Symbol(obj#69))": "cpu:22957367, mem:10541743",
+  " 173 ret symbol_len -> Ok(U32(12))": "cpu:22957475",
+  " 174 call symbol_copy_to_slice(Symbol(obj#69), U32(0), 12)": "",
+  " 175 ret symbol_copy_to_slice -> Ok(())": "cpu:22957834",
+  " 176 push VM:a67b4f64:sym#69(Symbol(key_1))": "cpu:25788281, mem:11858541, objs:-/37@e3386b4, vmem:1048576@2434eedc",
+  " 177 call symbol_len(Symbol(obj#69))": "cpu:25791052, mem:11858587",
+  " 178 ret symbol_len -> Ok(U32(12))": "cpu:25791160",
+  " 179 call symbol_copy_to_slice(Symbol(obj#69), U32(0), 12)": "",
+  " 180 ret symbol_copy_to_slice -> Ok(())": "cpu:25791519",
+  " 181 call has_contract_data(Symbol(key_1), Instance)": " vmem:-",
+  " 182 call obj_cmp(Symbol(key_1), Symbol(obj#75))": "cpu:25799750, mem:11858840, objs:-/39@d3453ef4",
+  " 183 ret obj_cmp -> Ok(-1)": "cpu:25800216",
+  " 184 call obj_cmp(Symbol(obj#75), Symbol(key_1))": "cpu:25800475",
+  " 185 ret obj_cmp -> Ok(1)": "cpu:25800941",
+  " 186 ret has_contract_data -> Ok(True)": "cpu:25801194, store:2@d122b816/2@66ceb256",
+  " 187 call get_contract_data(Symbol(key_1), Instance)": "",
+  " 188 call obj_cmp(Symbol(obj#75), Symbol(key_1))": "cpu:25801716, store:-/2@66ceb256",
+  " 189 ret obj_cmp -> Ok(1)": "cpu:25802182",
+  " 190 ret get_contract_data -> Ok(U64(1234))": "cpu:25802435, store:2@d122b816/2@66ceb256",
+  " 191 pop VM:a67b4f64:sym#69 -> Ok(U64(1234))": "cpu:25803161, vmem:1048576@44e86686",
+  " 192 ret call -> Ok(U64(1234))": " vmem:-, store:-/2@66ceb256",
+  " 193 call symbol_new_from_slice(12)": "",
+  " 194 ret symbol_new_from_slice -> Ok(Symbol(obj#79))": "cpu:25806198, mem:11858932, objs:-/40@6b7a8a28",
+  " 195 call vec_new_from_slice(1)": "",
+  " 196 ret vec_new_from_slice -> Ok(Vec(obj#81))": "cpu:25809092, mem:11859020, objs:-/41@34cf42a4",
+  " 197 call call(Address(obj#13), Symbol(obj#79), Vec(obj#81))": "",
+  " 198 call symbol_len(Symbol(obj#79))": "cpu:25811207, mem:11859044",
+  " 199 ret symbol_len -> Ok(U32(12))": "cpu:25811315",
+  " 200 call symbol_copy_to_slice(Symbol(obj#79), U32(0), 12)": "",
+  " 201 ret symbol_copy_to_slice -> Ok(())": "cpu:25811674",
+  " 202 push VM:a67b4f64:sym#79(Symbol(obj#15))": "cpu:28642121, mem:13175842, objs:-/42@271e022b, vmem:1048576@2434eedc",
+  " 203 call symbol_len(Symbol(obj#79))": "cpu:28646033, mem:13175912, objs:1@af363297/42@271e022b",
+  " 204 ret symbol_len -> Ok(U32(12))": "cpu:28646141",
+  " 205 call symbol_copy_to_slice(Symbol(obj#79), U32(0), 12)": "",
+  " 206 ret symbol_copy_to_slice -> Ok(())": "cpu:28646500",
+  " 207 call has_contract_data(Symbol(obj#15), Instance)": " vmem:-",
+  " 208 call obj_cmp(Symbol(key_1), Symbol(obj#85))": "cpu:28654839, mem:13176165, objs:-/44@552878e1",
+  " 209 ret obj_cmp -> Ok(-1)": "cpu:28655305",
+  " 210 call obj_cmp(Symbol(obj#85), Symbol(obj#15))": "cpu:28655564",
+  " 211 ret obj_cmp -> Ok(0)": "cpu:28656247",
+  " 212 ret has_contract_data -> Ok(True)": "cpu:28656500, objs:1@af363297/44@552878e1, store:2@d122b816/2@66ceb256",
+  " 213 call get_contract_data(Symbol(obj#15), Instance)": "",
+  " 214 call obj_cmp(Symbol(obj#85), Symbol(obj#15))": "cpu:28657130, objs:-/44@552878e1, store:-/2@66ceb256",
+  " 215 ret obj_cmp -> Ok(0)": "cpu:28657813",
+  " 216 ret get_contract_data -> Ok(U64(obj#87))": "cpu:28658066, objs:1@af363297/44@552878e1, store:2@d122b816/2@66ceb256",
+  " 217 call obj_to_u64(U64(obj#87))": "cpu:28659207, mem:13176189, objs:2@6f333d59/44@552878e1",
+  " 218 ret obj_to_u64 -> Ok(18446744073709551615)": "cpu:28660171",
+  " 219 call obj_from_u64(18446744073709551615)": "",
+  " 220 ret obj_from_u64 -> Ok(U64(obj#89))": "cpu:28661863, mem:13176253, objs:2@6f333d59/45@58b14757",
+  " 221 pop VM:a67b4f64:sym#79 -> Ok(U64(obj#89))": "cpu:28663004, mem:13176277, objs:3@21d7e00e/45@58b14757, vmem:1048576@c812d930",
+  " 222 ret call -> Ok(U64(obj#89))": " objs:-/45@58b14757, vmem:-, store:-/2@66ceb256",
+  " 223 call obj_to_u64(U64(obj#89))": "",
+  " 224 ret obj_to_u64 -> Ok(18446744073709551615)": "cpu:28663363",
+  " 225 call symbol_new_from_slice(12)": "",
+  " 226 ret symbol_new_from_slice -> Ok(Symbol(obj#91))": "cpu:28666400, mem:13176369, objs:-/46@2152582b",
+  " 227 call vec_new_from_slice(2)": "",
+  " 228 ret vec_new_from_slice -> Ok(Vec(obj#93))": "cpu:28669295, mem:13176465, objs:-/47@d57c0b4",
+  " 229 call call(Address(obj#13), Symbol(obj#91), Vec(obj#93))": "",
+  " 230 call symbol_len(Symbol(obj#91))": "cpu:28671411, mem:13176497",
+  " 231 ret symbol_len -> Ok(U32(12))": "cpu:28671519",
+  " 232 call symbol_copy_to_slice(Symbol(obj#91), U32(0), 12)": "",
+  " 233 ret symbol_copy_to_slice -> Ok(())": "cpu:28671878",
+  " 234 push VM:a67b4f64:sym#91(Symbol(obj#15), U64(4321))": "cpu:31502326, mem:14493303, objs:-/48@4c1d7c59, vmem:1048576@2434eedc",
+  " 235 call symbol_len(Symbol(obj#91))": "cpu:31506240, mem:14493389, objs:1@af363297/48@4c1d7c59",
+  " 236 ret symbol_len -> Ok(U32(12))": "cpu:31506348",
+  " 237 call symbol_copy_to_slice(Symbol(obj#91), U32(0), 12)": "",
+  " 238 ret symbol_copy_to_slice -> Ok(())": "cpu:31506707",
+  " 239 call put_contract_data(Symbol(obj#15), U64(4321), Instance)": " vmem:-",
+  " 240 call obj_cmp(Symbol(key_1), Symbol(obj#97))": "cpu:31515484, mem:14493642, objs:-/50@4a19d239",
+  " 241 ret obj_cmp -> Ok(-1)": "cpu:31515950",
+  " 242 call obj_cmp(Symbol(obj#97), Symbol(obj#15))": "cpu:31516462",
+  " 243 ret obj_cmp -> Ok(0)": "cpu:31517145",
+  " 244 call obj_cmp(Symbol(key_1), Symbol(obj#15))": "cpu:31519051, mem:14493706",
+  " 245 ret obj_cmp -> Ok(-1)": "cpu:31519517",
+  " 246 ret put_contract_data -> Ok(Void)": " objs:1@af363297/50@4a19d239, store:2@d122b816/2@66ceb256",
+  " 247 pop VM:a67b4f64:sym#91 -> Ok(Void)": "cpu:31540132, mem:14494889, vmem:1048576@560ca1ef, store:2@d122b816/2@3d6fd49d",
+  " 248 ret call -> Ok(Void)": " objs:-/50@4a19d239, vmem:-, store:-/2@3d6fd49d",
+  " 249 call symbol_new_from_slice(12)": "",
+  " 250 ret symbol_new_from_slice -> Ok(Symbol(obj#101))": "cpu:31543169, mem:14494981, objs:-/51@1e93446d",
+  " 251 call vec_new_from_slice(1)": "",
+  " 252 ret vec_new_from_slice -> Ok(Vec(obj#103))": "cpu:31546063, mem:14495069, objs:-/52@fe20f36b",
+  " 253 call call(Address(obj#13), Symbol(obj#101), Vec(obj#103))": "",
+  " 254 call symbol_len(Symbol(obj#101))": "cpu:31548178, mem:14495093",
+  " 255 ret symbol_len -> Ok(U32(12))": "cpu:31548286",
+  " 256 call symbol_copy_to_slice(Symbol(obj#101), U32(0), 12)": "",
+  " 257 ret symbol_copy_to_slice -> Ok(())": "cpu:31548645",
+  " 258 push VM:a67b4f64:sym#101(Symbol(obj#15))": "cpu:34379092, mem:15811891, objs:-/53@44ba9993, vmem:1048576@2434eedc",
+  " 259 call symbol_len(Symbol(obj#101))": "cpu:34383004, mem:15811961, objs:1@af363297/53@44ba9993",
+  " 260 ret symbol_len -> Ok(U32(12))": "cpu:34383112",
+  " 261 call symbol_copy_to_slice(Symbol(obj#101), U32(0), 12)": "",
+  " 262 ret symbol_copy_to_slice -> Ok(())": "cpu:34383471",
+  " 263 call has_contract_data(Symbol(obj#15), Instance)": " vmem:-",
+  " 264 call obj_cmp(Symbol(key_1), Symbol(obj#107))": "cpu:34390418, mem:15812150, objs:-/54@5b53fe55",
+  " 265 ret obj_cmp -> Ok(-1)": "cpu:34390884",
+  " 266 call obj_cmp(Symbol(obj#107), Symbol(obj#15))": "cpu:34391143",
+  " 267 ret obj_cmp -> Ok(0)": "cpu:34391826",
+  " 268 ret has_contract_data -> Ok(True)": "cpu:34392079, objs:1@af363297/54@5b53fe55, store:2@d122b816/2@3d6fd49d",
+  " 269 call get_contract_data(Symbol(obj#15), Instance)": "",
+  " 270 call obj_cmp(Symbol(obj#107), Symbol(obj#15))": "cpu:34392709, objs:-/54@5b53fe55, store:-/2@3d6fd49d",
+  " 271 ret obj_cmp -> Ok(0)": "cpu:34393392",
+  " 272 ret get_contract_data -> Ok(U64(4321))": "cpu:34393645, objs:1@af363297/54@5b53fe55, store:2@d122b816/2@3d6fd49d",
+  " 273 pop VM:a67b4f64:sym#101 -> Ok(U64(4321))": "cpu:34394371, vmem:1048576@560ca1ef",
+  " 274 ret call -> Ok(U64(4321))": " objs:-/54@5b53fe55, vmem:-, store:-/2@3d6fd49d",
+  " 275 call symbol_new_from_slice(12)": "",
+  " 276 ret symbol_new_from_slice -> Ok(Symbol(obj#109))": "cpu:34397408, mem:15812242, objs:-/55@29bab145",
+  " 277 call vec_new_from_slice(1)": "",
+  " 278 ret vec_new_from_slice -> Ok(Vec(obj#111))": "cpu:34400194, mem:15812330, objs:-/56@5be61dcb",
+  " 279 call call(Address(obj#13), Symbol(obj#109), Vec(obj#111))": "",
+  " 280 call symbol_len(Symbol(obj#109))": "cpu:34402309, mem:15812354",
+  " 281 ret symbol_len -> Ok(U32(12))": "cpu:34402417",
+  " 282 call symbol_copy_to_slice(Symbol(obj#109), U32(0), 12)": "",
+  " 283 ret symbol_copy_to_slice -> Ok(())": "cpu:34402776",
+  " 284 push VM:a67b4f64:sym#109(Symbol(key_1))": "cpu:37233223, mem:17129152, objs:-/57@9cd66f08, vmem:1048576@2434eedc",
+  " 285 call symbol_len(Symbol(obj#109))": "cpu:37235994, mem:17129198",
+  " 286 ret symbol_len -> Ok(U32(12))": "cpu:37236102",
+  " 287 call symbol_copy_to_slice(Symbol(obj#109), U32(0), 12)": "",
+  " 288 ret symbol_copy_to_slice -> Ok(())": "cpu:37236461",
+  " 289 call del_contract_data(Symbol(key_1), Instance)": " vmem:-",
+  " 290 call obj_cmp(Symbol(key_1), Symbol(obj#115))": "cpu:37242178, mem:17129387, objs:-/58@5331cab6",
+  " 291 ret obj_cmp -> Ok(-1)": "cpu:37242644",
+  " 292 call obj_cmp(Symbol(obj#115), Symbol(key_1))": "cpu:37242903",
+  " 293 ret obj_cmp -> Ok(1)": "cpu:37243369",
+  " 294 ret del_contract_data -> Ok(Void)": "cpu:37245520, mem:17129427, store:1@61d62dd9/2@3d6fd49d",
+  " 295 pop VM:a67b4f64:sym#109 -> Ok(Void)": "cpu:37266115, mem:17130482, vmem:1048576@92d4cbdd, store:1@61d62dd9/2@52dc9cad",
+  " 296 ret call -> Ok(Void)": " vmem:-, store:-/2@52dc9cad",
+  " 297 call symbol_new_from_slice(12)": "",
+  " 298 ret symbol_new_from_slice -> Ok(Symbol(obj#117))": "cpu:37269152, mem:17130574, objs:-/59@15460bc1",
+  " 299 call vec_new_from_slice(1)": "",
+  " 300 ret vec_new_from_slice -> Ok(Vec(obj#119))": "cpu:37271938, mem:17130662, objs:-/60@751252e9",
+  " 301 call call(Address(obj#13), Symbol(obj#117), Vec(obj#119))": "",
+  " 302 call symbol_len(Symbol(obj#117))": "cpu:37274053, mem:17130686",
+  " 303 ret symbol_len -> Ok(U32(12))": "cpu:37274161",
+  " 304 call symbol_copy_to_slice(Symbol(obj#117), U32(0), 12)": "",
+  " 305 ret symbol_copy_to_slice -> Ok(())": "cpu:37274520",
+  " 306 push VM:a67b4f64:sym#117(Symbol(key_1))": "cpu:40102151, mem:18447186, objs:-/61@e5a50253, vmem:1048576@2434eedc",
+  " 307 call symbol_len(Symbol(obj#117))": "cpu:40104922, mem:18447232",
+  " 308 ret symbol_len -> Ok(U32(12))": "cpu:40105030",
+  " 309 call symbol_copy_to_slice(Symbol(obj#117), U32(0), 12)": "",
+  " 310 ret symbol_copy_to_slice -> Ok(())": "cpu:40105389",
+  " 311 call del_contract_data(Symbol(key_1), Instance)": " vmem:-",
+  " 312 call obj_cmp(Symbol(obj#123), Symbol(key_1))": "cpu:40111354, mem:18447381, objs:-/62@522ec3a7",
+  " 313 ret obj_cmp -> Ok(1)": "cpu:40111820",
+  " 314 ret del_contract_data -> Ok(Void)": " store:1@61d62dd9/2@52dc9cad",
+  " 315 pop VM:a67b4f64:sym#117 -> Ok(Void)": "cpu:40131007, mem:18448287, vmem:1048576@92d4cbdd",
+  " 316 ret call -> Ok(Void)": " vmem:-, store:-/2@52dc9cad",
+  " 317 call symbol_new_from_slice(12)": "",
+  " 318 ret symbol_new_from_slice -> Ok(Symbol(obj#125))": "cpu:40134044, mem:18448379, objs:-/63@ff7d9072",
+  " 319 call vec_new_from_slice(1)": "",
+  " 320 ret vec_new_from_slice -> Ok(Vec(obj#127))": "cpu:40136830, mem:18448467, objs:-/64@44faea14",
+  " 321 call call(Address(obj#13), Symbol(obj#125), Vec(obj#127))": "",
+  " 322 call symbol_len(Symbol(obj#125))": "cpu:40138945, mem:18448491",
+  " 323 ret symbol_len -> Ok(U32(12))": "cpu:40139053",
+  " 324 call symbol_copy_to_slice(Symbol(obj#125), U32(0), 12)": "",
+  " 325 ret symbol_copy_to_slice -> Ok(())": "cpu:40139412",
+  " 326 push VM:a67b4f64:sym#125(Symbol(key_1))": "cpu:42967043, mem:19764991, objs:-/65@2f41aff2, vmem:1048576@2434eedc",
+  " 327 call symbol_len(Symbol(obj#125))": "cpu:42969814, mem:19765037",
+  " 328 ret symbol_len -> Ok(U32(12))": "cpu:42969922",
+  " 329 call symbol_copy_to_slice(Symbol(obj#125), U32(0), 12)": "",
+  " 330 ret symbol_copy_to_slice -> Ok(())": "cpu:42970281",
+  " 331 call has_contract_data(Symbol(key_1), Instance)": " vmem:-",
+  " 332 call obj_cmp(Symbol(obj#131), Symbol(key_1))": "cpu:42976522, mem:19765186, objs:-/66@bb70b044",
+  " 333 ret obj_cmp -> Ok(1)": "cpu:42976988",
+  " 334 ret has_contract_data -> Ok(False)": " store:1@61d62dd9/2@52dc9cad",
+  " 335 pop VM:a67b4f64:sym#125 -> Ok(False)": " vmem:1048576@92d4cbdd",
+  " 336 ret call -> Ok(False)": " vmem:-, store:-/2@52dc9cad",
+  " 337 call symbol_new_from_slice(12)": "",
+  " 338 ret symbol_new_from_slice -> Ok(Symbol(obj#133))": "cpu:42980025, mem:19765278, objs:-/67@b0216622",
+  " 339 call vec_new_from_slice(1)": "",
+  " 340 ret vec_new_from_slice -> Ok(Vec(obj#135))": "cpu:42982919, mem:19765366, objs:-/68@9623dc93",
+  " 341 call call(Address(obj#13), Symbol(obj#133), Vec(obj#135))": "",
+  " 342 call symbol_len(Symbol(obj#133))": "cpu:42985034, mem:19765390",
+  " 343 ret symbol_len -> Ok(U32(12))": "cpu:42985142",
+  " 344 call symbol_copy_to_slice(Symbol(obj#133), U32(0), 12)": "",
+  " 345 ret symbol_copy_to_slice -> Ok(())": "cpu:42985501",
+  " 346 push VM:a67b4f64:sym#133(Symbol(obj#15))": "cpu:45813132, mem:21081890, objs:-/69@b8c90f48, vmem:1048576@2434eedc",
+  " 347 call symbol_len(Symbol(obj#133))": "cpu:45817044, mem:21081960, objs:1@af363297/69@b8c90f48",
+  " 348 ret symbol_len -> Ok(U32(12))": "cpu:45817152",
+  " 349 call symbol_copy_to_slice(Symbol(obj#133), U32(0), 12)": "",
+  " 350 ret symbol_copy_to_slice -> Ok(())": "cpu:45817511",
+  " 351 call has_contract_data(Symbol(obj#15), Instance)": " vmem:-",
+  " 352 call obj_cmp(Symbol(obj#139), Symbol(obj#15))": "cpu:45823860, mem:21082109, objs:-/70@a48a4de7",
+  " 353 ret obj_cmp -> Ok(0)": "cpu:45824543",
+  " 354 ret has_contract_data -> Ok(True)": "cpu:45824796, objs:1@af363297/70@a48a4de7, store:1@61d62dd9/2@52dc9cad",
+  " 355 pop VM:a67b4f64:sym#133 -> Ok(True)": " vmem:1048576@ca61953b",
+  " 356 ret call -> Ok(True)": " objs:-/70@a48a4de7, vmem:-, store:-/2@52dc9cad",
+  " 357 end": "cpu:45824796, mem:21082109, prngs:-/d8a09d57, objs:-/70@a48a4de7, vmem:-, evt:-, store:-/2@52dc9cad"
 }
\ No newline at end of file
diff --git a/soroban-env-host/observations/test__storage__test_persistent_storage.json b/soroban-env-host/observations/test__storage__test_persistent_storage.json
index a4167ae0..c8d88a2d 100644
--- a/soroban-env-host/observations/test__storage__test_persistent_storage.json
+++ b/soroban-env-host/observations/test__storage__test_persistent_storage.json
@@ -107,9 +107,9 @@
   " 105 call extend_contract_data(Symbol(key_1), Persistent, U32(1), U32(6312000))": " vmem:-",
   " 106 call get_ledger_sequence()": "cpu:17200532, mem:7905273, store:-/-",
   " 107 ret get_ledger_sequence -> Ok(U32(0))": "",
-  " 108 ret extend_contract_data -> Err(Error(Storage, InvalidAction))": " store:-/3@cfdeec51",
-  " 109 pop VM:a67b4f64:sym#43 -> Err(Error(Storage, InvalidAction))": " vmem:1048576@92d4cbdd",
-  " 110 ret call -> Err(Error(Storage, InvalidAction))": " vmem:-",
+  " 108 ret extend_contract_data -> Ok(Void)": " store:-/3@cfdeec51",
+  " 109 pop VM:a67b4f64:sym#43 -> Ok(Void)": " vmem:1048576@92d4cbdd",
+  " 110 ret call -> Ok(Void)": " vmem:-",
   " 111 call symbol_new_from_slice(14)": "",
   " 112 ret symbol_new_from_slice -> Ok(Symbol(obj#47))": "cpu:17203569, mem:7905367, objs:-/24@24d84544",
   " 113 call obj_from_u64(18446744073709551615)": "",
diff --git a/soroban-env-host/observations/test__storage__test_storage_mix.json b/soroban-env-host/observations/test__storage__test_storage_mix.json
index 8c0ebd8f..09131d5b 100644
--- a/soroban-env-host/observations/test__storage__test_storage_mix.json
+++ b/soroban-env-host/observations/test__storage__test_storage_mix.json
@@ -107,9 +107,9 @@
   " 105 call extend_contract_data(Symbol(key_1), Persistent, U32(1), U32(6312000))": " vmem:-",
   " 106 call get_ledger_sequence()": "cpu:17200532, mem:7905273, store:-/-",
   " 107 ret get_ledger_sequence -> Ok(U32(0))": "",
-  " 108 ret extend_contract_data -> Err(Error(Storage, InvalidAction))": " store:-/3@cfdeec51",
-  " 109 pop VM:a67b4f64:sym#43 -> Err(Error(Storage, InvalidAction))": " vmem:1048576@92d4cbdd",
-  " 110 ret call -> Err(Error(Storage, InvalidAction))": " vmem:-",
+  " 108 ret extend_contract_data -> Ok(Void)": " store:-/3@cfdeec51",
+  " 109 pop VM:a67b4f64:sym#43 -> Ok(Void)": " vmem:1048576@92d4cbdd",
+  " 110 ret call -> Ok(Void)": " vmem:-",
   " 111 call symbol_new_from_slice(14)": "",
   " 112 ret symbol_new_from_slice -> Ok(Symbol(obj#47))": "cpu:17203569, mem:7905367, objs:-/24@24d84544",
   " 113 call obj_from_u64(18446744073709551615)": "",
@@ -705,250 +705,252 @@
   " 703 call extend_current_contract_instance_and_code(U32(1), U32(6312000))": " vmem:-",
   " 704 call get_ledger_sequence()": "cpu:102795653, mem:47419449, store:-/-",
   " 705 ret get_ledger_sequence -> Ok(U32(0))": "",
-  " 706 ret extend_current_contract_instance_and_code -> Err(Error(Storage, InvalidAction))": " store:-/6@41d15fed",
-  " 707 pop VM:a67b4f64:sym#247 -> Err(Error(Storage, InvalidAction))": " vmem:1048576@2434eedc",
-  " 708 ret call -> Err(Error(Storage, InvalidAction))": " vmem:-",
-  " 709 call symbol_new_from_slice(12)": "",
-  " 710 ret symbol_new_from_slice -> Ok(Symbol(obj#251))": "cpu:102798690, mem:47419541, objs:-/126@5e0f5d0e",
-  " 711 call obj_from_u64(18446744073709551615)": "",
-  " 712 ret obj_from_u64 -> Ok(U64(obj#253))": "cpu:102799831, mem:47419605, objs:-/127@4f270c66",
-  " 713 call vec_new_from_slice(2)": "",
-  " 714 ret vec_new_from_slice -> Ok(Vec(obj#255))": "cpu:102802834, mem:47419701, objs:-/128@194aaf5c",
-  " 715 call call(Address(obj#13), Symbol(obj#251), Vec(obj#255))": "",
-  " 716 call symbol_len(Symbol(obj#251))": "cpu:102804950, mem:47419733",
-  " 717 ret symbol_len -> Ok(U32(12))": "cpu:102805058",
-  " 718 call symbol_copy_to_slice(Symbol(obj#251), U32(0), 12)": "",
-  " 719 ret symbol_copy_to_slice -> Ok(())": "cpu:102805417",
-  " 720 push VM:a67b4f64:sym#251(Symbol(obj#219), U64(obj#253))": "cpu:105634670, mem:48736497, objs:-/129@89bdffa2, vmem:1048576@2434eedc",
-  " 721 call symbol_len(Symbol(obj#251))": "cpu:105639725, mem:48736607, objs:2@ddbed9ac/129@89bdffa2",
-  " 722 ret symbol_len -> Ok(U32(12))": "cpu:105639833",
-  " 723 call symbol_copy_to_slice(Symbol(obj#251), U32(0), 12)": "",
-  " 724 ret symbol_copy_to_slice -> Ok(())": "cpu:105640192",
-  " 725 call obj_to_u64(U64(obj#253))": " vmem:-",
-  " 726 ret obj_to_u64 -> Ok(18446744073709551615)": "cpu:105642218",
-  " 727 call obj_from_u64(18446744073709551615)": "",
-  " 728 ret obj_from_u64 -> Ok(U64(obj#259))": "cpu:105644438, mem:48736671, objs:2@ddbed9ac/130@cd65d99",
-  " 729 call put_contract_data(Symbol(obj#219), U64(obj#259), Instance)": "cpu:105645579, mem:48736695, objs:3@d0345e12/130@cd65d99",
-  " 730 call obj_cmp(Symbol(key_1), Symbol(obj#219))": "cpu:105648471, mem:48736751, objs:-/130@cd65d99",
-  " 731 ret obj_cmp -> Ok(-1)": "cpu:105648937",
-  " 732 call obj_cmp(Symbol(key_1), Symbol(obj#219))": "cpu:105650843, mem:48736815",
-  " 733 ret obj_cmp -> Ok(-1)": "cpu:105651309",
-  " 734 ret put_contract_data -> Ok(Void)": " objs:3@d0345e12/130@cd65d99, store:2@d122b816/6@41d15fed",
-  " 735 pop VM:a67b4f64:sym#251 -> Ok(Void)": "cpu:105675297, mem:48738113, vmem:1048576@c812d930, store:2@d122b816/6@c5292365",
-  " 736 ret call -> Ok(Void)": " objs:-/130@cd65d99, vmem:-, store:-/6@c5292365",
-  " 737 call symbol_new_from_slice(12)": "",
-  " 738 ret symbol_new_from_slice -> Ok(Symbol(obj#261))": "cpu:105678334, mem:48738205, objs:-/131@3843537c",
-  " 739 call symbol_new_from_slice(13)": "",
-  " 740 ret symbol_new_from_slice -> Ok(Symbol(obj#263))": "cpu:105681371, mem:48738298, objs:-/132@48f17e20",
-  " 741 call vec_new_from_slice(1)": "",
-  " 742 ret vec_new_from_slice -> Ok(Vec(obj#265))": "cpu:105684265, mem:48738386, objs:-/133@5c55cca",
-  " 743 call call(Address(obj#13), Symbol(obj#261), Vec(obj#265))": "",
-  " 744 call symbol_len(Symbol(obj#261))": "cpu:105686380, mem:48738410",
-  " 745 ret symbol_len -> Ok(U32(12))": "cpu:105686488",
-  " 746 call symbol_copy_to_slice(Symbol(obj#261), U32(0), 12)": "",
-  " 747 ret symbol_copy_to_slice -> Ok(())": "cpu:105686847",
-  " 748 push VM:a67b4f64:sym#261(Symbol(obj#263))": "cpu:108518917, mem:50055480, objs:-/134@60f7e5fe, vmem:1048576@2434eedc",
-  " 749 call symbol_len(Symbol(obj#261))": "cpu:108522829, mem:50055550, objs:1@d23bca07/134@60f7e5fe",
-  " 750 ret symbol_len -> Ok(U32(12))": "cpu:108522937",
-  " 751 call symbol_copy_to_slice(Symbol(obj#261), U32(0), 12)": "",
-  " 752 ret symbol_copy_to_slice -> Ok(())": "cpu:108523296",
-  " 753 call has_contract_data(Symbol(obj#263), Instance)": " vmem:-",
-  " 754 call obj_cmp(Symbol(key_1), Symbol(obj#269))": "cpu:108530789, mem:50055803, objs:-/136@eb96d89c",
-  " 755 ret obj_cmp -> Ok(-1)": "cpu:108531255",
-  " 756 call obj_cmp(Symbol(obj#269), Symbol(obj#263))": "cpu:108531514",
-  " 757 ret obj_cmp -> Ok(0)": "cpu:108532197",
-  " 758 ret has_contract_data -> Ok(True)": "cpu:108532450, objs:1@d23bca07/136@eb96d89c, store:2@d122b816/6@c5292365",
-  " 759 pop VM:a67b4f64:sym#261 -> Ok(True)": " vmem:1048576@ca61953b",
-  " 760 ret call -> Ok(True)": " objs:-/136@eb96d89c, vmem:-, store:-/6@c5292365",
-  " 761 call symbol_new_from_slice(12)": "",
-  " 762 ret symbol_new_from_slice -> Ok(Symbol(obj#273))": "cpu:108535487, mem:50055895, objs:-/137@e67bedd6",
-  " 763 call vec_new_from_slice(1)": "",
-  " 764 ret vec_new_from_slice -> Ok(Vec(obj#275))": "cpu:108538273, mem:50055983, objs:-/138@59406ba1",
-  " 765 call call(Address(obj#13), Symbol(obj#273), Vec(obj#275))": "",
-  " 766 call symbol_len(Symbol(obj#273))": "cpu:108540388, mem:50056007",
-  " 767 ret symbol_len -> Ok(U32(12))": "cpu:108540496",
-  " 768 call symbol_copy_to_slice(Symbol(obj#273), U32(0), 12)": "",
-  " 769 ret symbol_copy_to_slice -> Ok(())": "cpu:108540855",
-  " 770 push VM:a67b4f64:sym#273(Symbol(key_1))": "cpu:111372925, mem:51373077, objs:-/139@52da36a3, vmem:1048576@2434eedc",
-  " 771 call symbol_len(Symbol(obj#273))": "cpu:111375696, mem:51373123",
-  " 772 ret symbol_len -> Ok(U32(12))": "cpu:111375804",
-  " 773 call symbol_copy_to_slice(Symbol(obj#273), U32(0), 12)": "",
-  " 774 ret symbol_copy_to_slice -> Ok(())": "cpu:111376163",
-  " 775 call has_contract_data(Symbol(key_1), Instance)": " vmem:-",
-  " 776 call obj_cmp(Symbol(key_1), Symbol(obj#279))": "cpu:111384394, mem:51373376, objs:-/141@eee02afe",
-  " 777 ret obj_cmp -> Ok(-1)": "cpu:111384860",
-  " 778 call obj_cmp(Symbol(obj#279), Symbol(key_1))": "cpu:111385119",
-  " 779 ret obj_cmp -> Ok(1)": "cpu:111385585",
-  " 780 ret has_contract_data -> Ok(True)": "cpu:111385838, store:2@d122b816/6@c5292365",
-  " 781 call get_contract_data(Symbol(key_1), Instance)": "",
-  " 782 call obj_cmp(Symbol(obj#279), Symbol(key_1))": "cpu:111386360, store:-/6@c5292365",
-  " 783 ret obj_cmp -> Ok(1)": "cpu:111386826",
-  " 784 ret get_contract_data -> Ok(U64(1234))": "cpu:111387079, store:2@d122b816/6@c5292365",
-  " 785 pop VM:a67b4f64:sym#273 -> Ok(U64(1234))": "cpu:111387805, vmem:1048576@44e86686",
-  " 786 ret call -> Ok(U64(1234))": " vmem:-, store:-/6@c5292365",
-  " 787 call symbol_new_from_slice(12)": "",
-  " 788 ret symbol_new_from_slice -> Ok(Symbol(obj#283))": "cpu:111390842, mem:51373468, objs:-/142@49e7ba49",
-  " 789 call vec_new_from_slice(1)": "",
-  " 790 ret vec_new_from_slice -> Ok(Vec(obj#285))": "cpu:111393736, mem:51373556, objs:-/143@10013204",
-  " 791 call call(Address(obj#13), Symbol(obj#283), Vec(obj#285))": "",
-  " 792 call symbol_len(Symbol(obj#283))": "cpu:111395851, mem:51373580",
-  " 793 ret symbol_len -> Ok(U32(12))": "cpu:111395959",
-  " 794 call symbol_copy_to_slice(Symbol(obj#283), U32(0), 12)": "",
-  " 795 ret symbol_copy_to_slice -> Ok(())": "cpu:111396318",
-  " 796 push VM:a67b4f64:sym#283(Symbol(obj#219))": "cpu:114228388, mem:52690650, objs:-/144@57232843, vmem:1048576@2434eedc",
-  " 797 call symbol_len(Symbol(obj#283))": "cpu:114232300, mem:52690720, objs:1@e6dd2e58/144@57232843",
-  " 798 ret symbol_len -> Ok(U32(12))": "cpu:114232408",
-  " 799 call symbol_copy_to_slice(Symbol(obj#283), U32(0), 12)": "",
-  " 800 ret symbol_copy_to_slice -> Ok(())": "cpu:114232767",
-  " 801 call has_contract_data(Symbol(obj#219), Instance)": " vmem:-",
-  " 802 call obj_cmp(Symbol(key_1), Symbol(obj#289))": "cpu:114241106, mem:52690973, objs:-/146@c4de0a7b",
-  " 803 ret obj_cmp -> Ok(-1)": "cpu:114241572",
-  " 804 call obj_cmp(Symbol(obj#289), Symbol(obj#219))": "cpu:114241831",
-  " 805 ret obj_cmp -> Ok(0)": "cpu:114242514",
-  " 806 ret has_contract_data -> Ok(True)": "cpu:114242767, objs:1@e6dd2e58/146@c4de0a7b, store:2@d122b816/6@c5292365",
-  " 807 call get_contract_data(Symbol(obj#219), Instance)": "",
-  " 808 call obj_cmp(Symbol(obj#289), Symbol(obj#219))": "cpu:114243397, objs:-/146@c4de0a7b, store:-/6@c5292365",
-  " 809 ret obj_cmp -> Ok(0)": "cpu:114244080",
-  " 810 ret get_contract_data -> Ok(U64(obj#291))": "cpu:114244333, objs:1@e6dd2e58/146@c4de0a7b, store:2@d122b816/6@c5292365",
-  " 811 call obj_to_u64(U64(obj#291))": "cpu:114245474, mem:52690997, objs:2@b1d2a448/146@c4de0a7b",
-  " 812 ret obj_to_u64 -> Ok(18446744073709551615)": "cpu:114246438",
-  " 813 call obj_from_u64(18446744073709551615)": "",
-  " 814 ret obj_from_u64 -> Ok(U64(obj#293))": "cpu:114248130, mem:52691061, objs:2@b1d2a448/147@650bdba5",
-  " 815 pop VM:a67b4f64:sym#283 -> Ok(U64(obj#293))": "cpu:114249271, mem:52691085, objs:3@2ffa91f3/147@650bdba5, vmem:1048576@c812d930",
-  " 816 ret call -> Ok(U64(obj#293))": " objs:-/147@650bdba5, vmem:-, store:-/6@c5292365",
-  " 817 call obj_to_u64(U64(obj#293))": "",
-  " 818 ret obj_to_u64 -> Ok(18446744073709551615)": "cpu:114249630",
-  " 819 call symbol_new_from_slice(12)": "",
-  " 820 ret symbol_new_from_slice -> Ok(Symbol(obj#295))": "cpu:114252667, mem:52691177, objs:-/148@6771901c",
-  " 821 call vec_new_from_slice(2)": "",
-  " 822 ret vec_new_from_slice -> Ok(Vec(obj#297))": "cpu:114255562, mem:52691273, objs:-/149@9e1ba31b",
-  " 823 call call(Address(obj#13), Symbol(obj#295), Vec(obj#297))": "",
-  " 824 call symbol_len(Symbol(obj#295))": "cpu:114257678, mem:52691305",
-  " 825 ret symbol_len -> Ok(U32(12))": "cpu:114257786",
-  " 826 call symbol_copy_to_slice(Symbol(obj#295), U32(0), 12)": "",
-  " 827 ret symbol_copy_to_slice -> Ok(())": "cpu:114258145",
-  " 828 push VM:a67b4f64:sym#295(Symbol(obj#219), U64(4321))": "cpu:117090216, mem:54008383, objs:-/150@20ddb37f, vmem:1048576@2434eedc",
-  " 829 call symbol_len(Symbol(obj#295))": "cpu:117094130, mem:54008469, objs:1@e6dd2e58/150@20ddb37f",
-  " 830 ret symbol_len -> Ok(U32(12))": "cpu:117094238",
-  " 831 call symbol_copy_to_slice(Symbol(obj#295), U32(0), 12)": "",
-  " 832 ret symbol_copy_to_slice -> Ok(())": "cpu:117094597",
-  " 833 call put_contract_data(Symbol(obj#219), U64(4321), Instance)": " vmem:-",
-  " 834 call obj_cmp(Symbol(key_1), Symbol(obj#301))": "cpu:117103374, mem:54008722, objs:-/152@c9668aa7",
-  " 835 ret obj_cmp -> Ok(-1)": "cpu:117103840",
-  " 836 call obj_cmp(Symbol(obj#301), Symbol(obj#219))": "cpu:117104352",
-  " 837 ret obj_cmp -> Ok(0)": "cpu:117105035",
-  " 838 call obj_cmp(Symbol(key_1), Symbol(obj#219))": "cpu:117106941, mem:54008786",
-  " 839 ret obj_cmp -> Ok(-1)": "cpu:117107407",
-  " 840 ret put_contract_data -> Ok(Void)": " objs:1@e6dd2e58/152@c9668aa7, store:2@d122b816/6@c5292365",
-  " 841 pop VM:a67b4f64:sym#295 -> Ok(Void)": "cpu:117132445, mem:54010241, vmem:1048576@560ca1ef, store:2@d122b816/6@bde01cc5",
-  " 842 ret call -> Ok(Void)": " objs:-/152@c9668aa7, vmem:-, store:-/6@bde01cc5",
-  " 843 call symbol_new_from_slice(12)": "",
-  " 844 ret symbol_new_from_slice -> Ok(Symbol(obj#305))": "cpu:117135482, mem:54010333, objs:-/153@c208b6fa",
-  " 845 call vec_new_from_slice(1)": "",
-  " 846 ret vec_new_from_slice -> Ok(Vec(obj#307))": "cpu:117138376, mem:54010421, objs:-/154@54821c9d",
-  " 847 call call(Address(obj#13), Symbol(obj#305), Vec(obj#307))": "",
-  " 848 call symbol_len(Symbol(obj#305))": "cpu:117140491, mem:54010445",
-  " 849 ret symbol_len -> Ok(U32(12))": "cpu:117140599",
-  " 850 call symbol_copy_to_slice(Symbol(obj#305), U32(0), 12)": "",
-  " 851 ret symbol_copy_to_slice -> Ok(())": "cpu:117140958",
-  " 852 push VM:a67b4f64:sym#305(Symbol(obj#219))": "cpu:119973028, mem:55327515, objs:-/155@2b21a096, vmem:1048576@2434eedc",
-  " 853 call symbol_len(Symbol(obj#305))": "cpu:119976940, mem:55327585, objs:1@e6dd2e58/155@2b21a096",
-  " 854 ret symbol_len -> Ok(U32(12))": "cpu:119977048",
-  " 855 call symbol_copy_to_slice(Symbol(obj#305), U32(0), 12)": "",
-  " 856 ret symbol_copy_to_slice -> Ok(())": "cpu:119977407",
-  " 857 call has_contract_data(Symbol(obj#219), Instance)": " vmem:-",
-  " 858 call obj_cmp(Symbol(key_1), Symbol(obj#311))": "cpu:119984354, mem:55327774, objs:-/156@4afde6d7",
-  " 859 ret obj_cmp -> Ok(-1)": "cpu:119984820",
-  " 860 call obj_cmp(Symbol(obj#311), Symbol(obj#219))": "cpu:119985079",
-  " 861 ret obj_cmp -> Ok(0)": "cpu:119985762",
-  " 862 ret has_contract_data -> Ok(True)": "cpu:119986015, objs:1@e6dd2e58/156@4afde6d7, store:2@d122b816/6@bde01cc5",
-  " 863 call get_contract_data(Symbol(obj#219), Instance)": "",
-  " 864 call obj_cmp(Symbol(obj#311), Symbol(obj#219))": "cpu:119986645, objs:-/156@4afde6d7, store:-/6@bde01cc5",
-  " 865 ret obj_cmp -> Ok(0)": "cpu:119987328",
-  " 866 ret get_contract_data -> Ok(U64(4321))": "cpu:119987581, objs:1@e6dd2e58/156@4afde6d7, store:2@d122b816/6@bde01cc5",
-  " 867 pop VM:a67b4f64:sym#305 -> Ok(U64(4321))": "cpu:119988307, vmem:1048576@560ca1ef",
-  " 868 ret call -> Ok(U64(4321))": " objs:-/156@4afde6d7, vmem:-, store:-/6@bde01cc5",
-  " 869 call symbol_new_from_slice(12)": "",
-  " 870 ret symbol_new_from_slice -> Ok(Symbol(obj#313))": "cpu:119991344, mem:55327866, objs:-/157@ebe902d3",
-  " 871 call vec_new_from_slice(1)": "",
-  " 872 ret vec_new_from_slice -> Ok(Vec(obj#315))": "cpu:119994130, mem:55327954, objs:-/158@cb2bef28",
-  " 873 call call(Address(obj#13), Symbol(obj#313), Vec(obj#315))": "",
-  " 874 call symbol_len(Symbol(obj#313))": "cpu:119996245, mem:55327978",
-  " 875 ret symbol_len -> Ok(U32(12))": "cpu:119996353",
-  " 876 call symbol_copy_to_slice(Symbol(obj#313), U32(0), 12)": "",
-  " 877 ret symbol_copy_to_slice -> Ok(())": "cpu:119996712",
-  " 878 push VM:a67b4f64:sym#313(Symbol(key_1))": "cpu:122828782, mem:56645048, objs:-/159@50bad322, vmem:1048576@2434eedc",
-  " 879 call symbol_len(Symbol(obj#313))": "cpu:122831553, mem:56645094",
-  " 880 ret symbol_len -> Ok(U32(12))": "cpu:122831661",
-  " 881 call symbol_copy_to_slice(Symbol(obj#313), U32(0), 12)": "",
-  " 882 ret symbol_copy_to_slice -> Ok(())": "cpu:122832020",
-  " 883 call del_contract_data(Symbol(key_1), Instance)": " vmem:-",
-  " 884 call obj_cmp(Symbol(key_1), Symbol(obj#319))": "cpu:122837737, mem:56645283, objs:-/160@273ab21e",
-  " 885 ret obj_cmp -> Ok(-1)": "cpu:122838203",
-  " 886 call obj_cmp(Symbol(obj#319), Symbol(key_1))": "cpu:122838462",
-  " 887 ret obj_cmp -> Ok(1)": "cpu:122838928",
-  " 888 ret del_contract_data -> Ok(Void)": "cpu:122841079, mem:56645323, store:1@61d62dd9/6@bde01cc5",
-  " 889 pop VM:a67b4f64:sym#313 -> Ok(Void)": "cpu:122866097, mem:56646650, vmem:1048576@92d4cbdd, store:1@61d62dd9/6@faa37b6f",
-  " 890 ret call -> Ok(Void)": " vmem:-, store:-/6@faa37b6f",
-  " 891 call symbol_new_from_slice(12)": "",
-  " 892 ret symbol_new_from_slice -> Ok(Symbol(obj#321))": "cpu:122869134, mem:56646742, objs:-/161@f1debf3d",
-  " 893 call vec_new_from_slice(1)": "",
-  " 894 ret vec_new_from_slice -> Ok(Vec(obj#323))": "cpu:122871920, mem:56646830, objs:-/162@109512d1",
-  " 895 call call(Address(obj#13), Symbol(obj#321), Vec(obj#323))": "",
-  " 896 call symbol_len(Symbol(obj#321))": "cpu:122874035, mem:56646854",
-  " 897 ret symbol_len -> Ok(U32(12))": "cpu:122874143",
-  " 898 call symbol_copy_to_slice(Symbol(obj#321), U32(0), 12)": "",
-  " 899 ret symbol_copy_to_slice -> Ok(())": "cpu:122874502",
-  " 900 push VM:a67b4f64:sym#321(Symbol(key_1))": "cpu:125703756, mem:57963626, objs:-/163@ac6919f0, vmem:1048576@2434eedc",
-  " 901 call symbol_len(Symbol(obj#321))": "cpu:125706527, mem:57963672",
-  " 902 ret symbol_len -> Ok(U32(12))": "cpu:125706635",
-  " 903 call symbol_copy_to_slice(Symbol(obj#321), U32(0), 12)": "",
-  " 904 ret symbol_copy_to_slice -> Ok(())": "cpu:125706994",
-  " 905 call del_contract_data(Symbol(key_1), Instance)": " vmem:-",
-  " 906 call obj_cmp(Symbol(obj#327), Symbol(key_1))": "cpu:125712959, mem:57963821, objs:-/164@badf3d13",
-  " 907 ret obj_cmp -> Ok(1)": "cpu:125713425",
-  " 908 ret del_contract_data -> Ok(Void)": " store:1@61d62dd9/6@faa37b6f",
-  " 909 pop VM:a67b4f64:sym#321 -> Ok(Void)": "cpu:125737035, mem:57964999, vmem:1048576@92d4cbdd",
-  " 910 ret call -> Ok(Void)": " vmem:-, store:-/6@faa37b6f",
-  " 911 call symbol_new_from_slice(12)": "",
-  " 912 ret symbol_new_from_slice -> Ok(Symbol(obj#329))": "cpu:125740072, mem:57965091, objs:-/165@315b5445",
-  " 913 call vec_new_from_slice(1)": "",
-  " 914 ret vec_new_from_slice -> Ok(Vec(obj#331))": "cpu:125742858, mem:57965179, objs:-/166@9923623c",
-  " 915 call call(Address(obj#13), Symbol(obj#329), Vec(obj#331))": "",
-  " 916 call symbol_len(Symbol(obj#329))": "cpu:125744973, mem:57965203",
-  " 917 ret symbol_len -> Ok(U32(12))": "cpu:125745081",
-  " 918 call symbol_copy_to_slice(Symbol(obj#329), U32(0), 12)": "",
-  " 919 ret symbol_copy_to_slice -> Ok(())": "cpu:125745440",
-  " 920 push VM:a67b4f64:sym#329(Symbol(key_1))": "cpu:128574694, mem:59281975, objs:-/167@e1b70f75, vmem:1048576@2434eedc",
-  " 921 call symbol_len(Symbol(obj#329))": "cpu:128577465, mem:59282021",
-  " 922 ret symbol_len -> Ok(U32(12))": "cpu:128577573",
-  " 923 call symbol_copy_to_slice(Symbol(obj#329), U32(0), 12)": "",
-  " 924 ret symbol_copy_to_slice -> Ok(())": "cpu:128577932",
-  " 925 call has_contract_data(Symbol(key_1), Instance)": " vmem:-",
-  " 926 call obj_cmp(Symbol(obj#335), Symbol(key_1))": "cpu:128584173, mem:59282170, objs:-/168@7e204a2b",
-  " 927 ret obj_cmp -> Ok(1)": "cpu:128584639",
-  " 928 ret has_contract_data -> Ok(False)": " store:1@61d62dd9/6@faa37b6f",
-  " 929 pop VM:a67b4f64:sym#329 -> Ok(False)": " vmem:1048576@92d4cbdd",
-  " 930 ret call -> Ok(False)": " vmem:-, store:-/6@faa37b6f",
-  " 931 call symbol_new_from_slice(12)": "",
-  " 932 ret symbol_new_from_slice -> Ok(Symbol(obj#337))": "cpu:128587676, mem:59282262, objs:-/169@ac13c0a0",
-  " 933 call vec_new_from_slice(1)": "",
-  " 934 ret vec_new_from_slice -> Ok(Vec(obj#339))": "cpu:128590570, mem:59282350, objs:-/170@e3a9a3d4",
-  " 935 call call(Address(obj#13), Symbol(obj#337), Vec(obj#339))": "",
-  " 936 call symbol_len(Symbol(obj#337))": "cpu:128592685, mem:59282374",
-  " 937 ret symbol_len -> Ok(U32(12))": "cpu:128592793",
-  " 938 call symbol_copy_to_slice(Symbol(obj#337), U32(0), 12)": "",
-  " 939 ret symbol_copy_to_slice -> Ok(())": "cpu:128593152",
-  " 940 push VM:a67b4f64:sym#337(Symbol(obj#219))": "cpu:131422406, mem:60599146, objs:-/171@98cd801a, vmem:1048576@2434eedc",
-  " 941 call symbol_len(Symbol(obj#337))": "cpu:131426318, mem:60599216, objs:1@e6dd2e58/171@98cd801a",
-  " 942 ret symbol_len -> Ok(U32(12))": "cpu:131426426",
-  " 943 call symbol_copy_to_slice(Symbol(obj#337), U32(0), 12)": "",
-  " 944 ret symbol_copy_to_slice -> Ok(())": "cpu:131426785",
-  " 945 call has_contract_data(Symbol(obj#219), Instance)": " vmem:-",
-  " 946 call obj_cmp(Symbol(obj#343), Symbol(obj#219))": "cpu:131433134, mem:60599365, objs:-/172@926c45d6",
-  " 947 ret obj_cmp -> Ok(0)": "cpu:131433817",
-  " 948 ret has_contract_data -> Ok(True)": "cpu:131434070, objs:1@e6dd2e58/172@926c45d6, store:1@61d62dd9/6@faa37b6f",
-  " 949 pop VM:a67b4f64:sym#337 -> Ok(True)": " vmem:1048576@ca61953b",
-  " 950 ret call -> Ok(True)": " objs:-/172@926c45d6, vmem:-, store:-/6@faa37b6f",
-  " 951 end": "cpu:131434070, mem:60599365, prngs:-/d8a09d57, objs:-/172@926c45d6, vmem:-, evt:-, store:-/6@faa37b6f"
+  " 706 call get_ledger_sequence()": "cpu:102805823, mem:47419750",
+  " 707 ret get_ledger_sequence -> Ok(U32(0))": "",
+  " 708 ret extend_current_contract_instance_and_code -> Ok(Void)": " store:-/6@41d15fed",
+  " 709 pop VM:a67b4f64:sym#247 -> Ok(Void)": " vmem:1048576@2434eedc",
+  " 710 ret call -> Ok(Void)": " vmem:-",
+  " 711 call symbol_new_from_slice(12)": "",
+  " 712 ret symbol_new_from_slice -> Ok(Symbol(obj#251))": "cpu:102808860, mem:47419842, objs:-/126@5e0f5d0e",
+  " 713 call obj_from_u64(18446744073709551615)": "",
+  " 714 ret obj_from_u64 -> Ok(U64(obj#253))": "cpu:102810001, mem:47419906, objs:-/127@4f270c66",
+  " 715 call vec_new_from_slice(2)": "",
+  " 716 ret vec_new_from_slice -> Ok(Vec(obj#255))": "cpu:102813004, mem:47420002, objs:-/128@194aaf5c",
+  " 717 call call(Address(obj#13), Symbol(obj#251), Vec(obj#255))": "",
+  " 718 call symbol_len(Symbol(obj#251))": "cpu:102815120, mem:47420034",
+  " 719 ret symbol_len -> Ok(U32(12))": "cpu:102815228",
+  " 720 call symbol_copy_to_slice(Symbol(obj#251), U32(0), 12)": "",
+  " 721 ret symbol_copy_to_slice -> Ok(())": "cpu:102815587",
+  " 722 push VM:a67b4f64:sym#251(Symbol(obj#219), U64(obj#253))": "cpu:105644840, mem:48736798, objs:-/129@89bdffa2, vmem:1048576@2434eedc",
+  " 723 call symbol_len(Symbol(obj#251))": "cpu:105649895, mem:48736908, objs:2@ddbed9ac/129@89bdffa2",
+  " 724 ret symbol_len -> Ok(U32(12))": "cpu:105650003",
+  " 725 call symbol_copy_to_slice(Symbol(obj#251), U32(0), 12)": "",
+  " 726 ret symbol_copy_to_slice -> Ok(())": "cpu:105650362",
+  " 727 call obj_to_u64(U64(obj#253))": " vmem:-",
+  " 728 ret obj_to_u64 -> Ok(18446744073709551615)": "cpu:105652388",
+  " 729 call obj_from_u64(18446744073709551615)": "",
+  " 730 ret obj_from_u64 -> Ok(U64(obj#259))": "cpu:105654608, mem:48736972, objs:2@ddbed9ac/130@cd65d99",
+  " 731 call put_contract_data(Symbol(obj#219), U64(obj#259), Instance)": "cpu:105655749, mem:48736996, objs:3@d0345e12/130@cd65d99",
+  " 732 call obj_cmp(Symbol(key_1), Symbol(obj#219))": "cpu:105658641, mem:48737052, objs:-/130@cd65d99",
+  " 733 ret obj_cmp -> Ok(-1)": "cpu:105659107",
+  " 734 call obj_cmp(Symbol(key_1), Symbol(obj#219))": "cpu:105661013, mem:48737116",
+  " 735 ret obj_cmp -> Ok(-1)": "cpu:105661479",
+  " 736 ret put_contract_data -> Ok(Void)": " objs:3@d0345e12/130@cd65d99, store:2@d122b816/6@41d15fed",
+  " 737 pop VM:a67b4f64:sym#251 -> Ok(Void)": "cpu:105685467, mem:48738414, vmem:1048576@c812d930, store:2@d122b816/6@c5292365",
+  " 738 ret call -> Ok(Void)": " objs:-/130@cd65d99, vmem:-, store:-/6@c5292365",
+  " 739 call symbol_new_from_slice(12)": "",
+  " 740 ret symbol_new_from_slice -> Ok(Symbol(obj#261))": "cpu:105688504, mem:48738506, objs:-/131@3843537c",
+  " 741 call symbol_new_from_slice(13)": "",
+  " 742 ret symbol_new_from_slice -> Ok(Symbol(obj#263))": "cpu:105691541, mem:48738599, objs:-/132@48f17e20",
+  " 743 call vec_new_from_slice(1)": "",
+  " 744 ret vec_new_from_slice -> Ok(Vec(obj#265))": "cpu:105694435, mem:48738687, objs:-/133@5c55cca",
+  " 745 call call(Address(obj#13), Symbol(obj#261), Vec(obj#265))": "",
+  " 746 call symbol_len(Symbol(obj#261))": "cpu:105696550, mem:48738711",
+  " 747 ret symbol_len -> Ok(U32(12))": "cpu:105696658",
+  " 748 call symbol_copy_to_slice(Symbol(obj#261), U32(0), 12)": "",
+  " 749 ret symbol_copy_to_slice -> Ok(())": "cpu:105697017",
+  " 750 push VM:a67b4f64:sym#261(Symbol(obj#263))": "cpu:108529087, mem:50055781, objs:-/134@60f7e5fe, vmem:1048576@2434eedc",
+  " 751 call symbol_len(Symbol(obj#261))": "cpu:108532999, mem:50055851, objs:1@d23bca07/134@60f7e5fe",
+  " 752 ret symbol_len -> Ok(U32(12))": "cpu:108533107",
+  " 753 call symbol_copy_to_slice(Symbol(obj#261), U32(0), 12)": "",
+  " 754 ret symbol_copy_to_slice -> Ok(())": "cpu:108533466",
+  " 755 call has_contract_data(Symbol(obj#263), Instance)": " vmem:-",
+  " 756 call obj_cmp(Symbol(key_1), Symbol(obj#269))": "cpu:108540959, mem:50056104, objs:-/136@eb96d89c",
+  " 757 ret obj_cmp -> Ok(-1)": "cpu:108541425",
+  " 758 call obj_cmp(Symbol(obj#269), Symbol(obj#263))": "cpu:108541684",
+  " 759 ret obj_cmp -> Ok(0)": "cpu:108542367",
+  " 760 ret has_contract_data -> Ok(True)": "cpu:108542620, objs:1@d23bca07/136@eb96d89c, store:2@d122b816/6@c5292365",
+  " 761 pop VM:a67b4f64:sym#261 -> Ok(True)": " vmem:1048576@ca61953b",
+  " 762 ret call -> Ok(True)": " objs:-/136@eb96d89c, vmem:-, store:-/6@c5292365",
+  " 763 call symbol_new_from_slice(12)": "",
+  " 764 ret symbol_new_from_slice -> Ok(Symbol(obj#273))": "cpu:108545657, mem:50056196, objs:-/137@e67bedd6",
+  " 765 call vec_new_from_slice(1)": "",
+  " 766 ret vec_new_from_slice -> Ok(Vec(obj#275))": "cpu:108548443, mem:50056284, objs:-/138@59406ba1",
+  " 767 call call(Address(obj#13), Symbol(obj#273), Vec(obj#275))": "",
+  " 768 call symbol_len(Symbol(obj#273))": "cpu:108550558, mem:50056308",
+  " 769 ret symbol_len -> Ok(U32(12))": "cpu:108550666",
+  " 770 call symbol_copy_to_slice(Symbol(obj#273), U32(0), 12)": "",
+  " 771 ret symbol_copy_to_slice -> Ok(())": "cpu:108551025",
+  " 772 push VM:a67b4f64:sym#273(Symbol(key_1))": "cpu:111383095, mem:51373378, objs:-/139@52da36a3, vmem:1048576@2434eedc",
+  " 773 call symbol_len(Symbol(obj#273))": "cpu:111385866, mem:51373424",
+  " 774 ret symbol_len -> Ok(U32(12))": "cpu:111385974",
+  " 775 call symbol_copy_to_slice(Symbol(obj#273), U32(0), 12)": "",
+  " 776 ret symbol_copy_to_slice -> Ok(())": "cpu:111386333",
+  " 777 call has_contract_data(Symbol(key_1), Instance)": " vmem:-",
+  " 778 call obj_cmp(Symbol(key_1), Symbol(obj#279))": "cpu:111394564, mem:51373677, objs:-/141@eee02afe",
+  " 779 ret obj_cmp -> Ok(-1)": "cpu:111395030",
+  " 780 call obj_cmp(Symbol(obj#279), Symbol(key_1))": "cpu:111395289",
+  " 781 ret obj_cmp -> Ok(1)": "cpu:111395755",
+  " 782 ret has_contract_data -> Ok(True)": "cpu:111396008, store:2@d122b816/6@c5292365",
+  " 783 call get_contract_data(Symbol(key_1), Instance)": "",
+  " 784 call obj_cmp(Symbol(obj#279), Symbol(key_1))": "cpu:111396530, store:-/6@c5292365",
+  " 785 ret obj_cmp -> Ok(1)": "cpu:111396996",
+  " 786 ret get_contract_data -> Ok(U64(1234))": "cpu:111397249, store:2@d122b816/6@c5292365",
+  " 787 pop VM:a67b4f64:sym#273 -> Ok(U64(1234))": "cpu:111397975, vmem:1048576@44e86686",
+  " 788 ret call -> Ok(U64(1234))": " vmem:-, store:-/6@c5292365",
+  " 789 call symbol_new_from_slice(12)": "",
+  " 790 ret symbol_new_from_slice -> Ok(Symbol(obj#283))": "cpu:111401012, mem:51373769, objs:-/142@49e7ba49",
+  " 791 call vec_new_from_slice(1)": "",
+  " 792 ret vec_new_from_slice -> Ok(Vec(obj#285))": "cpu:111403906, mem:51373857, objs:-/143@10013204",
+  " 793 call call(Address(obj#13), Symbol(obj#283), Vec(obj#285))": "",
+  " 794 call symbol_len(Symbol(obj#283))": "cpu:111406021, mem:51373881",
+  " 795 ret symbol_len -> Ok(U32(12))": "cpu:111406129",
+  " 796 call symbol_copy_to_slice(Symbol(obj#283), U32(0), 12)": "",
+  " 797 ret symbol_copy_to_slice -> Ok(())": "cpu:111406488",
+  " 798 push VM:a67b4f64:sym#283(Symbol(obj#219))": "cpu:114238558, mem:52690951, objs:-/144@57232843, vmem:1048576@2434eedc",
+  " 799 call symbol_len(Symbol(obj#283))": "cpu:114242470, mem:52691021, objs:1@e6dd2e58/144@57232843",
+  " 800 ret symbol_len -> Ok(U32(12))": "cpu:114242578",
+  " 801 call symbol_copy_to_slice(Symbol(obj#283), U32(0), 12)": "",
+  " 802 ret symbol_copy_to_slice -> Ok(())": "cpu:114242937",
+  " 803 call has_contract_data(Symbol(obj#219), Instance)": " vmem:-",
+  " 804 call obj_cmp(Symbol(key_1), Symbol(obj#289))": "cpu:114251276, mem:52691274, objs:-/146@c4de0a7b",
+  " 805 ret obj_cmp -> Ok(-1)": "cpu:114251742",
+  " 806 call obj_cmp(Symbol(obj#289), Symbol(obj#219))": "cpu:114252001",
+  " 807 ret obj_cmp -> Ok(0)": "cpu:114252684",
+  " 808 ret has_contract_data -> Ok(True)": "cpu:114252937, objs:1@e6dd2e58/146@c4de0a7b, store:2@d122b816/6@c5292365",
+  " 809 call get_contract_data(Symbol(obj#219), Instance)": "",
+  " 810 call obj_cmp(Symbol(obj#289), Symbol(obj#219))": "cpu:114253567, objs:-/146@c4de0a7b, store:-/6@c5292365",
+  " 811 ret obj_cmp -> Ok(0)": "cpu:114254250",
+  " 812 ret get_contract_data -> Ok(U64(obj#291))": "cpu:114254503, objs:1@e6dd2e58/146@c4de0a7b, store:2@d122b816/6@c5292365",
+  " 813 call obj_to_u64(U64(obj#291))": "cpu:114255644, mem:52691298, objs:2@b1d2a448/146@c4de0a7b",
+  " 814 ret obj_to_u64 -> Ok(18446744073709551615)": "cpu:114256608",
+  " 815 call obj_from_u64(18446744073709551615)": "",
+  " 816 ret obj_from_u64 -> Ok(U64(obj#293))": "cpu:114258300, mem:52691362, objs:2@b1d2a448/147@650bdba5",
+  " 817 pop VM:a67b4f64:sym#283 -> Ok(U64(obj#293))": "cpu:114259441, mem:52691386, objs:3@2ffa91f3/147@650bdba5, vmem:1048576@c812d930",
+  " 818 ret call -> Ok(U64(obj#293))": " objs:-/147@650bdba5, vmem:-, store:-/6@c5292365",
+  " 819 call obj_to_u64(U64(obj#293))": "",
+  " 820 ret obj_to_u64 -> Ok(18446744073709551615)": "cpu:114259800",
+  " 821 call symbol_new_from_slice(12)": "",
+  " 822 ret symbol_new_from_slice -> Ok(Symbol(obj#295))": "cpu:114262837, mem:52691478, objs:-/148@6771901c",
+  " 823 call vec_new_from_slice(2)": "",
+  " 824 ret vec_new_from_slice -> Ok(Vec(obj#297))": "cpu:114265732, mem:52691574, objs:-/149@9e1ba31b",
+  " 825 call call(Address(obj#13), Symbol(obj#295), Vec(obj#297))": "",
+  " 826 call symbol_len(Symbol(obj#295))": "cpu:114267848, mem:52691606",
+  " 827 ret symbol_len -> Ok(U32(12))": "cpu:114267956",
+  " 828 call symbol_copy_to_slice(Symbol(obj#295), U32(0), 12)": "",
+  " 829 ret symbol_copy_to_slice -> Ok(())": "cpu:114268315",
+  " 830 push VM:a67b4f64:sym#295(Symbol(obj#219), U64(4321))": "cpu:117100386, mem:54008684, objs:-/150@20ddb37f, vmem:1048576@2434eedc",
+  " 831 call symbol_len(Symbol(obj#295))": "cpu:117104300, mem:54008770, objs:1@e6dd2e58/150@20ddb37f",
+  " 832 ret symbol_len -> Ok(U32(12))": "cpu:117104408",
+  " 833 call symbol_copy_to_slice(Symbol(obj#295), U32(0), 12)": "",
+  " 834 ret symbol_copy_to_slice -> Ok(())": "cpu:117104767",
+  " 835 call put_contract_data(Symbol(obj#219), U64(4321), Instance)": " vmem:-",
+  " 836 call obj_cmp(Symbol(key_1), Symbol(obj#301))": "cpu:117113544, mem:54009023, objs:-/152@c9668aa7",
+  " 837 ret obj_cmp -> Ok(-1)": "cpu:117114010",
+  " 838 call obj_cmp(Symbol(obj#301), Symbol(obj#219))": "cpu:117114522",
+  " 839 ret obj_cmp -> Ok(0)": "cpu:117115205",
+  " 840 call obj_cmp(Symbol(key_1), Symbol(obj#219))": "cpu:117117111, mem:54009087",
+  " 841 ret obj_cmp -> Ok(-1)": "cpu:117117577",
+  " 842 ret put_contract_data -> Ok(Void)": " objs:1@e6dd2e58/152@c9668aa7, store:2@d122b816/6@c5292365",
+  " 843 pop VM:a67b4f64:sym#295 -> Ok(Void)": "cpu:117142615, mem:54010542, vmem:1048576@560ca1ef, store:2@d122b816/6@bde01cc5",
+  " 844 ret call -> Ok(Void)": " objs:-/152@c9668aa7, vmem:-, store:-/6@bde01cc5",
+  " 845 call symbol_new_from_slice(12)": "",
+  " 846 ret symbol_new_from_slice -> Ok(Symbol(obj#305))": "cpu:117145652, mem:54010634, objs:-/153@c208b6fa",
+  " 847 call vec_new_from_slice(1)": "",
+  " 848 ret vec_new_from_slice -> Ok(Vec(obj#307))": "cpu:117148546, mem:54010722, objs:-/154@54821c9d",
+  " 849 call call(Address(obj#13), Symbol(obj#305), Vec(obj#307))": "",
+  " 850 call symbol_len(Symbol(obj#305))": "cpu:117150661, mem:54010746",
+  " 851 ret symbol_len -> Ok(U32(12))": "cpu:117150769",
+  " 852 call symbol_copy_to_slice(Symbol(obj#305), U32(0), 12)": "",
+  " 853 ret symbol_copy_to_slice -> Ok(())": "cpu:117151128",
+  " 854 push VM:a67b4f64:sym#305(Symbol(obj#219))": "cpu:119983198, mem:55327816, objs:-/155@2b21a096, vmem:1048576@2434eedc",
+  " 855 call symbol_len(Symbol(obj#305))": "cpu:119987110, mem:55327886, objs:1@e6dd2e58/155@2b21a096",
+  " 856 ret symbol_len -> Ok(U32(12))": "cpu:119987218",
+  " 857 call symbol_copy_to_slice(Symbol(obj#305), U32(0), 12)": "",
+  " 858 ret symbol_copy_to_slice -> Ok(())": "cpu:119987577",
+  " 859 call has_contract_data(Symbol(obj#219), Instance)": " vmem:-",
+  " 860 call obj_cmp(Symbol(key_1), Symbol(obj#311))": "cpu:119994524, mem:55328075, objs:-/156@4afde6d7",
+  " 861 ret obj_cmp -> Ok(-1)": "cpu:119994990",
+  " 862 call obj_cmp(Symbol(obj#311), Symbol(obj#219))": "cpu:119995249",
+  " 863 ret obj_cmp -> Ok(0)": "cpu:119995932",
+  " 864 ret has_contract_data -> Ok(True)": "cpu:119996185, objs:1@e6dd2e58/156@4afde6d7, store:2@d122b816/6@bde01cc5",
+  " 865 call get_contract_data(Symbol(obj#219), Instance)": "",
+  " 866 call obj_cmp(Symbol(obj#311), Symbol(obj#219))": "cpu:119996815, objs:-/156@4afde6d7, store:-/6@bde01cc5",
+  " 867 ret obj_cmp -> Ok(0)": "cpu:119997498",
+  " 868 ret get_contract_data -> Ok(U64(4321))": "cpu:119997751, objs:1@e6dd2e58/156@4afde6d7, store:2@d122b816/6@bde01cc5",
+  " 869 pop VM:a67b4f64:sym#305 -> Ok(U64(4321))": "cpu:119998477, vmem:1048576@560ca1ef",
+  " 870 ret call -> Ok(U64(4321))": " objs:-/156@4afde6d7, vmem:-, store:-/6@bde01cc5",
+  " 871 call symbol_new_from_slice(12)": "",
+  " 872 ret symbol_new_from_slice -> Ok(Symbol(obj#313))": "cpu:120001514, mem:55328167, objs:-/157@ebe902d3",
+  " 873 call vec_new_from_slice(1)": "",
+  " 874 ret vec_new_from_slice -> Ok(Vec(obj#315))": "cpu:120004300, mem:55328255, objs:-/158@cb2bef28",
+  " 875 call call(Address(obj#13), Symbol(obj#313), Vec(obj#315))": "",
+  " 876 call symbol_len(Symbol(obj#313))": "cpu:120006415, mem:55328279",
+  " 877 ret symbol_len -> Ok(U32(12))": "cpu:120006523",
+  " 878 call symbol_copy_to_slice(Symbol(obj#313), U32(0), 12)": "",
+  " 879 ret symbol_copy_to_slice -> Ok(())": "cpu:120006882",
+  " 880 push VM:a67b4f64:sym#313(Symbol(key_1))": "cpu:122838952, mem:56645349, objs:-/159@50bad322, vmem:1048576@2434eedc",
+  " 881 call symbol_len(Symbol(obj#313))": "cpu:122841723, mem:56645395",
+  " 882 ret symbol_len -> Ok(U32(12))": "cpu:122841831",
+  " 883 call symbol_copy_to_slice(Symbol(obj#313), U32(0), 12)": "",
+  " 884 ret symbol_copy_to_slice -> Ok(())": "cpu:122842190",
+  " 885 call del_contract_data(Symbol(key_1), Instance)": " vmem:-",
+  " 886 call obj_cmp(Symbol(key_1), Symbol(obj#319))": "cpu:122847907, mem:56645584, objs:-/160@273ab21e",
+  " 887 ret obj_cmp -> Ok(-1)": "cpu:122848373",
+  " 888 call obj_cmp(Symbol(obj#319), Symbol(key_1))": "cpu:122848632",
+  " 889 ret obj_cmp -> Ok(1)": "cpu:122849098",
+  " 890 ret del_contract_data -> Ok(Void)": "cpu:122851249, mem:56645624, store:1@61d62dd9/6@bde01cc5",
+  " 891 pop VM:a67b4f64:sym#313 -> Ok(Void)": "cpu:122876267, mem:56646951, vmem:1048576@92d4cbdd, store:1@61d62dd9/6@faa37b6f",
+  " 892 ret call -> Ok(Void)": " vmem:-, store:-/6@faa37b6f",
+  " 893 call symbol_new_from_slice(12)": "",
+  " 894 ret symbol_new_from_slice -> Ok(Symbol(obj#321))": "cpu:122879304, mem:56647043, objs:-/161@f1debf3d",
+  " 895 call vec_new_from_slice(1)": "",
+  " 896 ret vec_new_from_slice -> Ok(Vec(obj#323))": "cpu:122882090, mem:56647131, objs:-/162@109512d1",
+  " 897 call call(Address(obj#13), Symbol(obj#321), Vec(obj#323))": "",
+  " 898 call symbol_len(Symbol(obj#321))": "cpu:122884205, mem:56647155",
+  " 899 ret symbol_len -> Ok(U32(12))": "cpu:122884313",
+  " 900 call symbol_copy_to_slice(Symbol(obj#321), U32(0), 12)": "",
+  " 901 ret symbol_copy_to_slice -> Ok(())": "cpu:122884672",
+  " 902 push VM:a67b4f64:sym#321(Symbol(key_1))": "cpu:125713926, mem:57963927, objs:-/163@ac6919f0, vmem:1048576@2434eedc",
+  " 903 call symbol_len(Symbol(obj#321))": "cpu:125716697, mem:57963973",
+  " 904 ret symbol_len -> Ok(U32(12))": "cpu:125716805",
+  " 905 call symbol_copy_to_slice(Symbol(obj#321), U32(0), 12)": "",
+  " 906 ret symbol_copy_to_slice -> Ok(())": "cpu:125717164",
+  " 907 call del_contract_data(Symbol(key_1), Instance)": " vmem:-",
+  " 908 call obj_cmp(Symbol(obj#327), Symbol(key_1))": "cpu:125723129, mem:57964122, objs:-/164@badf3d13",
+  " 909 ret obj_cmp -> Ok(1)": "cpu:125723595",
+  " 910 ret del_contract_data -> Ok(Void)": " store:1@61d62dd9/6@faa37b6f",
+  " 911 pop VM:a67b4f64:sym#321 -> Ok(Void)": "cpu:125747205, mem:57965300, vmem:1048576@92d4cbdd",
+  " 912 ret call -> Ok(Void)": " vmem:-, store:-/6@faa37b6f",
+  " 913 call symbol_new_from_slice(12)": "",
+  " 914 ret symbol_new_from_slice -> Ok(Symbol(obj#329))": "cpu:125750242, mem:57965392, objs:-/165@315b5445",
+  " 915 call vec_new_from_slice(1)": "",
+  " 916 ret vec_new_from_slice -> Ok(Vec(obj#331))": "cpu:125753028, mem:57965480, objs:-/166@9923623c",
+  " 917 call call(Address(obj#13), Symbol(obj#329), Vec(obj#331))": "",
+  " 918 call symbol_len(Symbol(obj#329))": "cpu:125755143, mem:57965504",
+  " 919 ret symbol_len -> Ok(U32(12))": "cpu:125755251",
+  " 920 call symbol_copy_to_slice(Symbol(obj#329), U32(0), 12)": "",
+  " 921 ret symbol_copy_to_slice -> Ok(())": "cpu:125755610",
+  " 922 push VM:a67b4f64:sym#329(Symbol(key_1))": "cpu:128584864, mem:59282276, objs:-/167@e1b70f75, vmem:1048576@2434eedc",
+  " 923 call symbol_len(Symbol(obj#329))": "cpu:128587635, mem:59282322",
+  " 924 ret symbol_len -> Ok(U32(12))": "cpu:128587743",
+  " 925 call symbol_copy_to_slice(Symbol(obj#329), U32(0), 12)": "",
+  " 926 ret symbol_copy_to_slice -> Ok(())": "cpu:128588102",
+  " 927 call has_contract_data(Symbol(key_1), Instance)": " vmem:-",
+  " 928 call obj_cmp(Symbol(obj#335), Symbol(key_1))": "cpu:128594343, mem:59282471, objs:-/168@7e204a2b",
+  " 929 ret obj_cmp -> Ok(1)": "cpu:128594809",
+  " 930 ret has_contract_data -> Ok(False)": " store:1@61d62dd9/6@faa37b6f",
+  " 931 pop VM:a67b4f64:sym#329 -> Ok(False)": " vmem:1048576@92d4cbdd",
+  " 932 ret call -> Ok(False)": " vmem:-, store:-/6@faa37b6f",
+  " 933 call symbol_new_from_slice(12)": "",
+  " 934 ret symbol_new_from_slice -> Ok(Symbol(obj#337))": "cpu:128597846, mem:59282563, objs:-/169@ac13c0a0",
+  " 935 call vec_new_from_slice(1)": "",
+  " 936 ret vec_new_from_slice -> Ok(Vec(obj#339))": "cpu:128600740, mem:59282651, objs:-/170@e3a9a3d4",
+  " 937 call call(Address(obj#13), Symbol(obj#337), Vec(obj#339))": "",
+  " 938 call symbol_len(Symbol(obj#337))": "cpu:128602855, mem:59282675",
+  " 939 ret symbol_len -> Ok(U32(12))": "cpu:128602963",
+  " 940 call symbol_copy_to_slice(Symbol(obj#337), U32(0), 12)": "",
+  " 941 ret symbol_copy_to_slice -> Ok(())": "cpu:128603322",
+  " 942 push VM:a67b4f64:sym#337(Symbol(obj#219))": "cpu:131432576, mem:60599447, objs:-/171@98cd801a, vmem:1048576@2434eedc",
+  " 943 call symbol_len(Symbol(obj#337))": "cpu:131436488, mem:60599517, objs:1@e6dd2e58/171@98cd801a",
+  " 944 ret symbol_len -> Ok(U32(12))": "cpu:131436596",
+  " 945 call symbol_copy_to_slice(Symbol(obj#337), U32(0), 12)": "",
+  " 946 ret symbol_copy_to_slice -> Ok(())": "cpu:131436955",
+  " 947 call has_contract_data(Symbol(obj#219), Instance)": " vmem:-",
+  " 948 call obj_cmp(Symbol(obj#343), Symbol(obj#219))": "cpu:131443304, mem:60599666, objs:-/172@926c45d6",
+  " 949 ret obj_cmp -> Ok(0)": "cpu:131443987",
+  " 950 ret has_contract_data -> Ok(True)": "cpu:131444240, objs:1@e6dd2e58/172@926c45d6, store:1@61d62dd9/6@faa37b6f",
+  " 951 pop VM:a67b4f64:sym#337 -> Ok(True)": " vmem:1048576@ca61953b",
+  " 952 ret call -> Ok(True)": " objs:-/172@926c45d6, vmem:-, store:-/6@faa37b6f",
+  " 953 end": "cpu:131444240, mem:60599666, prngs:-/d8a09d57, objs:-/172@926c45d6, vmem:-, evt:-, store:-/6@faa37b6f"
 }
\ No newline at end of file
diff --git a/soroban-env-host/src/test/storage.rs b/soroban-env-host/src/test/storage.rs
index 71ffccd2..354fa211 100644
--- a/soroban-env-host/src/test/storage.rs
+++ b/soroban-env-host/src/test/storage.rs
@@ -177,13 +177,22 @@ fn test_storage(host: &Host, contract_id: AddressObject, storage: &str) {
         test_vec![host, key_1, threshold, max_extend + 1]
     };
 
-    assert!(host
-        .call(
+    if storage == "temporary" {
+        assert!(host
+            .call(
+                contract_id,
+                storage_fn_name(host, "extend", storage),
+                extend_args_past_max.into(),
+            )
+            .is_err());
+    } else {
+        host.call(
             contract_id,
             storage_fn_name(host, "extend", storage),
             extend_args_past_max.into(),
         )
-        .is_err());
+        .unwrap();
+    }
 
     // Put another key and verify it's there
     host.call(
diff --git a/soroban-test-wasms/wasm-workspace/loadgen/src/lib.rs b/soroban-test-wasms/wasm-workspace/loadgen/src/lib.rs
index efbedb33..9cd5c565 100644
--- a/soroban-test-wasms/wasm-workspace/loadgen/src/lib.rs
+++ b/soroban-test-wasms/wasm-workspace/loadgen/src/lib.rs
@@ -4,32 +4,32 @@ use soroban_sdk::{contract, contractimpl, Bytes, Env, U256};
 #[contract]
 pub struct Contract;
 
-const EXTEND_LEDGER: u32 = 5_000_000;
-
 #[contractimpl]
 impl Contract {
-    // This will write num_entries of size size_kilo_bytes. The initial entry will have a key of
-    // starting_index, the next key starting_index + 1...
-    pub fn write(e: Env, starting_index: u32, num_entries: u32, size_kilo_bytes: u32) {
-        if num_entries == 0 || size_kilo_bytes == 0 {
-            panic!("num_entries and size_kilo_bytes must be greater than 0");
+    // This will write num_write_entries of size size_kilo_bytes. The initial entry will have a key of
+    // u32(0), the next key u32(1), etc.
+    pub fn do_work(
+        e: Env,
+        guest_cycles: u64,
+        host_cycles: u64,
+        num_write_entries: u32,
+        size_kilo_bytes: u32,
+    ) -> U256 {
+        if size_kilo_bytes == 0 && num_write_entries != 0 {
+            panic!("size_kilo_bytes must be greater than 0");
         }
 
-        let slice = [0_u8; 1024];
+        let mut slice = [0_u8; 1024];
+        e.prng().fill(&mut slice);
         let mut bytes = Bytes::new(&e);
         for _ in 0..size_kilo_bytes {
             bytes.extend_from_slice(&slice);
         }
 
-        for i in starting_index..starting_index + num_entries {
+        for i in 0..num_write_entries {
             e.storage().persistent().set(&i, &bytes);
-            e.storage()
-                .persistent()
-                .extend_ttl(&i, EXTEND_LEDGER, EXTEND_LEDGER);
         }
-    }
 
-    pub fn do_work(e: Env, guest_cycles: u64, host_cycles: u64) -> U256 {
         let mut val: u32 = 0;
         for _ in 0..guest_cycles {
             if u32::MAX == val {