From cd6eab6e462673a58fff684b53b01711d380b0fb Mon Sep 17 00:00:00 2001 From: s6pa1rta3n-lab Date: Mon, 31 Aug 2026 09:35:08 -0400 Subject: [PATCH] fix(globe-wallet): disambiguate spend limits by full AssetInfo and validate against UserAssets (#82) --- contracts/globe-wallet/src/lib.rs | 684 ++- ...st_add_allowed_token_requires_admin.1.json | 13 +- ..._asset_case_variant_duplicate_fails.1.json | 6 +- ...sset_shares_same_spend_limit_bucket.1.json | 1671 +++++++ ...ent_survives_temporary_ttl_eviction.1.json | 400 +- ...te_spend_limits_and_legacy_fallback.1.json | 1495 ++++++ ...st_migrate_user_assets_trims_excess.1.json | 4210 +++++++++++++++-- .../test_no_limit_allows_any_spend.1.json | 264 +- .../test_raise_spend_then_lower_limit.1.json | 561 ++- ...cord_spend_boundary_drift_awareness.1.json | 400 +- ...dary_first_second_of_new_day_resets.1.json | 400 +- ...dary_last_second_of_day_accumulates.1.json | 400 +- ...rd_spend_bucket_is_integer_division.1.json | 434 +- ...est_record_spend_exact_day_boundary.1.json | 438 +- ...st_record_spend_exceeds_limit_fails.1.json | 400 +- ...ve_amount_cannot_bypass_daily_limit.1.json | 434 +- ..._record_spend_negative_amount_fails.1.json | 332 +- ...verflow_does_not_poison_later_calls.1.json | 438 +- ...gative_amount_does_not_mutate_state.1.json | 472 +- .../test_record_spend_within_limit.1.json | 400 +- ...test_record_spend_zero_amount_fails.1.json | 332 +- .../tests/test_remove_allowed_token.1.json | 35 +- ...ent_issuer_independent_spend_limits.1.json | 2442 ++++++++++ ...path_moves_tokens_and_records_spend.1.json | 414 +- ...ily_limit_fails_and_moves_no_tokens.1.json | 380 +- .../test_send_rejects_disallowed_token.1.json | 287 +- ...d_rejects_reentrant_malicious_token.1.json | 448 +- ..._rejects_when_token_wrapper_not_set.1.json | 293 +- ...st_set_token_wrapper_requires_admin.1.json | 4 +- ...ord_spend_reject_unregistered_asset.1.json | 577 +++ .../tests/test_spend_limit_set_and_get.1.json | 315 +- ...tl_extension_after_long_idle_period.1.json | 315 +- ...s_in_one_host_invocation_accumulate.1.json | 451 +- .../tests/record_spend_reentrancy.rs | 20 +- 34 files changed, 19364 insertions(+), 801 deletions(-) create mode 100644 contracts/globe-wallet/test_snapshots/tests/test_case_variant_asset_shares_same_spend_limit_bucket.1.json create mode 100644 contracts/globe-wallet/test_snapshots/tests/test_migrate_spend_limits_and_legacy_fallback.1.json create mode 100644 contracts/globe-wallet/test_snapshots/tests/test_same_code_different_issuer_independent_spend_limits.1.json create mode 100644 contracts/globe-wallet/test_snapshots/tests/test_spend_limit_and_record_spend_reject_unregistered_asset.1.json diff --git a/contracts/globe-wallet/src/lib.rs b/contracts/globe-wallet/src/lib.rs index ef047b8..c3f1acd 100644 --- a/contracts/globe-wallet/src/lib.rs +++ b/contracts/globe-wallet/src/lib.rs @@ -32,10 +32,10 @@ pub enum DataKey { PendingUpgrade, /// Whitelisted assets for a user wallet UserAssets(Address), - /// Spend limit: (user, asset_code) → limit in stroops - SpendLimit(Address, String), - /// Daily spent: (user, asset_code) → (amount, day_timestamp) - DailySpent(Address, String), + /// Spend limit: (user, asset) → limit in stroops + SpendLimit(Address, AssetInfo), + /// Daily spent: (user, asset) → (amount, day_timestamp) + DailySpent(Address, AssetInfo), /// Ordered set of guardian addresses authorized to co-sign admin recovery. Guardians, /// M-of-N approvals required, and the ledger-count timelock delay @@ -1086,7 +1086,8 @@ impl GlobeWallet { return Err(WalletError::AssetLimitExceeded); } for i in 0..assets.len() { - if Self::codes_match_case_insensitive(&assets.get(i).unwrap().code, &asset.code) { + let existing = assets.get(i).unwrap(); + if Self::assets_match(&existing, &asset) { return Err(WalletError::AssetAlreadyAdded); } } @@ -1167,57 +1168,65 @@ impl GlobeWallet { /// /// # Errors /// * [`WalletError::InvalidSpendLimit`] — negative limit. + /// * [`WalletError::AssetNotFound`] — asset is not registered in caller's `UserAssets`. /// * [`WalletError::SpendLimitExceeded`] — current day's spend already /// exceeds the proposed limit. pub fn set_spend_limit( env: Env, user: Address, - asset_code: String, + asset: AssetInfo, limit: i128, ) -> Result<(), WalletError> { user.require_auth(); if limit < 0 { return Err(WalletError::InvalidSpendLimit); } + + let canonical_asset = Self::find_user_asset(&env, &user, &asset) + .ok_or(WalletError::AssetNotFound)?; + // Retroactive check: reject if today's spend already exceeds the // new limit (unless the new limit is 0 = unlimited). if limit != 0 { let now = env.ledger().timestamp(); let day = now / 86400; - let key = DataKey::DailySpent(user.clone(), asset_code.clone()); - let record: SpendRecord = env - .storage() - .persistent() - .get(&key) - .unwrap_or(SpendRecord { amount: 0, day }); + let record = Self::get_daily_spent_record(&env, &user, &canonical_asset, day); let spent_today = if record.day == day { record.amount } else { 0 }; if spent_today > limit { return Err(WalletError::SpendLimitExceeded); } } Self::bump_instance_ttl(&env); - env.storage().persistent().set( - &DataKey::SpendLimit(user.clone(), asset_code.clone()), - &limit, - ); + let key = DataKey::SpendLimit(user.clone(), canonical_asset.clone()); + env.storage().persistent().set(&key, &limit); env.storage().persistent().extend_ttl( - &DataKey::SpendLimit(user.clone(), asset_code.clone()), + &key, PERSISTENT_TTL_THRESHOLD, PERSISTENT_TTL_EXTEND_TO, ); + + let legacy_key = Self::get_legacy_spend_limit_key(&env, &user, &canonical_asset.code); + env.storage().persistent().remove(&legacy_key); + env.events().publish( (Symbol::new(&env, "spend_limit_set"),), - (user, asset_code, limit), + (user, canonical_asset.code, limit), ); Ok(()) } /// Get the daily spend limit for a user/asset pair (0 = unlimited). - pub fn get_spend_limit(env: Env, user: Address, asset_code: String) -> i128 { - env.storage() - .persistent() - .get(&DataKey::SpendLimit(user, asset_code)) - .unwrap_or(0) + pub fn get_spend_limit(env: Env, user: Address, asset: AssetInfo) -> i128 { + let canonical_asset = match Self::find_user_asset(&env, &user, &asset) { + Some(a) => a, + None => return 0, + }; + let key = DataKey::SpendLimit(user.clone(), canonical_asset.clone()); + if let Some(limit) = env.storage().persistent().get(&key) { + return limit; + } + let legacy_key = Self::get_legacy_spend_limit_key(&env, &user, &canonical_asset.code); + env.storage().persistent().get(&legacy_key).unwrap_or(0) } /// Record a spend and reject if it would exceed the daily limit. @@ -1248,17 +1257,22 @@ impl GlobeWallet { /// the analogous negative-input case; a new variant would also /// collide with the discriminant renumbering tracked in #23, which is /// touching this same enum in parallel. + /// * [`WalletError::AssetNotFound`] — asset is not registered in caller's `UserAssets`. /// * [`WalletError::SpendLimitExceeded`] pub fn record_spend( env: Env, user: Address, - asset_code: String, + asset: AssetInfo, amount: i128, ) -> Result<(), WalletError> { user.require_auth(); if amount <= 0 { return Err(WalletError::InvalidSpendLimit); } + + let canonical_asset = Self::find_user_asset(&env, &user, &asset) + .ok_or(WalletError::AssetNotFound)?; + // A real spend is real wallet activity regardless of whether a // limit happens to be configured for this asset — this is one of // the most frequently-called functions in normal use, and exactly @@ -1266,19 +1280,14 @@ impl GlobeWallet { // instance storage from silently drifting toward archival (see // `bump_instance_ttl`'s doc comment). Self::bump_instance_ttl(&env); - let limit = Self::get_spend_limit(env.clone(), user.clone(), asset_code.clone()); + let limit = Self::get_spend_limit(env.clone(), user.clone(), canonical_asset.clone()); if limit == 0 { // No limit configured → always allow return Ok(()); } let now = env.ledger().timestamp(); let day = now / 86400; - let key = DataKey::DailySpent(user.clone(), asset_code.clone()); - let record: SpendRecord = env - .storage() - .persistent() - .get(&key) - .unwrap_or(SpendRecord { amount: 0, day }); + let record = Self::get_daily_spent_record(&env, &user, &canonical_asset, day); let spent_today = if record.day == day { record.amount } else { 0 }; let new_spent = spent_today .checked_add(amount) @@ -1286,6 +1295,7 @@ impl GlobeWallet { if new_spent > limit { return Err(WalletError::SpendLimitExceeded); } + let key = DataKey::DailySpent(user.clone(), canonical_asset.clone()); env.storage() .persistent() .set(&key, &SpendRecord { amount: new_spent, day }); @@ -1294,9 +1304,13 @@ impl GlobeWallet { DAILY_SPENT_TTL_THRESHOLD, DAILY_SPENT_TTL_EXTEND_TO, ); + + let legacy_key = Self::get_legacy_daily_spent_key(&env, &user, &canonical_asset.code); + env.storage().persistent().remove(&legacy_key); + env.events().publish( (Symbol::new(&env, "spend_recorded"),), - (user, asset_code, amount, new_spent, limit), + (user, canonical_asset.code, amount, new_spent, limit), ); Ok(()) } @@ -1318,89 +1332,113 @@ impl GlobeWallet { env.storage() .instance() .set(&DataKey::TokenWrapperId, &token_wrapper_id); + Self::bump_instance_ttl(&env); env.events().publish( (Symbol::new(&env, "token_wrapper_set"),), - token_wrapper_id, + (admin, token_wrapper_id), ); Ok(()) } - /// Returns the currently configured token-wrapper contract instance, if any. + /// Admin: get the configured token-wrapper contract address, if any. pub fn get_token_wrapper(env: Env) -> Option
{ env.storage().instance().get(&DataKey::TokenWrapperId) } - /// Admin: add `token_id` to the set of tokens `send` is permitted to move. - /// - /// This is a governance/curation decision, not something this contract - /// can verify on-chain — the admin is expected to have confirmed - /// `token_id` implements the standard token interface correctly and - /// represents a real, valued asset before allowlisting it. See - /// docs/design/wiring-reentrancy-threat-model.md §4-5. + /// Admin: allowlist a token contract address so `send` can move it. pub fn add_allowed_token(env: Env, admin: Address, token_id: Address) -> Result<(), WalletError> { admin.require_auth(); Self::require_admin(&env, &admin)?; - let key = DataKey::AllowedToken(token_id.clone()); - env.storage().persistent().set(&key, &true); + env.storage() + .persistent() + .set(&DataKey::AllowedToken(token_id.clone()), &()); env.storage().persistent().extend_ttl( - &key, + &DataKey::AllowedToken(token_id.clone()), PERSISTENT_TTL_THRESHOLD, PERSISTENT_TTL_EXTEND_TO, ); + Self::bump_instance_ttl(&env); env.events().publish( - (Symbol::new(&env, "token_allowed"),), - token_id, + (Symbol::new(&env, "allowed_token_added"),), + (admin, token_id), ); Ok(()) } - /// Admin: remove `token_id` from the send-allowlist. + /// Admin: remove a token contract address from the allowlist. pub fn remove_allowed_token(env: Env, admin: Address, token_id: Address) -> Result<(), WalletError> { admin.require_auth(); Self::require_admin(&env, &admin)?; env.storage() .persistent() .remove(&DataKey::AllowedToken(token_id.clone())); + Self::bump_instance_ttl(&env); env.events().publish( - (Symbol::new(&env, "token_disallowed"),), - token_id, + (Symbol::new(&env, "allowed_token_removed"),), + (admin, token_id), ); Ok(()) } - /// Returns whether `token_id` is currently allowlisted for `send`. + /// Query whether a token contract address is currently on the allowlist. pub fn is_token_allowed(env: Env, token_id: Address) -> bool { env.storage() .persistent() - .get(&DataKey::AllowedToken(token_id)) - .unwrap_or(false) + .has(&DataKey::AllowedToken(token_id)) } - /// Atomically enforce the daily spend limit and move `amount` of - /// `token_id` from `user` to `to`, via `token-wrapper::transfer_from`. + /// High-level payment entry point: enforce daily spend limit, then move + /// tokens via the configured token-wrapper contract. /// - /// `user` must have already granted this contract (i.e. - /// `env.current_contract_address()`) an allowance over `token_id` via - /// `token-wrapper::approve` before calling this — matching - /// `docs/design/architecture.md`'s intended integration flow. + /// # Threat-Model Invariants Enforced Here + /// 1. **Allowlist gate (§4, mitigation 1):** `token_id` must be on the + /// admin-curated allowlist. Prevents an attacker from passing an + /// adversarial token contract address that ignores allowances or + /// attempts reentrancy. + /// 2. **Checks-Effects-Interactions (§3.1):** `record_spend` runs + /// *before* `TokenWrapperClient::transfer_from` is called. Even if + /// the token contract could somehow regain control, the daily limit + /// is already marked spent in persistent storage. + /// 3. **Exact-amount authorization (§4, mitigation 2):** `send` moves + /// `amount` (the exact amount authorized by `user` for this call), + /// consuming allowance from `user` to `GlobeWallet` via the wrapper. + /// 4. **Atomicity across contracts (§3.1):** if `transfer_from` fails + /// (bad allowance, insufficient balance, etc.), the whole Soroban + /// invocation reverts, rolling back the `record_spend` write so the + /// user's daily limit is not consumed for a payment that didn't + /// move tokens. /// /// # Errors - /// * [`WalletError::TokenNotAllowed`] if `token_id` is not allowlisted. - /// * [`WalletError::TokenWrapperNotSet`] if no admin has configured the - /// token-wrapper instance yet. - /// * [`WalletError::SpendLimitExceeded`] / [`WalletError::SpendOverflow`] - /// per `record_spend`'s existing rules. + /// * [`WalletError::TokenNotAllowed`] — `token_id` not on the allowlist. + /// * [`WalletError::TokenWrapperNotSet`] — admin has not called `set_token_wrapper`. + /// * [`WalletError::InvalidSpendLimit`] — `amount` is not strictly positive. + /// * [`WalletError::AssetNotFound`] — `asset` is not registered in user's asset list. + /// * [`WalletError::SpendLimitExceeded`] — payment would exceed daily limit. + /// * [`WalletError::SpendOverflow`] — daily accumulator would overflow i128. + /// * [`WalletError::TokenTransferFailed`] — token-wrapper's `transfer_from` failed. /// - /// A failure at any step reverts the whole call, including any - /// `record_spend` write already applied in this same invocation — - /// Soroban transactions are all-or-nothing, so there is no path where - /// the daily counter advances without the underlying transfer actually - /// succeeding (or vice versa). + /// # Reentrancy + /// `send` is the top-level orchestrator. The external call is + /// `TokenWrapperClient::transfer_from`, which makes a further external + /// call to the token contract. Per `docs/design/wiring-reentrancy-threat-model.md`, + /// this 3-hop chain is safe because: + /// - `record_spend` is invoked as a direct associated-function call on + /// the same host frame before any external invocation is started. + /// - GlobeWallet is active on the host call stack throughout `send`'s + /// execution, so Soroban's native cross-contract reentrancy guard + /// strictly forbids `token-wrapper` or `token_id` from calling back + /// into any `GlobeWallet` function. + /// - Any callback attempted from the token contract fails at the host + /// level, bubbling up as a transaction failure and causing the + /// `record_spend` write already applied in this same invocation — + /// Soroban transactions are all-or-nothing, so there is no path where + /// the daily counter advances without the underlying transfer actually + /// succeeding (or vice versa). pub fn send( env: Env, user: Address, token_id: Address, - asset_code: String, + asset: AssetInfo, to: Address, amount: i128, ) -> Result<(), WalletError> { @@ -1425,7 +1463,7 @@ impl GlobeWallet { // a plain associated-function call (same host frame), so // record_spend's existing reentrancy proof // (docs/record-spend-reentrancy.md) is untouched by this wiring. - Self::record_spend(env.clone(), user.clone(), asset_code, amount)?; + Self::record_spend(env.clone(), user.clone(), asset, amount)?; let wrapper_id: Address = env .storage() @@ -1461,6 +1499,62 @@ impl GlobeWallet { // ── Migration ─────────────────────────────────────────────────────────────── + /// Migrate legacy spend limits and daily spend records keyed by `(Address, String)` + /// to `(Address, AssetInfo)` keys for all assets currently registered by the user. + pub fn migrate_spend_limits(env: Env, user: Address) -> Result { + user.require_auth(); + let assets: Vec = env + .storage() + .persistent() + .get(&DataKey::UserAssets(user.clone())) + .unwrap_or_else(|| Vec::new(&env)); + let mut count = 0u32; + let now = env.ledger().timestamp(); + let day = now / 86400; + + for i in 0..assets.len() { + let asset = assets.get(i).unwrap(); + let legacy_spend_key = Self::get_legacy_spend_limit_key(&env, &user, &asset.code); + let legacy_limit: Option = env.storage().persistent().get(&legacy_spend_key); + + let new_spend_key = DataKey::SpendLimit(user.clone(), asset.clone()); + if let Some(limit) = legacy_limit { + if !env.storage().persistent().has(&new_spend_key) { + env.storage().persistent().set(&new_spend_key, &limit); + env.storage().persistent().extend_ttl( + &new_spend_key, + PERSISTENT_TTL_THRESHOLD, + PERSISTENT_TTL_EXTEND_TO, + ); + } + env.storage().persistent().remove(&legacy_spend_key); + count += 1; + } + + let legacy_daily_key = Self::get_legacy_daily_spent_key(&env, &user, &asset.code); + let legacy_daily: Option = env.storage().persistent().get(&legacy_daily_key); + let new_daily_key = DataKey::DailySpent(user.clone(), asset.clone()); + if let Some(record) = legacy_daily { + if !env.storage().persistent().has(&new_daily_key) && record.day == day { + env.storage().persistent().set(&new_daily_key, &record); + env.storage().persistent().extend_ttl( + &new_daily_key, + DAILY_SPENT_TTL_THRESHOLD, + DAILY_SPENT_TTL_EXTEND_TO, + ); + } + env.storage().persistent().remove(&legacy_daily_key); + } + } + + Self::bump_instance_ttl(&env); + env.events().publish( + (Symbol::new(&env, "spend_limits_migrated"),), + (user, count), + ); + Ok(count) + } + /// Admin and user: trim a user's asset list to [`GlobeWallet::MAX_ASSETS`] if it exceeds the bound. /// Returns the number of assets trimmed (0 if already within limit). /// @@ -1489,8 +1583,12 @@ impl GlobeWallet { } for i in Self::MAX_ASSETS..len { let dropped = assets.get(i).unwrap(); - env.storage().persistent().remove(&DataKey::SpendLimit(user.clone(), dropped.code.clone())); - env.storage().persistent().remove(&DataKey::DailySpent(user.clone(), dropped.code.clone())); + env.storage().persistent().remove(&DataKey::SpendLimit(user.clone(), dropped.clone())); + env.storage().persistent().remove(&DataKey::DailySpent(user.clone(), dropped.clone())); + let legacy_spend_key = Self::get_legacy_spend_limit_key(&env, &user, &dropped.code); + let legacy_daily_key = Self::get_legacy_daily_spent_key(&env, &user, &dropped.code); + env.storage().persistent().remove(&legacy_spend_key); + env.storage().persistent().remove(&legacy_daily_key); } env.storage() .persistent() @@ -1549,6 +1647,49 @@ impl GlobeWallet { buf_a[..len] == buf_b[..len] } + /// Compare two `AssetInfo`s for equality: + /// - Codes match case-insensitively (`codes_match_case_insensitive`) + /// - Issuers are identical (`a.issuer == b.issuer`) + fn assets_match(a: &AssetInfo, b: &AssetInfo) -> bool { + if !Self::codes_match_case_insensitive(&a.code, &b.code) { + return false; + } + a.issuer == b.issuer + } + + /// Look up registered asset in `UserAssets(user)` matching the given `AssetInfo`. + /// Returns the canonical `AssetInfo` stored in `UserAssets(user)` if found, or `None`. + fn find_user_asset(env: &Env, user: &Address, asset: &AssetInfo) -> Option { + let assets: Vec = env + .storage() + .persistent() + .get(&DataKey::UserAssets(user.clone()))?; + for i in 0..assets.len() { + let a = assets.get(i).unwrap(); + if Self::assets_match(&a, asset) { + return Some(a); + } + } + None + } + + fn get_legacy_spend_limit_key(env: &Env, user: &Address, code: &String) -> (Symbol, Address, String) { + (Symbol::new(env, "SpendLimit"), user.clone(), code.clone()) + } + + fn get_legacy_daily_spent_key(env: &Env, user: &Address, code: &String) -> (Symbol, Address, String) { + (Symbol::new(env, "DailySpent"), user.clone(), code.clone()) + } + + fn get_daily_spent_record(env: &Env, user: &Address, canonical_asset: &AssetInfo, day: u64) -> SpendRecord { + let key = DataKey::DailySpent(user.clone(), canonical_asset.clone()); + if let Some(record) = env.storage().persistent().get(&key) { + return record; + } + let legacy_key = Self::get_legacy_daily_spent_key(env, user, &canonical_asset.code); + env.storage().persistent().get(&legacy_key).unwrap_or(SpendRecord { amount: 0, day }) + } + /// Bump this contract's own *instance* storage TTL (`Admin`, `Guardians`, /// `RecoveryConfig`, every `PendingAdmin(...)`/`PendingUpgrade`/ /// `RecoveryProposal` entry — everything that isn't per-user @@ -1747,13 +1888,14 @@ mod tests { #[test] fn test_add_asset_case_variant_duplicate_fails() { - // issue #29: "USDC" and "usdc" must be treated as the same asset. + // issue #29: "USDC" and "usdc" with the same issuer must be treated as duplicate. let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - client.add_asset(&user, &usdc(&env)); // "USDC" + let usdc_asset = usdc(&env); + client.add_asset(&user, &usdc_asset); // "USDC" let lower = AssetInfo { code: String::from_str(&env, "usdc"), - issuer: Some(Address::generate(&env)), + issuer: usdc_asset.issuer.clone(), }; assert_eq!( client.try_add_asset(&user, &lower), @@ -1789,30 +1931,33 @@ mod tests { fn test_spend_limit_set_and_get() { let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); - client.set_spend_limit(&user, &code, &1_000_000_i128); - assert_eq!(client.get_spend_limit(&user, &code), 1_000_000); + let asset = xlm(&env); + client.add_asset(&user, &asset); + client.set_spend_limit(&user, &asset, &1_000_000_i128); + assert_eq!(client.get_spend_limit(&user, &asset), 1_000_000); } #[test] fn test_record_spend_within_limit() { let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); - client.set_spend_limit(&user, &code, &1_000_000_i128); - client.record_spend(&user, &code, &500_000_i128); - client.record_spend(&user, &code, &499_999_i128); + let asset = xlm(&env); + client.add_asset(&user, &asset); + client.set_spend_limit(&user, &asset, &1_000_000_i128); + client.record_spend(&user, &asset, &500_000_i128); + client.record_spend(&user, &asset, &499_999_i128); } #[test] fn test_record_spend_exceeds_limit_fails() { let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); - client.set_spend_limit(&user, &code, &1_000_000_i128); - client.record_spend(&user, &code, &999_999_i128); + let asset = xlm(&env); + client.add_asset(&user, &asset); + client.set_spend_limit(&user, &asset, &1_000_000_i128); + client.record_spend(&user, &asset, &999_999_i128); assert_eq!( - client.try_record_spend(&user, &code, &2_i128), + client.try_record_spend(&user, &asset, &2_i128), Err(Ok(WalletError::SpendLimitExceeded)) ); } @@ -1821,10 +1966,11 @@ mod tests { fn test_record_spend_negative_amount_fails() { let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); - client.set_spend_limit(&user, &code, &1_000_000_i128); + let asset = xlm(&env); + client.add_asset(&user, &asset); + client.set_spend_limit(&user, &asset, &1_000_000_i128); assert_eq!( - client.try_record_spend(&user, &code, &(-1_i128)), + client.try_record_spend(&user, &asset, &(-1_i128)), Err(Ok(WalletError::InvalidSpendLimit)) ); } @@ -1833,10 +1979,11 @@ mod tests { fn test_record_spend_zero_amount_fails() { let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); - client.set_spend_limit(&user, &code, &1_000_000_i128); + let asset = xlm(&env); + client.add_asset(&user, &asset); + client.set_spend_limit(&user, &asset, &1_000_000_i128); assert_eq!( - client.try_record_spend(&user, &code, &0_i128), + client.try_record_spend(&user, &asset, &0_i128), Err(Ok(WalletError::InvalidSpendLimit)) ); } @@ -1848,12 +1995,13 @@ mod tests { // before the limit comparison. let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); - client.set_spend_limit(&user, &code, &1_000_000_i128); - client.record_spend(&user, &code, &900_000_i128); + let asset = xlm(&env); + client.add_asset(&user, &asset); + client.set_spend_limit(&user, &asset, &1_000_000_i128); + client.record_spend(&user, &asset, &900_000_i128); assert_eq!( - client.try_record_spend(&user, &code, &(-900_000_i128)), + client.try_record_spend(&user, &asset, &(-900_000_i128)), Err(Ok(WalletError::InvalidSpendLimit)) ); @@ -1861,13 +2009,13 @@ mod tests { // of headroom against the 1_000_000 limit. One unit over that // headroom must be rejected... assert_eq!( - client.try_record_spend(&user, &code, &100_001_i128), + client.try_record_spend(&user, &asset, &100_001_i128), Err(Ok(WalletError::SpendLimitExceeded)) ); // ...while spending exactly the remaining headroom must succeed, // proving spent_today was neither reset nor left in some other // corrupted value by the rejected negative-amount call. - client.record_spend(&user, &code, &100_000_i128); + client.record_spend(&user, &asset, &100_000_i128); } #[test] @@ -1877,13 +2025,14 @@ mod tests { // the configured limit was supposed to allow for the day. let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); - client.set_spend_limit(&user, &code, &1_000_000_i128); - client.record_spend(&user, &code, &900_000_i128); + let asset = xlm(&env); + client.add_asset(&user, &asset); + client.set_spend_limit(&user, &asset, &1_000_000_i128); + client.record_spend(&user, &asset, &900_000_i128); // Attempted reset via negative amount must be rejected outright... assert_eq!( - client.try_record_spend(&user, &code, &(-900_000_i128)), + client.try_record_spend(&user, &asset, &(-900_000_i128)), Err(Ok(WalletError::InvalidSpendLimit)) ); @@ -1892,7 +2041,7 @@ mod tests { // further 999_999 remains correctly rejected as exceeding the // 1_000_000 daily limit. assert_eq!( - client.try_record_spend(&user, &code, &999_999_i128), + client.try_record_spend(&user, &asset, &999_999_i128), Err(Ok(WalletError::SpendLimitExceeded)) ); } @@ -1901,26 +2050,28 @@ mod tests { fn test_record_spend_overflow_does_not_poison_later_calls() { let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); - client.set_spend_limit(&user, &code, &i128::MAX); + let asset = xlm(&env); + client.add_asset(&user, &asset); + client.set_spend_limit(&user, &asset, &i128::MAX); - client.record_spend(&user, &code, &1_i128); + client.record_spend(&user, &asset, &1_i128); assert_eq!( - client.try_record_spend(&user, &code, &i128::MAX), + client.try_record_spend(&user, &asset, &i128::MAX), Err(Ok(WalletError::SpendOverflow)) ); - client.record_spend(&user, &code, &1_i128); + client.record_spend(&user, &asset, &1_i128); } #[test] fn test_no_limit_allows_any_spend() { let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); + let asset = xlm(&env); + client.add_asset(&user, &asset); // No set_spend_limit call → unlimited - client.record_spend(&user, &code, &i128::MAX); + client.record_spend(&user, &asset, &i128::MAX); } /// Retroactive enforcement: raise limit → spend near it → lower limit @@ -1929,36 +2080,37 @@ mod tests { fn test_raise_spend_then_lower_limit() { let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); + let asset = xlm(&env); + client.add_asset(&user, &asset); // 1. Set a high limit - client.set_spend_limit(&user, &code, &1_000_000_i128); + client.set_spend_limit(&user, &asset, &1_000_000_i128); // 2. Spend close to the high limit - client.record_spend(&user, &code, &900_000_i128); + client.record_spend(&user, &asset, &900_000_i128); // 3. Try to lower the limit below what was already spent → must fail assert_eq!( - client.try_set_spend_limit(&user, &code, &500_000_i128), + client.try_set_spend_limit(&user, &asset, &500_000_i128), Err(Ok(WalletError::SpendLimitExceeded)) ); // 4. The old limit should still be in effect - assert_eq!(client.get_spend_limit(&user, &code), 1_000_000); + assert_eq!(client.get_spend_limit(&user, &asset), 1_000_000); // 5. Lowering to exactly the spent amount should succeed - client.set_spend_limit(&user, &code, &900_000_i128); - assert_eq!(client.get_spend_limit(&user, &code), 900_000); + client.set_spend_limit(&user, &asset, &900_000_i128); + assert_eq!(client.get_spend_limit(&user, &asset), 900_000); // 6. Further spending is now blocked (at the exact limit) assert_eq!( - client.try_record_spend(&user, &code, &1_i128), + client.try_record_spend(&user, &asset, &1_i128), Err(Ok(WalletError::SpendLimitExceeded)) ); // 7. Removing the limit (setting to 0 = unlimited) should always work - client.set_spend_limit(&user, &code, &0_i128); - assert_eq!(client.get_spend_limit(&user, &code), 0); + client.set_spend_limit(&user, &asset, &0_i128); + assert_eq!(client.get_spend_limit(&user, &asset), 0); } #[test] @@ -1979,9 +2131,10 @@ mod tests { // spend counter before the real 86_400s day window elapses. let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); - client.set_spend_limit(&user, &code, &1_000_000_i128); - client.record_spend(&user, &code, &900_000_i128); + let asset = xlm(&env); + client.add_asset(&user, &asset); + client.set_spend_limit(&user, &asset, &1_000_000_i128); + client.record_spend(&user, &asset, &900_000_i128); // Simulate an eviction sweep of *temporary* storage only (persistent // entries are untouched) by bumping the ledger sequence far past the @@ -1994,7 +2147,7 @@ mod tests { // If DailySpent were still in temporary storage this would have been // archived/reset to 0 and the next 200_000 spend would wrongly succeed. assert_eq!( - client.try_record_spend(&user, &code, &200_000_i128), + client.try_record_spend(&user, &asset, &200_000_i128), Err(Ok(WalletError::SpendLimitExceeded)) ); } @@ -2080,7 +2233,7 @@ mod tests { let mut assets: Vec = Vec::new(&env); for i in 0..GlobeWallet::MAX_ASSETS + 10 { let code = String::from_str(&env, &std::format!("ASSET{}", i)); - assets.push_back(AssetInfo { code: code.clone(), issuer: None }); + assets.push_back(AssetInfo { code: code.clone(), issuer: Some(Address::generate(&env)) }); } env.as_contract(&cid, || { env.storage() @@ -2089,29 +2242,29 @@ mod tests { // Set up some spend limits and daily spent records for all assets for i in 0..GlobeWallet::MAX_ASSETS + 10 { - let code = String::from_str(&env, &std::format!("ASSET{}", i)); - env.storage().persistent().set(&DataKey::SpendLimit(user.clone(), code.clone()), &1000_i128); - env.storage().persistent().set(&DataKey::DailySpent(user.clone(), code.clone()), &SpendRecord { amount: 500, day: 0 }); + let asset = assets.get(i).unwrap(); + env.storage().persistent().set(&DataKey::SpendLimit(user.clone(), asset.clone()), &1000_i128); + env.storage().persistent().set(&DataKey::DailySpent(user.clone(), asset.clone()), &SpendRecord { amount: 500, day: 0 }); } }); let removed = client.migrate_user_assets(&admin, &user); assert_eq!(removed, 10); - let assets = client.get_assets(&user); - assert_eq!(assets.len(), GlobeWallet::MAX_ASSETS as u32); + let user_assets = client.get_assets(&user); + assert_eq!(user_assets.len(), GlobeWallet::MAX_ASSETS as u32); env.as_contract(&cid, || { // Verify that dropped assets' storage keys are removed for i in GlobeWallet::MAX_ASSETS..GlobeWallet::MAX_ASSETS + 10 { - let code = String::from_str(&env, &std::format!("ASSET{}", i)); - assert!(!env.storage().persistent().has(&DataKey::SpendLimit(user.clone(), code.clone()))); - assert!(!env.storage().persistent().has(&DataKey::DailySpent(user.clone(), code.clone()))); + let asset = assets.get(i).unwrap(); + assert!(!env.storage().persistent().has(&DataKey::SpendLimit(user.clone(), asset.clone()))); + assert!(!env.storage().persistent().has(&DataKey::DailySpent(user.clone(), asset.clone()))); } // Verify that kept assets' storage keys are intact for i in 0..GlobeWallet::MAX_ASSETS { - let code = String::from_str(&env, &std::format!("ASSET{}", i)); - assert!(env.storage().persistent().has(&DataKey::SpendLimit(user.clone(), code.clone()))); - assert!(env.storage().persistent().has(&DataKey::DailySpent(user.clone(), code.clone()))); + let asset = assets.get(i).unwrap(); + assert!(env.storage().persistent().has(&DataKey::SpendLimit(user.clone(), asset.clone()))); + assert!(env.storage().persistent().has(&DataKey::DailySpent(user.clone(), asset.clone()))); } }); } @@ -3072,19 +3225,20 @@ mod tests { fn test_record_spend_boundary_last_second_of_day_accumulates() { let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); - client.set_spend_limit(&user, &code, &1_000_i128); + let asset = xlm(&env); + client.add_asset(&user, &asset); + client.set_spend_limit(&user, &asset, &1_000_i128); // Set timestamp to the very last second of day 1 (day 0 bucket ends at 86399) let day = 1u64; let last_sec_of_day = day * 86_400 - 1; // 86_399 → still in bucket 0 env.ledger().with_mut(|l| l.timestamp = last_sec_of_day); - client.record_spend(&user, &code, &600_i128); + client.record_spend(&user, &asset, &600_i128); // Second call in the same bucket should accumulate assert_eq!( - client.try_record_spend(&user, &code, &401_i128), + client.try_record_spend(&user, &asset, &401_i128), Err(Ok(WalletError::SpendLimitExceeded)), "Two spends in the same bucket must accumulate: 600+401 > 1000" ); @@ -3095,18 +3249,19 @@ mod tests { fn test_record_spend_boundary_first_second_of_new_day_resets() { let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); - client.set_spend_limit(&user, &code, &1_000_i128); + let asset = xlm(&env); + client.add_asset(&user, &asset); + client.set_spend_limit(&user, &asset, &1_000_i128); // Spend 900 in bucket 0 env.ledger().with_mut(|l| l.timestamp = 86_399); // bucket 0 = ts/86400 == 0 - client.record_spend(&user, &code, &900_i128); + client.record_spend(&user, &asset, &900_i128); // Advance to the exact start of bucket 1 — counter must reset env.ledger().with_mut(|l| l.timestamp = 86_400); // bucket 1 = ts/86400 == 1 // Should succeed because we're in a brand-new bucket - client.record_spend(&user, &code, &1_000_i128); + client.record_spend(&user, &asset, &1_000_i128); } /// Explicit boundary: timestamp N*86400 - 1 vs N*86400 are different buckets. @@ -3114,8 +3269,9 @@ mod tests { fn test_record_spend_exact_day_boundary() { let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); - client.set_spend_limit(&user, &code, &500_i128); + let asset = xlm(&env); + client.add_asset(&user, &asset); + client.set_spend_limit(&user, &asset, &500_i128); let n: u64 = 5; let before_boundary = n * 86_400 - 1; // bucket n-1 @@ -3123,17 +3279,17 @@ mod tests { // Spend right at the boundary-minus-one env.ledger().with_mut(|l| l.timestamp = before_boundary); - client.record_spend(&user, &code, &500_i128); // fills bucket n-1 exactly + client.record_spend(&user, &asset, &500_i128); // fills bucket n-1 exactly // Any more spend in bucket n-1 must fail assert_eq!( - client.try_record_spend(&user, &code, &1_i128), + client.try_record_spend(&user, &asset, &1_i128), Err(Ok(WalletError::SpendLimitExceeded)) ); // Crossing into bucket n resets the counter: full 500 must be available again env.ledger().with_mut(|l| l.timestamp = at_boundary); - client.record_spend(&user, &code, &500_i128); + client.record_spend(&user, &asset, &500_i128); } /// Validates that the bucket is derived from integer division (not rounding). @@ -3141,8 +3297,9 @@ mod tests { fn test_record_spend_bucket_is_integer_division() { let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); - client.set_spend_limit(&user, &code, &100_i128); + let asset = xlm(&env); + client.add_asset(&user, &asset); + client.set_spend_limit(&user, &asset, &100_i128); // All three timestamps below belong to bucket 1 (86400..=172799) // Reset env per iteration by re-registering is expensive; @@ -3151,12 +3308,12 @@ mod tests { // Spend 50 in bucket 1 env.ledger().with_mut(|l| l.timestamp = 86_400); - client.record_spend(&user, &code, &50_i128); + client.record_spend(&user, &asset, &50_i128); // Move to middle of same bucket — still bucket 1, should accumulate env.ledger().with_mut(|l| l.timestamp = 129_600); // 86400 + 43200 assert_eq!( - client.try_record_spend(&user, &code, &51_i128), + client.try_record_spend(&user, &asset, &51_i128), Err(Ok(WalletError::SpendLimitExceeded)), "50+51 > 100: mid-bucket accumulation must hold" ); @@ -3164,7 +3321,7 @@ mod tests { // Move to end of bucket 1 env.ledger().with_mut(|l| l.timestamp = 172_799); assert_eq!( - client.try_record_spend(&user, &code, &51_i128), + client.try_record_spend(&user, &asset, &51_i128), Err(Ok(WalletError::SpendLimitExceeded)), "50+51 > 100: end-of-bucket accumulation must hold" ); @@ -3179,8 +3336,9 @@ mod tests { fn test_record_spend_boundary_drift_awareness() { let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); - client.set_spend_limit(&user, &code, &1_000_i128); + let asset = xlm(&env); + client.add_asset(&user, &asset); + client.set_spend_limit(&user, &asset, &1_000_i128); // Two validator-derived timestamps 2 seconds apart straddling midnight let just_before = 2 * 86_400 - 1; @@ -3188,14 +3346,14 @@ mod tests { // Spend near-limit just before midnight env.ledger().with_mut(|l| l.timestamp = just_before); - client.record_spend(&user, &code, &999_i128); + client.record_spend(&user, &asset, &999_i128); // If a second tx arrives 1 second later it lands in a new bucket and is ALLOWED. // This is the known fixed-bucket split: user perceives same-session but // contract resets. Not exploitable (it's more restrictive by resetting), but // confusing to users. env.ledger().with_mut(|l| l.timestamp = just_after); - client.record_spend(&user, &code, &1_000_i128); // succeeds — new bucket + client.record_spend(&user, &asset, &1_000_i128); // succeeds — new bucket } #[test] @@ -3254,13 +3412,14 @@ mod tests { fn test_spend_limit_ttl_extension_after_long_idle_period() { let (env, _cid, _admin, client) = setup(); let user = Address::generate(&env); - let code = String::from_str(&env, "XLM"); - client.set_spend_limit(&user, &code, &1_000_000_i128); + let asset = xlm(&env); + client.add_asset(&user, &asset); + client.set_spend_limit(&user, &asset, &1_000_000_i128); // Jump well past default persistent-entry TTL. env.ledger().with_mut(|l| l.sequence_number += 50_000); - assert_eq!(client.get_spend_limit(&user, &code), 1_000_000); + assert_eq!(client.get_spend_limit(&user, &asset), 1_000_000); } // ── Wiring: globe-wallet <-> token-wrapper ─────────────────────────────── @@ -3292,17 +3451,18 @@ mod tests { let token_admin = Address::generate(&env); let user = Address::generate(&env); let to = Address::generate(&env); - let code = String::from_str(&env, "XLM"); + let asset = xlm(&env); + client.add_asset(&user, &asset); let (token_id, token_admin_client, token) = create_real_token(&env, &token_admin); token_admin_client.mint(&user, &1_000); client.add_allowed_token(&admin, &token_id); - client.set_spend_limit(&user, &code, &500_i128); + client.set_spend_limit(&user, &asset, &500_i128); env.ledger().with_mut(|l| l.sequence_number = 100); wrapper_client.approve(&user, &wallet_id, &500, &10_000); - client.send(&user, &token_id, &code, &to, &200); + client.send(&user, &token_id, &asset, &to, &200); assert_eq!(token.balance(&user), 800); assert_eq!(token.balance(&to), 200); @@ -3314,13 +3474,14 @@ mod tests { let (env, _wallet_id, _admin, client, _wrapper_client) = setup_wiring(); let user = Address::generate(&env); let to = Address::generate(&env); - let code = String::from_str(&env, "XLM"); + let asset = xlm(&env); + client.add_asset(&user, &asset); let token_admin = Address::generate(&env); let (token_id, _token_admin_client, _token) = create_real_token(&env, &token_admin); // Deliberately NOT allowlisted. assert_eq!( - client.try_send(&user, &token_id, &code, &to, &100), + client.try_send(&user, &token_id, &asset, &to, &100), Err(Ok(WalletError::TokenNotAllowed)) ); } @@ -3330,14 +3491,15 @@ mod tests { let (env, _cid, admin, client) = setup(); let user = Address::generate(&env); let to = Address::generate(&env); - let code = String::from_str(&env, "XLM"); + let asset = xlm(&env); + client.add_asset(&user, &asset); let token_admin = Address::generate(&env); let (token_id, _token_admin_client, _token) = create_real_token(&env, &token_admin); client.add_allowed_token(&admin, &token_id); // Deliberately never called set_token_wrapper. assert_eq!( - client.try_send(&user, &token_id, &code, &to, &100), + client.try_send(&user, &token_id, &asset, &to, &100), Err(Ok(WalletError::TokenWrapperNotSet)) ); } @@ -3351,18 +3513,19 @@ mod tests { let token_admin = Address::generate(&env); let user = Address::generate(&env); let to = Address::generate(&env); - let code = String::from_str(&env, "XLM"); + let asset = xlm(&env); + client.add_asset(&user, &asset); let (token_id, token_admin_client, token) = create_real_token(&env, &token_admin); token_admin_client.mint(&user, &1_000); client.add_allowed_token(&admin, &token_id); - client.set_spend_limit(&user, &code, &100_i128); + client.set_spend_limit(&user, &asset, &100_i128); env.ledger().with_mut(|l| l.sequence_number = 100); wrapper_client.approve(&user, &wallet_id, &500, &10_000); assert_eq!( - client.try_send(&user, &token_id, &code, &to, &200), + client.try_send(&user, &token_id, &asset, &to, &200), Err(Ok(WalletError::SpendLimitExceeded)) ); assert_eq!(token.balance(&user), 1_000, "no tokens should move on a rejected send"); @@ -3418,7 +3581,7 @@ mod tests { // for any real SAC, since token_id is caller-supplied and unconstrained // beyond the allowlist check. Its `transfer` implementation, instead of // moving any value, immediately tries to call back into - // `GlobeWallet::record_spend` for the same (victim, asset_code) pair — + // `GlobeWallet::record_spend` for the same (victim, asset) pair — // the exact double-count scenario issue #92 describes. If Soroban's // reentry protection did not hold for this 3-hop chain, that call would // succeed and the assertions below would catch the resulting @@ -3429,10 +3592,10 @@ mod tests { #[contractimpl] impl MaliciousToken { - pub fn init(env: Env, wallet_id: Address, victim: Address, asset_code: String) { + pub fn init(env: Env, wallet_id: Address, victim: Address, asset: AssetInfo) { env.storage().instance().set(&Symbol::new(&env, "wallet"), &wallet_id); env.storage().instance().set(&Symbol::new(&env, "victim"), &victim); - env.storage().instance().set(&Symbol::new(&env, "code"), &asset_code); + env.storage().instance().set(&Symbol::new(&env, "asset"), &asset); } /// Matches the standard token interface's `transfer` signature so @@ -3440,16 +3603,16 @@ mod tests { pub fn transfer(env: Env, _from: Address, _to: Address, amount: i128) { let wallet_id: Address = env.storage().instance().get(&Symbol::new(&env, "wallet")).unwrap(); let victim: Address = env.storage().instance().get(&Symbol::new(&env, "victim")).unwrap(); - let code: String = env.storage().instance().get(&Symbol::new(&env, "code")).unwrap(); + let asset: AssetInfo = env.storage().instance().get(&Symbol::new(&env, "asset")).unwrap(); // Attempt the exact reentrant callback issue #92 describes: a - // second record_spend for the same (victim, asset_code) pair, + // second record_spend for the same (victim, asset) pair, // from inside the token's own transfer, before the outer // send/transfer_from call chain has unwound. Per // docs/design/wiring-reentrancy-threat-model.md §3.1, the host // must reject this because GlobeWallet's frame (the root of this // whole call chain) is still active on the stack. let victim_client = GlobeWalletClient::new(&env, &wallet_id); - victim_client.record_spend(&victim, &code, &amount); + victim_client.record_spend(&victim, &asset, &amount); // If we ever get here, the reentrant call above did NOT panic — // i.e. reentry protection failed to hold. Nothing further to do; // the test asserts on the resulting DailySpent state instead of @@ -3467,14 +3630,15 @@ mod tests { let user = Address::generate(&env); let to = Address::generate(&env); - let code = String::from_str(&env, "XLM"); + let asset = xlm(&env); + client.add_asset(&user, &asset); let evil_id = env.register_contract(None, MaliciousToken); let evil_client = MaliciousTokenClient::new(&env, &evil_id); - evil_client.init(&wallet_id, &user, &code); + evil_client.init(&wallet_id, &user, &asset); client.add_allowed_token(&admin, &evil_id); - client.set_spend_limit(&user, &code, &1_000_000_i128); + client.set_spend_limit(&user, &asset, &1_000_000_i128); env.ledger().with_mut(|l| l.sequence_number = 100); wrapper_client.approve(&user, &wallet_id, &1_000, &10_000); @@ -3482,7 +3646,7 @@ mod tests { // The reentrant callback inside MaliciousToken::transfer must be // rejected by the host, which must fail transfer_from's call into // it, which must fail send() as a whole — never a silent success. - let result = client.try_send(&user, &evil_id, &code, &to, &100); + let result = client.try_send(&user, &evil_id, &asset, &to, &100); assert!( result.is_err(), "send() must fail when the token contract attempts to re-enter GlobeWallet, not silently succeed" @@ -3494,7 +3658,7 @@ mod tests { // must be no DailySpent entry at all, proving neither the intended // spend nor a reentrant double-spend was left committed. env.as_contract(&wallet_id, || { - let key = DataKey::DailySpent(user.clone(), code.clone()); + let key = DataKey::DailySpent(user.clone(), asset.clone()); let record: Option = env.storage().persistent().get(&key); assert!( record.is_none(), @@ -3506,6 +3670,160 @@ mod tests { // The spend limit configuration itself (untouched by this call // either way) confirms setup was correct and we're not passing // vacuously because the limit was never configured. - assert_eq!(client.get_spend_limit(&user, &code), 1_000_000); + assert_eq!(client.get_spend_limit(&user, &asset), 1_000_000); + } + + // ── Issue #82: Same-Code Different-Issuer Disambiguation & Acceptance Tests ── + + #[test] + fn test_same_code_different_issuer_independent_spend_limits() { + let (env, _cid, _admin, client) = setup(); + let user = Address::generate(&env); + + let issuer_a = Address::generate(&env); + let issuer_b = Address::generate(&env); + + let asset_a = AssetInfo { + code: String::from_str(&env, "USDC"), + issuer: Some(issuer_a), + }; + let asset_b = AssetInfo { + code: String::from_str(&env, "USDC"), + issuer: Some(issuer_b), + }; + + client.add_asset(&user, &asset_a); + client.add_asset(&user, &asset_b); + + client.set_spend_limit(&user, &asset_a, &500_i128); + client.set_spend_limit(&user, &asset_b, &1_000_i128); + + assert_eq!(client.get_spend_limit(&user, &asset_a), 500); + assert_eq!(client.get_spend_limit(&user, &asset_b), 1_000); + + // Spend against asset_a budget + client.record_spend(&user, &asset_a, &400_i128); + // Spend against asset_b budget + client.record_spend(&user, &asset_b, &800_i128); + + // asset_a: 400 + 200 > 500 -> fails + assert_eq!( + client.try_record_spend(&user, &asset_a, &200_i128), + Err(Ok(WalletError::SpendLimitExceeded)) + ); + + // asset_b: 800 + 200 <= 1000 -> succeeds independently + client.record_spend(&user, &asset_b, &200_i128); + + // asset_b: now full -> further spend fails + assert_eq!( + client.try_record_spend(&user, &asset_b, &1_i128), + Err(Ok(WalletError::SpendLimitExceeded)) + ); + } + + #[test] + fn test_spend_limit_and_record_spend_reject_unregistered_asset() { + let (env, _cid, _admin, client) = setup(); + let user = Address::generate(&env); + + let unregistered = AssetInfo { + code: String::from_str(&env, "EURC"), + issuer: Some(Address::generate(&env)), + }; + + // Rejects setting spend limit on unregistered asset + assert_eq!( + client.try_set_spend_limit(&user, &unregistered, &1_000_i128), + Err(Ok(WalletError::AssetNotFound)) + ); + + // Rejects recording spend on unregistered asset + assert_eq!( + client.try_record_spend(&user, &unregistered, &100_i128), + Err(Ok(WalletError::AssetNotFound)) + ); + + // get_spend_limit returns 0 for unregistered asset + assert_eq!(client.get_spend_limit(&user, &unregistered), 0); + } + + #[test] + fn test_case_variant_asset_shares_same_spend_limit_bucket() { + let (env, _cid, _admin, client) = setup(); + let user = Address::generate(&env); + let usdc_canonical = usdc(&env); + client.add_asset(&user, &usdc_canonical); + + let usdc_lowercase = AssetInfo { + code: String::from_str(&env, "usdc"), + issuer: usdc_canonical.issuer.clone(), + }; + + // Setting limit using lowercase variant sets limit for canonical asset + client.set_spend_limit(&user, &usdc_lowercase, &1_000_i128); + assert_eq!(client.get_spend_limit(&user, &usdc_canonical), 1_000); + assert_eq!(client.get_spend_limit(&user, &usdc_lowercase), 1_000); + + // Spend via canonical + client.record_spend(&user, &usdc_canonical, &600_i128); + + // Spend via lowercase variant accumulates in the same bucket + client.record_spend(&user, &usdc_lowercase, &400_i128); + + // Next unit fails on either + assert_eq!( + client.try_record_spend(&user, &usdc_canonical, &1_i128), + Err(Ok(WalletError::SpendLimitExceeded)) + ); + assert_eq!( + client.try_record_spend(&user, &usdc_lowercase, &1_i128), + Err(Ok(WalletError::SpendLimitExceeded)) + ); + } + + #[test] + fn test_migrate_spend_limits_and_legacy_fallback() { + let (env, cid, _admin, client) = setup(); + let user = Address::generate(&env); + let xlm_asset = xlm(&env); + let usdc_asset = usdc(&env); + client.add_asset(&user, &xlm_asset); + client.add_asset(&user, &usdc_asset); + + // Write legacy entries directly to persistent storage under old (Symbol, Address, String) keys + let legacy_xlm_spend_key = (Symbol::new(&env, "SpendLimit"), user.clone(), String::from_str(&env, "XLM")); + let legacy_xlm_daily_key = (Symbol::new(&env, "DailySpent"), user.clone(), String::from_str(&env, "XLM")); + let legacy_usdc_spend_key = (Symbol::new(&env, "SpendLimit"), user.clone(), String::from_str(&env, "USDC")); + + env.as_contract(&cid, || { + env.storage().persistent().set(&legacy_xlm_spend_key, &500_i128); + env.storage().persistent().set(&legacy_xlm_daily_key, &SpendRecord { amount: 200, day: 0 }); + env.storage().persistent().set(&legacy_usdc_spend_key, &2_000_i128); + }); + + // Lazy fallback: get_spend_limit reads legacy key before migration + assert_eq!(client.get_spend_limit(&user, &xlm_asset), 500); + assert_eq!(client.get_spend_limit(&user, &usdc_asset), 2_000); + + // Explicit migration runs and migrates both assets + let migrated_count = client.migrate_spend_limits(&user); + assert_eq!(migrated_count, 2); + + // Verify storage keys were converted to DataKey::SpendLimit(user, AssetInfo) + env.as_contract(&cid, || { + assert!(env.storage().persistent().has(&DataKey::SpendLimit(user.clone(), xlm_asset.clone()))); + assert!(env.storage().persistent().has(&DataKey::SpendLimit(user.clone(), usdc_asset.clone()))); + assert!(!env.storage().persistent().has(&legacy_xlm_spend_key)); + assert!(!env.storage().persistent().has(&legacy_xlm_daily_key)); + assert!(!env.storage().persistent().has(&legacy_usdc_spend_key)); + }); + + // Spending respects migrated records: XLM already spent 200 of 500 limit + client.record_spend(&user, &xlm_asset, &300_i128); + assert_eq!( + client.try_record_spend(&user, &xlm_asset, &1_i128), + Err(Ok(WalletError::SpendLimitExceeded)) + ); } } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_add_allowed_token_requires_admin.1.json b/contracts/globe-wallet/test_snapshots/tests/test_add_allowed_token_requires_admin.1.json index 47f3551..9d07398 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_add_allowed_token_requires_admin.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_add_allowed_token_requires_admin.1.json @@ -174,7 +174,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ], [ @@ -372,7 +372,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ] ] @@ -491,7 +491,14 @@ } ], "data": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] } } } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_add_asset_case_variant_duplicate_fails.1.json b/contracts/globe-wallet/test_snapshots/tests/test_add_asset_case_variant_duplicate_fails.1.json index 8bcf2d6..ae7a309 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_add_asset_case_variant_duplicate_fails.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_add_asset_case_variant_duplicate_fails.1.json @@ -1,6 +1,6 @@ { "generators": { - "address": 5, + "address": 4, "nonce": 0 }, "auth": [ @@ -428,7 +428,7 @@ "symbol": "issuer" }, "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" } } ] @@ -535,7 +535,7 @@ "symbol": "issuer" }, "val": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" } } ] diff --git a/contracts/globe-wallet/test_snapshots/tests/test_case_variant_asset_shares_same_spend_limit_bucket.1.json b/contracts/globe-wallet/test_snapshots/tests/test_case_variant_asset_shares_same_spend_limit_bucket.1.json new file mode 100644 index 0000000..4c42999 --- /dev/null +++ b/contracts/globe-wallet/test_snapshots/tests/test_case_variant_asset_shares_same_spend_limit_bucket.1.json @@ -0,0 +1,1671 @@ +{ + "generators": { + "address": 4, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_spend_limit", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "usdc" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "record_spend", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 600 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "record_spend", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "usdc" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 400 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "DailySpent" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "DailySpent" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "day" + }, + "val": { + "u64": 0 + } + } + ] + } + } + }, + "ext": "v0" + }, + 34560 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "SpendLimit" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "SpendLimit" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 518400 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "initialized" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "USDC" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "usdc" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "spend_limit_set" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "USDC" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "get_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_spend_limit" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "get_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "usdc" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_spend_limit" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 600 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "spend_recorded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "USDC" + }, + { + "i128": { + "hi": 0, + "lo": 600 + } + }, + { + "i128": { + "hi": 0, + "lo": 600 + } + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "record_spend" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "usdc" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 400 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "spend_recorded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "USDC" + }, + { + "i128": { + "hi": 0, + "lo": 400 + } + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "record_spend" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 1 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "error": { + "contract": 1007 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1007 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1007 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "record_spend" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 1 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "usdc" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 1 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "error": { + "contract": 1007 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1007 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1007 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "record_spend" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "usdc" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 1 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/globe-wallet/test_snapshots/tests/test_daily_spent_survives_temporary_ttl_eviction.1.json b/contracts/globe-wallet/test_snapshots/tests/test_daily_spent_survives_temporary_ttl_eviction.1.json index 7b53ead..6bb9f2d 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_daily_spent_survives_temporary_ttl_eviction.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_daily_spent_survives_temporary_ttl_eviction.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -46,7 +98,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -86,7 +153,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -109,7 +191,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -157,7 +254,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -180,7 +292,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -198,6 +325,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -276,6 +467,39 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_data": { @@ -415,7 +639,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -425,6 +691,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -517,7 +852,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -622,7 +972,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -718,7 +1083,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_migrate_spend_limits_and_legacy_fallback.1.json b/contracts/globe-wallet/test_snapshots/tests/test_migrate_spend_limits_and_legacy_fallback.1.json new file mode 100644 index 0000000..5456d17 --- /dev/null +++ b/contracts/globe-wallet/test_snapshots/tests/test_migrate_spend_limits_and_legacy_fallback.1.json @@ -0,0 +1,1495 @@ +{ + "generators": { + "address": 4, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "migrate_spend_limits", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "record_spend", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 300 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "DailySpent" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "DailySpent" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 500 + } + } + }, + { + "key": { + "symbol": "day" + }, + "val": { + "u64": 0 + } + } + ] + } + } + }, + "ext": "v0" + }, + 34560 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "SpendLimit" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "SpendLimit" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 2000 + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "SpendLimit" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "SpendLimit" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 500 + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 518400 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "initialized" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "USDC" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "get_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_spend_limit" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 500 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "get_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_spend_limit" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 2000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "migrate_spend_limits" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "spend_limits_migrated" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u32": 2 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "migrate_spend_limits" + } + ], + "data": { + "u32": 2 + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 300 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "spend_recorded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "XLM" + }, + { + "i128": { + "hi": 0, + "lo": 300 + } + }, + { + "i128": { + "hi": 0, + "lo": 500 + } + }, + { + "i128": { + "hi": 0, + "lo": 500 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "record_spend" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 1 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "error": { + "contract": 1007 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1007 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1007 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "record_spend" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 1 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/globe-wallet/test_snapshots/tests/test_migrate_user_assets_trims_excess.1.json b/contracts/globe-wallet/test_snapshots/tests/test_migrate_user_assets_trims_excess.1.json index ff429c2..a3346b3 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_migrate_user_assets_trims_excess.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_migrate_user_assets_trims_excess.1.json @@ -1,6 +1,6 @@ { "generators": { - "address": 3, + "address": 63, "nonce": 0 }, "auth": [ @@ -74,7 +74,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET0" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] } ] }, @@ -97,7 +114,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET0" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] } ] }, @@ -145,7 +179,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET1" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET1" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] } ] }, @@ -168,7 +219,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET1" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET1" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] } ] }, @@ -216,7 +284,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET10" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET10" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5" + } + } + ] } ] }, @@ -239,7 +324,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET10" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET10" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5" + } + } + ] } ] }, @@ -287,7 +389,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET11" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET11" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N" + } + } + ] } ] }, @@ -310,7 +429,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET11" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET11" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N" + } + } + ] } ] }, @@ -358,7 +494,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET12" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET12" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6KO" + } + } + ] } ] }, @@ -381,7 +534,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET12" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET12" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6KO" + } + } + ] } ] }, @@ -429,7 +599,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET13" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET13" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDWC6" + } + } + ] } ] }, @@ -452,7 +639,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET13" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET13" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDWC6" + } + } + ] } ] }, @@ -500,7 +704,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET14" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET14" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFO3O" + } + } + ] } ] }, @@ -523,7 +744,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET14" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET14" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFO3O" + } + } + ] } ] }, @@ -571,7 +809,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET15" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET15" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHGT6" + } + } + ] } ] }, @@ -594,8 +849,25 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET15" - } + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET15" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHGT6" + } + } + ] + } ] }, "durability": "persistent", @@ -642,7 +914,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET16" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET16" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI7IO" + } + } + ] } ] }, @@ -665,7 +954,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET16" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET16" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI7IO" + } + } + ] } ] }, @@ -713,7 +1019,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET17" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET17" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKXA6" + } + } + ] } ] }, @@ -736,7 +1059,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET17" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET17" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKXA6" + } + } + ] } ] }, @@ -784,7 +1124,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET18" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET18" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMPZO" + } + } + ] } ] }, @@ -807,7 +1164,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET18" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET18" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMPZO" + } + } + ] } ] }, @@ -855,7 +1229,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET19" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET19" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOHR6" + } + } + ] } ] }, @@ -878,7 +1269,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET19" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET19" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOHR6" + } + } + ] } ] }, @@ -926,7 +1334,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET2" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET2" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + } + ] } ] }, @@ -949,7 +1374,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET2" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET2" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + } + ] } ] }, @@ -997,7 +1439,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET20" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET20" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABR4OP" + } + } + ] } ] }, @@ -1020,7 +1479,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET20" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET20" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABR4OP" + } + } + ] } ] }, @@ -1068,7 +1544,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET21" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET21" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTUG7" + } + } + ] } ] }, @@ -1091,7 +1584,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET21" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET21" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTUG7" + } + } + ] } ] }, @@ -1139,7 +1649,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET22" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET22" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVM7P" + } + } + ] } ] }, @@ -1162,7 +1689,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET22" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET22" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVM7P" + } + } + ] } ] }, @@ -1210,7 +1754,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET23" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET23" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXEX7" + } + } + ] } ] }, @@ -1233,7 +1794,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET23" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET23" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXEX7" + } + } + ] } ] }, @@ -1281,7 +1859,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET24" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET24" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY5MP" + } + } + ] } ] }, @@ -1304,7 +1899,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET24" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET24" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY5MP" + } + } + ] } ] }, @@ -1352,7 +1964,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET25" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET25" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2VE7" + } + } + ] } ] }, @@ -1375,7 +2004,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET25" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET25" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2VE7" + } + } + ] } ] }, @@ -1423,7 +2069,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET26" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET26" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4N5P" + } + } + ] } ] }, @@ -1446,7 +2109,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET26" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET26" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4N5P" + } + } + ] } ] }, @@ -1494,7 +2174,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET27" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET27" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6FV7" + } + } + ] } ] }, @@ -1517,7 +2214,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET27" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET27" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6FV7" + } + } + ] } ] }, @@ -1565,7 +2279,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET28" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET28" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBKTY" + } + } + ] } ] }, @@ -1588,7 +2319,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET28" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET28" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBKTY" + } + } + ] } ] }, @@ -1636,7 +2384,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET29" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET29" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDC3I" + } + } + ] } ] }, @@ -1659,8 +2424,25 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET29" - } + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET29" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDC3I" + } + } + ] + } ] }, "durability": "persistent", @@ -1707,7 +2489,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET3" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET3" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + } + ] } ] }, @@ -1730,7 +2529,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET3" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET3" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + } + ] } ] }, @@ -1778,7 +2594,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET30" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET30" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACF2CY" + } + } + ] } ] }, @@ -1801,7 +2634,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET30" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET30" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACF2CY" + } + } + ] } ] }, @@ -1849,7 +2699,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET31" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET31" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHSKI" + } + } + ] } ] }, @@ -1872,7 +2739,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET31" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET31" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHSKI" + } + } + ] } ] }, @@ -1920,7 +2804,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET32" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET32" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACILRY" + } + } + ] } ] }, @@ -1943,7 +2844,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET32" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET32" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACILRY" + } + } + ] } ] }, @@ -1991,7 +2909,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET33" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET33" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKDZI" + } + } + ] } ] }, @@ -2014,7 +2949,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET33" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET33" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKDZI" + } + } + ] } ] }, @@ -2062,7 +3014,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET34" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET34" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACM3AY" + } + } + ] } ] }, @@ -2085,7 +3054,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET34" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET34" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACM3AY" + } + } + ] } ] }, @@ -2133,7 +3119,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET35" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET35" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOTII" + } + } + ] } ] }, @@ -2156,7 +3159,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET35" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET35" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOTII" + } + } + ] } ] }, @@ -2204,7 +3224,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET36" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET36" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRIXZ" + } + } + ] } ] }, @@ -2227,7 +3264,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET36" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET36" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRIXZ" + } + } + ] } ] }, @@ -2275,7 +3329,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET37" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET37" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTA7J" + } + } + ] } ] }, @@ -2298,7 +3369,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET37" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET37" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTA7J" + } + } + ] } ] }, @@ -2346,7 +3434,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET38" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET38" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVYGZ" + } + } + ] } ] }, @@ -2369,7 +3474,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET38" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET38" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVYGZ" + } + } + ] } ] }, @@ -2417,7 +3539,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET39" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET39" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXQOJ" + } + } + ] } ] }, @@ -2440,7 +3579,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET39" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET39" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXQOJ" + } + } + ] } ] }, @@ -2488,7 +3644,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET4" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET4" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + } + ] } ] }, @@ -2511,7 +3684,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET4" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET4" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + } + ] } ] }, @@ -2559,7 +3749,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET40" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET40" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYJVZ" + } + } + ] } ] }, @@ -2582,7 +3789,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET40" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET40" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYJVZ" + } + } + ] } ] }, @@ -2630,7 +3854,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET41" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET41" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2B5J" + } + } + ] } ] }, @@ -2653,7 +3894,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET41" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET41" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2B5J" + } + } + ] } ] }, @@ -2701,7 +3959,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET42" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET42" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4ZEZ" + } + } + ] } ] }, @@ -2724,8 +3999,25 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET42" - } + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET42" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4ZEZ" + } + } + ] + } ] }, "durability": "persistent", @@ -2772,7 +4064,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET43" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET43" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6RMJ" + } + } + ] } ] }, @@ -2795,7 +4104,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET43" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET43" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6RMJ" + } + } + ] } ] }, @@ -2843,7 +4169,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET44" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET44" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBG3K" + } + } + ] } ] }, @@ -2866,7 +4209,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET44" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET44" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBG3K" + } + } + ] } ] }, @@ -2914,7 +4274,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET45" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET45" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDOT2" + } + } + ] } ] }, @@ -2937,7 +4314,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET45" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET45" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDOT2" + } + } + ] } ] }, @@ -2985,7 +4379,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET46" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET46" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADFWKK" + } + } + ] } ] }, @@ -3008,7 +4419,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET46" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET46" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADFWKK" + } + } + ] } ] }, @@ -3056,7 +4484,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET47" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET47" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH6C2" + } + } + ] } ] }, @@ -3079,7 +4524,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET47" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET47" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH6C2" + } + } + ] } ] }, @@ -3127,7 +4589,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET48" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET48" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIHZK" + } + } + ] } ] }, @@ -3150,7 +4629,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET48" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET48" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIHZK" + } + } + ] } ] }, @@ -3198,7 +4694,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET49" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET49" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKPR2" + } + } + ] } ] }, @@ -3221,7 +4734,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET49" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET49" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKPR2" + } + } + ] } ] }, @@ -3269,7 +4799,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET5" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET5" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + } + } + ] } ] }, @@ -3292,7 +4839,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET5" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET5" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + } + } + ] } ] }, @@ -3340,7 +4904,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET6" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET6" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + } + ] } ] }, @@ -3363,7 +4944,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET6" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET6" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + } + ] } ] }, @@ -3411,7 +5009,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET7" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET7" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + } + ] } ] }, @@ -3434,7 +5049,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET7" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET7" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + } + ] } ] }, @@ -3482,7 +5114,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET8" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET8" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + } + } + ] } ] }, @@ -3505,7 +5154,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET8" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET8" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + } + } + ] } ] }, @@ -3553,7 +5219,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET9" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET9" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN" + } + } + ] } ] }, @@ -3576,7 +5259,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET9" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET9" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN" + } + } + ] } ] }, @@ -3624,7 +5324,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET0" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] } ] }, @@ -3647,7 +5364,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET0" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] } ] }, @@ -3678,7 +5412,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET1" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET1" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] } ] }, @@ -3701,7 +5452,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET1" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET1" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] } ] }, @@ -3732,7 +5500,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET10" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET10" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5" + } + } + ] } ] }, @@ -3755,8 +5540,25 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET10" - } + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET10" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5" + } + } + ] + } ] }, "durability": "persistent", @@ -3786,7 +5588,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET11" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET11" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N" + } + } + ] } ] }, @@ -3809,7 +5628,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET11" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET11" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N" + } + } + ] } ] }, @@ -3840,7 +5676,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET12" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET12" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6KO" + } + } + ] } ] }, @@ -3863,7 +5716,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET12" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET12" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6KO" + } + } + ] } ] }, @@ -3894,7 +5764,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET13" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET13" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDWC6" + } + } + ] } ] }, @@ -3917,7 +5804,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET13" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET13" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDWC6" + } + } + ] } ] }, @@ -3948,7 +5852,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET14" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET14" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFO3O" + } + } + ] } ] }, @@ -3971,7 +5892,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET14" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET14" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFO3O" + } + } + ] } ] }, @@ -4002,7 +5940,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET15" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET15" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHGT6" + } + } + ] } ] }, @@ -4025,7 +5980,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET15" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET15" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHGT6" + } + } + ] } ] }, @@ -4056,7 +6028,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET16" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET16" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI7IO" + } + } + ] } ] }, @@ -4079,7 +6068,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET16" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET16" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI7IO" + } + } + ] } ] }, @@ -4110,7 +6116,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET17" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET17" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKXA6" + } + } + ] } ] }, @@ -4133,7 +6156,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET17" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET17" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKXA6" + } + } + ] } ] }, @@ -4164,7 +6204,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET18" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET18" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMPZO" + } + } + ] } ] }, @@ -4187,7 +6244,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET18" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET18" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMPZO" + } + } + ] } ] }, @@ -4218,7 +6292,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET19" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET19" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOHR6" + } + } + ] } ] }, @@ -4241,7 +6332,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET19" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET19" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOHR6" + } + } + ] } ] }, @@ -4272,7 +6380,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET2" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET2" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + } + ] } ] }, @@ -4295,7 +6420,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET2" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET2" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + } + ] } ] }, @@ -4326,7 +6468,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET20" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET20" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABR4OP" + } + } + ] } ] }, @@ -4349,7 +6508,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET20" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET20" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABR4OP" + } + } + ] } ] }, @@ -4380,7 +6556,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET21" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET21" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTUG7" + } + } + ] } ] }, @@ -4403,7 +6596,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET21" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET21" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTUG7" + } + } + ] } ] }, @@ -4434,7 +6644,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET22" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET22" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVM7P" + } + } + ] } ] }, @@ -4457,7 +6684,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET22" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET22" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVM7P" + } + } + ] } ] }, @@ -4488,7 +6732,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET23" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET23" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXEX7" + } + } + ] } ] }, @@ -4511,7 +6772,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET23" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET23" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXEX7" + } + } + ] } ] }, @@ -4542,7 +6820,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET24" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET24" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY5MP" + } + } + ] } ] }, @@ -4565,7 +6860,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET24" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET24" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY5MP" + } + } + ] } ] }, @@ -4596,7 +6908,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET25" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET25" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2VE7" + } + } + ] } ] }, @@ -4619,7 +6948,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET25" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET25" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2VE7" + } + } + ] } ] }, @@ -4650,7 +6996,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET26" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET26" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4N5P" + } + } + ] } ] }, @@ -4673,7 +7036,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET26" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET26" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4N5P" + } + } + ] } ] }, @@ -4704,7 +7084,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET27" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET27" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6FV7" + } + } + ] } ] }, @@ -4727,7 +7124,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET27" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET27" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6FV7" + } + } + ] } ] }, @@ -4758,7 +7172,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET28" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET28" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBKTY" + } + } + ] } ] }, @@ -4781,7 +7212,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET28" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET28" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBKTY" + } + } + ] } ] }, @@ -4812,7 +7260,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET29" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET29" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDC3I" + } + } + ] } ] }, @@ -4835,7 +7300,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET29" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET29" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDC3I" + } + } + ] } ] }, @@ -4866,7 +7348,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET3" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET3" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + } + ] } ] }, @@ -4889,7 +7388,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET3" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET3" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + } + ] } ] }, @@ -4920,7 +7436,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET30" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET30" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACF2CY" + } + } + ] } ] }, @@ -4943,7 +7476,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET30" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET30" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACF2CY" + } + } + ] } ] }, @@ -4974,7 +7524,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET31" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET31" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHSKI" + } + } + ] } ] }, @@ -4997,7 +7564,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET31" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET31" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHSKI" + } + } + ] } ] }, @@ -5028,7 +7612,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET32" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET32" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACILRY" + } + } + ] } ] }, @@ -5051,7 +7652,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET32" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET32" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACILRY" + } + } + ] } ] }, @@ -5082,7 +7700,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET33" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET33" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKDZI" + } + } + ] } ] }, @@ -5105,7 +7740,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET33" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET33" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKDZI" + } + } + ] } ] }, @@ -5136,7 +7788,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET34" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET34" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACM3AY" + } + } + ] } ] }, @@ -5159,7 +7828,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET34" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET34" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACM3AY" + } + } + ] } ] }, @@ -5190,7 +7876,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET35" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET35" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOTII" + } + } + ] } ] }, @@ -5213,7 +7916,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET35" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET35" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOTII" + } + } + ] } ] }, @@ -5244,7 +7964,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET36" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET36" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRIXZ" + } + } + ] } ] }, @@ -5267,7 +8004,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET36" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET36" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRIXZ" + } + } + ] } ] }, @@ -5298,7 +8052,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET37" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET37" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTA7J" + } + } + ] } ] }, @@ -5321,7 +8092,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET37" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET37" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTA7J" + } + } + ] } ] }, @@ -5352,7 +8140,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET38" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET38" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVYGZ" + } + } + ] } ] }, @@ -5375,7 +8180,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET38" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET38" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVYGZ" + } + } + ] } ] }, @@ -5406,7 +8228,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET39" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET39" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXQOJ" + } + } + ] } ] }, @@ -5429,7 +8268,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET39" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET39" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXQOJ" + } + } + ] } ] }, @@ -5460,7 +8316,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET4" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET4" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + } + ] } ] }, @@ -5483,7 +8356,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET4" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET4" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + } + ] } ] }, @@ -5514,7 +8404,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET40" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET40" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYJVZ" + } + } + ] } ] }, @@ -5537,7 +8444,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET40" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET40" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYJVZ" + } + } + ] } ] }, @@ -5568,7 +8492,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET41" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET41" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2B5J" + } + } + ] } ] }, @@ -5591,7 +8532,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET41" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET41" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2B5J" + } + } + ] } ] }, @@ -5622,7 +8580,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET42" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET42" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4ZEZ" + } + } + ] } ] }, @@ -5645,7 +8620,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET42" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET42" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4ZEZ" + } + } + ] } ] }, @@ -5676,7 +8668,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET43" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET43" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6RMJ" + } + } + ] } ] }, @@ -5699,7 +8708,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET43" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET43" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6RMJ" + } + } + ] } ] }, @@ -5730,7 +8756,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET44" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET44" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBG3K" + } + } + ] } ] }, @@ -5753,7 +8796,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET44" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET44" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBG3K" + } + } + ] } ] }, @@ -5784,7 +8844,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET45" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET45" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDOT2" + } + } + ] } ] }, @@ -5807,7 +8884,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET45" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET45" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDOT2" + } + } + ] } ] }, @@ -5838,7 +8932,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET46" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET46" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADFWKK" + } + } + ] } ] }, @@ -5861,7 +8972,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET46" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET46" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADFWKK" + } + } + ] } ] }, @@ -5892,7 +9020,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET47" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET47" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH6C2" + } + } + ] } ] }, @@ -5915,7 +9060,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET47" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET47" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH6C2" + } + } + ] } ] }, @@ -5946,7 +9108,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET48" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET48" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIHZK" + } + } + ] } ] }, @@ -5969,7 +9148,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET48" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET48" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIHZK" + } + } + ] } ] }, @@ -6000,7 +9196,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET49" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET49" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKPR2" + } + } + ] } ] }, @@ -6023,7 +9236,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET49" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET49" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKPR2" + } + } + ] } ] }, @@ -6054,7 +9284,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET5" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET5" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + } + } + ] } ] }, @@ -6077,7 +9324,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET5" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET5" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + } + } + ] } ] }, @@ -6108,7 +9372,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET6" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET6" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + } + ] } ] }, @@ -6131,7 +9412,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET6" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET6" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + } + ] } ] }, @@ -6162,7 +9460,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET7" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET7" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + } + ] } ] }, @@ -6185,7 +9500,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET7" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET7" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } + } + ] } ] }, @@ -6216,7 +9548,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET8" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET8" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + } + } + ] } ] }, @@ -6239,7 +9588,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET8" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET8" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + } + } + ] } ] }, @@ -6270,7 +9636,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET9" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET9" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN" + } + } + ] } ] }, @@ -6293,7 +9676,24 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "ASSET9" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "ASSET9" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN" + } + } + ] } ] }, @@ -6362,7 +9762,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } } ] }, @@ -6380,7 +9782,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } } ] }, @@ -6398,7 +9802,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } } ] }, @@ -6416,7 +9822,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } } ] }, @@ -6434,7 +9842,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } } ] }, @@ -6452,7 +9862,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + } } ] }, @@ -6470,7 +9882,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } } ] }, @@ -6488,7 +9902,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } } ] }, @@ -6506,7 +9922,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + } } ] }, @@ -6524,7 +9942,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN" + } } ] }, @@ -6542,7 +9962,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5" + } } ] }, @@ -6560,7 +9982,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N" + } } ] }, @@ -6578,7 +10002,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6KO" + } } ] }, @@ -6596,7 +10022,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDWC6" + } } ] }, @@ -6614,7 +10042,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFO3O" + } } ] }, @@ -6632,7 +10062,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHGT6" + } } ] }, @@ -6650,7 +10082,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI7IO" + } } ] }, @@ -6668,7 +10102,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKXA6" + } } ] }, @@ -6686,7 +10122,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMPZO" + } } ] }, @@ -6704,7 +10142,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOHR6" + } } ] }, @@ -6722,7 +10162,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABR4OP" + } } ] }, @@ -6740,7 +10182,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTUG7" + } } ] }, @@ -6758,7 +10202,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVM7P" + } } ] }, @@ -6776,7 +10222,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXEX7" + } } ] }, @@ -6794,7 +10242,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY5MP" + } } ] }, @@ -6812,7 +10262,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2VE7" + } } ] }, @@ -6830,7 +10282,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4N5P" + } } ] }, @@ -6848,7 +10302,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6FV7" + } } ] }, @@ -6866,7 +10322,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBKTY" + } } ] }, @@ -6884,7 +10342,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDC3I" + } } ] }, @@ -6902,7 +10362,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACF2CY" + } } ] }, @@ -6920,7 +10382,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHSKI" + } } ] }, @@ -6938,7 +10402,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACILRY" + } } ] }, @@ -6956,7 +10422,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKDZI" + } } ] }, @@ -6974,7 +10442,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACM3AY" + } } ] }, @@ -6992,7 +10462,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOTII" + } } ] }, @@ -7010,7 +10482,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRIXZ" + } } ] }, @@ -7028,7 +10502,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTA7J" + } } ] }, @@ -7046,7 +10522,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVYGZ" + } } ] }, @@ -7064,7 +10542,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXQOJ" + } } ] }, @@ -7082,7 +10562,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYJVZ" + } } ] }, @@ -7100,7 +10582,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2B5J" + } } ] }, @@ -7118,7 +10602,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4ZEZ" + } } ] }, @@ -7136,7 +10622,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6RMJ" + } } ] }, @@ -7154,7 +10642,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBG3K" + } } ] }, @@ -7172,7 +10662,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDOT2" + } } ] }, @@ -7190,7 +10682,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADFWKK" + } } ] }, @@ -7208,7 +10702,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH6C2" + } } ] }, @@ -7226,7 +10722,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIHZK" + } } ] }, @@ -7244,7 +10742,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKPR2" + } } ] } @@ -7599,7 +11099,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } } ] }, @@ -7617,7 +11119,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } } ] }, @@ -7635,7 +11139,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } } ] }, @@ -7653,7 +11159,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } } ] }, @@ -7671,7 +11179,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } } ] }, @@ -7689,7 +11199,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + } } ] }, @@ -7707,7 +11219,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } } ] }, @@ -7725,7 +11239,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXI7N" + } } ] }, @@ -7743,7 +11259,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRE5" + } } ] }, @@ -7761,7 +11279,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMN" + } } ] }, @@ -7779,7 +11299,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BV5" + } } ] }, @@ -7797,7 +11319,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6J5N" + } } ] }, @@ -7815,7 +11339,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB6KO" + } } ] }, @@ -7833,7 +11359,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDWC6" + } } ] }, @@ -7851,7 +11379,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFO3O" + } } ] }, @@ -7869,7 +11399,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHGT6" + } } ] }, @@ -7887,7 +11419,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI7IO" + } } ] }, @@ -7905,7 +11439,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKXA6" + } } ] }, @@ -7923,7 +11459,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMPZO" + } } ] }, @@ -7941,7 +11479,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOHR6" + } } ] }, @@ -7959,7 +11499,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABR4OP" + } } ] }, @@ -7977,7 +11519,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTUG7" + } } ] }, @@ -7995,7 +11539,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVM7P" + } } ] }, @@ -8013,7 +11559,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXEX7" + } } ] }, @@ -8031,7 +11579,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABY5MP" + } } ] }, @@ -8049,7 +11599,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2VE7" + } } ] }, @@ -8067,7 +11619,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4N5P" + } } ] }, @@ -8085,7 +11639,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6FV7" + } } ] }, @@ -8103,7 +11659,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBKTY" + } } ] }, @@ -8121,7 +11679,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDC3I" + } } ] }, @@ -8139,7 +11699,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACF2CY" + } } ] }, @@ -8157,7 +11719,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHSKI" + } } ] }, @@ -8175,7 +11739,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACILRY" + } } ] }, @@ -8193,7 +11759,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKDZI" + } } ] }, @@ -8211,7 +11779,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACM3AY" + } } ] }, @@ -8229,7 +11799,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOTII" + } } ] }, @@ -8247,7 +11819,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRIXZ" + } } ] }, @@ -8265,7 +11839,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTA7J" + } } ] }, @@ -8283,7 +11859,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVYGZ" + } } ] }, @@ -8301,7 +11879,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXQOJ" + } } ] }, @@ -8319,7 +11899,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYJVZ" + } } ] }, @@ -8337,7 +11919,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2B5J" + } } ] }, @@ -8355,7 +11939,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4ZEZ" + } } ] }, @@ -8373,7 +11959,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6RMJ" + } } ] }, @@ -8391,7 +11979,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBG3K" + } } ] }, @@ -8409,7 +11999,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDOT2" + } } ] }, @@ -8427,7 +12019,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADFWKK" + } } ] }, @@ -8445,7 +12039,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH6C2" + } } ] }, @@ -8463,7 +12059,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIHZK" + } } ] }, @@ -8481,7 +12079,9 @@ "key": { "symbol": "issuer" }, - "val": "void" + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKPR2" + } } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_no_limit_allows_any_spend.1.json b/contracts/globe-wallet/test_snapshots/tests/test_no_limit_allows_any_spend.1.json index f78ab0c..701cf9f 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_no_limit_allows_any_spend.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_no_limit_allows_any_spend.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -44,6 +96,70 @@ "min_temp_entry_ttl": 16, "max_entry_ttl": 6312000, "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -122,6 +238,39 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_code": { @@ -228,7 +377,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "record_spend" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -238,6 +429,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_raise_spend_then_lower_limit.1.json b/contracts/globe-wallet/test_snapshots/tests/test_raise_spend_then_lower_limit.1.json index 90bad75..d67ed47 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_raise_spend_then_lower_limit.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_raise_spend_then_lower_limit.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -46,7 +98,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -76,7 +143,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -106,7 +188,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -146,7 +243,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -169,7 +281,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -217,7 +344,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -240,7 +382,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -258,6 +415,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -342,7 +563,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", "key": { "ledger_key_nonce": { - "nonce": 4270020994084947596 + "nonce": 1033654523790656264 } }, "durability": "temporary" @@ -357,7 +578,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", "key": { "ledger_key_nonce": { - "nonce": 4270020994084947596 + "nonce": 1033654523790656264 } }, "durability": "temporary", @@ -375,7 +596,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", "key": { "ledger_key_nonce": { - "nonce": 4837995959683129791 + "nonce": 2032731177588607455 } }, "durability": "temporary" @@ -390,7 +611,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", "key": { "ledger_key_nonce": { - "nonce": 4837995959683129791 + "nonce": 2032731177588607455 } }, "durability": "temporary", @@ -435,6 +656,39 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_code": { @@ -541,7 +795,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -551,6 +847,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -643,7 +1008,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -748,7 +1128,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -844,7 +1239,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -885,7 +1295,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] } @@ -944,7 +1369,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -1037,7 +1477,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] } @@ -1096,7 +1551,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -1192,7 +1662,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -1233,7 +1718,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -1326,7 +1826,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_boundary_drift_awareness.1.json b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_boundary_drift_awareness.1.json index 5dccb69..c9abbe5 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_boundary_drift_awareness.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_boundary_drift_awareness.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -46,7 +98,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -74,7 +141,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -113,7 +195,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -136,7 +233,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -184,7 +296,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -207,7 +334,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -225,6 +367,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -336,6 +542,39 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_data": { @@ -475,7 +714,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -485,6 +766,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -577,7 +927,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -682,7 +1047,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_boundary_first_second_of_new_day_resets.1.json b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_boundary_first_second_of_new_day_resets.1.json index f17af44..9968d48 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_boundary_first_second_of_new_day_resets.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_boundary_first_second_of_new_day_resets.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -46,7 +98,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -74,7 +141,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -113,7 +195,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -136,7 +233,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -184,7 +296,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -207,7 +334,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -225,6 +367,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -336,6 +542,39 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_data": { @@ -475,7 +714,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -485,6 +766,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -577,7 +927,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -682,7 +1047,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_boundary_last_second_of_day_accumulates.1.json b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_boundary_last_second_of_day_accumulates.1.json index 25e09f6..e0c00e5 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_boundary_last_second_of_day_accumulates.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_boundary_last_second_of_day_accumulates.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -46,7 +98,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -86,7 +153,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -109,7 +191,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -157,7 +254,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -180,7 +292,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -198,6 +325,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -276,6 +467,39 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_data": { @@ -415,7 +639,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -425,6 +691,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -517,7 +852,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -622,7 +972,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -718,7 +1083,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_bucket_is_integer_division.1.json b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_bucket_is_integer_division.1.json index 3b0e902..0c208b6 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_bucket_is_integer_division.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_bucket_is_integer_division.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -46,7 +98,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -87,7 +154,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -110,7 +192,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -158,7 +255,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -181,7 +293,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -199,6 +326,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -277,6 +468,39 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_data": { @@ -416,7 +640,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -426,6 +692,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -518,7 +853,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -623,7 +973,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -719,7 +1084,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -760,7 +1140,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -856,7 +1251,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_exact_day_boundary.1.json b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_exact_day_boundary.1.json index af51ed0..d6306b4 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_exact_day_boundary.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_exact_day_boundary.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -46,7 +98,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -75,7 +142,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -114,7 +196,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -137,7 +234,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -185,7 +297,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -208,7 +335,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -226,6 +368,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -310,7 +516,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", "key": { "ledger_key_nonce": { - "nonce": 4837995959683129791 + "nonce": 1033654523790656264 } }, "durability": "temporary" @@ -325,7 +531,40 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", "key": { "ledger_key_nonce": { - "nonce": 4837995959683129791 + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 } }, "durability": "temporary", @@ -476,7 +715,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -486,6 +767,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -578,7 +928,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -683,7 +1048,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -779,7 +1159,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -820,7 +1215,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_exceeds_limit_fails.1.json b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_exceeds_limit_fails.1.json index 5f8be63..cb34074 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_exceeds_limit_fails.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_exceeds_limit_fails.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -46,7 +98,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -86,7 +153,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -109,7 +191,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -157,7 +254,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -180,7 +292,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -198,6 +325,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -276,6 +467,39 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_data": { @@ -415,7 +639,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -425,6 +691,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -517,7 +852,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -622,7 +972,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -718,7 +1083,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_negative_amount_cannot_bypass_daily_limit.1.json b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_negative_amount_cannot_bypass_daily_limit.1.json index 42276ca..1586743 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_negative_amount_cannot_bypass_daily_limit.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_negative_amount_cannot_bypass_daily_limit.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -46,7 +98,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -87,7 +154,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -110,7 +192,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -158,7 +255,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -181,7 +293,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -199,6 +326,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -277,6 +468,39 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_data": { @@ -416,7 +640,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -426,6 +692,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -518,7 +853,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -623,7 +973,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -719,7 +1084,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -760,7 +1140,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -856,7 +1251,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_negative_amount_fails.1.json b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_negative_amount_fails.1.json index 5731860..3bd0e12 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_negative_amount_fails.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_negative_amount_fails.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -58,7 +110,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -81,7 +148,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -99,6 +181,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -177,6 +323,39 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_code": { @@ -283,7 +462,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -293,6 +514,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -385,7 +675,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -481,7 +786,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_overflow_does_not_poison_later_calls.1.json b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_overflow_does_not_poison_later_calls.1.json index be1d7a3..2b85e45 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_overflow_does_not_poison_later_calls.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_overflow_does_not_poison_later_calls.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -46,7 +98,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -75,7 +142,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -114,7 +196,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -137,7 +234,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -185,7 +297,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -208,7 +335,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -226,6 +368,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -310,7 +516,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", "key": { "ledger_key_nonce": { - "nonce": 4837995959683129791 + "nonce": 1033654523790656264 } }, "durability": "temporary" @@ -325,7 +531,40 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", "key": { "ledger_key_nonce": { - "nonce": 4837995959683129791 + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 } }, "durability": "temporary", @@ -476,7 +715,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -486,6 +767,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -578,7 +928,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -683,7 +1048,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -779,7 +1159,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -820,7 +1215,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_rejected_negative_amount_does_not_mutate_state.1.json b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_rejected_negative_amount_does_not_mutate_state.1.json index 6a0d527..5dfcaa3 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_rejected_negative_amount_does_not_mutate_state.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_rejected_negative_amount_does_not_mutate_state.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -46,7 +98,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -76,7 +143,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -115,7 +197,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -138,7 +235,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -186,7 +298,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -209,7 +336,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -227,6 +369,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -311,7 +517,40 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", "key": { "ledger_key_nonce": { - "nonce": 2032731177588607455 + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 } }, "durability": "temporary" @@ -326,7 +565,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", "key": { "ledger_key_nonce": { - "nonce": 2032731177588607455 + "nonce": 4270020994084947596 } }, "durability": "temporary", @@ -477,7 +716,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -487,6 +768,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -579,7 +929,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -684,7 +1049,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -780,7 +1160,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -821,7 +1216,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -917,7 +1327,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -958,7 +1383,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_within_limit.1.json b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_within_limit.1.json index 96382a8..0117b76 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_within_limit.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_within_limit.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -46,7 +98,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -74,7 +141,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -113,7 +195,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -136,7 +233,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -184,7 +296,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -207,7 +334,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -225,6 +367,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -336,6 +542,39 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_data": { @@ -475,7 +714,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -485,6 +766,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -577,7 +927,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -682,7 +1047,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_zero_amount_fails.1.json b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_zero_amount_fails.1.json index f461a34..ab47696 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_record_spend_zero_amount_fails.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_record_spend_zero_amount_fails.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -58,7 +110,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -81,7 +148,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -99,6 +181,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -177,6 +323,39 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_code": { @@ -283,7 +462,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -293,6 +514,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -385,7 +675,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -481,7 +786,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_remove_allowed_token.1.json b/contracts/globe-wallet/test_snapshots/tests/test_remove_allowed_token.1.json index bca45fe..84b39fd 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_remove_allowed_token.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_remove_allowed_token.1.json @@ -218,7 +218,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ], [ @@ -482,7 +482,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ] ] @@ -601,7 +601,14 @@ } ], "data": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] } } } @@ -791,11 +798,18 @@ "v0": { "topics": [ { - "symbol": "token_allowed" + "symbol": "allowed_token_added" } ], "data": { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] } } } @@ -914,11 +928,18 @@ "v0": { "topics": [ { - "symbol": "token_disallowed" + "symbol": "allowed_token_removed" } ], "data": { - "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + ] } } } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_same_code_different_issuer_independent_spend_limits.1.json b/contracts/globe-wallet/test_snapshots/tests/test_same_code_different_issuer_independent_spend_limits.1.json new file mode 100644 index 0000000..860b6c6 --- /dev/null +++ b/contracts/globe-wallet/test_snapshots/tests/test_same_code_different_issuer_independent_spend_limits.1.json @@ -0,0 +1,2442 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_spend_limit", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 500 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_spend_limit", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "record_spend", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 400 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "record_spend", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 800 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "record_spend", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 200 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "DailySpent" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "DailySpent" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 400 + } + } + }, + { + "key": { + "symbol": "day" + }, + "val": { + "u64": 0 + } + } + ] + } + } + }, + "ext": "v0" + }, + 34560 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "DailySpent" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "DailySpent" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "day" + }, + "val": { + "u64": 0 + } + } + ] + } + } + }, + "ext": "v0" + }, + 34560 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "SpendLimit" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "SpendLimit" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 500 + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "SpendLimit" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "SpendLimit" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + } + ] + }, + "durability": "persistent", + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 518400 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "initialized" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "USDC" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "USDC" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 500 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "spend_limit_set" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "USDC" + }, + { + "i128": { + "hi": 0, + "lo": 500 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "spend_limit_set" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "USDC" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "get_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_spend_limit" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 500 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "get_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_spend_limit" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 400 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "spend_recorded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "USDC" + }, + { + "i128": { + "hi": 0, + "lo": 400 + } + }, + { + "i128": { + "hi": 0, + "lo": 400 + } + }, + { + "i128": { + "hi": 0, + "lo": 500 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "record_spend" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 800 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "spend_recorded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "USDC" + }, + { + "i128": { + "hi": 0, + "lo": 800 + } + }, + { + "i128": { + "hi": 0, + "lo": 800 + } + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "record_spend" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 200 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "error": { + "contract": 1007 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1007 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1007 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "record_spend" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 200 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 200 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "spend_recorded" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "USDC" + }, + { + "i128": { + "hi": 0, + "lo": 200 + } + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "record_spend" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 1 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "error": { + "contract": 1007 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1007 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1007 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "record_spend" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "USDC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 1 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/globe-wallet/test_snapshots/tests/test_send_happy_path_moves_tokens_and_records_spend.1.json b/contracts/globe-wallet/test_snapshots/tests/test_send_happy_path_moves_tokens_and_records_spend.1.json index b59e063..98770a2 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_send_happy_path_moves_tokens_and_records_spend.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_send_happy_path_moves_tokens_and_records_spend.1.json @@ -27,6 +27,43 @@ } ] ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V", @@ -106,7 +143,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -168,7 +220,22 @@ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" @@ -258,7 +325,7 @@ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V", "key": { "ledger_key_nonce": { - "nonce": 5541220902715666415 + "nonce": 1033654523790656264 } }, "durability": "temporary" @@ -273,7 +340,7 @@ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V", "key": { "ledger_key_nonce": { - "nonce": 5541220902715666415 + "nonce": 1033654523790656264 } }, "durability": "temporary", @@ -320,9 +387,7 @@ ] }, "durability": "persistent", - "val": { - "bool": true - } + "val": "void" } }, "ext": "v0" @@ -343,7 +408,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -366,7 +446,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -414,7 +509,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -437,7 +547,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -455,6 +580,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -509,7 +698,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ], [ @@ -551,7 +740,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", "key": { "ledger_key_nonce": { - "nonce": 4837995959683129791 + "nonce": 2032731177588607455 } }, "durability": "temporary" @@ -566,7 +755,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", "key": { "ledger_key_nonce": { - "nonce": 4837995959683129791 + "nonce": 2032731177588607455 } }, "durability": "temporary", @@ -687,7 +876,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", "key": { "ledger_key_nonce": { - "nonce": 1033654523790656264 + "nonce": 4837995959683129791 } }, "durability": "temporary" @@ -702,7 +891,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", "key": { "ledger_key_nonce": { - "nonce": 1033654523790656264 + "nonce": 4837995959683129791 } }, "durability": "temporary", @@ -720,7 +909,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", "key": { "ledger_key_nonce": { - "nonce": 2032731177588607455 + "nonce": 4270020994084947596 } }, "durability": "temporary" @@ -735,7 +924,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", "key": { "ledger_key_nonce": { - "nonce": 2032731177588607455 + "nonce": 4270020994084947596 } }, "durability": "temporary", @@ -753,7 +942,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", "key": { "ledger_key_nonce": { - "nonce": 4270020994084947596 + "nonce": 5541220902715666415 } }, "durability": "temporary" @@ -768,7 +957,40 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", "key": { "ledger_key_nonce": { - "nonce": 4270020994084947596 + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 } }, "durability": "temporary", @@ -1089,7 +1311,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ] ] @@ -1208,7 +1430,14 @@ } ], "data": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] } } } @@ -1236,6 +1465,102 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -1487,11 +1812,18 @@ "v0": { "topics": [ { - "symbol": "token_allowed" + "symbol": "allowed_token_added" } ], "data": { - "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A" + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A" + } + ] } } } @@ -1543,7 +1875,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -1738,7 +2085,22 @@ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" diff --git a/contracts/globe-wallet/test_snapshots/tests/test_send_over_daily_limit_fails_and_moves_no_tokens.1.json b/contracts/globe-wallet/test_snapshots/tests/test_send_over_daily_limit_fails_and_moves_no_tokens.1.json index 13781b6..e6001a3 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_send_over_daily_limit_fails_and_moves_no_tokens.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_send_over_daily_limit_fails_and_moves_no_tokens.1.json @@ -27,6 +27,43 @@ } ] ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V", @@ -106,7 +143,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -201,7 +253,7 @@ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V", "key": { "ledger_key_nonce": { - "nonce": 5541220902715666415 + "nonce": 1033654523790656264 } }, "durability": "temporary" @@ -216,7 +268,7 @@ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V", "key": { "ledger_key_nonce": { - "nonce": 5541220902715666415 + "nonce": 1033654523790656264 } }, "durability": "temporary", @@ -263,9 +315,7 @@ ] }, "durability": "persistent", - "val": { - "bool": true - } + "val": "void" } }, "ext": "v0" @@ -286,7 +336,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -309,7 +374,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -327,6 +407,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -381,7 +525,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ], [ @@ -423,7 +567,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", "key": { "ledger_key_nonce": { - "nonce": 4837995959683129791 + "nonce": 2032731177588607455 } }, "durability": "temporary" @@ -438,7 +582,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", "key": { "ledger_key_nonce": { - "nonce": 4837995959683129791 + "nonce": 2032731177588607455 } }, "durability": "temporary", @@ -559,7 +703,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", "key": { "ledger_key_nonce": { - "nonce": 1033654523790656264 + "nonce": 4837995959683129791 } }, "durability": "temporary" @@ -574,7 +718,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", "key": { "ledger_key_nonce": { - "nonce": 1033654523790656264 + "nonce": 4837995959683129791 } }, "durability": "temporary", @@ -592,7 +736,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", "key": { "ledger_key_nonce": { - "nonce": 2032731177588607455 + "nonce": 4270020994084947596 } }, "durability": "temporary" @@ -607,7 +751,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", "key": { "ledger_key_nonce": { - "nonce": 2032731177588607455 + "nonce": 4270020994084947596 } }, "durability": "temporary", @@ -625,7 +769,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", "key": { "ledger_key_nonce": { - "nonce": 4270020994084947596 + "nonce": 5541220902715666415 } }, "durability": "temporary" @@ -640,7 +784,40 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", "key": { "ledger_key_nonce": { - "nonce": 4270020994084947596 + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 } }, "durability": "temporary", @@ -855,7 +1032,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ] ] @@ -974,7 +1151,14 @@ } ], "data": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] } } } @@ -1002,6 +1186,102 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -1253,11 +1533,18 @@ "v0": { "topics": [ { - "symbol": "token_allowed" + "symbol": "allowed_token_added" } ], "data": { - "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A" + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A" + } + ] } } } @@ -1309,7 +1596,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -1504,7 +1806,22 @@ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" @@ -1606,7 +1923,22 @@ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" diff --git a/contracts/globe-wallet/test_snapshots/tests/test_send_rejects_disallowed_token.1.json b/contracts/globe-wallet/test_snapshots/tests/test_send_rejects_disallowed_token.1.json index 82363e1..cec9a93 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_send_rejects_disallowed_token.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_send_rejects_disallowed_token.1.json @@ -27,6 +27,43 @@ } ] ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V", @@ -92,7 +129,7 @@ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V", "key": { "ledger_key_nonce": { - "nonce": 5541220902715666415 + "nonce": 1033654523790656264 } }, "durability": "temporary" @@ -107,7 +144,7 @@ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V", "key": { "ledger_key_nonce": { - "nonce": 5541220902715666415 + "nonce": 1033654523790656264 } }, "durability": "temporary", @@ -119,6 +156,70 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -173,7 +274,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ], [ @@ -241,6 +342,39 @@ 4095 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_data": { @@ -371,7 +505,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ] ] @@ -490,7 +624,14 @@ } ], "data": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] } } } @@ -518,6 +659,102 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -665,7 +902,22 @@ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -700,7 +952,7 @@ ], "data": { "error": { - "contract": 31 + "contract": 1034 } } } @@ -721,7 +973,7 @@ }, { "error": { - "contract": 31 + "contract": 1034 } } ], @@ -746,7 +998,7 @@ }, { "error": { - "contract": 31 + "contract": 1034 } } ], @@ -767,7 +1019,22 @@ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" diff --git a/contracts/globe-wallet/test_snapshots/tests/test_send_rejects_reentrant_malicious_token.1.json b/contracts/globe-wallet/test_snapshots/tests/test_send_rejects_reentrant_malicious_token.1.json index b28fc3c..4a9563f 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_send_rejects_reentrant_malicious_token.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_send_rejects_reentrant_malicious_token.1.json @@ -27,6 +27,43 @@ } ] ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [], [ [ @@ -63,7 +100,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -158,9 +210,7 @@ ] }, "durability": "persistent", - "val": { - "bool": true - } + "val": "void" } }, "ext": "v0" @@ -181,7 +231,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -204,7 +269,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -222,6 +302,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -276,7 +420,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ], [ @@ -318,7 +462,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", "key": { "ledger_key_nonce": { - "nonce": 5541220902715666415 + "nonce": 1033654523790656264 } }, "durability": "temporary" @@ -333,7 +477,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", "key": { "ledger_key_nonce": { - "nonce": 5541220902715666415 + "nonce": 1033654523790656264 } }, "durability": "temporary", @@ -454,7 +598,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", "key": { "ledger_key_nonce": { - "nonce": 1033654523790656264 + "nonce": 2032731177588607455 } }, "durability": "temporary" @@ -469,7 +613,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", "key": { "ledger_key_nonce": { - "nonce": 1033654523790656264 + "nonce": 2032731177588607455 } }, "durability": "temporary", @@ -478,7 +622,7 @@ }, "ext": "v0" }, - 6311999 + 6312099 ] ], [ @@ -511,7 +655,40 @@ }, "ext": "v0" }, - 6312099 + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 ] ], [ @@ -539,10 +716,25 @@ "storage": [ { "key": { - "symbol": "code" + "symbol": "asset" }, "val": { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } }, { @@ -589,7 +781,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ] ] @@ -708,7 +900,14 @@ } ], "data": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] } } } @@ -736,6 +935,102 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -763,7 +1058,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] } @@ -835,11 +1145,18 @@ "v0": { "topics": [ { - "symbol": "token_allowed" + "symbol": "allowed_token_added" } ], "data": { - "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] } } } @@ -891,7 +1208,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -1086,7 +1418,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -1289,7 +1636,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -1525,7 +1887,7 @@ ], "data": { "error": { - "contract": 33 + "contract": 1036 } } } @@ -1546,7 +1908,7 @@ }, { "error": { - "contract": 33 + "contract": 1036 } } ], @@ -1571,7 +1933,7 @@ }, { "error": { - "contract": 33 + "contract": 1036 } } ], @@ -1592,7 +1954,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" @@ -1636,7 +2013,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_send_rejects_when_token_wrapper_not_set.1.json b/contracts/globe-wallet/test_snapshots/tests/test_send_rejects_when_token_wrapper_not_set.1.json index abea28f..45f74ad 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_send_rejects_when_token_wrapper_not_set.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_send_rejects_when_token_wrapper_not_set.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF", @@ -92,7 +129,7 @@ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF", "key": { "ledger_key_nonce": { - "nonce": 801925984706572462 + "nonce": 5541220902715666415 } }, "durability": "temporary" @@ -107,7 +144,7 @@ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF", "key": { "ledger_key_nonce": { - "nonce": 801925984706572462 + "nonce": 5541220902715666415 } }, "durability": "temporary", @@ -154,8 +191,70 @@ ] }, "durability": "persistent", + "val": "void" + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", "val": { - "bool": true + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] } } }, @@ -206,7 +305,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ], [ @@ -215,7 +314,7 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", "key": { "ledger_key_nonce": { - "nonce": 5541220902715666415 + "nonce": 1033654523790656264 } }, "durability": "temporary" @@ -230,7 +329,40 @@ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", "key": { "ledger_key_nonce": { - "nonce": 5541220902715666415 + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 } }, "durability": "temporary", @@ -372,7 +504,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ] ] @@ -445,6 +577,102 @@ }, "failed_call": false }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, { "event": { "ext": "v0", @@ -607,11 +835,18 @@ "v0": { "topics": [ { - "symbol": "token_allowed" + "symbol": "allowed_token_added" } ], "data": { - "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN" + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN" + } + ] } } } @@ -666,7 +901,22 @@ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" @@ -701,7 +951,7 @@ ], "data": { "error": { - "contract": 32 + "contract": 1035 } } } @@ -722,7 +972,7 @@ }, { "error": { - "contract": 32 + "contract": 1035 } } ], @@ -747,7 +997,7 @@ }, { "error": { - "contract": 32 + "contract": 1035 } } ], @@ -768,7 +1018,22 @@ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" diff --git a/contracts/globe-wallet/test_snapshots/tests/test_set_token_wrapper_requires_admin.1.json b/contracts/globe-wallet/test_snapshots/tests/test_set_token_wrapper_requires_admin.1.json index faf371c..65a314e 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_set_token_wrapper_requires_admin.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_set_token_wrapper_requires_admin.1.json @@ -60,7 +60,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ], [ @@ -81,7 +81,7 @@ }, "ext": "v0" }, - 4095 + 518400 ] ] ] diff --git a/contracts/globe-wallet/test_snapshots/tests/test_spend_limit_and_record_spend_reject_unregistered_asset.1.json b/contracts/globe-wallet/test_snapshots/tests/test_spend_limit_and_record_spend_reject_unregistered_asset.1.json new file mode 100644 index 0000000..4233911 --- /dev/null +++ b/contracts/globe-wallet/test_snapshots/tests/test_spend_limit_and_record_spend_reject_unregistered_asset.1.json @@ -0,0 +1,577 @@ +{ + "generators": { + "address": 4, + "nonce": 0 + }, + "auth": [ + [], + [], + [], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 4096, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 6312000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 518400 + ] + ] + ] + }, + "events": [ + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initialize" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "initialized" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initialize" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "EURC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "error": { + "contract": 1005 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1005 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1005 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "set_spend_limit" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "EURC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "EURC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 100 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "record_spend" + } + ], + "data": { + "error": { + "contract": 1005 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1005 + } + } + ], + "data": { + "string": "escalating Ok(ScErrorType::Contract) frame-exit to Err" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1005 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "record_spend" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "EURC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + }, + { + "i128": { + "hi": 0, + "lo": 100 + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "get_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "EURC" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "get_spend_limit" + } + ], + "data": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/globe-wallet/test_snapshots/tests/test_spend_limit_set_and_get.1.json b/contracts/globe-wallet/test_snapshots/tests/test_spend_limit_set_and_get.1.json index a49d30e..aa500cd 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_spend_limit_set_and_get.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_spend_limit_set_and_get.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -58,7 +110,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -81,7 +148,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -99,6 +181,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -177,6 +323,39 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_code": { @@ -283,7 +462,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -293,6 +514,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -385,7 +675,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_spend_limit_ttl_extension_after_long_idle_period.1.json b/contracts/globe-wallet/test_snapshots/tests/test_spend_limit_ttl_extension_after_long_idle_period.1.json index c33311a..e57a26f 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_spend_limit_ttl_extension_after_long_idle_period.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_spend_limit_ttl_extension_after_long_idle_period.1.json @@ -5,6 +5,43 @@ }, "auth": [ [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -18,7 +55,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -58,7 +110,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -81,7 +148,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -99,6 +181,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -177,6 +323,39 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_code": { @@ -283,7 +462,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -293,6 +514,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -385,7 +675,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] } diff --git a/contracts/globe-wallet/test_snapshots/two_spends_in_one_host_invocation_accumulate.1.json b/contracts/globe-wallet/test_snapshots/two_spends_in_one_host_invocation_accumulate.1.json index 53035f8..c5ac4a2 100644 --- a/contracts/globe-wallet/test_snapshots/two_spends_in_one_host_invocation_accumulate.1.json +++ b/contracts/globe-wallet/test_snapshots/two_spends_in_one_host_invocation_accumulate.1.json @@ -4,6 +4,43 @@ "nonce": 0 }, "auth": [ + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_asset", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], [ [ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", @@ -17,7 +54,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -45,7 +97,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -71,7 +138,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -111,7 +193,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -134,7 +231,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -182,7 +294,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -205,7 +332,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] } ] }, @@ -223,6 +365,70 @@ 518400 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "UserAssets" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], [ { "contract_data": { @@ -353,6 +559,39 @@ 6311999 ] ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], [ { "contract_data": { @@ -425,7 +664,49 @@ "bytes": "0000000000000000000000000000000000000000000000000000000000000001" }, { - "symbol": "set_spend_limit" + "symbol": "add_asset" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "asset_added" } ], "data": { @@ -435,6 +716,75 @@ }, { "string": "XLM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_asset" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_spend_limit" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -530,7 +880,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -575,7 +940,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -680,7 +1060,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -806,7 +1201,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { @@ -902,7 +1312,22 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" }, { - "string": "XLM" + "map": [ + { + "key": { + "symbol": "code" + }, + "val": { + "string": "XLM" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": "void" + } + ] }, { "i128": { diff --git a/contracts/globe-wallet/tests/record_spend_reentrancy.rs b/contracts/globe-wallet/tests/record_spend_reentrancy.rs index 8db4214..e457465 100644 --- a/contracts/globe-wallet/tests/record_spend_reentrancy.rs +++ b/contracts/globe-wallet/tests/record_spend_reentrancy.rs @@ -1,4 +1,4 @@ -use globe_wallet::{GlobeWallet, GlobeWalletClient, WalletError}; +use globe_wallet::{AssetInfo, GlobeWallet, GlobeWalletClient, WalletError}; use soroban_sdk::{contract, contractimpl, testutils::Address as _, Address, Env, String}; #[contract] @@ -10,13 +10,13 @@ impl SameInvocationBatcher { env: Env, wallet: Address, user: Address, - asset_code: String, + asset: AssetInfo, first: i128, second: i128, ) { let wallet = GlobeWalletClient::new(&env, &wallet); - wallet.record_spend(&user, &asset_code, &first); - wallet.record_spend(&user, &asset_code, &second); + wallet.record_spend(&user, &asset, &first); + wallet.record_spend(&user, &asset, &second); } } @@ -30,22 +30,26 @@ fn two_spends_in_one_host_invocation_accumulate() { let batcher_id = env.register_contract(None, SameInvocationBatcher); let batcher = SameInvocationBatcherClient::new(&env, &batcher_id); let user = Address::generate(&env); - let asset_code = String::from_str(&env, "XLM"); + let asset = AssetInfo { + code: String::from_str(&env, "XLM"), + issuer: None, + }; - wallet.set_spend_limit(&user, &asset_code, &1_000_i128); + wallet.add_asset(&user, &asset); + wallet.set_spend_limit(&user, &asset, &1_000_i128); // Both calls share one root host invocation. The second call must observe // the first call's write rather than overwrite a stale zero value. batcher.record_twice( &wallet_id, &user, - &asset_code, + &asset, &600_i128, &400_i128, ); assert_eq!( - wallet.try_record_spend(&user, &asset_code, &1_i128), + wallet.try_record_spend(&user, &asset, &1_i128), Err(Ok(WalletError::SpendLimitExceeded)) ); }