diff --git a/Cargo.lock b/Cargo.lock index 86f0fe3dd..fbc4d3e31 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -61,9 +61,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "approx" @@ -1808,8 +1808,8 @@ dependencies = [ [[package]] name = "stellar-xdr" -version = "27.0.0" -source = "git+https://github.com/stellar/rs-stellar-xdr?rev=a90de0c0d6eba8be668e9074cfb7b285ac0ecd34#a90de0c0d6eba8be668e9074cfb7b285ac0ecd34" +version = "28.0.0" +source = "git+https://github.com/sisuresh/rs-stellar-xdr?rev=3d2ad659a3a285aae9543069ee18cb6245a427ce#3d2ad659a3a285aae9543069ee18cb6245a427ce" dependencies = [ "arbitrary", "base64 0.22.1", diff --git a/Cargo.toml b/Cargo.toml index a855f0a30..4191b756f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,11 +35,13 @@ wasmparser = "=0.116.1" # NB: When updating, also update the version in rs-soroban-env dev-dependencies [workspace.dependencies.stellar-xdr] -version = "=27.0.0" -git = "https://github.com/stellar/rs-stellar-xdr" -rev = "a90de0c0d6eba8be668e9074cfb7b285ac0ecd34" +version = "=28.0.0" +# SPIKE: rs-stellar-xdr#552 (CAP-0084). Fork-hosted branch p28-cap-0084. +# Productionize -> stellar/rs-stellar-xdr merged SHA (or crates.io 28.0.0) once #552 lands. +git = "https://github.com/sisuresh/rs-stellar-xdr" +rev = "3d2ad659a3a285aae9543069ee18cb6245a427ce" default-features = false -features = ["cap_0085_executable_ref"] +features = ["cap_0084_muxed_contract", "cap_0085_executable_ref"] [workspace.dependencies.wasmi] package = "soroban-wasmi" diff --git a/deny.toml b/deny.toml index 5a607e97a..1041ec53f 100644 --- a/deny.toml +++ b/deny.toml @@ -272,7 +272,10 @@ allow-git = [] [sources.allow-org] # 1 or more github.com organizations to allow git sources for -github = ["stellar"] +# TEMP CAP-0084 SPIKE: "sisuresh" allows the rs-stellar-xdr#552 fork-rev pin +# (git+https://github.com/sisuresh/rs-stellar-xdr?rev=cf7fdedf7ca95fccf45c82e6829d14637c9b5e4c). Revert when the +# stellar-xdr dependency re-points to an accepted stellar/rs-stellar-xdr rev. +github = ["stellar", "sisuresh"] # 1 or more gitlab.com organizations to allow git sources for # gitlab = [""] # 1 or more bitbucket.org organizations to allow git sources for diff --git a/soroban-env-host/Cargo.toml b/soroban-env-host/Cargo.toml index 379498809..668a9d01d 100644 --- a/soroban-env-host/Cargo.toml +++ b/soroban-env-host/Cargo.toml @@ -24,7 +24,9 @@ sha2 = "0.10.8" hex-literal = "0.4.1" hmac = "0.12.1" # NB: We'll need to pin this again after switching the Core to the new env version. -ed25519-dalek = {version = ">=2.0.0", features = ["rand_core"] } +# ed25519-dalek 3.0.0 (2026-07-06) bumped its rand_core past the rand 0.8.5 / +# rand_chacha 0.3.1 pinned below, breaking `ChaCha20Rng: CryptoRng`. Cap <3.0.0. +ed25519-dalek = {version = ">=2.0.0, <3.0.0", features = ["rand_core"] } # NB: this must match the same rand version used by ed25519-dalek above rand = "0.8.5" # NB: this must match the same rand_chacha version used by ed25519-dalek above diff --git a/soroban-env-host/observations/test__address__test_muxed_contract_to_components_conversion.json b/soroban-env-host/observations/test__address__test_muxed_contract_to_components_conversion.json new file mode 100644 index 000000000..4c856f1b1 --- /dev/null +++ b/soroban-env-host/observations/test__address__test_muxed_contract_to_components_conversion.json @@ -0,0 +1,8 @@ +{ + " 0 begin": "cpu:0, mem:0, prngs:-/-, objs:-/-, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-", + " 1 call get_address_from_muxed_address(MuxedAddress(obj#1))": "cpu:442, mem:80, objs:-/1@a53ac37b", + " 2 ret get_address_from_muxed_address -> Ok(Address(obj#3))": "cpu:1110, mem:160, objs:-/2@4b6987b0", + " 3 call get_id_from_muxed_address(MuxedAddress(obj#1))": "", + " 4 ret get_id_from_muxed_address -> Ok(U64(456))": "cpu:1230", + " 5 end": "cpu:1338, mem:160, prngs:-/-, objs:-/2@4b6987b0, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-" +} \ No newline at end of file diff --git a/soroban-env-host/observations/test__stellar_asset_contract__test_cap_84_issuer_transfer_to_muxed_contract_emits_mint.json b/soroban-env-host/observations/test__stellar_asset_contract__test_cap_84_issuer_transfer_to_muxed_contract_emits_mint.json new file mode 100644 index 000000000..0a59bd50d --- /dev/null +++ b/soroban-env-host/observations/test__stellar_asset_contract__test_cap_84_issuer_transfer_to_muxed_contract_emits_mint.json @@ -0,0 +1,380 @@ +{ + " 0 begin": "cpu:14285, mem:0, prngs:-/9b4a753, objs:-/-, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-", + " 1 call bytes_new_from_slice(44)": "cpu:16620, mem:341, store:-/1@cb4f471c, foot:1@bd9f185a", + " 2 ret bytes_new_from_slice -> Ok(Bytes(obj#1))": "cpu:17593, mem:481, objs:-/1@98a93161", + " 3 call create_asset_contract(Bytes(obj#1))": "", + " 4 call get_ledger_network_id()": "cpu:1944, mem:132, foot:-", + " 5 ret get_ledger_network_id -> Ok(Bytes(obj#3))": "cpu:2975, mem:260, objs:-/2@f55c267d", + " 6 call symbol_new_from_slice(10)": "cpu:20355, mem:4212, store:-/2@829540f0, foot:1@f2466853", + " 7 ret symbol_new_from_slice -> Ok(Symbol(obj#5))": "cpu:21365, mem:4318, objs:-/3@b124ed47", + " 8 call symbol_len(Symbol(obj#5))": "cpu:21807, mem:4398, objs:-/4@66064822", + " 9 ret symbol_len -> Ok(U32(10))": "cpu:21927", + " 10 call symbol_copy_to_slice(Symbol(obj#5), U32(0), 10)": "", + " 11 ret symbol_copy_to_slice -> Ok(())": "cpu:22030", + " 12 push SAC:2e378f80:sym#5(Bytes(obj#7))": "cpu:33053, mem:5662, objs:-/5@b96b23d5, stk:1@dd8b4e48, auth:1@9c77a914/-", + " 13 call symbol_index_in_strs(Symbol(obj#5), 18)": "", + " 14 ret symbol_index_in_strs -> Ok(U32(0))": "cpu:34935", + " 15 call vec_new_from_slice(1)": "", + " 16 ret vec_new_from_slice -> Ok(Vec(obj#11))": "cpu:35900, mem:5766, objs:-/6@2a913cfe", + " 17 call has_contract_data(Vec(obj#11), Instance)": "", + " 18 ret has_contract_data -> Ok(False)": "cpu:36047, stk:1@f8325ff6", + " 19 call get_ledger_network_id()": "cpu:38032, mem:5898", + " 20 ret get_ledger_network_id -> Ok(Bytes(obj#13))": "cpu:39063, mem:6026, objs:-/7@6457584e", + " 21 call vec_new_from_slice(1)": "cpu:49454, mem:8052, objs:-/8@20b47a82", + " 22 ret vec_new_from_slice -> Ok(Vec(obj#17))": "cpu:50419, mem:8156, objs:-/9@fc721910", + " 23 call put_contract_data(Vec(obj#17), Address(obj#15), Instance)": "", + " 24 ret put_contract_data -> Ok(Void)": "cpu:51201, mem:8196, store:1@73e12810/2@829540f0, stk:1@1955468f", + " 25 call string_new_from_slice(4)": "", + " 26 ret string_new_from_slice -> Ok(String(obj#19))": "cpu:52164, mem:8296, objs:-/10@ee5465d6", + " 27 call bytes_new_from_slice(32)": "cpu:52210", + " 28 ret bytes_new_from_slice -> Ok(Bytes(obj#21))": "cpu:53181, mem:8424, objs:-/11@4e09836d", + " 29 call bytes_len(Bytes(obj#21))": "", + " 30 ret bytes_len -> Ok(U32(32))": "cpu:53301", + " 31 call vec_new_from_slice(1)": "", + " 32 ret vec_new_from_slice -> Ok(Vec(obj#23))": "cpu:54266, mem:8528, objs:-/12@3e90436", + " 33 call map_new_from_slices(2)": "", + " 34 call symbol_new_from_slice(10)": "cpu:54799, mem:8592", + " 35 ret symbol_new_from_slice -> Ok(Symbol(obj#25))": "cpu:55809, mem:8698, objs:-/13@7fe6bff8", + " 36 call obj_cmp(Symbol(obj#25), Symbol(issuer))": "cpu:55977", + " 37 ret obj_cmp -> Ok(-1)": "cpu:56141", + " 38 ret map_new_from_slices -> Ok(Map(obj#27))": "cpu:56583, mem:8778, objs:-/14@b6bbd66b", + " 39 call vec_new_from_slice(2)": "", + " 40 ret vec_new_from_slice -> Ok(Vec(obj#29))": "cpu:57610, mem:8890, objs:-/15@3a42e216", + " 41 call put_contract_data(Vec(obj#23), Vec(obj#29), Instance)": "", + " 42 call obj_cmp(Vec(obj#17), Vec(obj#23))": "cpu:57823, store:-/2@829540f0, stk:-", + " 43 ret obj_cmp -> Ok(-1)": "cpu:58151", + " 44 call obj_cmp(Vec(obj#17), Vec(obj#23))": "cpu:58732, mem:8954", + " 45 ret obj_cmp -> Ok(-1)": "cpu:59060", + " 46 ret put_contract_data -> Ok(Void)": " store:2@a34b09e4/2@829540f0, stk:1@98d58593", + " 47 call vec_new_from_slice(1)": "", + " 48 ret vec_new_from_slice -> Ok(Vec(obj#31))": "cpu:60025, mem:9058, objs:-/16@93b5306b", + " 49 call get_contract_data(Vec(obj#31), Instance)": "", + " 50 call obj_cmp(Vec(obj#23), Vec(obj#31))": "cpu:60136, store:-/2@829540f0, stk:-", + " 51 ret obj_cmp -> Ok(0)": "cpu:60464", + " 52 ret get_contract_data -> Ok(Vec(obj#29))": "cpu:60569, store:2@a34b09e4/2@829540f0, stk:1@98d58593", + " 53 call vec_get(Vec(obj#29), U32(0))": "", + " 54 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:60732", + " 55 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 56 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:60866", + " 57 call vec_get(Vec(obj#29), U32(1))": "", + " 58 ret vec_get -> Ok(Map(obj#27))": "cpu:61089", + " 59 call map_unpack_to_slice(Map(obj#27), 2)": "", + " 60 ret map_unpack_to_slice -> Ok(Void)": "cpu:61438", + " 61 call bytes_len(Bytes(obj#21))": "", + " 62 ret bytes_len -> Ok(U32(32))": "cpu:61558", + " 63 call string_len(String(obj#19))": "", + " 64 ret string_len -> Ok(U32(4))": "cpu:61678", + " 65 call string_copy_to_slice(String(obj#19), U32(0), 4)": "", + " 66 ret string_copy_to_slice -> Ok(())": "cpu:61780", + " 67 call string_new_from_slice(4)": "cpu:62230, mem:9203", + " 68 ret string_new_from_slice -> Ok(String(obj#33))": "cpu:63193, mem:9303, objs:-/17@5f584dc0", + " 69 call bytes_copy_to_slice(Bytes(obj#21), U32(0), 32)": "", + " 70 ret bytes_copy_to_slice -> Ok(())": "cpu:63299", + " 71 call string_new_from_slice(61)": "", + " 72 ret string_new_from_slice -> Ok(String(obj#35))": "cpu:64276, mem:9460, objs:-/18@fd376c77", + " 73 call map_new_from_slices(3)": "", + " 74 ret map_new_from_slices -> Ok(Map(obj#37))": "cpu:65428, mem:9628, objs:-/19@d6314b6e", + " 75 call put_contract_data(Symbol(METADATA), Map(obj#37), Instance)": "", + " 76 call obj_cmp(Vec(obj#23), Symbol(METADATA))": "cpu:65584, store:-/2@829540f0, stk:-", + " 77 ret obj_cmp -> Ok(1)": "cpu:65704", + " 78 call obj_cmp(Vec(obj#17), Symbol(METADATA))": "", + " 79 ret obj_cmp -> Ok(1)": "cpu:65824", + " 80 call obj_cmp(Symbol(METADATA), Vec(obj#17))": "cpu:66414, mem:9716", + " 81 ret obj_cmp -> Ok(-1)": "cpu:66534", + " 82 call obj_cmp(Vec(obj#17), Vec(obj#23))": "", + " 83 ret obj_cmp -> Ok(-1)": "cpu:66862", + " 84 ret put_contract_data -> Ok(Void)": " store:3@4e633378/2@829540f0, stk:1@cfd279db", + " 85 pop SAC:2e378f80:sym#5 -> Ok(Void)": "cpu:78623, mem:12595, store:3@4e633378/2@3a2921e9", + " 86 ret create_asset_contract -> Ok(Address(obj#39))": "cpu:79125, mem:12675, objs:-/20@5fdefccc, store:-/2@3a2921e9, stk:-, auth:-/-", + " 87 call vec_new()": "cpu:79567, mem:12755, objs:-/21@4bb49c9a", + " 88 ret vec_new -> Ok(Vec(obj#43))": "cpu:80069, mem:12835, objs:-/22@d6eecb9e", + " 89 call call(Address(obj#39), Symbol(name), Vec(obj#43))": "", + " 90 push SAC:2e378f80:name()": "cpu:31338, mem:6091, objs:-/23@cb077b3c, foot:1@6721e3ef, stk:1@3ba1fef6, auth:1@ede196ab/-", + " 91 call symbol_index_in_strs(Symbol(name), 18)": "", + " 92 ret symbol_index_in_strs -> Ok(U32(15))": "cpu:32130", + " 93 call get_contract_data(Symbol(METADATA), Instance)": "", + " 94 call obj_cmp(Symbol(obj#59), Symbol(issuer))": "cpu:42080, mem:7370, objs:-/32@406ba44e, stk:-", + " 95 ret obj_cmp -> Ok(-1)": "cpu:42244", + " 96 call obj_cmp(Symbol(METADATA), Vec(obj#53))": "cpu:43179, mem:7530, objs:-/34@b9f67148", + " 97 ret obj_cmp -> Ok(-1)": "cpu:43299", + " 98 call obj_cmp(Vec(obj#53), Vec(obj#57))": "", + " 99 ret obj_cmp -> Ok(-1)": "cpu:43627", + " 100 call obj_cmp(Vec(obj#53), Symbol(METADATA))": "cpu:43678", + " 101 ret obj_cmp -> Ok(1)": "cpu:43798", + " 102 ret get_contract_data -> Ok(Map(obj#51))": "cpu:43903, store:3@e1791713/2@3a2921e9, stk:1@78f1967e", + " 103 call map_unpack_to_slice(Map(obj#51), 3)": "", + " 104 ret map_unpack_to_slice -> Ok(Void)": "cpu:44242", + " 105 pop SAC:2e378f80:name -> Ok(String(obj#47))": "", + " 106 ret call -> Ok(String(obj#47))": "cpu:44302, store:-/2@3a2921e9, stk:-, auth:-/-", + " 107 call vec_new_from_slice(3)": "cpu:45186, mem:7690, objs:-/36@da2c9c67", + " 108 ret vec_new_from_slice -> Ok(Vec(obj#73))": "cpu:46275, mem:7810, objs:-/37@b3573a88", + " 109 call vec_new()": "cpu:68396, mem:14226, objs:-/38@2e0cc502", + " 110 ret vec_new -> Ok(Vec(obj#77))": "cpu:68898, mem:14306, objs:-/39@dbcdb894", + " 111 call bytes_new_from_slice(32)": "", + " 112 ret bytes_new_from_slice -> Ok(Bytes(obj#79))": "cpu:69869, mem:14434, objs:-/40@8a94e70f", + " 113 call bytes_len(Bytes(obj#79))": "", + " 114 ret bytes_len -> Ok(U32(32))": "cpu:69989", + " 115 call bytes_new_from_slice(64)": "", + " 116 ret bytes_new_from_slice -> Ok(Bytes(obj#81))": "cpu:70968, mem:14594, objs:-/41@ee282fb3", + " 117 call bytes_len(Bytes(obj#81))": "", + " 118 ret bytes_len -> Ok(U32(64))": "cpu:71088", + " 119 call map_new_from_slices(2)": "", + " 120 call symbol_new_from_slice(10)": "cpu:71621, mem:14658", + " 121 ret symbol_new_from_slice -> Ok(Symbol(obj#83))": "cpu:72631, mem:14764, objs:-/42@b6f81692", + " 122 call obj_cmp(Symbol(obj#83), Symbol(signature))": "cpu:72799", + " 123 ret obj_cmp -> Ok(-1)": "cpu:72964", + " 124 ret map_new_from_slices -> Ok(Map(obj#85))": "cpu:73406, mem:14844, objs:-/43@4078e96", + " 125 call vec_push_back(Vec(obj#77), Map(obj#85))": "", + " 126 ret vec_push_back -> Ok(Vec(obj#87))": "cpu:74611, mem:14948, objs:-/44@f332284a", + " 127 call obj_cmp(Symbol(obj#91), Symbol(signature))": "cpu:82774, mem:16520, objs:-/48@ad3ee2ea", + " 128 ret obj_cmp -> Ok(-1)": "cpu:82939", + " 129 call call(Address(obj#39), Symbol(transfer), Vec(obj#73))": "cpu:86309, mem:17024, objs:-/53@25b53492, auth:-/1@80ae5d9b", + " 130 push SAC:2e378f80:transfer(Address(obj#71), MuxedAddress(obj#69), I128(100000000))": "cpu:32422, mem:6283, objs:-/54@1961c70b, stk:1@d1fd37cf, auth:1@38e451e0/1@6bbcf4b4", + " 131 call symbol_index_in_strs(Symbol(transfer), 18)": "", + " 132 ret symbol_index_in_strs -> Ok(U32(5))": "cpu:33224", + " 133 call get_address_from_muxed_address(MuxedAddress(obj#69))": "", + " 134 ret get_address_from_muxed_address -> Ok(Address(obj#109))": "cpu:33892, mem:6363, objs:-/55@6da97544", + " 135 call require_auth(Address(obj#71))": "", + " 136 call obj_cmp(Address(obj#89), Address(obj#71))": "cpu:34522, mem:6403", + " 137 ret obj_cmp -> Ok(0)": "cpu:34812", + " 138 call obj_cmp(Address(obj#89), Address(obj#71))": " auth:1@38e451e0/-", + " 139 ret obj_cmp -> Ok(0)": "cpu:35102", + " 140 call obj_cmp(Address(obj#101), Address(obj#107))": "", + " 141 ret obj_cmp -> Ok(0)": "cpu:35392", + " 142 call obj_cmp(Address(obj#103), Address(obj#71))": "", + " 143 ret obj_cmp -> Ok(0)": "cpu:35682", + " 144 call obj_cmp(MuxedAddress(obj#105), MuxedAddress(obj#69))": "", + " 145 ret obj_cmp -> Ok(0)": "cpu:35972", + " 146 call bytes_new_from_slice(32)": "cpu:58160, mem:12755", + " 147 ret bytes_new_from_slice -> Ok(Bytes(obj#111))": "cpu:59131, mem:12883, objs:-/56@8a7f559e", + " 148 call vec_new()": "", + " 149 ret vec_new -> Ok(Vec(obj#113))": "cpu:59633, mem:12963, objs:-/57@ac0f383a", + " 150 call vec_new_from_slice(3)": "", + " 151 ret vec_new_from_slice -> Ok(Vec(obj#115))": "cpu:60722, mem:13083, objs:-/58@329d753a", + " 152 call map_new_from_slices(3)": "", + " 153 ret map_new_from_slices -> Ok(Map(obj#117))": "cpu:61874, mem:13251, objs:-/59@f4940d9a", + " 154 call vec_new_from_slice(2)": "", + " 155 ret vec_new_from_slice -> Ok(Vec(obj#119))": "cpu:62901, mem:13363, objs:-/60@159420da", + " 156 call vec_push_back(Vec(obj#113), Vec(obj#119))": "", + " 157 ret vec_push_back -> Ok(Vec(obj#121))": "cpu:64106, mem:13467, objs:-/61@d25d979a", + " 158 call vec_len(Vec(obj#99))": "", + " 159 ret vec_len -> Ok(U32(1))": "cpu:64226", + " 160 call vec_get(Vec(obj#99), U32(0))": "cpu:67029, mem:13805, foot:2@73dad5c0", + " 161 ret vec_get -> Ok(Map(obj#97))": "cpu:67252", + " 162 call map_unpack_to_slice(Map(obj#97), 2)": "", + " 163 ret map_unpack_to_slice -> Ok(Void)": "cpu:67602", + " 164 call bytes_len(Bytes(obj#93))": "", + " 165 ret bytes_len -> Ok(U32(32))": "cpu:67722", + " 166 call bytes_len(Bytes(obj#95))": "", + " 167 ret bytes_len -> Ok(U32(64))": "cpu:67842", + " 168 call verify_sig_ed25519(Bytes(obj#93), Bytes(obj#111), Bytes(obj#95))": "", + " 169 ret verify_sig_ed25519 -> Ok(Void)": "cpu:487073", + " 170 call bytes_copy_to_slice(Bytes(obj#93), U32(0), 32)": "", + " 171 ret bytes_copy_to_slice -> Ok(())": "cpu:487179", + " 172 ret require_auth -> Ok(Void)": "cpu:493733, mem:14947, store:-/3@631d7b7a, foot:3@6d9fe473, auth:1@38e451e0/1@70c1dffd", + " 173 call extend_current_contract_instance_and_code_ttl(U32(103680), U32(120960))": "", + " 174 call get_ledger_sequence()": "cpu:495796, mem:15115, store:-/-, foot:-", + " 175 ret get_ledger_sequence -> Ok(U32(123))": "", + " 176 ret extend_current_contract_instance_and_code_ttl -> Ok(Void)": "cpu:507566, mem:17724, store:-/3@dad22dfd, foot:3@6d9fe473", + " 177 call vec_new_from_slice(1)": "cpu:507762", + " 178 ret vec_new_from_slice -> Ok(Vec(obj#123))": "cpu:508727, mem:17828, objs:-/62@24473507", + " 179 call get_contract_data(Vec(obj#123), Instance)": "", + " 180 call obj_cmp(Symbol(obj#137), Symbol(issuer))": "cpu:518737, mem:19107, objs:-/71@41b83e1b, stk:-", + " 181 ret obj_cmp -> Ok(-1)": "cpu:518901", + " 182 call obj_cmp(Symbol(METADATA), Vec(obj#131))": "cpu:519836, mem:19267, objs:-/73@8b2752a7", + " 183 ret obj_cmp -> Ok(-1)": "cpu:519956", + " 184 call obj_cmp(Vec(obj#131), Vec(obj#135))": "", + " 185 ret obj_cmp -> Ok(-1)": "cpu:520284", + " 186 call obj_cmp(Vec(obj#131), Vec(obj#123))": "cpu:520335", + " 187 ret obj_cmp -> Ok(-1)": "cpu:520663", + " 188 call obj_cmp(Vec(obj#135), Vec(obj#123))": "", + " 189 ret obj_cmp -> Ok(0)": "cpu:520991", + " 190 ret get_contract_data -> Ok(Vec(obj#145))": "cpu:521096, store:3@8d40aa00/3@dad22dfd, stk:1@ba7faf69", + " 191 call vec_get(Vec(obj#145), U32(0))": "", + " 192 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:521259", + " 193 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 194 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:521393", + " 195 call vec_get(Vec(obj#145), U32(1))": "", + " 196 ret vec_get -> Ok(Map(obj#143))": "cpu:521616", + " 197 call map_unpack_to_slice(Map(obj#143), 2)": "", + " 198 ret map_unpack_to_slice -> Ok(Void)": "cpu:521965", + " 199 call bytes_len(Bytes(obj#141))": "", + " 200 ret bytes_len -> Ok(U32(32))": "cpu:522085", + " 201 call string_len(String(obj#139))": "cpu:522191", + " 202 ret string_len -> Ok(U32(4))": "cpu:522311", + " 203 call string_copy_to_slice(String(obj#139), U32(0), 4)": "", + " 204 ret string_copy_to_slice -> Ok(())": "cpu:522413", + " 205 call vec_new_from_slice(1)": "cpu:522567", + " 206 ret vec_new_from_slice -> Ok(Vec(obj#147))": "cpu:523532, mem:19371, objs:-/74@43fee34e", + " 207 call get_contract_data(Vec(obj#147), Instance)": "", + " 208 call obj_cmp(Vec(obj#131), Vec(obj#147))": "cpu:523643, store:-/3@dad22dfd, stk:-", + " 209 ret obj_cmp -> Ok(-1)": "cpu:523971", + " 210 call obj_cmp(Vec(obj#135), Vec(obj#147))": "", + " 211 ret obj_cmp -> Ok(0)": "cpu:524299", + " 212 ret get_contract_data -> Ok(Vec(obj#145))": "cpu:524404, store:3@8d40aa00/3@dad22dfd, stk:1@ba7faf69", + " 213 call vec_get(Vec(obj#145), U32(0))": "", + " 214 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:524567", + " 215 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 216 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:524701", + " 217 call vec_get(Vec(obj#145), U32(1))": "", + " 218 ret vec_get -> Ok(Map(obj#143))": "cpu:524924", + " 219 call map_unpack_to_slice(Map(obj#143), 2)": "", + " 220 ret map_unpack_to_slice -> Ok(Void)": "cpu:525273", + " 221 call bytes_len(Bytes(obj#141))": "", + " 222 ret bytes_len -> Ok(U32(32))": "cpu:525393", + " 223 call string_len(String(obj#139))": "cpu:525499", + " 224 ret string_len -> Ok(U32(4))": "cpu:525619", + " 225 call string_copy_to_slice(String(obj#139), U32(0), 4)": "", + " 226 ret string_copy_to_slice -> Ok(())": "cpu:525721", + " 227 call vec_new_from_slice(2)": "cpu:525963", + " 228 ret vec_new_from_slice -> Ok(Vec(obj#149))": "cpu:526990, mem:19483, objs:-/75@9765f940", + " 229 call has_contract_data(Vec(obj#149), Persistent)": "", + " 230 ret has_contract_data -> Ok(False)": "cpu:531594, mem:20263, store:3@8d40aa00/4@2bf99c80, foot:4@64c1d50e", + " 231 call vec_new_from_slice(1)": "", + " 232 ret vec_new_from_slice -> Ok(Vec(obj#151))": "cpu:532559, mem:20367, objs:-/76@62a35cf5", + " 233 call get_contract_data(Vec(obj#151), Instance)": "", + " 234 call obj_cmp(Vec(obj#131), Vec(obj#151))": "cpu:532670, store:-/4@2bf99c80, stk:-", + " 235 ret obj_cmp -> Ok(-1)": "cpu:532998", + " 236 call obj_cmp(Vec(obj#135), Vec(obj#151))": "", + " 237 ret obj_cmp -> Ok(0)": "cpu:533326", + " 238 ret get_contract_data -> Ok(Vec(obj#145))": "cpu:533431, store:3@8d40aa00/4@2bf99c80, stk:1@ba7faf69", + " 239 call vec_get(Vec(obj#145), U32(0))": "", + " 240 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:533594", + " 241 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 242 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:533728", + " 243 call vec_get(Vec(obj#145), U32(1))": "", + " 244 ret vec_get -> Ok(Map(obj#143))": "cpu:533951", + " 245 call map_unpack_to_slice(Map(obj#143), 2)": "", + " 246 ret map_unpack_to_slice -> Ok(Void)": "cpu:534300", + " 247 call bytes_len(Bytes(obj#141))": "", + " 248 ret bytes_len -> Ok(U32(32))": "cpu:534420", + " 249 call vec_new_from_slice(2)": "cpu:536936, mem:20639", + " 250 ret vec_new_from_slice -> Ok(Vec(obj#153))": "cpu:537963, mem:20751, objs:-/77@70162c2", + " 251 call has_contract_data(Vec(obj#153), Persistent)": "", + " 252 ret has_contract_data -> Ok(False)": "cpu:541055, mem:21127", + " 253 call vec_new_from_slice(1)": "", + " 254 ret vec_new_from_slice -> Ok(Vec(obj#155))": "cpu:542020, mem:21231, objs:-/78@4c5a32ad", + " 255 call get_contract_data(Vec(obj#155), Instance)": "", + " 256 call obj_cmp(Vec(obj#131), Vec(obj#155))": "cpu:542131, store:-/4@2bf99c80, stk:-", + " 257 ret obj_cmp -> Ok(-1)": "cpu:542459", + " 258 call obj_cmp(Vec(obj#135), Vec(obj#155))": "", + " 259 ret obj_cmp -> Ok(0)": "cpu:542787", + " 260 ret get_contract_data -> Ok(Vec(obj#145))": "cpu:542892, store:3@8d40aa00/4@2bf99c80, stk:1@ba7faf69", + " 261 call vec_get(Vec(obj#145), U32(0))": "", + " 262 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:543055", + " 263 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 264 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:543189", + " 265 call vec_get(Vec(obj#145), U32(1))": "", + " 266 ret vec_get -> Ok(Map(obj#143))": "cpu:543412", + " 267 call map_unpack_to_slice(Map(obj#143), 2)": "", + " 268 ret map_unpack_to_slice -> Ok(Void)": "cpu:543761", + " 269 call bytes_len(Bytes(obj#141))": "", + " 270 ret bytes_len -> Ok(U32(32))": "cpu:543881", + " 271 call vec_new_from_slice(2)": "cpu:546245, mem:21503", + " 272 ret vec_new_from_slice -> Ok(Vec(obj#157))": "cpu:547272, mem:21615, objs:-/79@f1674e1a", + " 273 call map_new_from_slices(3)": "", + " 274 call symbol_new_from_slice(10)": "cpu:547811, mem:21703", + " 275 ret symbol_new_from_slice -> Ok(Symbol(obj#159))": "cpu:548821, mem:21809, objs:-/80@9ba51836", + " 276 call obj_cmp(Symbol(amount), Symbol(obj#159))": "cpu:548872", + " 277 ret obj_cmp -> Ok(-1)": "cpu:549036", + " 278 call obj_cmp(Symbol(obj#159), Symbol(clawback))": "", + " 279 ret obj_cmp -> Ok(-1)": "cpu:549201", + " 280 ret map_new_from_slices -> Ok(Map(obj#161))": "cpu:549643, mem:21889, objs:-/81@16cebe34", + " 281 call put_contract_data(Vec(obj#157), Map(obj#161), Persistent)": "", + " 282 ret put_contract_data -> Ok(Void)": "cpu:558775, mem:23847, store:3@8d40aa00/4@af654f55, foot:4@16fb4232", + " 283 call vec_new_from_slice(2)": "", + " 284 ret vec_new_from_slice -> Ok(Vec(obj#163))": "cpu:559802, mem:23959, objs:-/82@6f01151", + " 285 call extend_contract_data_ttl(Vec(obj#163), Persistent, U32(501120), U32(518400))": "", + " 286 call get_ledger_sequence()": "cpu:563274, mem:24335, store:3@8d40aa00/-, foot:-", + " 287 ret get_ledger_sequence -> Ok(U32(123))": "", + " 288 ret extend_contract_data_ttl -> Ok(Void)": "cpu:564419, mem:24623, store:3@8d40aa00/4@450ab969, foot:4@16fb4232", + " 289 call get_id_from_muxed_address(MuxedAddress(obj#69))": "", + " 290 ret get_id_from_muxed_address -> Ok(U64(7654321))": "cpu:564539", + " 291 call obj_cmp(Address(obj#71), Address(obj#109))": "", + " 292 ret obj_cmp -> Ok(-1)": "cpu:564829", + " 293 call vec_new_from_slice(1)": "", + " 294 ret vec_new_from_slice -> Ok(Vec(obj#165))": "cpu:565794, mem:24727, objs:-/83@779990c3", + " 295 call get_contract_data(Vec(obj#165), Instance)": "", + " 296 call obj_cmp(Vec(obj#131), Vec(obj#165))": "cpu:565905, store:-/4@450ab969, stk:-", + " 297 ret obj_cmp -> Ok(-1)": "cpu:566233", + " 298 call obj_cmp(Vec(obj#135), Vec(obj#165))": "", + " 299 ret obj_cmp -> Ok(0)": "cpu:566561", + " 300 ret get_contract_data -> Ok(Vec(obj#145))": "cpu:566666, store:3@8d40aa00/4@450ab969, stk:1@ba7faf69", + " 301 call vec_get(Vec(obj#145), U32(0))": "", + " 302 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:566829", + " 303 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 304 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:566963", + " 305 call vec_get(Vec(obj#145), U32(1))": "", + " 306 ret vec_get -> Ok(Map(obj#143))": "cpu:567186", + " 307 call map_unpack_to_slice(Map(obj#143), 2)": "", + " 308 ret map_unpack_to_slice -> Ok(Void)": "cpu:567535", + " 309 call bytes_len(Bytes(obj#141))": "", + " 310 ret bytes_len -> Ok(U32(32))": "cpu:567655", + " 311 call obj_cmp(Address(obj#167), Address(obj#71))": "cpu:568249, mem:24807, objs:-/84@c4381bd3", + " 312 ret obj_cmp -> Ok(0)": "cpu:568539", + " 313 call get_contract_data(Symbol(METADATA), Instance)": "", + " 314 call obj_cmp(Vec(obj#131), Symbol(METADATA))": "cpu:568590, store:-/4@450ab969, stk:-", + " 315 ret obj_cmp -> Ok(1)": "cpu:568710", + " 316 ret get_contract_data -> Ok(Map(obj#129))": "cpu:568815, store:3@8d40aa00/4@450ab969, stk:1@ba7faf69", + " 317 call map_unpack_to_slice(Map(obj#129), 3)": "", + " 318 ret map_unpack_to_slice -> Ok(Void)": "cpu:569154", + " 319 call vec_new_from_slice(3)": "", + " 320 ret vec_new_from_slice -> Ok(Vec(obj#169))": "cpu:570243, mem:24927, objs:-/85@3d257a72", + " 321 call map_new()": "", + " 322 ret map_new -> Ok(Map(obj#171))": "cpu:570745, mem:25007, objs:-/86@795270ff", + " 323 call map_put(Map(obj#171), Symbol(amount), I128(100000000))": "", + " 324 ret map_put -> Ok(Map(obj#173))": "cpu:572029, mem:25127, objs:-/87@c5005676", + " 325 call symbol_new_from_slice(11)": "", + " 326 ret symbol_new_from_slice -> Ok(Symbol(obj#175))": "cpu:573039, mem:25234, objs:-/88@7a9fba64", + " 327 call map_put(Map(obj#173), Symbol(obj#175), U64(7654321))": "", + " 328 call obj_cmp(Symbol(amount), Symbol(obj#175))": "cpu:573312", + " 329 ret obj_cmp -> Ok(-1)": "cpu:573476", + " 330 call obj_cmp(Symbol(amount), Symbol(obj#175))": "cpu:574057, mem:25298", + " 331 ret obj_cmp -> Ok(-1)": "cpu:574221", + " 332 ret map_put -> Ok(Map(obj#177))": "cpu:574723, mem:25378, objs:-/89@ea1ffdd3", + " 333 call contract_event(Vec(obj#169), Map(obj#177))": "", + " 334 call bytes_new_from_slice(32)": "cpu:574889", + " 335 ret bytes_new_from_slice -> Ok(Bytes(obj#179))": "cpu:575860, mem:25506, objs:-/90@3caebffd", + " 336 ret contract_event -> Ok(Void)": "cpu:576393, mem:25571, evt:1@af4de87c", + " 337 pop SAC:2e378f80:transfer -> Ok(Void)": "", + " 338 ret call -> Ok(Void)": " store:-/4@450ab969, stk:-, auth:-/-", + " 339 call vec_new_from_slice(3)": "cpu:579740, mem:26611", + " 340 ret vec_new_from_slice -> Ok(Vec(obj#181))": "cpu:580829, mem:26731, objs:-/91@f710374a", + " 341 call map_new_from_slices(2)": "", + " 342 call symbol_new_from_slice(11)": "cpu:581362, mem:26795", + " 343 ret symbol_new_from_slice -> Ok(Symbol(obj#183))": "cpu:582372, mem:26902, objs:-/92@beb2eb8c", + " 344 call obj_cmp(Symbol(amount), Symbol(obj#183))": "cpu:582420", + " 345 ret obj_cmp -> Ok(-1)": "cpu:582584", + " 346 ret map_new_from_slices -> Ok(Map(obj#185))": "cpu:583026, mem:26982, objs:-/93@3a71bd65", + " 347 call vec_new_from_slice(1)": "cpu:585812, mem:27838", + " 348 ret vec_new_from_slice -> Ok(Vec(obj#187))": "cpu:586837, mem:27942, objs:-/94@534acfa6", + " 349 call call(Address(obj#39), Symbol(balance), Vec(obj#187))": "", + " 350 push SAC:2e378f80:balance(Address(obj#41))": "cpu:31730, mem:6243, objs:-/95@4cb51ec6, evt:-, foot:1@6721e3ef, stk:1@f079e001, auth:1@c17d7aef/-", + " 351 call symbol_index_in_strs(Symbol(balance), 18)": "", + " 352 ret symbol_index_in_strs -> Ok(U32(3))": "cpu:32522", + " 353 call extend_current_contract_instance_and_code_ttl(U32(103680), U32(120960))": "", + " 354 call get_ledger_sequence()": "cpu:34515, mem:6411, store:-/-, foot:-", + " 355 ret get_ledger_sequence -> Ok(U32(123))": "", + " 356 ret extend_current_contract_instance_and_code_ttl -> Ok(Void)": "cpu:45257, mem:8800, store:-/4@450ab969, foot:1@6721e3ef", + " 357 call vec_new_from_slice(2)": "cpu:45365", + " 358 ret vec_new_from_slice -> Ok(Vec(obj#191))": "cpu:46392, mem:8912, objs:-/96@fcc830f8", + " 359 call has_contract_data(Vec(obj#191), Persistent)": "", + " 360 ret has_contract_data -> Ok(True)": "cpu:50050, mem:9354, foot:2@8405d98b", + " 361 call get_contract_data(Vec(obj#191), Persistent)": "", + " 362 call obj_cmp(Symbol(amount), Symbol(obj#193))": "cpu:54791, mem:9924, objs:-/97@b3eb9ca1", + " 363 ret obj_cmp -> Ok(-1)": "cpu:54955", + " 364 call obj_cmp(Symbol(obj#193), Symbol(clawback))": "", + " 365 ret obj_cmp -> Ok(-1)": "cpu:55120", + " 366 ret get_contract_data -> Ok(Map(obj#195))": "cpu:55622, mem:10004, objs:-/98@bc9b29e0", + " 367 call vec_new_from_slice(2)": "", + " 368 ret vec_new_from_slice -> Ok(Vec(obj#197))": "cpu:56649, mem:10116, objs:-/99@4db6beb8", + " 369 call extend_contract_data_ttl(Vec(obj#197), Persistent, U32(501120), U32(518400))": "", + " 370 call get_ledger_sequence()": "cpu:60215, mem:10492, store:-/-, foot:-", + " 371 ret get_ledger_sequence -> Ok(U32(123))": "", + " 372 ret extend_contract_data_ttl -> Ok(Void)": " store:-/4@450ab969, foot:2@8405d98b", + " 373 call map_unpack_to_slice(Map(obj#195), 3)": "", + " 374 ret map_unpack_to_slice -> Ok(Void)": "cpu:60616", + " 375 pop SAC:2e378f80:balance -> Ok(I128(100000000))": "", + " 376 ret call -> Ok(I128(100000000))": " stk:-, auth:-/-", + " 377 end": "cpu:60616, mem:10492, prngs:-/9b4a753, objs:-/99@4db6beb8, vm:-/-, evt:-, store:-/4@450ab969, foot:2@8405d98b, stk:-, auth:-/-" +} \ No newline at end of file diff --git a/soroban-env-host/observations/test__stellar_asset_contract__test_cap_84_transfer_with_muxed_contracts.json b/soroban-env-host/observations/test__stellar_asset_contract__test_cap_84_transfer_with_muxed_contracts.json new file mode 100644 index 000000000..b086dd1a9 --- /dev/null +++ b/soroban-env-host/observations/test__stellar_asset_contract__test_cap_84_transfer_with_muxed_contracts.json @@ -0,0 +1,844 @@ +{ + " 0 begin": "cpu:14285, mem:0, prngs:-/9b4a753, objs:-/-, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-", + " 1 call bytes_new_from_slice(44)": "cpu:16620, mem:341, store:-/1@cb4f471c, foot:1@bd9f185a", + " 2 ret bytes_new_from_slice -> Ok(Bytes(obj#1))": "cpu:17593, mem:481, objs:-/1@98a93161", + " 3 call create_asset_contract(Bytes(obj#1))": "", + " 4 call get_ledger_network_id()": "cpu:1944, mem:132, foot:-", + " 5 ret get_ledger_network_id -> Ok(Bytes(obj#3))": "cpu:2975, mem:260, objs:-/2@f55c267d", + " 6 call symbol_new_from_slice(10)": "cpu:20355, mem:4212, store:-/2@829540f0, foot:1@f2466853", + " 7 ret symbol_new_from_slice -> Ok(Symbol(obj#5))": "cpu:21365, mem:4318, objs:-/3@b124ed47", + " 8 call symbol_len(Symbol(obj#5))": "cpu:21807, mem:4398, objs:-/4@66064822", + " 9 ret symbol_len -> Ok(U32(10))": "cpu:21927", + " 10 call symbol_copy_to_slice(Symbol(obj#5), U32(0), 10)": "", + " 11 ret symbol_copy_to_slice -> Ok(())": "cpu:22030", + " 12 push SAC:2e378f80:sym#5(Bytes(obj#7))": "cpu:33053, mem:5662, objs:-/5@b96b23d5, stk:1@dd8b4e48, auth:1@9c77a914/-", + " 13 call symbol_index_in_strs(Symbol(obj#5), 18)": "", + " 14 ret symbol_index_in_strs -> Ok(U32(0))": "cpu:34935", + " 15 call vec_new_from_slice(1)": "", + " 16 ret vec_new_from_slice -> Ok(Vec(obj#11))": "cpu:35900, mem:5766, objs:-/6@2a913cfe", + " 17 call has_contract_data(Vec(obj#11), Instance)": "", + " 18 ret has_contract_data -> Ok(False)": "cpu:36047, stk:1@f8325ff6", + " 19 call get_ledger_network_id()": "cpu:38032, mem:5898", + " 20 ret get_ledger_network_id -> Ok(Bytes(obj#13))": "cpu:39063, mem:6026, objs:-/7@6457584e", + " 21 call vec_new_from_slice(1)": "cpu:49454, mem:8052, objs:-/8@20b47a82", + " 22 ret vec_new_from_slice -> Ok(Vec(obj#17))": "cpu:50419, mem:8156, objs:-/9@fc721910", + " 23 call put_contract_data(Vec(obj#17), Address(obj#15), Instance)": "", + " 24 ret put_contract_data -> Ok(Void)": "cpu:51201, mem:8196, store:1@73e12810/2@829540f0, stk:1@1955468f", + " 25 call string_new_from_slice(4)": "", + " 26 ret string_new_from_slice -> Ok(String(obj#19))": "cpu:52164, mem:8296, objs:-/10@ee5465d6", + " 27 call bytes_new_from_slice(32)": "cpu:52210", + " 28 ret bytes_new_from_slice -> Ok(Bytes(obj#21))": "cpu:53181, mem:8424, objs:-/11@4e09836d", + " 29 call bytes_len(Bytes(obj#21))": "", + " 30 ret bytes_len -> Ok(U32(32))": "cpu:53301", + " 31 call vec_new_from_slice(1)": "", + " 32 ret vec_new_from_slice -> Ok(Vec(obj#23))": "cpu:54266, mem:8528, objs:-/12@3e90436", + " 33 call map_new_from_slices(2)": "", + " 34 call symbol_new_from_slice(10)": "cpu:54799, mem:8592", + " 35 ret symbol_new_from_slice -> Ok(Symbol(obj#25))": "cpu:55809, mem:8698, objs:-/13@7fe6bff8", + " 36 call obj_cmp(Symbol(obj#25), Symbol(issuer))": "cpu:55977", + " 37 ret obj_cmp -> Ok(-1)": "cpu:56141", + " 38 ret map_new_from_slices -> Ok(Map(obj#27))": "cpu:56583, mem:8778, objs:-/14@b6bbd66b", + " 39 call vec_new_from_slice(2)": "", + " 40 ret vec_new_from_slice -> Ok(Vec(obj#29))": "cpu:57610, mem:8890, objs:-/15@3a42e216", + " 41 call put_contract_data(Vec(obj#23), Vec(obj#29), Instance)": "", + " 42 call obj_cmp(Vec(obj#17), Vec(obj#23))": "cpu:57823, store:-/2@829540f0, stk:-", + " 43 ret obj_cmp -> Ok(-1)": "cpu:58151", + " 44 call obj_cmp(Vec(obj#17), Vec(obj#23))": "cpu:58732, mem:8954", + " 45 ret obj_cmp -> Ok(-1)": "cpu:59060", + " 46 ret put_contract_data -> Ok(Void)": " store:2@a34b09e4/2@829540f0, stk:1@98d58593", + " 47 call vec_new_from_slice(1)": "", + " 48 ret vec_new_from_slice -> Ok(Vec(obj#31))": "cpu:60025, mem:9058, objs:-/16@93b5306b", + " 49 call get_contract_data(Vec(obj#31), Instance)": "", + " 50 call obj_cmp(Vec(obj#23), Vec(obj#31))": "cpu:60136, store:-/2@829540f0, stk:-", + " 51 ret obj_cmp -> Ok(0)": "cpu:60464", + " 52 ret get_contract_data -> Ok(Vec(obj#29))": "cpu:60569, store:2@a34b09e4/2@829540f0, stk:1@98d58593", + " 53 call vec_get(Vec(obj#29), U32(0))": "", + " 54 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:60732", + " 55 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 56 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:60866", + " 57 call vec_get(Vec(obj#29), U32(1))": "", + " 58 ret vec_get -> Ok(Map(obj#27))": "cpu:61089", + " 59 call map_unpack_to_slice(Map(obj#27), 2)": "", + " 60 ret map_unpack_to_slice -> Ok(Void)": "cpu:61438", + " 61 call bytes_len(Bytes(obj#21))": "", + " 62 ret bytes_len -> Ok(U32(32))": "cpu:61558", + " 63 call string_len(String(obj#19))": "", + " 64 ret string_len -> Ok(U32(4))": "cpu:61678", + " 65 call string_copy_to_slice(String(obj#19), U32(0), 4)": "", + " 66 ret string_copy_to_slice -> Ok(())": "cpu:61780", + " 67 call string_new_from_slice(4)": "cpu:62230, mem:9203", + " 68 ret string_new_from_slice -> Ok(String(obj#33))": "cpu:63193, mem:9303, objs:-/17@5f584dc0", + " 69 call bytes_copy_to_slice(Bytes(obj#21), U32(0), 32)": "", + " 70 ret bytes_copy_to_slice -> Ok(())": "cpu:63299", + " 71 call string_new_from_slice(61)": "", + " 72 ret string_new_from_slice -> Ok(String(obj#35))": "cpu:64276, mem:9460, objs:-/18@fd376c77", + " 73 call map_new_from_slices(3)": "", + " 74 ret map_new_from_slices -> Ok(Map(obj#37))": "cpu:65428, mem:9628, objs:-/19@d6314b6e", + " 75 call put_contract_data(Symbol(METADATA), Map(obj#37), Instance)": "", + " 76 call obj_cmp(Vec(obj#23), Symbol(METADATA))": "cpu:65584, store:-/2@829540f0, stk:-", + " 77 ret obj_cmp -> Ok(1)": "cpu:65704", + " 78 call obj_cmp(Vec(obj#17), Symbol(METADATA))": "", + " 79 ret obj_cmp -> Ok(1)": "cpu:65824", + " 80 call obj_cmp(Symbol(METADATA), Vec(obj#17))": "cpu:66414, mem:9716", + " 81 ret obj_cmp -> Ok(-1)": "cpu:66534", + " 82 call obj_cmp(Vec(obj#17), Vec(obj#23))": "", + " 83 ret obj_cmp -> Ok(-1)": "cpu:66862", + " 84 ret put_contract_data -> Ok(Void)": " store:3@4e633378/2@829540f0, stk:1@cfd279db", + " 85 pop SAC:2e378f80:sym#5 -> Ok(Void)": "cpu:78623, mem:12595, store:3@4e633378/2@3a2921e9", + " 86 ret create_asset_contract -> Ok(Address(obj#39))": "cpu:79125, mem:12675, objs:-/20@5fdefccc, store:-/2@3a2921e9, stk:-, auth:-/-", + " 87 call vec_new_from_slice(2)": "cpu:85113, mem:13932, objs:-/22@40ad34ea, store:-/4@1f75a9c, foot:3@52477c2f", + " 88 ret vec_new_from_slice -> Ok(Vec(obj#45))": "cpu:86140, mem:14044, objs:-/23@57b8b1ab", + " 89 call vec_new()": "cpu:104384, mem:19224, objs:-/24@70d4cccc", + " 90 ret vec_new -> Ok(Vec(obj#49))": "cpu:104886, mem:19304, objs:-/25@ba7f5c5b", + " 91 call bytes_new_from_slice(32)": "", + " 92 ret bytes_new_from_slice -> Ok(Bytes(obj#51))": "cpu:105857, mem:19432, objs:-/26@aefca471", + " 93 call bytes_len(Bytes(obj#51))": "", + " 94 ret bytes_len -> Ok(U32(32))": "cpu:105977", + " 95 call bytes_new_from_slice(64)": "", + " 96 ret bytes_new_from_slice -> Ok(Bytes(obj#53))": "cpu:106956, mem:19592, objs:-/27@a9626d25", + " 97 call bytes_len(Bytes(obj#53))": "", + " 98 ret bytes_len -> Ok(U32(64))": "cpu:107076", + " 99 call map_new_from_slices(2)": "", + " 100 call symbol_new_from_slice(10)": "cpu:107609, mem:19656", + " 101 ret symbol_new_from_slice -> Ok(Symbol(obj#55))": "cpu:108619, mem:19762, objs:-/28@92435d1d", + " 102 call obj_cmp(Symbol(obj#55), Symbol(signature))": "cpu:108787", + " 103 ret obj_cmp -> Ok(-1)": "cpu:108952", + " 104 ret map_new_from_slices -> Ok(Map(obj#57))": "cpu:109394, mem:19842, objs:-/29@2e49a3f9", + " 105 call vec_push_back(Vec(obj#49), Map(obj#57))": "", + " 106 ret vec_push_back -> Ok(Vec(obj#59))": "cpu:110599, mem:19946, objs:-/30@88d0fab1", + " 107 call obj_cmp(Symbol(obj#63), Symbol(signature))": "cpu:118762, mem:21518, objs:-/34@38ca2ed9", + " 108 ret obj_cmp -> Ok(-1)": "cpu:118927", + " 109 call call(Address(obj#39), Symbol(mint), Vec(obj#45))": "cpu:121801, mem:21918, objs:-/38@128d326e, auth:-/1@213419e1", + " 110 push SAC:2e378f80:mint(Address(obj#43), I128(100000000))": "cpu:32506, mem:6403, objs:-/39@4b134ee3, foot:1@6721e3ef, stk:1@6dd3cc2a, auth:1@61b3d678/1@32fc3246", + " 111 call symbol_index_in_strs(Symbol(mint), 18)": "", + " 112 ret symbol_index_in_strs -> Ok(U32(11))": "cpu:33298", + " 113 call vec_new_from_slice(1)": "", + " 114 ret vec_new_from_slice -> Ok(Vec(obj#79))": "cpu:34263, mem:6507, objs:-/40@75e6ec10", + " 115 call get_contract_data(Vec(obj#79), Instance)": "", + " 116 call obj_cmp(Symbol(obj#93), Symbol(issuer))": "cpu:44273, mem:7786, objs:-/49@e1d175a2, stk:-", + " 117 ret obj_cmp -> Ok(-1)": "cpu:44437", + " 118 call obj_cmp(Symbol(METADATA), Vec(obj#87))": "cpu:45372, mem:7946, objs:-/51@22dd14c9", + " 119 ret obj_cmp -> Ok(-1)": "cpu:45492", + " 120 call obj_cmp(Vec(obj#87), Vec(obj#91))": "", + " 121 ret obj_cmp -> Ok(-1)": "cpu:45820", + " 122 call obj_cmp(Vec(obj#87), Vec(obj#79))": "cpu:45871", + " 123 ret obj_cmp -> Ok(-1)": "cpu:46199", + " 124 call obj_cmp(Vec(obj#91), Vec(obj#79))": "", + " 125 ret obj_cmp -> Ok(0)": "cpu:46527", + " 126 ret get_contract_data -> Ok(Vec(obj#101))": "cpu:46632, store:3@53421086/4@1f75a9c, stk:1@e79f1988", + " 127 call vec_get(Vec(obj#101), U32(0))": "", + " 128 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:46795", + " 129 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 130 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:46929", + " 131 call vec_get(Vec(obj#101), U32(1))": "", + " 132 ret vec_get -> Ok(Map(obj#99))": "cpu:47152", + " 133 call map_unpack_to_slice(Map(obj#99), 2)": "", + " 134 ret map_unpack_to_slice -> Ok(Void)": "cpu:47501", + " 135 call bytes_len(Bytes(obj#97))": "", + " 136 ret bytes_len -> Ok(U32(32))": "cpu:47621", + " 137 call obj_cmp(Address(obj#103), Address(obj#43))": "cpu:48215, mem:8026, objs:-/52@93053d5a", + " 138 ret obj_cmp -> Ok(-1)": "cpu:48505", + " 139 call vec_new_from_slice(1)": "", + " 140 ret vec_new_from_slice -> Ok(Vec(obj#105))": "cpu:49470, mem:8130, objs:-/53@1df5d217", + " 141 call get_contract_data(Vec(obj#105), Instance)": "", + " 142 call obj_cmp(Vec(obj#87), Vec(obj#105))": "cpu:49581, store:-/4@1f75a9c, stk:-", + " 143 ret obj_cmp -> Ok(0)": "cpu:49909", + " 144 ret get_contract_data -> Ok(Address(obj#89))": "cpu:50014, store:3@53421086/4@1f75a9c, stk:1@e79f1988", + " 145 call require_auth(Address(obj#89))": "", + " 146 call obj_cmp(Address(obj#61), Address(obj#89))": "cpu:50642, mem:8162", + " 147 ret obj_cmp -> Ok(0)": "cpu:50932", + " 148 call obj_cmp(Address(obj#61), Address(obj#89))": " auth:1@61b3d678/-", + " 149 ret obj_cmp -> Ok(0)": "cpu:51222", + " 150 call obj_cmp(Address(obj#73), Address(obj#77))": "", + " 151 ret obj_cmp -> Ok(0)": "cpu:51512", + " 152 call obj_cmp(Address(obj#75), Address(obj#43))": "", + " 153 ret obj_cmp -> Ok(0)": "cpu:51802", + " 154 call bytes_new_from_slice(32)": "cpu:70113, mem:13278", + " 155 ret bytes_new_from_slice -> Ok(Bytes(obj#107))": "cpu:71084, mem:13406, objs:-/54@20a6a09e", + " 156 call vec_new()": "", + " 157 ret vec_new -> Ok(Vec(obj#109))": "cpu:71586, mem:13486, objs:-/55@ad45a0a8", + " 158 call vec_new_from_slice(2)": "", + " 159 ret vec_new_from_slice -> Ok(Vec(obj#111))": "cpu:72613, mem:13598, objs:-/56@6d826a39", + " 160 call map_new_from_slices(3)": "", + " 161 ret map_new_from_slices -> Ok(Map(obj#113))": "cpu:73765, mem:13766, objs:-/57@fbad185a", + " 162 call vec_new_from_slice(2)": "", + " 163 ret vec_new_from_slice -> Ok(Vec(obj#115))": "cpu:74792, mem:13878, objs:-/58@997e0699", + " 164 call vec_push_back(Vec(obj#109), Vec(obj#115))": "", + " 165 ret vec_push_back -> Ok(Vec(obj#117))": "cpu:75997, mem:13982, objs:-/59@47bc9ed", + " 166 call vec_len(Vec(obj#71))": "", + " 167 ret vec_len -> Ok(U32(1))": "cpu:76117", + " 168 call vec_get(Vec(obj#71), U32(0))": "cpu:79091, mem:14320, foot:2@73dad5c0", + " 169 ret vec_get -> Ok(Map(obj#69))": "cpu:79314", + " 170 call map_unpack_to_slice(Map(obj#69), 2)": "", + " 171 ret map_unpack_to_slice -> Ok(Void)": "cpu:79664", + " 172 call bytes_len(Bytes(obj#65))": "", + " 173 ret bytes_len -> Ok(U32(32))": "cpu:79784", + " 174 call bytes_len(Bytes(obj#67))": "", + " 175 ret bytes_len -> Ok(U32(64))": "cpu:79904", + " 176 call verify_sig_ed25519(Bytes(obj#65), Bytes(obj#107), Bytes(obj#67))": "", + " 177 ret verify_sig_ed25519 -> Ok(Void)": "cpu:499135", + " 178 call bytes_copy_to_slice(Bytes(obj#65), U32(0), 32)": "", + " 179 ret bytes_copy_to_slice -> Ok(())": "cpu:499241", + " 180 ret require_auth -> Ok(Void)": "cpu:506247, mem:15734, store:3@53421086/5@bf6d9d17, foot:3@6d9fe473, auth:1@61b3d678/1@deebe80f", + " 181 call extend_current_contract_instance_and_code_ttl(U32(103680), U32(120960))": "", + " 182 call get_ledger_sequence()": "cpu:508146, mem:15902, store:3@53421086/-, foot:-", + " 183 ret get_ledger_sequence -> Ok(U32(123))": "", + " 184 ret extend_current_contract_instance_and_code_ttl -> Ok(Void)": "cpu:519851, mem:18647, store:3@53421086/5@d94d04b4, foot:3@6d9fe473", + " 185 call vec_new_from_slice(1)": "cpu:520047", + " 186 ret vec_new_from_slice -> Ok(Vec(obj#119))": "cpu:521012, mem:18751, objs:-/60@f3f3a8aa", + " 187 call get_contract_data(Vec(obj#119), Instance)": "", + " 188 call obj_cmp(Vec(obj#87), Vec(obj#119))": "cpu:521123, store:-/5@d94d04b4, stk:-", + " 189 ret obj_cmp -> Ok(-1)": "cpu:521451", + " 190 call obj_cmp(Vec(obj#91), Vec(obj#119))": "", + " 191 ret obj_cmp -> Ok(0)": "cpu:521779", + " 192 ret get_contract_data -> Ok(Vec(obj#101))": "cpu:521884, store:3@53421086/5@d94d04b4, stk:1@e79f1988", + " 193 call vec_get(Vec(obj#101), U32(0))": "", + " 194 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:522047", + " 195 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 196 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:522181", + " 197 call vec_get(Vec(obj#101), U32(1))": "", + " 198 ret vec_get -> Ok(Map(obj#99))": "cpu:522404", + " 199 call map_unpack_to_slice(Map(obj#99), 2)": "", + " 200 ret map_unpack_to_slice -> Ok(Void)": "cpu:522753", + " 201 call bytes_len(Bytes(obj#97))": "", + " 202 ret bytes_len -> Ok(U32(32))": "cpu:522873", + " 203 call string_len(String(obj#95))": "cpu:522979", + " 204 ret string_len -> Ok(U32(4))": "cpu:523099", + " 205 call string_copy_to_slice(String(obj#95), U32(0), 4)": "", + " 206 ret string_copy_to_slice -> Ok(())": "cpu:523201", + " 207 call vec_new_from_slice(1)": "cpu:525243, mem:19035, foot:4@e51ff0ee", + " 208 ret vec_new_from_slice -> Ok(Vec(obj#121))": "cpu:526208, mem:19139, objs:-/61@f533bc46", + " 209 call get_contract_data(Vec(obj#121), Instance)": "", + " 210 call obj_cmp(Vec(obj#87), Vec(obj#121))": "cpu:526319, store:-/5@d94d04b4, stk:-", + " 211 ret obj_cmp -> Ok(-1)": "cpu:526647", + " 212 call obj_cmp(Vec(obj#91), Vec(obj#121))": "", + " 213 ret obj_cmp -> Ok(0)": "cpu:526975", + " 214 ret get_contract_data -> Ok(Vec(obj#101))": "cpu:527080, store:3@53421086/5@d94d04b4, stk:1@e79f1988", + " 215 call vec_get(Vec(obj#101), U32(0))": "", + " 216 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:527243", + " 217 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 218 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:527377", + " 219 call vec_get(Vec(obj#101), U32(1))": "", + " 220 ret vec_get -> Ok(Map(obj#99))": "cpu:527600", + " 221 call map_unpack_to_slice(Map(obj#99), 2)": "", + " 222 ret map_unpack_to_slice -> Ok(Void)": "cpu:527949", + " 223 call bytes_len(Bytes(obj#97))": "", + " 224 ret bytes_len -> Ok(U32(32))": "cpu:528069", + " 225 call string_len(String(obj#95))": "cpu:528175", + " 226 ret string_len -> Ok(U32(4))": "cpu:528295", + " 227 call string_copy_to_slice(String(obj#95), U32(0), 4)": "", + " 228 ret string_copy_to_slice -> Ok(())": "cpu:528397", + " 229 call get_contract_data(Symbol(METADATA), Instance)": "cpu:532797, mem:20131, store:3@53421086/5@1c8a0e6, foot:4@3b152753", + " 230 call obj_cmp(Vec(obj#87), Symbol(METADATA))": "cpu:532848, store:-/5@1c8a0e6, stk:-", + " 231 ret obj_cmp -> Ok(1)": "cpu:532968", + " 232 ret get_contract_data -> Ok(Map(obj#85))": "cpu:533073, store:3@53421086/5@1c8a0e6, stk:1@e79f1988", + " 233 call map_unpack_to_slice(Map(obj#85), 3)": "", + " 234 ret map_unpack_to_slice -> Ok(Void)": "cpu:533412", + " 235 call vec_new_from_slice(3)": "", + " 236 ret vec_new_from_slice -> Ok(Vec(obj#123))": "cpu:534501, mem:20251, objs:-/62@77618c38", + " 237 call contract_event(Vec(obj#123), I128(100000000))": "", + " 238 call bytes_new_from_slice(32)": "cpu:534607", + " 239 ret bytes_new_from_slice -> Ok(Bytes(obj#125))": "cpu:535578, mem:20379, objs:-/63@62b59984", + " 240 ret contract_event -> Ok(Void)": "cpu:536111, mem:20444, evt:1@5050c98b", + " 241 pop SAC:2e378f80:mint -> Ok(Void)": "", + " 242 ret call -> Ok(Void)": " store:-/5@1c8a0e6, stk:-, auth:-/-", + " 243 call vec_new()": "", + " 244 ret vec_new -> Ok(Vec(obj#127))": "cpu:536613, mem:20524, objs:-/64@57bd4eea", + " 245 call call(Address(obj#39), Symbol(name), Vec(obj#127))": "", + " 246 push SAC:2e378f80:name()": "cpu:31442, mem:6295, objs:-/65@5d3566e8, evt:-, foot:1@6721e3ef, stk:1@3ba1fef6, auth:1@efaec87d/-", + " 247 call symbol_index_in_strs(Symbol(name), 18)": "", + " 248 ret symbol_index_in_strs -> Ok(U32(15))": "cpu:32234", + " 249 call get_contract_data(Symbol(METADATA), Instance)": "", + " 250 call obj_cmp(Symbol(obj#143), Symbol(issuer))": "cpu:42184, mem:7574, objs:-/74@9a4fc9ff, stk:-", + " 251 ret obj_cmp -> Ok(-1)": "cpu:42348", + " 252 call obj_cmp(Symbol(METADATA), Vec(obj#137))": "cpu:43283, mem:7734, objs:-/76@5eab285e", + " 253 ret obj_cmp -> Ok(-1)": "cpu:43403", + " 254 call obj_cmp(Vec(obj#137), Vec(obj#141))": "", + " 255 ret obj_cmp -> Ok(-1)": "cpu:43731", + " 256 call obj_cmp(Vec(obj#137), Symbol(METADATA))": "cpu:43782", + " 257 ret obj_cmp -> Ok(1)": "cpu:43902", + " 258 ret get_contract_data -> Ok(Map(obj#135))": "cpu:44007, store:3@614700a/5@1c8a0e6, stk:1@37dd2681", + " 259 call map_unpack_to_slice(Map(obj#135), 3)": "", + " 260 ret map_unpack_to_slice -> Ok(Void)": "cpu:44346", + " 261 pop SAC:2e378f80:name -> Ok(String(obj#131))": "", + " 262 ret call -> Ok(String(obj#131))": "cpu:44406, store:-/5@1c8a0e6, stk:-, auth:-/-", + " 263 call vec_new_from_slice(3)": "cpu:45290, mem:7894, objs:-/78@d1c8b9ed", + " 264 ret vec_new_from_slice -> Ok(Vec(obj#157))": "cpu:46379, mem:8014, objs:-/79@7fb6570d", + " 265 call vec_new()": "cpu:71361, mem:15276, objs:-/80@d834e2ae", + " 266 ret vec_new -> Ok(Vec(obj#161))": "cpu:71863, mem:15356, objs:-/81@4d4a7845", + " 267 call bytes_new_from_slice(32)": "", + " 268 ret bytes_new_from_slice -> Ok(Bytes(obj#163))": "cpu:72834, mem:15484, objs:-/82@c16d6de0", + " 269 call bytes_len(Bytes(obj#163))": "", + " 270 ret bytes_len -> Ok(U32(32))": "cpu:72954", + " 271 call bytes_new_from_slice(64)": "", + " 272 ret bytes_new_from_slice -> Ok(Bytes(obj#165))": "cpu:73933, mem:15644, objs:-/83@2b2e2a91", + " 273 call bytes_len(Bytes(obj#165))": "", + " 274 ret bytes_len -> Ok(U32(64))": "cpu:74053", + " 275 call map_new_from_slices(2)": "", + " 276 call symbol_new_from_slice(10)": "cpu:74586, mem:15708", + " 277 ret symbol_new_from_slice -> Ok(Symbol(obj#167))": "cpu:75596, mem:15814, objs:-/84@ddc3a04f", + " 278 call obj_cmp(Symbol(obj#167), Symbol(signature))": "cpu:75764", + " 279 ret obj_cmp -> Ok(-1)": "cpu:75929", + " 280 ret map_new_from_slices -> Ok(Map(obj#169))": "cpu:76371, mem:15894, objs:-/85@96ec13d0", + " 281 call vec_push_back(Vec(obj#161), Map(obj#169))": "", + " 282 ret vec_push_back -> Ok(Vec(obj#171))": "cpu:77576, mem:15998, objs:-/86@53c4227c", + " 283 call obj_cmp(Symbol(obj#175), Symbol(signature))": "cpu:85739, mem:17570, objs:-/90@80aca3f1", + " 284 ret obj_cmp -> Ok(-1)": "cpu:85904", + " 285 call call(Address(obj#39), Symbol(transfer), Vec(obj#157))": "cpu:89274, mem:18074, objs:-/95@99ccc34a, auth:-/1@c876c42", + " 286 push SAC:2e378f80:transfer(Address(obj#155), MuxedAddress(obj#153), I128(9999999))": "cpu:32526, mem:6487, objs:-/96@3dccea54, stk:1@18112805, auth:1@fce62135/1@496ec93e", + " 287 call symbol_index_in_strs(Symbol(transfer), 18)": "", + " 288 ret symbol_index_in_strs -> Ok(U32(5))": "cpu:33328", + " 289 call get_address_from_muxed_address(MuxedAddress(obj#153))": "", + " 290 ret get_address_from_muxed_address -> Ok(Address(obj#193))": "cpu:33996, mem:6567, objs:-/97@51fa82e5", + " 291 call require_auth(Address(obj#155))": "", + " 292 call obj_cmp(Address(obj#173), Address(obj#155))": "cpu:34626, mem:6607", + " 293 ret obj_cmp -> Ok(0)": "cpu:34916", + " 294 call obj_cmp(Address(obj#173), Address(obj#155))": " auth:1@fce62135/-", + " 295 ret obj_cmp -> Ok(0)": "cpu:35206", + " 296 call obj_cmp(Address(obj#185), Address(obj#191))": "", + " 297 ret obj_cmp -> Ok(0)": "cpu:35496", + " 298 call obj_cmp(Address(obj#187), Address(obj#155))": "", + " 299 ret obj_cmp -> Ok(0)": "cpu:35786", + " 300 call obj_cmp(MuxedAddress(obj#189), MuxedAddress(obj#153))": "", + " 301 ret obj_cmp -> Ok(0)": "cpu:36076", + " 302 call bytes_new_from_slice(32)": "cpu:61233, mem:13805", + " 303 ret bytes_new_from_slice -> Ok(Bytes(obj#195))": "cpu:62204, mem:13933, objs:-/98@a5d5a", + " 304 call vec_new()": "", + " 305 ret vec_new -> Ok(Vec(obj#197))": "cpu:62706, mem:14013, objs:-/99@2a165528", + " 306 call vec_new_from_slice(3)": "", + " 307 ret vec_new_from_slice -> Ok(Vec(obj#199))": "cpu:63795, mem:14133, objs:-/100@9f0435b0", + " 308 call map_new_from_slices(3)": "", + " 309 ret map_new_from_slices -> Ok(Map(obj#201))": "cpu:64947, mem:14301, objs:-/101@4152fa87", + " 310 call vec_new_from_slice(2)": "", + " 311 ret vec_new_from_slice -> Ok(Vec(obj#203))": "cpu:65974, mem:14413, objs:-/102@e7b1d912", + " 312 call vec_push_back(Vec(obj#197), Vec(obj#203))": "", + " 313 ret vec_push_back -> Ok(Vec(obj#205))": "cpu:67179, mem:14517, objs:-/103@9ceee45a", + " 314 call vec_len(Vec(obj#183))": "", + " 315 ret vec_len -> Ok(U32(1))": "cpu:67299", + " 316 call vec_get(Vec(obj#183), U32(0))": "cpu:70129, mem:14855, foot:2@3e31d7b4", + " 317 ret vec_get -> Ok(Map(obj#181))": "cpu:70352", + " 318 call map_unpack_to_slice(Map(obj#181), 2)": "", + " 319 ret map_unpack_to_slice -> Ok(Void)": "cpu:70702", + " 320 call bytes_len(Bytes(obj#177))": "", + " 321 ret bytes_len -> Ok(U32(32))": "cpu:70822", + " 322 call bytes_len(Bytes(obj#179))": "", + " 323 ret bytes_len -> Ok(U32(64))": "cpu:70942", + " 324 call verify_sig_ed25519(Bytes(obj#177), Bytes(obj#195), Bytes(obj#179))": "", + " 325 ret verify_sig_ed25519 -> Ok(Void)": "cpu:490173", + " 326 call bytes_copy_to_slice(Bytes(obj#177), U32(0), 32)": "", + " 327 ret bytes_copy_to_slice -> Ok(())": "cpu:490279", + " 328 ret require_auth -> Ok(Void)": "cpu:497739, mem:16405, store:-/6@f5a51cef, foot:3@56bc0eee, auth:1@fce62135/1@c2f4cf01", + " 329 call extend_current_contract_instance_and_code_ttl(U32(103680), U32(120960))": "", + " 330 call get_ledger_sequence()": "cpu:499838, mem:16573, store:-/-, foot:-", + " 331 ret get_ledger_sequence -> Ok(U32(123))": "", + " 332 ret extend_current_contract_instance_and_code_ttl -> Ok(Void)": "cpu:510686, mem:18962, store:-/6@f5a51cef, foot:3@56bc0eee", + " 333 call vec_new_from_slice(1)": "cpu:510882", + " 334 ret vec_new_from_slice -> Ok(Vec(obj#207))": "cpu:511847, mem:19066, objs:-/104@4c67c364", + " 335 call get_contract_data(Vec(obj#207), Instance)": "", + " 336 call obj_cmp(Symbol(obj#221), Symbol(issuer))": "cpu:521857, mem:20345, objs:-/113@46852a15, stk:-", + " 337 ret obj_cmp -> Ok(-1)": "cpu:522021", + " 338 call obj_cmp(Symbol(METADATA), Vec(obj#215))": "cpu:522956, mem:20505, objs:-/115@64cdae71", + " 339 ret obj_cmp -> Ok(-1)": "cpu:523076", + " 340 call obj_cmp(Vec(obj#215), Vec(obj#219))": "", + " 341 ret obj_cmp -> Ok(-1)": "cpu:523404", + " 342 call obj_cmp(Vec(obj#215), Vec(obj#207))": "cpu:523455", + " 343 ret obj_cmp -> Ok(-1)": "cpu:523783", + " 344 call obj_cmp(Vec(obj#219), Vec(obj#207))": "", + " 345 ret obj_cmp -> Ok(0)": "cpu:524111", + " 346 ret get_contract_data -> Ok(Vec(obj#229))": "cpu:524216, store:3@32729e5d/6@f5a51cef, stk:1@c760e0e", + " 347 call vec_get(Vec(obj#229), U32(0))": "", + " 348 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:524379", + " 349 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 350 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:524513", + " 351 call vec_get(Vec(obj#229), U32(1))": "", + " 352 ret vec_get -> Ok(Map(obj#227))": "cpu:524736", + " 353 call map_unpack_to_slice(Map(obj#227), 2)": "", + " 354 ret map_unpack_to_slice -> Ok(Void)": "cpu:525085", + " 355 call bytes_len(Bytes(obj#225))": "", + " 356 ret bytes_len -> Ok(U32(32))": "cpu:525205", + " 357 call string_len(String(obj#223))": "cpu:525311", + " 358 ret string_len -> Ok(U32(4))": "cpu:525431", + " 359 call string_copy_to_slice(String(obj#223), U32(0), 4)": "", + " 360 ret string_copy_to_slice -> Ok(())": "cpu:525533", + " 361 call vec_new_from_slice(1)": "cpu:527575, mem:20789, foot:4@832c0585", + " 362 ret vec_new_from_slice -> Ok(Vec(obj#231))": "cpu:528540, mem:20893, objs:-/116@b9711187", + " 363 call get_contract_data(Vec(obj#231), Instance)": "", + " 364 call obj_cmp(Vec(obj#215), Vec(obj#231))": "cpu:528651, store:-/6@f5a51cef, stk:-", + " 365 ret obj_cmp -> Ok(-1)": "cpu:528979", + " 366 call obj_cmp(Vec(obj#219), Vec(obj#231))": "", + " 367 ret obj_cmp -> Ok(0)": "cpu:529307", + " 368 ret get_contract_data -> Ok(Vec(obj#229))": "cpu:529412, store:3@32729e5d/6@f5a51cef, stk:1@c760e0e", + " 369 call vec_get(Vec(obj#229), U32(0))": "", + " 370 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:529575", + " 371 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 372 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:529709", + " 373 call vec_get(Vec(obj#229), U32(1))": "", + " 374 ret vec_get -> Ok(Map(obj#227))": "cpu:529932", + " 375 call map_unpack_to_slice(Map(obj#227), 2)": "", + " 376 ret map_unpack_to_slice -> Ok(Void)": "cpu:530281", + " 377 call bytes_len(Bytes(obj#225))": "", + " 378 ret bytes_len -> Ok(U32(32))": "cpu:530401", + " 379 call string_len(String(obj#223))": "cpu:530507", + " 380 ret string_len -> Ok(U32(4))": "cpu:530627", + " 381 call string_copy_to_slice(String(obj#223), U32(0), 4)": "", + " 382 ret string_copy_to_slice -> Ok(())": "cpu:530729", + " 383 call vec_new_from_slice(2)": "cpu:535402, mem:21953, store:3@32729e5d/6@c9ab47de, foot:4@c3d5054c", + " 384 ret vec_new_from_slice -> Ok(Vec(obj#233))": "cpu:536429, mem:22065, objs:-/117@d79b82b1", + " 385 call has_contract_data(Vec(obj#233), Persistent)": "", + " 386 ret has_contract_data -> Ok(False)": "cpu:541539, mem:23074, store:3@32729e5d/7@4dfe4d64, foot:5@10e8efd4", + " 387 call vec_new_from_slice(1)": "", + " 388 ret vec_new_from_slice -> Ok(Vec(obj#235))": "cpu:542504, mem:23178, objs:-/118@7fe5cd47", + " 389 call get_contract_data(Vec(obj#235), Instance)": "", + " 390 call obj_cmp(Vec(obj#215), Vec(obj#235))": "cpu:542615, store:-/7@4dfe4d64, stk:-", + " 391 ret obj_cmp -> Ok(-1)": "cpu:542943", + " 392 call obj_cmp(Vec(obj#219), Vec(obj#235))": "", + " 393 ret obj_cmp -> Ok(0)": "cpu:543271", + " 394 ret get_contract_data -> Ok(Vec(obj#229))": "cpu:543376, store:3@32729e5d/7@4dfe4d64, stk:1@c760e0e", + " 395 call vec_get(Vec(obj#229), U32(0))": "", + " 396 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:543539", + " 397 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 398 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:543673", + " 399 call vec_get(Vec(obj#229), U32(1))": "", + " 400 ret vec_get -> Ok(Map(obj#227))": "cpu:543896", + " 401 call map_unpack_to_slice(Map(obj#227), 2)": "", + " 402 ret map_unpack_to_slice -> Ok(Void)": "cpu:544245", + " 403 call bytes_len(Bytes(obj#225))": "", + " 404 ret bytes_len -> Ok(U32(32))": "cpu:544365", + " 405 call vec_new_from_slice(2)": "cpu:547940, mem:23616, foot:6@22b6dd2b", + " 406 ret vec_new_from_slice -> Ok(Vec(obj#237))": "cpu:548967, mem:23728, objs:-/119@48eef2d9", + " 407 call has_contract_data(Vec(obj#237), Persistent)": "", + " 408 ret has_contract_data -> Ok(False)": "cpu:552409, mem:24104", + " 409 call vec_new_from_slice(1)": "", + " 410 ret vec_new_from_slice -> Ok(Vec(obj#239))": "cpu:553374, mem:24208, objs:-/120@1a2bba7e", + " 411 call get_contract_data(Vec(obj#239), Instance)": "", + " 412 call obj_cmp(Vec(obj#215), Vec(obj#239))": "cpu:553485, store:-/7@4dfe4d64, stk:-", + " 413 ret obj_cmp -> Ok(-1)": "cpu:553813", + " 414 call obj_cmp(Vec(obj#219), Vec(obj#239))": "", + " 415 ret obj_cmp -> Ok(0)": "cpu:554141", + " 416 ret get_contract_data -> Ok(Vec(obj#229))": "cpu:554246, store:3@32729e5d/7@4dfe4d64, stk:1@c760e0e", + " 417 call vec_get(Vec(obj#229), U32(0))": "", + " 418 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:554409", + " 419 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 420 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:554543", + " 421 call vec_get(Vec(obj#229), U32(1))": "", + " 422 ret vec_get -> Ok(Map(obj#227))": "cpu:554766", + " 423 call map_unpack_to_slice(Map(obj#227), 2)": "", + " 424 ret map_unpack_to_slice -> Ok(Void)": "cpu:555115", + " 425 call bytes_len(Bytes(obj#225))": "", + " 426 ret bytes_len -> Ok(U32(32))": "cpu:555235", + " 427 call vec_new_from_slice(2)": "cpu:557839, mem:24480", + " 428 ret vec_new_from_slice -> Ok(Vec(obj#241))": "cpu:558866, mem:24592, objs:-/121@8d0c209a", + " 429 call map_new_from_slices(3)": "", + " 430 call symbol_new_from_slice(10)": "cpu:559405, mem:24680", + " 431 ret symbol_new_from_slice -> Ok(Symbol(obj#243))": "cpu:560415, mem:24786, objs:-/122@53d0b6a0", + " 432 call obj_cmp(Symbol(amount), Symbol(obj#243))": "cpu:560466", + " 433 ret obj_cmp -> Ok(-1)": "cpu:560630", + " 434 call obj_cmp(Symbol(obj#243), Symbol(clawback))": "", + " 435 ret obj_cmp -> Ok(-1)": "cpu:560795", + " 436 ret map_new_from_slices -> Ok(Map(obj#245))": "cpu:561237, mem:24866, objs:-/123@796207ac", + " 437 call put_contract_data(Vec(obj#241), Map(obj#245), Persistent)": "", + " 438 ret put_contract_data -> Ok(Void)": "cpu:571258, mem:27078, store:3@32729e5d/7@44278973, foot:6@2bf9bf11", + " 439 call vec_new_from_slice(2)": "", + " 440 ret vec_new_from_slice -> Ok(Vec(obj#247))": "cpu:572285, mem:27190, objs:-/124@2181eea8", + " 441 call extend_contract_data_ttl(Vec(obj#247), Persistent, U32(501120), U32(518400))": "", + " 442 call get_ledger_sequence()": "cpu:576157, mem:27566, store:3@32729e5d/-, foot:-", + " 443 ret get_ledger_sequence -> Ok(U32(123))": "", + " 444 ret extend_contract_data_ttl -> Ok(Void)": "cpu:577525, mem:28058, store:3@32729e5d/7@82c5eb4f, foot:6@2bf9bf11", + " 445 call get_id_from_muxed_address(MuxedAddress(obj#153))": "", + " 446 ret get_id_from_muxed_address -> Ok(U64(51966))": "cpu:577645", + " 447 call obj_cmp(Address(obj#155), Address(obj#193))": "", + " 448 ret obj_cmp -> Ok(-1)": "cpu:577935", + " 449 call vec_new_from_slice(1)": "", + " 450 ret vec_new_from_slice -> Ok(Vec(obj#249))": "cpu:578900, mem:28162, objs:-/125@aa00fd1a", + " 451 call get_contract_data(Vec(obj#249), Instance)": "", + " 452 call obj_cmp(Vec(obj#215), Vec(obj#249))": "cpu:579011, store:-/7@82c5eb4f, stk:-", + " 453 ret obj_cmp -> Ok(-1)": "cpu:579339", + " 454 call obj_cmp(Vec(obj#219), Vec(obj#249))": "", + " 455 ret obj_cmp -> Ok(0)": "cpu:579667", + " 456 ret get_contract_data -> Ok(Vec(obj#229))": "cpu:579772, store:3@32729e5d/7@82c5eb4f, stk:1@c760e0e", + " 457 call vec_get(Vec(obj#229), U32(0))": "", + " 458 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:579935", + " 459 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 460 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:580069", + " 461 call vec_get(Vec(obj#229), U32(1))": "", + " 462 ret vec_get -> Ok(Map(obj#227))": "cpu:580292", + " 463 call map_unpack_to_slice(Map(obj#227), 2)": "", + " 464 ret map_unpack_to_slice -> Ok(Void)": "cpu:580641", + " 465 call bytes_len(Bytes(obj#225))": "", + " 466 ret bytes_len -> Ok(U32(32))": "cpu:580761", + " 467 call obj_cmp(Address(obj#251), Address(obj#155))": "cpu:581355, mem:28242, objs:-/126@3a203300", + " 468 ret obj_cmp -> Ok(-1)": "cpu:581645", + " 469 call vec_new_from_slice(1)": "", + " 470 ret vec_new_from_slice -> Ok(Vec(obj#253))": "cpu:582610, mem:28346, objs:-/127@6e18cbf8", + " 471 call get_contract_data(Vec(obj#253), Instance)": "", + " 472 call obj_cmp(Vec(obj#215), Vec(obj#253))": "cpu:582721, store:-/7@82c5eb4f, stk:-", + " 473 ret obj_cmp -> Ok(-1)": "cpu:583049", + " 474 call obj_cmp(Vec(obj#219), Vec(obj#253))": "", + " 475 ret obj_cmp -> Ok(0)": "cpu:583377", + " 476 ret get_contract_data -> Ok(Vec(obj#229))": "cpu:583482, store:3@32729e5d/7@82c5eb4f, stk:1@c760e0e", + " 477 call vec_get(Vec(obj#229), U32(0))": "", + " 478 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:583645", + " 479 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 480 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:583779", + " 481 call vec_get(Vec(obj#229), U32(1))": "", + " 482 ret vec_get -> Ok(Map(obj#227))": "cpu:584002", + " 483 call map_unpack_to_slice(Map(obj#227), 2)": "", + " 484 ret map_unpack_to_slice -> Ok(Void)": "cpu:584351", + " 485 call bytes_len(Bytes(obj#225))": "", + " 486 ret bytes_len -> Ok(U32(32))": "cpu:584471", + " 487 call obj_cmp(Address(obj#255), Address(obj#193))": "cpu:585065, mem:28426, objs:-/128@d8e5f163", + " 488 ret obj_cmp -> Ok(-1)": "cpu:585355", + " 489 call get_contract_data(Symbol(METADATA), Instance)": "", + " 490 call obj_cmp(Vec(obj#215), Symbol(METADATA))": "cpu:585406, store:-/7@82c5eb4f, stk:-", + " 491 ret obj_cmp -> Ok(1)": "cpu:585526", + " 492 ret get_contract_data -> Ok(Map(obj#213))": "cpu:585631, store:3@32729e5d/7@82c5eb4f, stk:1@c760e0e", + " 493 call map_unpack_to_slice(Map(obj#213), 3)": "", + " 494 ret map_unpack_to_slice -> Ok(Void)": "cpu:585970", + " 495 call vec_new_from_slice(4)": "", + " 496 ret vec_new_from_slice -> Ok(Vec(obj#257))": "cpu:587121, mem:28554, objs:-/129@24f52f04", + " 497 call map_new()": "", + " 498 ret map_new -> Ok(Map(obj#259))": "cpu:587623, mem:28634, objs:-/130@fd0ba835", + " 499 call map_put(Map(obj#259), Symbol(amount), I128(9999999))": "", + " 500 ret map_put -> Ok(Map(obj#261))": "cpu:588907, mem:28754, objs:-/131@a442c0a8", + " 501 call symbol_new_from_slice(11)": "", + " 502 ret symbol_new_from_slice -> Ok(Symbol(obj#263))": "cpu:589917, mem:28861, objs:-/132@3d8c9b28", + " 503 call map_put(Map(obj#261), Symbol(obj#263), U64(51966))": "", + " 504 call obj_cmp(Symbol(amount), Symbol(obj#263))": "cpu:590190", + " 505 ret obj_cmp -> Ok(-1)": "cpu:590354", + " 506 call obj_cmp(Symbol(amount), Symbol(obj#263))": "cpu:590935, mem:28925", + " 507 ret obj_cmp -> Ok(-1)": "cpu:591099", + " 508 ret map_put -> Ok(Map(obj#265))": "cpu:591601, mem:29005, objs:-/133@ed99f4b7", + " 509 call contract_event(Vec(obj#257), Map(obj#265))": "", + " 510 call bytes_new_from_slice(32)": "cpu:591767", + " 511 ret bytes_new_from_slice -> Ok(Bytes(obj#267))": "cpu:592738, mem:29133, objs:-/134@1ebdfaf", + " 512 ret contract_event -> Ok(Void)": "cpu:593271, mem:29198, evt:1@4e44a9db", + " 513 pop SAC:2e378f80:transfer -> Ok(Void)": "", + " 514 ret call -> Ok(Void)": " store:-/7@82c5eb4f, stk:-, auth:-/-", + " 515 call vec_new_from_slice(4)": "cpu:597196, mem:30430, objs:-/135@4a7884c2", + " 516 ret vec_new_from_slice -> Ok(Vec(obj#271))": "cpu:598347, mem:30558, objs:-/136@931c1acc", + " 517 call map_new_from_slices(2)": "", + " 518 call symbol_new_from_slice(11)": "cpu:598880, mem:30622", + " 519 ret symbol_new_from_slice -> Ok(Symbol(obj#273))": "cpu:599890, mem:30729, objs:-/137@c0a70bdc", + " 520 call obj_cmp(Symbol(amount), Symbol(obj#273))": "cpu:599938", + " 521 ret obj_cmp -> Ok(-1)": "cpu:600102", + " 522 ret map_new_from_slices -> Ok(Map(obj#275))": "cpu:600544, mem:30809, objs:-/138@ef1096b9", + " 523 call vec_new_from_slice(1)": "cpu:603466, mem:31777", + " 524 ret vec_new_from_slice -> Ok(Vec(obj#277))": "cpu:604491, mem:31881, objs:-/139@3c6a188c", + " 525 call call(Address(obj#39), Symbol(balance), Vec(obj#277))": "", + " 526 push SAC:2e378f80:balance(Address(obj#41))": "cpu:32080, mem:6447, objs:-/140@51229dbf, evt:-, foot:1@6721e3ef, stk:1@f079e001, auth:1@89cf2775/-", + " 527 call symbol_index_in_strs(Symbol(balance), 18)": "", + " 528 ret symbol_index_in_strs -> Ok(U32(3))": "cpu:32872", + " 529 call extend_current_contract_instance_and_code_ttl(U32(103680), U32(120960))": "", + " 530 call get_ledger_sequence()": "cpu:35065, mem:6615, store:-/-, foot:-", + " 531 ret get_ledger_sequence -> Ok(U32(123))": "", + " 532 ret extend_current_contract_instance_and_code_ttl -> Ok(Void)": "cpu:45957, mem:9004, store:-/7@82c5eb4f, foot:1@6721e3ef", + " 533 call vec_new_from_slice(2)": "cpu:46065", + " 534 ret vec_new_from_slice -> Ok(Vec(obj#281))": "cpu:47092, mem:9116, objs:-/141@ccd9dcae", + " 535 call has_contract_data(Vec(obj#281), Persistent)": "", + " 536 ret has_contract_data -> Ok(True)": "cpu:50900, mem:9558, foot:2@8405d98b", + " 537 call get_contract_data(Vec(obj#281), Persistent)": "", + " 538 call obj_cmp(Symbol(amount), Symbol(obj#283))": "cpu:55791, mem:10128, objs:-/142@484f07ff", + " 539 ret obj_cmp -> Ok(-1)": "cpu:55955", + " 540 call obj_cmp(Symbol(obj#283), Symbol(clawback))": "", + " 541 ret obj_cmp -> Ok(-1)": "cpu:56120", + " 542 ret get_contract_data -> Ok(Map(obj#285))": "cpu:56622, mem:10208, objs:-/143@b251ce5", + " 543 call vec_new_from_slice(2)": "", + " 544 ret vec_new_from_slice -> Ok(Vec(obj#287))": "cpu:57649, mem:10320, objs:-/144@f2ae02d5", + " 545 call extend_contract_data_ttl(Vec(obj#287), Persistent, U32(501120), U32(518400))": "", + " 546 call get_ledger_sequence()": "cpu:61415, mem:10696, store:-/-, foot:-", + " 547 ret get_ledger_sequence -> Ok(U32(123))": "", + " 548 ret extend_contract_data_ttl -> Ok(Void)": " store:-/7@82c5eb4f, foot:2@8405d98b", + " 549 call map_unpack_to_slice(Map(obj#285), 3)": "", + " 550 ret map_unpack_to_slice -> Ok(Void)": "cpu:61816", + " 551 pop SAC:2e378f80:balance -> Ok(I128(9999999))": "", + " 552 ret call -> Ok(I128(9999999))": " stk:-, auth:-/-", + " 553 call vec_new_from_slice(1)": "cpu:62258, mem:10776, objs:-/145@ba10e02e", + " 554 ret vec_new_from_slice -> Ok(Vec(obj#291))": "cpu:63283, mem:10880, objs:-/146@957df0da", + " 555 call call(Address(obj#39), Symbol(balance), Vec(obj#291))": "", + " 556 push SAC:2e378f80:balance(Address(obj#289))": "cpu:32080, mem:6447, objs:-/147@fd1f8a26, foot:1@6721e3ef, stk:1@e5008e9b, auth:1@5fff0f1e/-", + " 557 call symbol_index_in_strs(Symbol(balance), 18)": "", + " 558 ret symbol_index_in_strs -> Ok(U32(3))": "cpu:32872", + " 559 call extend_current_contract_instance_and_code_ttl(U32(103680), U32(120960))": "", + " 560 call get_ledger_sequence()": "cpu:35065, mem:6615, store:-/-, foot:-", + " 561 ret get_ledger_sequence -> Ok(U32(123))": "", + " 562 ret extend_current_contract_instance_and_code_ttl -> Ok(Void)": "cpu:45957, mem:9004, store:-/7@82c5eb4f, foot:1@6721e3ef", + " 563 call vec_new_from_slice(1)": "cpu:46065", + " 564 ret vec_new_from_slice -> Ok(Vec(obj#295))": "cpu:47030, mem:9108, objs:-/148@8fe75f82", + " 565 call get_contract_data(Vec(obj#295), Instance)": "", + " 566 call obj_cmp(Symbol(obj#309), Symbol(issuer))": "cpu:57040, mem:10387, objs:-/157@a66a97e5, stk:-", + " 567 ret obj_cmp -> Ok(-1)": "cpu:57204", + " 568 call obj_cmp(Symbol(METADATA), Vec(obj#303))": "cpu:58139, mem:10547, objs:-/159@2beedebb", + " 569 ret obj_cmp -> Ok(-1)": "cpu:58259", + " 570 call obj_cmp(Vec(obj#303), Vec(obj#307))": "", + " 571 ret obj_cmp -> Ok(-1)": "cpu:58587", + " 572 call obj_cmp(Vec(obj#303), Vec(obj#295))": "cpu:58638", + " 573 ret obj_cmp -> Ok(-1)": "cpu:58966", + " 574 call obj_cmp(Vec(obj#307), Vec(obj#295))": "", + " 575 ret obj_cmp -> Ok(0)": "cpu:59294", + " 576 ret get_contract_data -> Ok(Vec(obj#317))": "cpu:59399, store:3@298a3928/7@82c5eb4f, stk:1@50563d29", + " 577 call vec_get(Vec(obj#317), U32(0))": "", + " 578 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:59562", + " 579 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 580 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:59696", + " 581 call vec_get(Vec(obj#317), U32(1))": "", + " 582 ret vec_get -> Ok(Map(obj#315))": "cpu:59919", + " 583 call map_unpack_to_slice(Map(obj#315), 2)": "", + " 584 ret map_unpack_to_slice -> Ok(Void)": "cpu:60268", + " 585 call bytes_len(Bytes(obj#313))": "", + " 586 ret bytes_len -> Ok(U32(32))": "cpu:60388", + " 587 call string_len(String(obj#311))": "cpu:60494", + " 588 ret string_len -> Ok(U32(4))": "cpu:60614", + " 589 call string_copy_to_slice(String(obj#311), U32(0), 4)": "", + " 590 ret string_copy_to_slice -> Ok(())": "cpu:60716", + " 591 pop SAC:2e378f80:balance -> Ok(I128(90000001))": "cpu:62631, mem:10781, foot:2@97e3e14f", + " 592 ret call -> Ok(I128(90000001))": " store:-/7@82c5eb4f, stk:-, auth:-/-", + " 593 call vec_new_from_slice(3)": "cpu:63073, mem:10861, objs:-/160@eb057bcf", + " 594 ret vec_new_from_slice -> Ok(Vec(obj#321))": "cpu:64162, mem:10981, objs:-/161@e044275f", + " 595 call vec_new()": "cpu:88483, mem:17977, objs:-/162@f2d6adaf", + " 596 ret vec_new -> Ok(Vec(obj#325))": "cpu:88985, mem:18057, objs:-/163@4726ba98", + " 597 call bytes_new_from_slice(32)": "", + " 598 ret bytes_new_from_slice -> Ok(Bytes(obj#327))": "cpu:89956, mem:18185, objs:-/164@5a3d2e6", + " 599 call bytes_len(Bytes(obj#327))": "", + " 600 ret bytes_len -> Ok(U32(32))": "cpu:90076", + " 601 call bytes_new_from_slice(64)": "", + " 602 ret bytes_new_from_slice -> Ok(Bytes(obj#329))": "cpu:91055, mem:18345, objs:-/165@6bd76456", + " 603 call bytes_len(Bytes(obj#329))": "", + " 604 ret bytes_len -> Ok(U32(64))": "cpu:91175", + " 605 call map_new_from_slices(2)": "", + " 606 call symbol_new_from_slice(10)": "cpu:91708, mem:18409", + " 607 ret symbol_new_from_slice -> Ok(Symbol(obj#331))": "cpu:92718, mem:18515, objs:-/166@8d6a1eca", + " 608 call obj_cmp(Symbol(obj#331), Symbol(signature))": "cpu:92886", + " 609 ret obj_cmp -> Ok(-1)": "cpu:93051", + " 610 ret map_new_from_slices -> Ok(Map(obj#333))": "cpu:93493, mem:18595, objs:-/167@b56fd5d9", + " 611 call vec_push_back(Vec(obj#325), Map(obj#333))": "", + " 612 ret vec_push_back -> Ok(Vec(obj#335))": "cpu:94698, mem:18699, objs:-/168@764b692c", + " 613 call obj_cmp(Symbol(obj#339), Symbol(signature))": "cpu:102861, mem:20271, objs:-/172@759317f1", + " 614 ret obj_cmp -> Ok(-1)": "cpu:103026", + " 615 call call(Address(obj#39), Symbol(transfer), Vec(obj#321))": "cpu:106396, mem:20775, objs:-/177@3f261ad1, auth:-/1@40999e53", + " 616 push SAC:2e378f80:transfer(Address(obj#319), Address(obj#41), I128(1))": "cpu:33160, mem:6623, objs:-/178@713a4fbc, foot:1@6721e3ef, stk:1@b7acb8ca, auth:1@586ba51f/1@58289775", + " 617 call symbol_index_in_strs(Symbol(transfer), 18)": "", + " 618 ret symbol_index_in_strs -> Ok(U32(5))": "cpu:33962", + " 619 call require_auth(Address(obj#319))": "", + " 620 call obj_cmp(Address(obj#337), Address(obj#319))": "cpu:34592, mem:6663", + " 621 ret obj_cmp -> Ok(0)": "cpu:34882", + " 622 call obj_cmp(Address(obj#337), Address(obj#319))": " auth:1@586ba51f/-", + " 623 ret obj_cmp -> Ok(0)": "cpu:35172", + " 624 call obj_cmp(Address(obj#349), Address(obj#355))": "", + " 625 ret obj_cmp -> Ok(0)": "cpu:35462", + " 626 call obj_cmp(Address(obj#351), Address(obj#319))": "", + " 627 ret obj_cmp -> Ok(0)": "cpu:35752", + " 628 call obj_cmp(Address(obj#353), Address(obj#41))": "", + " 629 ret obj_cmp -> Ok(0)": "cpu:36042", + " 630 call bytes_new_from_slice(32)": "cpu:60538, mem:13595", + " 631 ret bytes_new_from_slice -> Ok(Bytes(obj#357))": "cpu:61509, mem:13723, objs:-/179@84ea24c1", + " 632 call vec_new()": "", + " 633 ret vec_new -> Ok(Vec(obj#359))": "cpu:62011, mem:13803, objs:-/180@dcd1ffe3", + " 634 call vec_new_from_slice(3)": "", + " 635 ret vec_new_from_slice -> Ok(Vec(obj#361))": "cpu:63100, mem:13923, objs:-/181@32224d30", + " 636 call map_new_from_slices(3)": "", + " 637 ret map_new_from_slices -> Ok(Map(obj#363))": "cpu:64252, mem:14091, objs:-/182@4744658f", + " 638 call vec_new_from_slice(2)": "", + " 639 ret vec_new_from_slice -> Ok(Vec(obj#365))": "cpu:65279, mem:14203, objs:-/183@f7151b4f", + " 640 call vec_push_back(Vec(obj#359), Vec(obj#365))": "", + " 641 ret vec_push_back -> Ok(Vec(obj#367))": "cpu:66484, mem:14307, objs:-/184@b990b854", + " 642 call vec_len(Vec(obj#347))": "", + " 643 ret vec_len -> Ok(U32(1))": "cpu:66604", + " 644 call vec_get(Vec(obj#347), U32(0))": "cpu:69434, mem:14645, foot:2@3e31d7b4", + " 645 ret vec_get -> Ok(Map(obj#345))": "cpu:69657", + " 646 call map_unpack_to_slice(Map(obj#345), 2)": "", + " 647 ret map_unpack_to_slice -> Ok(Void)": "cpu:70007", + " 648 call bytes_len(Bytes(obj#341))": "", + " 649 ret bytes_len -> Ok(U32(32))": "cpu:70127", + " 650 call bytes_len(Bytes(obj#343))": "", + " 651 ret bytes_len -> Ok(U32(64))": "cpu:70247", + " 652 call verify_sig_ed25519(Bytes(obj#341), Bytes(obj#357), Bytes(obj#343))": "", + " 653 ret verify_sig_ed25519 -> Ok(Void)": "cpu:489478", + " 654 call bytes_copy_to_slice(Bytes(obj#341), U32(0), 32)": "", + " 655 ret bytes_copy_to_slice -> Ok(())": "cpu:489584", + " 656 ret require_auth -> Ok(Void)": "cpu:497270, mem:16467, store:-/8@121c6e26, foot:3@e49f77cb, auth:1@586ba51f/1@d241a24b", + " 657 call extend_current_contract_instance_and_code_ttl(U32(103680), U32(120960))": "", + " 658 call get_ledger_sequence()": "cpu:499601, mem:16635, store:-/-, foot:-", + " 659 ret get_ledger_sequence -> Ok(U32(123))": "", + " 660 ret extend_current_contract_instance_and_code_ttl -> Ok(Void)": "cpu:510623, mem:19024, store:-/8@121c6e26, foot:3@e49f77cb", + " 661 call vec_new_from_slice(1)": "cpu:510819", + " 662 ret vec_new_from_slice -> Ok(Vec(obj#369))": "cpu:511784, mem:19128, objs:-/185@db39289f", + " 663 call get_contract_data(Vec(obj#369), Instance)": "", + " 664 call obj_cmp(Symbol(obj#383), Symbol(issuer))": "cpu:521794, mem:20407, objs:-/194@ff72c5f, stk:-", + " 665 ret obj_cmp -> Ok(-1)": "cpu:521958", + " 666 call obj_cmp(Symbol(METADATA), Vec(obj#377))": "cpu:522893, mem:20567, objs:-/196@94bbcd11", + " 667 ret obj_cmp -> Ok(-1)": "cpu:523013", + " 668 call obj_cmp(Vec(obj#377), Vec(obj#381))": "", + " 669 ret obj_cmp -> Ok(-1)": "cpu:523341", + " 670 call obj_cmp(Vec(obj#377), Vec(obj#369))": "cpu:523392", + " 671 ret obj_cmp -> Ok(-1)": "cpu:523720", + " 672 call obj_cmp(Vec(obj#381), Vec(obj#369))": "", + " 673 ret obj_cmp -> Ok(0)": "cpu:524048", + " 674 ret get_contract_data -> Ok(Vec(obj#391))": "cpu:524153, store:3@72da834b/8@121c6e26, stk:1@c0c739b1", + " 675 call vec_get(Vec(obj#391), U32(0))": "", + " 676 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:524316", + " 677 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 678 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:524450", + " 679 call vec_get(Vec(obj#391), U32(1))": "", + " 680 ret vec_get -> Ok(Map(obj#389))": "cpu:524673", + " 681 call map_unpack_to_slice(Map(obj#389), 2)": "", + " 682 ret map_unpack_to_slice -> Ok(Void)": "cpu:525022", + " 683 call bytes_len(Bytes(obj#387))": "", + " 684 ret bytes_len -> Ok(U32(32))": "cpu:525142", + " 685 call string_len(String(obj#385))": "cpu:525248", + " 686 ret string_len -> Ok(U32(4))": "cpu:525368", + " 687 call string_copy_to_slice(String(obj#385), U32(0), 4)": "", + " 688 ret string_copy_to_slice -> Ok(())": "cpu:525470", + " 689 call vec_new_from_slice(1)": "cpu:527536, mem:20851, foot:4@9af0e6dd", + " 690 ret vec_new_from_slice -> Ok(Vec(obj#393))": "cpu:528501, mem:20955, objs:-/197@52d15d0d", + " 691 call get_contract_data(Vec(obj#393), Instance)": "", + " 692 call obj_cmp(Vec(obj#377), Vec(obj#393))": "cpu:528612, store:-/8@121c6e26, stk:-", + " 693 ret obj_cmp -> Ok(-1)": "cpu:528940", + " 694 call obj_cmp(Vec(obj#381), Vec(obj#393))": "", + " 695 ret obj_cmp -> Ok(0)": "cpu:529268", + " 696 ret get_contract_data -> Ok(Vec(obj#391))": "cpu:529373, store:3@72da834b/8@121c6e26, stk:1@c0c739b1", + " 697 call vec_get(Vec(obj#391), U32(0))": "", + " 698 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:529536", + " 699 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 700 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:529670", + " 701 call vec_get(Vec(obj#391), U32(1))": "", + " 702 ret vec_get -> Ok(Map(obj#389))": "cpu:529893", + " 703 call map_unpack_to_slice(Map(obj#389), 2)": "", + " 704 ret map_unpack_to_slice -> Ok(Void)": "cpu:530242", + " 705 call bytes_len(Bytes(obj#387))": "", + " 706 ret bytes_len -> Ok(U32(32))": "cpu:530362", + " 707 call string_len(String(obj#385))": "cpu:530468", + " 708 ret string_len -> Ok(U32(4))": "cpu:530588", + " 709 call string_copy_to_slice(String(obj#385), U32(0), 4)": "", + " 710 ret string_copy_to_slice -> Ok(())": "cpu:530690", + " 711 call vec_new_from_slice(2)": "cpu:535602, mem:22151, store:3@72da834b/8@18fcb164, foot:4@92888176", + " 712 ret vec_new_from_slice -> Ok(Vec(obj#395))": "cpu:536629, mem:22263, objs:-/198@80a0b7e9", + " 713 call has_contract_data(Vec(obj#395), Persistent)": "", + " 714 ret has_contract_data -> Ok(True)": "cpu:540703, mem:22780, foot:5@8b3e49cc", + " 715 call get_contract_data(Vec(obj#395), Persistent)": "", + " 716 call obj_cmp(Symbol(amount), Symbol(obj#397))": "cpu:545724, mem:23350, objs:-/199@c7a77d40", + " 717 ret obj_cmp -> Ok(-1)": "cpu:545888", + " 718 call obj_cmp(Symbol(obj#397), Symbol(clawback))": "", + " 719 ret obj_cmp -> Ok(-1)": "cpu:546053", + " 720 ret get_contract_data -> Ok(Map(obj#399))": "cpu:546555, mem:23430, objs:-/200@89769f0d", + " 721 call map_unpack_to_slice(Map(obj#399), 3)": "", + " 722 ret map_unpack_to_slice -> Ok(Void)": "cpu:546956", + " 723 call vec_new_from_slice(2)": "cpu:547108", + " 724 ret vec_new_from_slice -> Ok(Vec(obj#401))": "cpu:548135, mem:23542, objs:-/201@7ac9f0e", + " 725 call has_contract_data(Vec(obj#401), Persistent)": "", + " 726 ret has_contract_data -> Ok(True)": "cpu:551601, mem:23918", + " 727 call get_contract_data(Vec(obj#401), Persistent)": "", + " 728 call obj_cmp(Symbol(amount), Symbol(obj#403))": "cpu:556622, mem:24488, objs:-/202@91660605", + " 729 ret obj_cmp -> Ok(-1)": "cpu:556786", + " 730 call obj_cmp(Symbol(obj#403), Symbol(clawback))": "", + " 731 ret obj_cmp -> Ok(-1)": "cpu:556951", + " 732 ret get_contract_data -> Ok(Map(obj#405))": "cpu:557453, mem:24568, objs:-/203@64e98fd6", + " 733 call map_unpack_to_slice(Map(obj#405), 3)": "", + " 734 ret map_unpack_to_slice -> Ok(Void)": "cpu:557854", + " 735 call vec_new_from_slice(2)": "", + " 736 ret vec_new_from_slice -> Ok(Vec(obj#407))": "cpu:558881, mem:24680, objs:-/204@1dced609", + " 737 call map_new_from_slices(3)": "", + " 738 call symbol_new_from_slice(10)": "cpu:559420, mem:24768", + " 739 ret symbol_new_from_slice -> Ok(Symbol(obj#409))": "cpu:560430, mem:24874, objs:-/205@979f0c1d", + " 740 call obj_cmp(Symbol(amount), Symbol(obj#409))": "cpu:560481", + " 741 ret obj_cmp -> Ok(-1)": "cpu:560645", + " 742 call obj_cmp(Symbol(obj#409), Symbol(clawback))": "", + " 743 ret obj_cmp -> Ok(-1)": "cpu:560810", + " 744 ret map_new_from_slices -> Ok(Map(obj#411))": "cpu:561252, mem:24954, objs:-/206@df267db4", + " 745 call put_contract_data(Vec(obj#407), Map(obj#411), Persistent)": "", + " 746 ret put_contract_data -> Ok(Void)": "cpu:575898, mem:27896, store:3@72da834b/8@a1f211b4, foot:5@113204e3", + " 747 call vec_new_from_slice(2)": "", + " 748 ret vec_new_from_slice -> Ok(Vec(obj#413))": "cpu:576925, mem:28008, objs:-/207@2c846c3b", + " 749 call extend_contract_data_ttl(Vec(obj#413), Persistent, U32(501120), U32(518400))": "", + " 750 call get_ledger_sequence()": "cpu:580829, mem:28384, store:3@72da834b/-, foot:-", + " 751 ret get_ledger_sequence -> Ok(U32(123))": "", + " 752 ret extend_contract_data_ttl -> Ok(Void)": " store:3@72da834b/8@a1f211b4, foot:5@113204e3", + " 753 call obj_cmp(Address(obj#319), Address(obj#41))": "", + " 754 ret obj_cmp -> Ok(-1)": "cpu:581119", + " 755 call vec_new_from_slice(1)": "", + " 756 ret vec_new_from_slice -> Ok(Vec(obj#415))": "cpu:582084, mem:28488, objs:-/208@f6d9803a", + " 757 call get_contract_data(Vec(obj#415), Instance)": "", + " 758 call obj_cmp(Vec(obj#377), Vec(obj#415))": "cpu:582195, store:-/8@a1f211b4, stk:-", + " 759 ret obj_cmp -> Ok(-1)": "cpu:582523", + " 760 call obj_cmp(Vec(obj#381), Vec(obj#415))": "", + " 761 ret obj_cmp -> Ok(0)": "cpu:582851", + " 762 ret get_contract_data -> Ok(Vec(obj#391))": "cpu:582956, store:3@72da834b/8@a1f211b4, stk:1@c0c739b1", + " 763 call vec_get(Vec(obj#391), U32(0))": "", + " 764 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:583119", + " 765 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 766 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:583253", + " 767 call vec_get(Vec(obj#391), U32(1))": "", + " 768 ret vec_get -> Ok(Map(obj#389))": "cpu:583476", + " 769 call map_unpack_to_slice(Map(obj#389), 2)": "", + " 770 ret map_unpack_to_slice -> Ok(Void)": "cpu:583825", + " 771 call bytes_len(Bytes(obj#387))": "", + " 772 ret bytes_len -> Ok(U32(32))": "cpu:583945", + " 773 call obj_cmp(Address(obj#417), Address(obj#319))": "cpu:584539, mem:28568, objs:-/209@c47412c7", + " 774 ret obj_cmp -> Ok(-1)": "cpu:584829", + " 775 call vec_new_from_slice(1)": "", + " 776 ret vec_new_from_slice -> Ok(Vec(obj#419))": "cpu:585794, mem:28672, objs:-/210@da2e2360", + " 777 call get_contract_data(Vec(obj#419), Instance)": "", + " 778 call obj_cmp(Vec(obj#377), Vec(obj#419))": "cpu:585905, store:-/8@a1f211b4, stk:-", + " 779 ret obj_cmp -> Ok(-1)": "cpu:586233", + " 780 call obj_cmp(Vec(obj#381), Vec(obj#419))": "", + " 781 ret obj_cmp -> Ok(0)": "cpu:586561", + " 782 ret get_contract_data -> Ok(Vec(obj#391))": "cpu:586666, store:3@72da834b/8@a1f211b4, stk:1@c0c739b1", + " 783 call vec_get(Vec(obj#391), U32(0))": "", + " 784 ret vec_get -> Ok(Symbol(AlphaNum4))": "cpu:586829", + " 785 call symbol_index_in_strs(Symbol(AlphaNum4), 3)": "", + " 786 ret symbol_index_in_strs -> Ok(U32(1))": "cpu:586963", + " 787 call vec_get(Vec(obj#391), U32(1))": "", + " 788 ret vec_get -> Ok(Map(obj#389))": "cpu:587186", + " 789 call map_unpack_to_slice(Map(obj#389), 2)": "", + " 790 ret map_unpack_to_slice -> Ok(Void)": "cpu:587535", + " 791 call bytes_len(Bytes(obj#387))": "", + " 792 ret bytes_len -> Ok(U32(32))": "cpu:587655", + " 793 call obj_cmp(Address(obj#421), Address(obj#41))": "cpu:588249, mem:28752, objs:-/211@e4644834", + " 794 ret obj_cmp -> Ok(-1)": "cpu:588539", + " 795 call get_contract_data(Symbol(METADATA), Instance)": "", + " 796 call obj_cmp(Vec(obj#377), Symbol(METADATA))": "cpu:588590, store:-/8@a1f211b4, stk:-", + " 797 ret obj_cmp -> Ok(1)": "cpu:588710", + " 798 ret get_contract_data -> Ok(Map(obj#375))": "cpu:588815, store:3@72da834b/8@a1f211b4, stk:1@c0c739b1", + " 799 call map_unpack_to_slice(Map(obj#375), 3)": "", + " 800 ret map_unpack_to_slice -> Ok(Void)": "cpu:589154", + " 801 call vec_new_from_slice(4)": "", + " 802 ret vec_new_from_slice -> Ok(Vec(obj#423))": "cpu:590305, mem:28880, objs:-/212@65572c7b", + " 803 call contract_event(Vec(obj#423), I128(1))": "", + " 804 call bytes_new_from_slice(32)": "cpu:590411", + " 805 ret bytes_new_from_slice -> Ok(Bytes(obj#425))": "cpu:591382, mem:29008, objs:-/213@8977f97b", + " 806 ret contract_event -> Ok(Void)": "cpu:591915, mem:29073, evt:1@dacdb31a", + " 807 pop SAC:2e378f80:transfer -> Ok(Void)": "", + " 808 ret call -> Ok(Void)": " store:-/8@a1f211b4, stk:-, auth:-/-", + " 809 call vec_new_from_slice(4)": "cpu:594532, mem:29878, objs:-/214@6269e978", + " 810 ret vec_new_from_slice -> Ok(Vec(obj#429))": "cpu:595683, mem:30006, objs:-/215@e3619b18", + " 811 call vec_new_from_slice(1)": "cpu:597297, mem:30547", + " 812 ret vec_new_from_slice -> Ok(Vec(obj#431))": "cpu:598322, mem:30651, objs:-/216@e9cf47e2", + " 813 call call(Address(obj#39), Symbol(balance), Vec(obj#431))": "", + " 814 push SAC:2e378f80:balance(Address(obj#41))": "cpu:32146, mem:6515, objs:-/217@150ab514, evt:-, foot:1@6721e3ef, stk:1@f079e001, auth:1@cc3510ac/-", + " 815 call symbol_index_in_strs(Symbol(balance), 18)": "", + " 816 ret symbol_index_in_strs -> Ok(U32(3))": "cpu:32938", + " 817 call extend_current_contract_instance_and_code_ttl(U32(103680), U32(120960))": "", + " 818 call get_ledger_sequence()": "cpu:35163, mem:6683, store:-/-, foot:-", + " 819 ret get_ledger_sequence -> Ok(U32(123))": "", + " 820 ret extend_current_contract_instance_and_code_ttl -> Ok(Void)": "cpu:46079, mem:9072, store:-/8@a1f211b4, foot:1@6721e3ef", + " 821 call vec_new_from_slice(2)": "cpu:46187", + " 822 ret vec_new_from_slice -> Ok(Vec(obj#435))": "cpu:47214, mem:9184, objs:-/218@84971f96", + " 823 call has_contract_data(Vec(obj#435), Persistent)": "", + " 824 ret has_contract_data -> Ok(True)": "cpu:51046, mem:9626, foot:2@8405d98b", + " 825 call get_contract_data(Vec(obj#435), Persistent)": "", + " 826 call obj_cmp(Symbol(amount), Symbol(obj#437))": "cpu:55961, mem:10196, objs:-/219@dfe9309b", + " 827 ret obj_cmp -> Ok(-1)": "cpu:56125", + " 828 call obj_cmp(Symbol(obj#437), Symbol(clawback))": "", + " 829 ret obj_cmp -> Ok(-1)": "cpu:56290", + " 830 ret get_contract_data -> Ok(Map(obj#439))": "cpu:56792, mem:10276, objs:-/220@bcf1ac4b", + " 831 call vec_new_from_slice(2)": "", + " 832 ret vec_new_from_slice -> Ok(Vec(obj#441))": "cpu:57819, mem:10388, objs:-/221@34cc06f4", + " 833 call extend_contract_data_ttl(Vec(obj#441), Persistent, U32(501120), U32(518400))": "", + " 834 call get_ledger_sequence()": "cpu:61617, mem:10764, store:-/-, foot:-", + " 835 ret get_ledger_sequence -> Ok(U32(123))": "", + " 836 ret extend_contract_data_ttl -> Ok(Void)": " store:-/8@a1f211b4, foot:2@8405d98b", + " 837 call map_unpack_to_slice(Map(obj#439), 3)": "", + " 838 ret map_unpack_to_slice -> Ok(Void)": "cpu:62018", + " 839 pop SAC:2e378f80:balance -> Ok(I128(10000000))": "", + " 840 ret call -> Ok(I128(10000000))": " stk:-, auth:-/-", + " 841 end": "cpu:62018, mem:10764, prngs:-/9b4a753, objs:-/221@34cc06f4, vm:-/-, evt:-, store:-/8@a1f211b4, foot:2@8405d98b, stk:-, auth:-/-" +} \ No newline at end of file diff --git a/soroban-env-host/observations/test__storage__muxed_contract_storage_key_conversion.json b/soroban-env-host/observations/test__storage__muxed_contract_storage_key_conversion.json new file mode 100644 index 000000000..70e8b8c96 --- /dev/null +++ b/soroban-env-host/observations/test__storage__muxed_contract_storage_key_conversion.json @@ -0,0 +1,4 @@ +{ + " 0 begin": "cpu:14285, mem:0, prngs:-/9b4a753, objs:-/-, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-", + " 1 end": "cpu:14895, mem:80, prngs:-/9b4a753, objs:-/1@d3ad1bcd, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-" +} \ No newline at end of file diff --git a/soroban-env-host/src/builtin_contracts/base_types.rs b/soroban-env-host/src/builtin_contracts/base_types.rs index 99a79305a..f6bf9317d 100644 --- a/soroban-env-host/src/builtin_contracts/base_types.rs +++ b/soroban-env-host/src/builtin_contracts/base_types.rs @@ -455,6 +455,10 @@ impl TryFromVal for MuxedAddress { let obj = env.add_host_object(MuxedScAddress(addr.clone()))?; MuxedAddress::try_from_val(env, &obj) } + ScAddress::MuxedContract(_) => { + let obj = env.add_host_object(MuxedScAddress(addr.clone()))?; + MuxedAddress::try_from_val(env, &obj) + } _ => { let obj = env.add_host_object(addr.clone())?; MuxedAddress::try_from_val(env, &obj) diff --git a/soroban-env-host/src/builtin_contracts/testutils.rs b/soroban-env-host/src/builtin_contracts/testutils.rs index 1fc8adb80..26f22794e 100644 --- a/soroban-env-host/src/builtin_contracts/testutils.rs +++ b/soroban-env-host/src/builtin_contracts/testutils.rs @@ -56,6 +56,26 @@ pub(crate) fn contract_id_to_address(host: &Host, contract_id: [u8; 32]) -> Addr .unwrap() } +// CAP-0084: build a muxed contract address (`ScAddress::MuxedContract`) wrapping +// the given contract id and multiplexing id, mirroring `TestSigner::muxed_address` +// for accounts. +pub(crate) fn muxed_contract_address( + host: &Host, + contract_id: [u8; 32], + mux_id: u64, +) -> MuxedAddress { + use soroban_env_common::xdr::MuxedContract; + let sc_address = ScAddress::MuxedContract(MuxedContract { + id: mux_id, + contract_id: ContractId(Hash(contract_id)), + }); + MuxedAddress::try_from_val( + host, + &host.add_host_object(MuxedScAddress(sc_address)).unwrap(), + ) + .unwrap() +} + #[derive(Clone)] pub(crate) enum TestSigner { AccountInvoker(AccountId), diff --git a/soroban-env-host/src/events/mod.rs b/soroban-env-host/src/events/mod.rs index 4be544ea8..2512cfbb9 100644 --- a/soroban-env-host/src/events/mod.rs +++ b/soroban-env-host/src/events/mod.rs @@ -42,6 +42,13 @@ fn display_address(addr: &ScAddress, f: &mut std::fmt::Formatter<'_>) -> std::fm }; write!(f, "{}", strkey) } + // CAP-0084: muxed contracts have no canonical strkey form yet, so this + // is a diagnostic-only rendering. In practice muxed contract addresses + // are de-muxed before they reach events, making this arm unreachable. + ScAddress::MuxedContract(muxed_contract) => { + let strkey = stellar_strkey::Contract(muxed_contract.contract_id.0 .0); + write!(f, "{}:{}", strkey, muxed_contract.id) + } // Note, that claimable balance and liquidity pool types can't normally // appear in host, so we have the proper rendering for these here just // for consistency (similar to e.g. non-representable ScVal types). diff --git a/soroban-env-host/src/host.rs b/soroban-env-host/src/host.rs index 9c6de1b38..81f01cd7e 100644 --- a/soroban-env-host/src/host.rs +++ b/soroban-env-host/src/host.rs @@ -3756,6 +3756,9 @@ impl VmCallerEnv for Host { ))); Ok(address) } + ScAddress::MuxedContract(muxed_contract) => Ok(ScAddress::Contract( + muxed_contract.contract_id.metered_clone(self)?, + )), _ => Err(self.err( ScErrorType::Object, ScErrorCode::InternalError, @@ -3773,6 +3776,7 @@ impl VmCallerEnv for Host { ) -> Result { let mux_id = self.visit_obj(muxed_address, |addr: &MuxedScAddress| match &addr.0 { ScAddress::MuxedAccount(muxed_account) => Ok(muxed_account.id), + ScAddress::MuxedContract(muxed_contract) => Ok(muxed_contract.id), _ => Err(self.err( ScErrorType::Object, ScErrorCode::InternalError, diff --git a/soroban-env-host/src/host/conversion.rs b/soroban-env-host/src/host/conversion.rs index 3e2b8e8dc..1e5348adb 100644 --- a/soroban-env-host/src/host/conversion.rs +++ b/soroban-env-host/src/host/conversion.rs @@ -629,6 +629,9 @@ impl Host { ScAddress::MuxedAccount(_) => Ok(self .add_host_object(MuxedScAddress(addr.metered_clone(self)?))? .into()), + ScAddress::MuxedContract(_) => Ok(self + .add_host_object(MuxedScAddress(addr.metered_clone(self)?))? + .into()), _ => Err(self.err( ScErrorType::Object, ScErrorCode::UnexpectedType, diff --git a/soroban-env-host/src/host_object.rs b/soroban-env-host/src/host_object.rs index ffed3825e..a123728a1 100644 --- a/soroban-env-host/src/host_object.rs +++ b/soroban-env-host/src/host_object.rs @@ -269,6 +269,7 @@ impl HostObjectType for MuxedScAddress { fn inject(self, host: &Host) -> Result { match &self.0 { xdr::ScAddress::MuxedAccount(_) => Ok(HostObject::MuxedAddress(self)), + xdr::ScAddress::MuxedContract(_) => Ok(HostObject::MuxedAddress(self)), _ => Err(host.err( ScErrorType::Object, ScErrorCode::InvalidInput, diff --git a/soroban-env-host/src/test/address.rs b/soroban-env-host/src/test/address.rs index cf4f323dd..114daaa77 100644 --- a/soroban-env-host/src/test/address.rs +++ b/soroban-env-host/src/test/address.rs @@ -50,6 +50,31 @@ fn test_muxed_address_to_components_conversion() { assert_eq!(mux_id_val, ScVal::U64(123)); } +// CAP-0084: `get_address_from_muxed_address` / `get_id_from_muxed_address` on a +// muxed contract return the underlying contract address and the mux id. +#[test] +fn test_muxed_contract_to_components_conversion() { + use crate::xdr::MuxedContract; + let host = observe_host!(Host::test_host()); + let muxed_address_obj = host + .add_host_object(MuxedScAddress(ScAddress::MuxedContract(MuxedContract { + id: 456, + contract_id: ContractId(Hash([20; 32])), + }))) + .unwrap(); + let address = host + .get_address_from_muxed_address(muxed_address_obj) + .unwrap(); + let mux_id = host.get_id_from_muxed_address(muxed_address_obj).unwrap(); + let address_val = host.from_host_val(address.into()).unwrap(); + let mux_id_val = host.from_host_val(mux_id.into()).unwrap(); + assert_eq!( + address_val, + ScVal::Address(ScAddress::Contract(ContractId(Hash([20; 32])))) + ); + assert_eq!(mux_id_val, ScVal::U64(456)); +} + #[test] fn test_invalid_muxed_address_object_conversions() { let host = observe_host!(Host::test_host()); diff --git a/soroban-env-host/src/test/stellar_asset_contract.rs b/soroban-env-host/src/test/stellar_asset_contract.rs index 327391258..151ce6955 100644 --- a/soroban-env-host/src/test/stellar_asset_contract.rs +++ b/soroban-env-host/src/test/stellar_asset_contract.rs @@ -895,6 +895,142 @@ fn test_cap_67_transfer_with_muxed_accounts() { ); } +#[test] +fn test_cap_84_transfer_with_muxed_contracts() { + use crate::builtin_contracts::testutils::muxed_contract_address; + + let test = StellarAssetContractTest::setup(function_name!()); + // Enable invocation metering to get the events to reset automatically on + // every contract call. + test.host.enable_invocation_metering(); + let contract = test.default_stellar_asset_contract(); + + let user = TestSigner::account(&test.user_key); + test.create_default_account(&user); + test.create_default_trustline(&user); + + // The destination is a contract; contracts hold SAC balances without a + // trustline. The de-muxed contract address is what the event/balance use. + let dst_contract_id = generate_bytes_array(&test.host); + let dst_address = contract_id_to_address(&test.host, dst_contract_id); + + contract + .mint( + &TestSigner::account(&test.issuer_key), + user.address(&test.host), + 100_000_000, + ) + .unwrap(); + + let transfer_symbol = Symbol::try_from_small_str("transfer").unwrap().to_val(); + let token_name = contract.name().unwrap(); + + // Transfer from a (non-muxed) account to a muxed contract destination. + contract + .transfer_muxed( + &user, + muxed_contract_address(&test.host, dst_contract_id, 0xCAFE), + 9_999_999, + ) + .unwrap(); + + assert_eq!( + test.host.get_contract_events().unwrap().0, + vec![contract.test_event( + test_vec![ + &test.host, + transfer_symbol, + user.address(&test.host), + // `to` topic is the de-muxed contract address. + dst_address.clone(), + &token_name, + ], + test_map![ + &test.host, + ("amount", 9_999_999_i128), + ("to_muxed_id", 0xCAFE_u64) + ] + .into() + )] + ); + // Balance credits the underlying contract. + assert_eq!(contract.balance(dst_address.clone()).unwrap(), 9_999_999); + assert_eq!( + contract.balance(user.address(&test.host)).unwrap(), + 90_000_001 + ); + + // A plain (non-muxed) contract destination emits no `to_muxed_id`. + contract.transfer(&user, dst_address.clone(), 1).unwrap(); + assert_eq!( + test.host.get_contract_events().unwrap().0, + vec![contract.test_event( + test_vec![ + &test.host, + transfer_symbol, + user.address(&test.host), + dst_address.clone(), + &token_name, + ], + 1_i128.try_into_val(&test.host).unwrap() + )] + ); + assert_eq!(contract.balance(dst_address).unwrap(), 10_000_000); +} + +#[test] +fn test_cap_84_issuer_transfer_to_muxed_contract_emits_mint() { + use crate::builtin_contracts::testutils::muxed_contract_address; + + // CAP-84 scopes muxed contract support to `transfer` only; the SAC `mint` + // function does not accept a muxed contract destination. The `mint` *event* + // is unchanged, however: an issuer-source `transfer` to a muxed contract + // destination still emits a `mint` event carrying `to_muxed_id`, following + // CAP-67's issuer semantics. + let test = StellarAssetContractTest::setup(function_name!()); + test.host.enable_invocation_metering(); + // The issuer is the default SAC administrator. + let issuer = TestSigner::account(&test.issuer_key); + let contract = test.default_stellar_asset_contract(); + + let dst_contract_id = generate_bytes_array(&test.host); + let dst_address = contract_id_to_address(&test.host, dst_contract_id); + + let mint_symbol = Symbol::try_from_small_str("mint").unwrap().to_val(); + let token_name = contract.name().unwrap(); + + // Transfer from the issuer to a muxed contract destination. Because the + // source is the issuer, this emits a `mint` event rather than a `transfer`. + contract + .transfer_muxed( + &issuer, + muxed_contract_address(&test.host, dst_contract_id, 7_654_321), + 100_000_000, + ) + .unwrap(); + + assert_eq!( + test.host.get_contract_events().unwrap().0, + vec![contract.test_event( + test_vec![ + &test.host, + mint_symbol, + // `to` topic is the de-muxed contract address. + dst_address.clone(), + &token_name, + ], + test_map![ + &test.host, + ("amount", 100_000_000_i128), + ("to_muxed_id", 7_654_321_u64) + ] + .into() + )] + ); + // Balance credits the underlying contract. + assert_eq!(contract.balance(dst_address).unwrap(), 100_000_000); +} + #[test] fn test_native_self_transfer() { let test = StellarAssetContractTest::setup(function_name!()); diff --git a/soroban-env-host/src/test/storage.rs b/soroban-env-host/src/test/storage.rs index 4f7df2eee..0a5d2c572 100644 --- a/soroban-env-host/src/test/storage.rs +++ b/soroban-env-host/src/test/storage.rs @@ -422,14 +422,41 @@ fn muxed_address_storage_key_conversion() { assert!(res_non_storage.is_ok()); } +// CAP-0084: a muxed contract address routes through the same `MuxedAddress` +// vehicle, so it inherits the storage-key prohibition. #[test] -fn test_muxed_account_is_not_allowed_as_storage_key() { +fn muxed_contract_storage_key_conversion() { + use crate::xdr::MuxedContract; + let host = observe_host!(Host::test_host_with_recording_footprint()); + let muxed_address = MuxedScAddress(ScAddress::MuxedContract(MuxedContract { + id: 42, + contract_id: ContractId([7; 32].into()), + })); + let muxed_address_val = host + .add_host_object(muxed_address.clone()) + .unwrap() + .to_val(); + // Conversion for use as a storage key should fail. + let res = host.from_host_val_for_storage(muxed_address_val); + + assert!(HostError::result_matches_err( + res, + (ScErrorType::Storage, ScErrorCode::InvalidInput) + )); + + // Conversion to regular ScVal should succeed. + let res_non_storage = host.from_host_val(muxed_address_val); + assert!(res_non_storage.is_ok()); +} + +// Drives an end-to-end contract call for every storage type to assert that +// `muxed_address` is rejected as a storage key (directly, via `put`/`get`) +// while still being usable as a stored value. Shared by the CAP-67 +// (muxed account) and CAP-0084 (muxed contract) cases, which differ only in +// the address they feed in. +fn check_muxed_address_is_not_allowed_as_storage_key(muxed_address: MuxedScAddress) { let host = Host::test_host_with_recording_footprint(); let contract_id = host.register_test_contract_wasm(CONTRACT_STORAGE_WITH_VALS); - let muxed_address = MuxedScAddress(ScAddress::MuxedAccount(MuxedEd25519Account { - id: 123, - ed25519: Uint256([10; 32]), - })); let muxed_address_val = host.add_host_object(muxed_address.clone()).unwrap(); let run_test = |storage: &str| { @@ -484,6 +511,29 @@ fn test_muxed_account_is_not_allowed_as_storage_key() { run_test("instance"); } +#[test] +fn test_muxed_account_is_not_allowed_as_storage_key() { + check_muxed_address_is_not_allowed_as_storage_key(MuxedScAddress(ScAddress::MuxedAccount( + MuxedEd25519Account { + id: 123, + ed25519: Uint256([10; 32]), + }, + ))); +} + +// CAP-0084: the muxed contract twin of +// `test_muxed_account_is_not_allowed_as_storage_key`. +#[test] +fn test_muxed_contract_is_not_allowed_as_storage_key() { + use crate::xdr::MuxedContract; + check_muxed_address_is_not_allowed_as_storage_key(MuxedScAddress(ScAddress::MuxedContract( + MuxedContract { + id: 123, + contract_id: ContractId([10; 32].into()), + }, + ))); +} + #[test] fn test_storage_mix() { // This makes sure the keyspaces are not mixed between storage types.