From 1e2ce7f1349a0e698f78d9e028a8d5ba2ebfb271 Mon Sep 17 00:00:00 2001 From: Ndifreke000 Date: Sat, 29 Aug 2026 18:39:18 +0100 Subject: [PATCH 1/2] fix(globe-wallet): enforce minimum timelock delays for upgrades and recovery propose_upgrade and set_recovery_config accepted delay_in_ledgers = 0, letting either timelock be silently configured to provide zero reaction time. Add MIN_UPGRADE_DELAY_LEDGERS (3 days) and MIN_RECOVERY_DELAY_LEDGERS (1 day), reject delays below them with typed errors, and cover both the new floors and the unaffected happy path with tests. Closes #84 --- contracts/globe-wallet/src/lib.rs | 279 +++++++++++++++++++++++++----- 1 file changed, 232 insertions(+), 47 deletions(-) diff --git a/contracts/globe-wallet/src/lib.rs b/contracts/globe-wallet/src/lib.rs index be29e6c..ef047b8 100644 --- a/contracts/globe-wallet/src/lib.rs +++ b/contracts/globe-wallet/src/lib.rs @@ -255,6 +255,12 @@ pub enum WalletError { /// The `token-wrapper::transfer_from` call `send` makes failed (e.g. /// insufficient/expired allowance) or could not be invoked at all. TokenTransferFailed = 1036, + /// `propose_upgrade`'s `delay_in_ledgers` is below + /// [`GlobeWallet::MIN_UPGRADE_DELAY_LEDGERS`] (see issue #84). + UpgradeDelayTooShort = 1037, + /// `set_recovery_config`'s `delay_in_ledgers` is below + /// [`GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS`] (see issue #84). + RecoveryDelayTooShort = 1038, } // ── Contract ────────────────────────────────────────────────────────────────── @@ -283,6 +289,40 @@ impl GlobeWallet { /// per-call cost bounded and predictable. pub const MAX_GUARDIANS: u32 = 15; + /// Minimum delay (in ledgers) `propose_upgrade` must enforce between a + /// proposal and `execute_upgrade` becoming callable (see issue #84). + /// + /// Without a floor, `delay_in_ledgers = 0` makes "propose" and "execute" + /// indistinguishable from a single atomic code swap — the exact opposite + /// of the documented purpose ("wait for the delay to elapse before + /// executing"). `propose_upgrade` requires only the *current* admin key, + /// not guardian quorum, so this timelock is the *only* defense against a + /// compromised admin key entrenching itself by swapping the contract's + /// code before anyone watching `upgrade_proposed` can react. Three days' + /// worth of ledgers (`LEDGERS_PER_DAY * 3`) is chosen — deliberately + /// longer than [`Self::MIN_RECOVERY_DELAY_LEDGERS`] — because a code + /// swap is a strictly larger blast radius than an admin-key rotation and + /// deserves enough margin for a human (not just an automated monitor) to + /// notice and respond even across a weekend. + pub const MIN_UPGRADE_DELAY_LEDGERS: u32 = LEDGERS_PER_DAY * 3; + + /// Minimum delay (in ledgers) `set_recovery_config` must enforce between + /// guardian quorum being reached and `execute_recovery` becoming + /// callable (see issue #84). + /// + /// Mirrors [`Self::MIN_UPGRADE_DELAY_LEDGERS`]'s rationale: a `delay_in_ledgers` + /// floor is required because the doc comment on [`RecoveryConfig::delay_in_ledgers`] + /// promises the admin "a window to notice and cancel a malicious or + /// mistaken recovery" — a promise `delay_in_ledgers = 0` breaks entirely, + /// since `cancel_recovery` would then have to race the very transaction + /// that reached quorum. Recovery already has one layer `propose_upgrade` + /// lacks (independent guardian quorum, not a single key), so one day's + /// worth of ledgers (`LEDGERS_PER_DAY`) is a sufficient floor for this + /// second layer: enough for a human to plausibly notice the + /// `recovery_quorum_reached` event, without needlessly delaying a + /// legitimate lost-device recovery that quorum has already vetted. + pub const MIN_RECOVERY_DELAY_LEDGERS: u32 = LEDGERS_PER_DAY; + /// Initialize the contract with an admin address. /// /// # Errors @@ -388,6 +428,8 @@ impl GlobeWallet { /// # Errors /// * [`WalletError::UpgradeAlreadyPending`] — an upgrade is already queued /// * [`WalletError::Unauthorized`] — caller is not the current admin + /// * [`WalletError::UpgradeDelayTooShort`] — `delay_in_ledgers` is below + /// [`Self::MIN_UPGRADE_DELAY_LEDGERS`] (see issue #84) /// /// See [`Self::execute_upgrade`] for operational notes and the correct /// sequence of steps (upload → propose → wait → execute). @@ -403,6 +445,9 @@ impl GlobeWallet { return Err(WalletError::UpgradeAlreadyPending); } Self::bump_instance_ttl(&env); + if delay_in_ledgers < Self::MIN_UPGRADE_DELAY_LEDGERS { + return Err(WalletError::UpgradeDelayTooShort); + } let ready_at = env.ledger().sequence().saturating_add(delay_in_ledgers); let proposal = UpgradeProposal { wasm_hash: wasm_hash.clone(), @@ -706,6 +751,8 @@ impl GlobeWallet { /// `threshold > guardians.len()`. /// * [`WalletError::RecoveryAlreadyPending`] — a `RecoveryProposal` is /// currently in flight; call `cancel_recovery` first. + /// * [`WalletError::RecoveryDelayTooShort`] — `delay_in_ledgers` is below + /// [`Self::MIN_RECOVERY_DELAY_LEDGERS`] (see issue #84). pub fn set_recovery_config( env: Env, admin: Address, @@ -725,6 +772,9 @@ impl GlobeWallet { return Err(WalletError::NotEnoughGuardians); } Self::bump_instance_ttl(&env); + if delay_in_ledgers < Self::MIN_RECOVERY_DELAY_LEDGERS { + return Err(WalletError::RecoveryDelayTooShort); + } let config = RecoveryConfig { threshold, delay_in_ledgers, @@ -2124,9 +2174,10 @@ mod tests { client.add_asset(&user, &xlm(&env)); let wasm_hash = BytesN::from_array(&env, &[3u8; 32]); - client.propose_upgrade(&admin, &wasm_hash, &1u32); + client.propose_upgrade(&admin, &wasm_hash, &GlobeWallet::MIN_UPGRADE_DELAY_LEDGERS); - env.ledger().set_sequence_number(2); + env.ledger() + .set_sequence_number(GlobeWallet::MIN_UPGRADE_DELAY_LEDGERS); // Traps here (host-level), after all contract-level checks passed. client.execute_upgrade(&admin, &wasm_hash); } @@ -2166,7 +2217,7 @@ mod tests { client.initialize(&admin); let wasm_hash = BytesN::from_array(&env, &[7u8; 32]); - client.propose_upgrade(&admin, &wasm_hash, &5u32); + client.propose_upgrade(&admin, &wasm_hash, &GlobeWallet::MIN_UPGRADE_DELAY_LEDGERS); // A non-admin cannot execute the upgrade, even once proposed — // rejected before the timelock or hash is even inspected. @@ -2176,9 +2227,9 @@ mod tests { Err(Ok(WalletError::Unauthorized)) ); - // The timelock (ready_at = ledger 0 + delay 5) has not elapsed yet - // — the test env's ledger sequence defaults to 0 — so even the - // legitimate admin must be rejected. + // The timelock (ready_at = ledger 0 + MIN_UPGRADE_DELAY_LEDGERS) has + // not elapsed yet — the test env's ledger sequence defaults to 0 — + // so even the legitimate admin must be rejected. assert_eq!( client.try_execute_upgrade(&admin, &wasm_hash), Err(Ok(WalletError::UpgradeNotReady)) @@ -2196,7 +2247,7 @@ mod tests { let wasm_hash = BytesN::from_array(&env, &[9u8; 32]); let other_hash = BytesN::from_array(&env, &[10u8; 32]); - client.propose_upgrade(&admin, &wasm_hash, &0u32); + client.propose_upgrade(&admin, &wasm_hash, &GlobeWallet::MIN_UPGRADE_DELAY_LEDGERS); env.ledger().set_sequence_number(1); assert_eq!( client.try_execute_upgrade(&admin, &other_hash), @@ -2222,7 +2273,11 @@ mod tests { // propose_upgrade should succeed even with an invalid hash assert_eq!( - client.try_propose_upgrade(&admin, &never_uploaded_hash, &0u32), + client.try_propose_upgrade( + &admin, + &never_uploaded_hash, + &GlobeWallet::MIN_UPGRADE_DELAY_LEDGERS + ), Ok(Ok(())) ); @@ -2256,8 +2311,13 @@ mod tests { client.initialize(&admin); let never_uploaded_hash = BytesN::from_array(&env, &[42u8; 32]); - client.propose_upgrade(&admin, &never_uploaded_hash, &0u32); - env.ledger().set_sequence_number(1); + client.propose_upgrade( + &admin, + &never_uploaded_hash, + &GlobeWallet::MIN_UPGRADE_DELAY_LEDGERS, + ); + env.ledger() + .set_sequence_number(GlobeWallet::MIN_UPGRADE_DELAY_LEDGERS); // This call should panic/trap at the host level because the hash // was never uploaded via upload_contract_wasm. The test is marked @@ -2265,6 +2325,117 @@ mod tests { client.execute_upgrade(&admin, &never_uploaded_hash); } + // ── Issue #84: minimum timelock delays ────────────────────────────────── + + #[test] + fn test_propose_upgrade_rejects_zero_delay() { + // Direct port of issue #84's reproduction: delay_in_ledgers = 0 used + // to make `execute_upgrade` immediately callable, collapsing the + // "propose then wait" timelock into a single atomic step. + let (env, cid, admin, client) = setup(); + let wasm_hash = BytesN::from_array(&env, &[7u8; 32]); + assert_eq!( + client.try_propose_upgrade(&admin, &wasm_hash, &0u32), + Err(Ok(WalletError::UpgradeDelayTooShort)) + ); + // No proposal was stored — the rejection is not a "propose now, + // reject on execute" style check. + env.as_contract(&cid, || { + assert!(!env.storage().instance().has(&DataKey::PendingUpgrade)); + }); + } + + #[test] + fn test_propose_upgrade_rejects_delay_below_minimum() { + let (env, _cid, admin, client) = setup(); + let wasm_hash = BytesN::from_array(&env, &[7u8; 32]); + assert_eq!( + client.try_propose_upgrade( + &admin, + &wasm_hash, + &(GlobeWallet::MIN_UPGRADE_DELAY_LEDGERS - 1) + ), + Err(Ok(WalletError::UpgradeDelayTooShort)) + ); + } + + #[test] + #[should_panic] + fn test_propose_upgrade_accepts_delay_at_minimum() { + // No regression to the happy path: exactly the minimum must still + // be accepted by `propose_upgrade`, and once the timelock genuinely + // elapses `execute_upgrade` must pass every contract-level gate + // (admin, hash match, and — the new one — nothing left to check but + // readiness) and reach the same host-level trap + // `test_propose_and_execute_upgrade` and + // `test_execute_upgrade_with_never_uploaded_hash_traps` already rely + // on as proof there's no real WASM fixture needed to exercise this. + let (env, _cid, admin, client) = setup(); + let wasm_hash = BytesN::from_array(&env, &[7u8; 32]); + assert_eq!( + client.try_propose_upgrade(&admin, &wasm_hash, &GlobeWallet::MIN_UPGRADE_DELAY_LEDGERS), + Ok(Ok(())) + ); + + env.ledger() + .set_sequence_number(GlobeWallet::MIN_UPGRADE_DELAY_LEDGERS); + // Traps here (host-level): every contract-level gate, including the + // new minimum-delay check at propose time, has already passed. + client.execute_upgrade(&admin, &wasm_hash); + } + + #[test] + fn test_set_recovery_config_rejects_zero_delay() { + // Direct port of issue #84's reproduction: delay_in_ledgers = 0 used + // to leave the admin's post-quorum "notice and cancel" window + // (documented on `RecoveryConfig::delay_in_ledgers`) at zero ledgers. + let (_env, admin, _guardians, client) = setup_with_guardians(3); + assert_eq!( + client.try_set_recovery_config(&admin, &2u32, &0u32), + Err(Ok(WalletError::RecoveryDelayTooShort)) + ); + assert!(client.recovery_config().is_none()); + } + + #[test] + fn test_set_recovery_config_rejects_delay_below_minimum() { + let (_env, admin, _guardians, client) = setup_with_guardians(3); + assert_eq!( + client.try_set_recovery_config( + &admin, + &2u32, + &(GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS - 1) + ), + Err(Ok(WalletError::RecoveryDelayTooShort)) + ); + } + + #[test] + fn test_set_recovery_config_accepts_delay_at_minimum_and_recovery_executes() { + // No regression to the happy path: exactly the minimum must still + // configure successfully, and a recovery that waits exactly that + // long must still execute — full end-to-end coverage, not just the + // setter in isolation. + let (env, admin, guardians, client) = setup_with_guardians(3); + assert_eq!( + client.try_set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS), + Ok(Ok(())) + ); + + let new_admin = Address::generate(&env); + client.initiate_recovery(&guardians.get(0).unwrap(), &new_admin); + client.approve_recovery(&guardians.get(1).unwrap()); + assert_eq!( + client.try_execute_recovery(), + Err(Ok(WalletError::RecoveryNotReady)) + ); + + env.ledger() + .with_mut(|l| l.sequence_number += GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); + client.execute_recovery(); + assert_eq!(client.admin(), new_admin); + } + // ── Guardian Recovery ───────────────────────────────────────────────── fn setup_with_guardians(n: u32) -> (Env, Address, Vec
, GlobeWalletClient<'static>) { @@ -2327,7 +2498,7 @@ mod tests { #[test] fn test_remove_guardian_below_threshold_fails() { let (_env, admin, guardians, client) = setup_with_guardians(3); - client.set_recovery_config(&admin, &3u32, &10u32); + client.set_recovery_config(&admin, &3u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); assert_eq!( client.try_remove_guardian(&admin, &guardians.get(0).unwrap()), Err(Ok(WalletError::NotEnoughGuardians)) @@ -2337,7 +2508,7 @@ mod tests { #[test] fn test_removed_guardian_cannot_initiate_recovery() { let (env, admin, guardians, client) = setup_with_guardians(4); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let removed = guardians.get(0).unwrap(); client.remove_guardian(&admin, &removed); @@ -2354,7 +2525,7 @@ mod tests { // that approval, not just block them from casting *new* ones (that // half is already covered by `test_removed_guardian_cannot_initiate_recovery`). let (env, admin, guardians, client) = setup_with_guardians(3); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let new_admin = Address::generate(&env); client.initiate_recovery(&guardians.get(0).unwrap(), &new_admin); // G0 @@ -2389,7 +2560,7 @@ mod tests { // the stripping logic must key off actual proposal membership, not // just "a guardian was removed". let (env, admin, guardians, client) = setup_with_guardians(4); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let new_admin = Address::generate(&env); client.initiate_recovery(&guardians.get(0).unwrap(), &new_admin); // G0 @@ -2405,7 +2576,8 @@ mod tests { assert_eq!(proposal.approvals.len(), 2); assert_eq!(proposal.ready_at, ready_at_before); - env.ledger().with_mut(|l| l.sequence_number += 10); + env.ledger() + .with_mut(|l| l.sequence_number += GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); client.execute_recovery(); assert_eq!(client.admin(), new_admin); } @@ -2416,11 +2588,11 @@ mod tests { // must still be able to bring it back to quorum — with a *new* // ready_at, not a resurrected stale one. let (env, admin, guardians, client) = setup_with_guardians(3); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let new_admin = Address::generate(&env); client.initiate_recovery(&guardians.get(0).unwrap(), &new_admin); // G0 - client.approve_recovery(&guardians.get(1).unwrap()); // G1 -> quorum, ready_at = seq + 10 + client.approve_recovery(&guardians.get(1).unwrap()); // G1 -> quorum, ready_at = seq + delay client.remove_guardian(&admin, &guardians.get(1).unwrap()); // strips G1's approval, ready_at cleared assert!(client.recovery_proposal().unwrap().ready_at.is_none()); @@ -2430,7 +2602,8 @@ mod tests { let rearmed = client.recovery_proposal().unwrap().ready_at; assert!(rearmed.is_some()); - env.ledger().with_mut(|l| l.sequence_number += 10); + env.ledger() + .with_mut(|l| l.sequence_number += GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); client.execute_recovery(); assert_eq!(client.admin(), new_admin); } @@ -2440,7 +2613,7 @@ mod tests { // `revoke_recovery_approval` previously never checked guardian // membership at all, unlike `initiate_recovery`/`approve_recovery`. let (env, admin, guardians, client) = setup_with_guardians(3); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let new_admin = Address::generate(&env); client.initiate_recovery(&guardians.get(0).unwrap(), &new_admin); @@ -2458,7 +2631,7 @@ mod tests { // `approve_recovery` — membership is now enforced consistently // across every guardian-authenticated recovery entry point. let (env, admin, guardians, client) = setup_with_guardians(4); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let new_admin = Address::generate(&env); client.initiate_recovery(&guardians.get(0).unwrap(), &new_admin); client.approve_recovery(&guardians.get(1).unwrap()); @@ -2482,7 +2655,10 @@ mod tests { client.initialize(&admin); let wasm_hash = BytesN::from_array(&env, &[11u8; 32]); - client.propose_upgrade(&admin, &wasm_hash, &0u32); + client.propose_upgrade(&admin, &wasm_hash, &GlobeWallet::MIN_UPGRADE_DELAY_LEDGERS); + // Still rejected as "already pending" even with a too-short delay — + // the pending-proposal check takes precedence, matching the check + // order inside `propose_upgrade`. assert_eq!( client.try_propose_upgrade(&admin, &wasm_hash, &0u32), Err(Ok(WalletError::UpgradeAlreadyPending)) @@ -2493,7 +2669,7 @@ mod tests { fn test_set_recovery_config_requires_min_guardians() { let (_env, admin, _guardians, client) = setup_with_guardians(2); assert_eq!( - client.try_set_recovery_config(&admin, &2u32, &10u32), + client.try_set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS), Err(Ok(WalletError::NotEnoughGuardians)) ); } @@ -2502,7 +2678,7 @@ mod tests { fn test_set_recovery_config_rejects_single_guardian_threshold() { let (_env, admin, _guardians, client) = setup_with_guardians(3); assert_eq!( - client.try_set_recovery_config(&admin, &1u32, &10u32), + client.try_set_recovery_config(&admin, &1u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS), Err(Ok(WalletError::InvalidRecoveryThreshold)) ); } @@ -2511,7 +2687,7 @@ mod tests { fn test_set_recovery_config_rejects_threshold_above_guardian_count() { let (_env, admin, _guardians, client) = setup_with_guardians(3); assert_eq!( - client.try_set_recovery_config(&admin, &4u32, &10u32), + client.try_set_recovery_config(&admin, &4u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS), Err(Ok(WalletError::NotEnoughGuardians)) ); } @@ -2519,7 +2695,7 @@ mod tests { #[test] fn test_recovery_happy_path_2_of_3() { let (env, admin, guardians, client) = setup_with_guardians(3); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let new_admin = Address::generate(&env); client.initiate_recovery(&guardians.get(0).unwrap(), &new_admin); @@ -2536,7 +2712,8 @@ mod tests { Err(Ok(WalletError::RecoveryNotReady)) ); - env.ledger().with_mut(|l| l.sequence_number += 10); + env.ledger() + .with_mut(|l| l.sequence_number += GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); client.execute_recovery(); assert_eq!(client.admin(), new_admin); assert!(client.recovery_proposal().is_none()); @@ -2545,7 +2722,7 @@ mod tests { #[test] fn test_recovery_rejects_non_guardian() { let (env, admin, _guardians, client) = setup_with_guardians(3); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let stranger = Address::generate(&env); let new_admin = Address::generate(&env); assert_eq!( @@ -2557,7 +2734,7 @@ mod tests { #[test] fn test_admin_can_cancel_recovery_even_after_quorum() { let (env, admin, guardians, client) = setup_with_guardians(3); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let new_admin = Address::generate(&env); client.initiate_recovery(&guardians.get(0).unwrap(), &new_admin); @@ -2578,12 +2755,13 @@ mod tests { #[test] fn test_revoking_approval_below_threshold_resets_timelock() { let (env, admin, guardians, client) = setup_with_guardians(3); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let new_admin = Address::generate(&env); client.initiate_recovery(&guardians.get(0).unwrap(), &new_admin); client.approve_recovery(&guardians.get(1).unwrap()); - env.ledger().with_mut(|l| l.sequence_number += 10); + env.ledger() + .with_mut(|l| l.sequence_number += GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); // A guardian has second thoughts and revokes right as the timelock // would otherwise have expired. @@ -2599,7 +2777,8 @@ mod tests { client.try_execute_recovery(), Err(Ok(WalletError::RecoveryNotReady)) ); - env.ledger().with_mut(|l| l.sequence_number += 10); + env.ledger() + .with_mut(|l| l.sequence_number += GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); client.execute_recovery(); assert_eq!(client.admin(), new_admin); } @@ -2607,7 +2786,7 @@ mod tests { #[test] fn test_double_approval_rejected() { let (env, admin, guardians, client) = setup_with_guardians(3); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let new_admin = Address::generate(&env); client.initiate_recovery(&guardians.get(0).unwrap(), &new_admin); assert_eq!( @@ -2619,7 +2798,7 @@ mod tests { #[test] fn test_cannot_initiate_second_recovery_while_one_pending() { let (env, admin, guardians, client) = setup_with_guardians(3); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let new_admin_a = Address::generate(&env); let new_admin_b = Address::generate(&env); client.initiate_recovery(&guardians.get(0).unwrap(), &new_admin_a); @@ -2632,7 +2811,7 @@ mod tests { #[test] fn test_recovery_clears_any_in_flight_normal_admin_transfer() { let (env, admin, guardians, client) = setup_with_guardians(3); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let normal_candidate = Address::generate(&env); let recovery_admin = Address::generate(&env); @@ -2642,7 +2821,8 @@ mod tests { // ...but the device is lost before it's accepted, so guardians recover instead. client.initiate_recovery(&guardians.get(0).unwrap(), &recovery_admin); client.approve_recovery(&guardians.get(1).unwrap()); - env.ledger().with_mut(|l| l.sequence_number += 10); + env.ledger() + .with_mut(|l| l.sequence_number += GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); client.execute_recovery(); assert_eq!(client.admin(), recovery_admin); @@ -2660,11 +2840,12 @@ mod tests { // already-current admin must be rejected at execute_recovery time // rather than silently succeeding as a no-op transfer. let (env, admin, guardians, client) = setup_with_guardians(3); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); client.initiate_recovery(&guardians.get(0).unwrap(), &admin); client.approve_recovery(&guardians.get(1).unwrap()); - env.ledger().with_mut(|l| l.sequence_number += 10); + env.ledger() + .with_mut(|l| l.sequence_number += GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); assert_eq!( client.try_execute_recovery(), @@ -2705,16 +2886,17 @@ mod tests { // AND a new, distinctly-named recovery_completed event carrying // enough context for a monitoring integration to act on it. let (env, admin, guardians, client) = setup_with_guardians(3); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let new_admin = Address::generate(&env); client.initiate_recovery(&guardians.get(0).unwrap(), &new_admin); client.approve_recovery(&guardians.get(1).unwrap()); // Quorum (2) reached on this second approval; ready_at was armed as - // current_sequence + 10 inside approve_recovery. Advance exactly to - // that boundary so this test also pins the inclusive `>=` semantics - // execute_recovery's `env.ledger().sequence() < ready_at` check - // implies, rather than overshooting and leaving that untested. + // current_sequence + MIN_RECOVERY_DELAY_LEDGERS inside approve_recovery. + // Advance exactly to that boundary so this test also pins the + // inclusive `>=` semantics execute_recovery's + // `env.ledger().sequence() < ready_at` check implies, rather than + // overshooting and leaving that untested. let ready_at = client.recovery_proposal().unwrap().ready_at.unwrap(); env.ledger().with_mut(|l| l.sequence_number = ready_at); @@ -2757,7 +2939,7 @@ mod tests { // wallet recovered at its bare 3-guardian threshold, and this field // is what lets a monitoring integration tell the two apart. let (env, admin, guardians, client) = setup_with_guardians(5); - client.set_recovery_config(&admin, &3u32, &5u32); + client.set_recovery_config(&admin, &3u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let new_admin = Address::generate(&env); client.initiate_recovery(&guardians.get(0).unwrap(), &new_admin); @@ -2810,7 +2992,7 @@ mod tests { // rejected outright rather than silently interacting with an // in-flight proposal's frozen `ready_at` / live `threshold` check. let (env, admin, guardians, client) = setup_with_guardians(3); - client.set_recovery_config(&admin, &2u32, &10u32); + client.set_recovery_config(&admin, &2u32, &GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); let new_admin = Address::generate(&env); client.initiate_recovery(&guardians.get(0).unwrap(), &new_admin); @@ -2822,14 +3004,17 @@ mod tests { // Config is unchanged. let config = client.recovery_config().unwrap(); assert_eq!(config.threshold, 2); - assert_eq!(config.delay_in_ledgers, 10); + assert_eq!(config.delay_in_ledgers, GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS); // Cancelling the pending recovery unblocks reconfiguration again. client.cancel_recovery(&admin); - client.set_recovery_config(&admin, &3u32, &5u32); + client.set_recovery_config(&admin, &3u32, &(GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS + 1)); let config = client.recovery_config().unwrap(); assert_eq!(config.threshold, 3); - assert_eq!(config.delay_in_ledgers, 5); + assert_eq!( + config.delay_in_ledgers, + GlobeWallet::MIN_RECOVERY_DELAY_LEDGERS + 1 + ); } #[test] From d78c396037855e804a056d68c2cf527eb540ec43 Mon Sep 17 00:00:00 2001 From: Ndifreke000 Date: Sat, 29 Aug 2026 19:37:26 +0100 Subject: [PATCH 2/2] test(globe-wallet): commit regenerated snapshots for the timelock fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit test_snapshots/*.json are checked in alongside the code change that produces them per this repo's existing convention. Includes exactly the snapshots for tests this PR added or modified (new minimum-delay tests, plus every pre-existing test whose delay/advance values changed to stay above the new minimums, including two tests from the separately-merged recovery_completed-event PR that also needed updating here). Deliberately excludes snapshots for unrelated tests (token-wrapper, and globe-wallet's send/token-wrapper-allowlist tests) that happened to also be stale against main's current code — that staleness predates this branch and isn't caused by anything in this diff. --- ...n_cancel_recovery_even_after_quorum.1.json | 10 +- ...e_second_recovery_while_one_pending.1.json | 8 +- .../test_double_approval_rejected.1.json | 8 +- ..._transferred_and_recovery_completed.1.json | 18 +- ..._with_full_over_quorum_guardian_set.1.json | 18 +- ...cts_new_admin_same_as_current_admin.1.json | 16 +- ...rade_with_never_uploaded_hash_traps.1.json | 10 +- .../test_propose_and_execute_upgrade.1.json | 10 +- ...accepts_any_hash_without_validation.1.json | 8 +- ...se_upgrade_accepts_delay_at_minimum.1.json | 521 +++++++ ...upgrade_rejects_delay_below_minimum.1.json | 288 ++++ ..._propose_upgrade_rejects_zero_delay.1.json | 289 ++++ ...any_in_flight_normal_admin_transfer.1.json | 16 +- .../test_recovery_happy_path_2_of_3.1.json | 16 +- .../test_recovery_rejects_non_guardian.1.json | 8 +- ...move_guardian_below_threshold_fails.1.json | 8 +- ...al_can_requorum_with_fresh_timelock.1.json | 20 +- ..._approved_leaves_proposal_untouched.1.json | 20 +- ...oval_no_longer_counts_toward_quorum.1.json | 12 +- ...d_guardian_cannot_initiate_recovery.1.json | 8 +- ...overy_approval_rejects_non_guardian.1.json | 8 +- ...y_approval_rejects_removed_guardian.1.json | 10 +- ...val_below_threshold_resets_timelock.1.json | 22 +- ...ay_at_minimum_and_recovery_executes.1.json | 1362 +++++++++++++++++ ...fig_rejected_while_recovery_pending.1.json | 18 +- ..._config_rejects_delay_below_minimum.1.json | 734 +++++++++ ...g_rejects_single_guardian_threshold.1.json | 4 +- ...ects_threshold_above_guardian_count.1.json | 4 +- ..._recovery_config_rejects_zero_delay.1.json | 780 ++++++++++ ...overy_config_requires_min_guardians.1.json | 4 +- .../test_upgrade_propose_double_fails.1.json | 8 +- .../test_upgrade_rejects_hash_mismatch.1.json | 8 +- ...grade_requires_admin_and_ready_time.1.json | 8 +- 33 files changed, 4128 insertions(+), 154 deletions(-) create mode 100644 contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_accepts_delay_at_minimum.1.json create mode 100644 contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_rejects_delay_below_minimum.1.json create mode 100644 contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_rejects_zero_delay.1.json create mode 100644 contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_accepts_delay_at_minimum_and_recovery_executes.1.json create mode 100644 contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_delay_below_minimum.1.json create mode 100644 contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_zero_delay.1.json diff --git a/contracts/globe-wallet/test_snapshots/tests/test_admin_can_cancel_recovery_even_after_quorum.1.json b/contracts/globe-wallet/test_snapshots/tests/test_admin_can_cancel_recovery_even_after_quorum.1.json index 813ef36..f768aba 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_admin_can_cancel_recovery_even_after_quorum.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_admin_can_cancel_recovery_even_after_quorum.1.json @@ -87,7 +87,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -279,7 +279,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -874,7 +874,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -901,7 +901,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -1056,7 +1056,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" }, { - "u32": 10 + "u32": 17280 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_cannot_initiate_second_recovery_while_one_pending.1.json b/contracts/globe-wallet/test_snapshots/tests/test_cannot_initiate_second_recovery_while_one_pending.1.json index c5cd186..21bf913 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_cannot_initiate_second_recovery_while_one_pending.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_cannot_initiate_second_recovery_while_one_pending.1.json @@ -87,7 +87,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -239,7 +239,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -807,7 +807,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -834,7 +834,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_double_approval_rejected.1.json b/contracts/globe-wallet/test_snapshots/tests/test_double_approval_rejected.1.json index 050a9a9..b2fda47 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_double_approval_rejected.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_double_approval_rejected.1.json @@ -87,7 +87,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -239,7 +239,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -807,7 +807,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -834,7 +834,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_execute_recovery_emits_both_admin_transferred_and_recovery_completed.1.json b/contracts/globe-wallet/test_snapshots/tests/test_execute_recovery_emits_both_admin_transferred_and_recovery_completed.1.json index 591965d..9d23f54 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_execute_recovery_emits_both_admin_transferred_and_recovery_completed.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_execute_recovery_emits_both_admin_transferred_and_recovery_completed.1.json @@ -87,7 +87,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -143,7 +143,7 @@ ], "ledger": { "protocol_version": 21, - "sequence_number": 10, + "sequence_number": 17280, "timestamp": 0, "network_id": "0000000000000000000000000000000000000000000000000000000000000000", "base_reserve": 0, @@ -260,7 +260,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -822,7 +822,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -849,7 +849,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -1004,7 +1004,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" }, { - "u32": 10 + "u32": 17280 } ] } @@ -1123,7 +1123,7 @@ "symbol": "ready_at" }, "val": { - "u32": 10 + "u32": 17280 } } ] @@ -1218,7 +1218,7 @@ "symbol": "executed_at" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -1242,7 +1242,7 @@ "symbol": "ready_at" }, "val": { - "u32": 10 + "u32": 17280 } }, { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_execute_recovery_emits_recovery_completed_with_full_over_quorum_guardian_set.1.json b/contracts/globe-wallet/test_snapshots/tests/test_execute_recovery_emits_recovery_completed_with_full_over_quorum_guardian_set.1.json index 47337c5..182271d 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_execute_recovery_emits_recovery_completed_with_full_over_quorum_guardian_set.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_execute_recovery_emits_recovery_completed_with_full_over_quorum_guardian_set.1.json @@ -131,7 +131,7 @@ "u32": 3 }, { - "u32": 5 + "u32": 17280 } ] } @@ -243,7 +243,7 @@ ], "ledger": { "protocol_version": 21, - "sequence_number": 8, + "sequence_number": 17283, "timestamp": 0, "network_id": "0000000000000000000000000000000000000000000000000000000000000000", "base_reserve": 0, @@ -382,7 +382,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 5 + "u32": 17280 } }, { @@ -1257,7 +1257,7 @@ "u32": 3 }, { - "u32": 5 + "u32": 17280 } ] } @@ -1284,7 +1284,7 @@ "u32": 3 }, { - "u32": 5 + "u32": 17280 } ] } @@ -1506,7 +1506,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" }, { - "u32": 5 + "u32": 17280 } ] } @@ -1768,7 +1768,7 @@ "symbol": "ready_at" }, "val": { - "u32": 5 + "u32": 17280 } } ] @@ -1872,7 +1872,7 @@ "symbol": "executed_at" }, "val": { - "u32": 8 + "u32": 17283 } }, { @@ -1896,7 +1896,7 @@ "symbol": "ready_at" }, "val": { - "u32": 5 + "u32": 17280 } }, { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_execute_recovery_rejects_new_admin_same_as_current_admin.1.json b/contracts/globe-wallet/test_snapshots/tests/test_execute_recovery_rejects_new_admin_same_as_current_admin.1.json index 9490f03..04e1569 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_execute_recovery_rejects_new_admin_same_as_current_admin.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_execute_recovery_rejects_new_admin_same_as_current_admin.1.json @@ -87,7 +87,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -143,7 +143,7 @@ ], "ledger": { "protocol_version": 21, - "sequence_number": 10, + "sequence_number": 17280, "timestamp": 0, "network_id": "0000000000000000000000000000000000000000000000000000000000000000", "base_reserve": 0, @@ -260,7 +260,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -312,7 +312,7 @@ "symbol": "ready_at" }, "val": { - "u32": 10 + "u32": 17280 } } ] @@ -866,7 +866,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -893,7 +893,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -1048,7 +1048,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" }, { - "u32": 10 + "u32": 17280 } ] } @@ -1323,7 +1323,7 @@ "symbol": "ready_at" }, "val": { - "u32": 10 + "u32": 17280 } } ] diff --git a/contracts/globe-wallet/test_snapshots/tests/test_execute_upgrade_with_never_uploaded_hash_traps.1.json b/contracts/globe-wallet/test_snapshots/tests/test_execute_upgrade_with_never_uploaded_hash_traps.1.json index 9b524ae..27c5ae6 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_execute_upgrade_with_never_uploaded_hash_traps.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_execute_upgrade_with_never_uploaded_hash_traps.1.json @@ -21,7 +21,7 @@ "bytes": "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a" }, { - "u32": 0 + "u32": 51840 } ] } @@ -34,7 +34,7 @@ ], "ledger": { "protocol_version": 21, - "sequence_number": 1, + "sequence_number": 51840, "timestamp": 0, "network_id": "0000000000000000000000000000000000000000000000000000000000000000", "base_reserve": 0, @@ -100,7 +100,7 @@ "symbol": "ready_at" }, "val": { - "u32": 0 + "u32": 51840 } }, { @@ -275,7 +275,7 @@ "bytes": "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a" }, { - "u32": 0 + "u32": 51840 } ] } @@ -305,7 +305,7 @@ "bytes": "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a" }, { - "u32": 0 + "u32": 51840 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_propose_and_execute_upgrade.1.json b/contracts/globe-wallet/test_snapshots/tests/test_propose_and_execute_upgrade.1.json index 4473949..bf60bdf 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_propose_and_execute_upgrade.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_propose_and_execute_upgrade.1.json @@ -58,7 +58,7 @@ "bytes": "0303030303030303030303030303030303030303030303030303030303030303" }, { - "u32": 1 + "u32": 51840 } ] } @@ -71,7 +71,7 @@ ], "ledger": { "protocol_version": 21, - "sequence_number": 2, + "sequence_number": 51840, "timestamp": 0, "network_id": "0000000000000000000000000000000000000000000000000000000000000000", "base_reserve": 0, @@ -201,7 +201,7 @@ "symbol": "ready_at" }, "val": { - "u32": 1 + "u32": 51840 } }, { @@ -505,7 +505,7 @@ "bytes": "0303030303030303030303030303030303030303030303030303030303030303" }, { - "u32": 1 + "u32": 51840 } ] } @@ -535,7 +535,7 @@ "bytes": "0303030303030303030303030303030303030303030303030303030303030303" }, { - "u32": 1 + "u32": 51840 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_accepts_any_hash_without_validation.1.json b/contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_accepts_any_hash_without_validation.1.json index ee565b3..68ab8c3 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_accepts_any_hash_without_validation.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_accepts_any_hash_without_validation.1.json @@ -21,7 +21,7 @@ "bytes": "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a" }, { - "u32": 0 + "u32": 51840 } ] } @@ -100,7 +100,7 @@ "symbol": "ready_at" }, "val": { - "u32": 0 + "u32": 51840 } }, { @@ -275,7 +275,7 @@ "bytes": "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a" }, { - "u32": 0 + "u32": 51840 } ] } @@ -305,7 +305,7 @@ "bytes": "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a" }, { - "u32": 0 + "u32": 51840 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_accepts_delay_at_minimum.1.json b/contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_accepts_delay_at_minimum.1.json new file mode 100644 index 0000000..9ee05f4 --- /dev/null +++ b/contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_accepts_delay_at_minimum.1.json @@ -0,0 +1,521 @@ +{ + "generators": { + "address": 2, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "propose_upgrade", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "bytes": "0707070707070707070707070707070707070707070707070707070707070707" + }, + { + "u32": 51840 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 51840, + "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" + } + }, + { + "key": { + "vec": [ + { + "symbol": "PendingUpgrade" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "proposed_by" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "ready_at" + }, + "val": { + "u32": 51840 + } + }, + { + "key": { + "symbol": "wasm_hash" + }, + "val": { + "bytes": "0707070707070707070707070707070707070707070707070707070707070707" + } + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "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": "propose_upgrade" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "bytes": "0707070707070707070707070707070707070707070707070707070707070707" + }, + { + "u32": 51840 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "upgrade_proposed" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "bytes": "0707070707070707070707070707070707070707070707070707070707070707" + }, + { + "u32": 51840 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "propose_upgrade" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "execute_upgrade" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "bytes": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "storage": "missing_value" + } + } + ], + "data": { + "vec": [ + { + "string": "Wasm does not exist" + }, + { + "bytes": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "storage": "missing_value" + } + } + ], + "data": { + "string": "escalating error to panic" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "storage": "missing_value" + } + } + ], + "data": { + "string": "caught error from function" + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "storage": "missing_value" + } + } + ], + "data": { + "vec": [ + { + "string": "contract call failed" + }, + { + "symbol": "execute_upgrade" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "bytes": "0707070707070707070707070707070707070707070707070707070707070707" + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "storage": "missing_value" + } + } + ], + "data": { + "string": "escalating error to panic" + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_rejects_delay_below_minimum.1.json b/contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_rejects_delay_below_minimum.1.json new file mode 100644 index 0000000..68c3ace --- /dev/null +++ b/contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_rejects_delay_below_minimum.1.json @@ -0,0 +1,288 @@ +{ + "generators": { + "address": 2, + "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": "propose_upgrade" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "bytes": "0707070707070707070707070707070707070707070707070707070707070707" + }, + { + "u32": 51839 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "propose_upgrade" + } + ], + "data": { + "error": { + "contract": 1037 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1037 + } + } + ], + "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": 1037 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "propose_upgrade" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "bytes": "0707070707070707070707070707070707070707070707070707070707070707" + }, + { + "u32": 51839 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_rejects_zero_delay.1.json b/contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_rejects_zero_delay.1.json new file mode 100644 index 0000000..b38f906 --- /dev/null +++ b/contracts/globe-wallet/test_snapshots/tests/test_propose_upgrade_rejects_zero_delay.1.json @@ -0,0 +1,289 @@ +{ + "generators": { + "address": 2, + "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": "propose_upgrade" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "bytes": "0707070707070707070707070707070707070707070707070707070707070707" + }, + { + "u32": 0 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "propose_upgrade" + } + ], + "data": { + "error": { + "contract": 1037 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1037 + } + } + ], + "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": 1037 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "propose_upgrade" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "bytes": "0707070707070707070707070707070707070707070707070707070707070707" + }, + { + "u32": 0 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/globe-wallet/test_snapshots/tests/test_recovery_clears_any_in_flight_normal_admin_transfer.1.json b/contracts/globe-wallet/test_snapshots/tests/test_recovery_clears_any_in_flight_normal_admin_transfer.1.json index 973b970..305219d 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_recovery_clears_any_in_flight_normal_admin_transfer.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_recovery_clears_any_in_flight_normal_admin_transfer.1.json @@ -87,7 +87,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -165,7 +165,7 @@ ], "ledger": { "protocol_version": 21, - "sequence_number": 10, + "sequence_number": 17280, "timestamp": 0, "network_id": "0000000000000000000000000000000000000000000000000000000000000000", "base_reserve": 0, @@ -282,7 +282,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -877,7 +877,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -904,7 +904,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -1140,7 +1140,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" }, { - "u32": 10 + "u32": 17280 } ] } @@ -1275,7 +1275,7 @@ "symbol": "executed_at" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -1299,7 +1299,7 @@ "symbol": "ready_at" }, "val": { - "u32": 10 + "u32": 17280 } }, { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_recovery_happy_path_2_of_3.1.json b/contracts/globe-wallet/test_snapshots/tests/test_recovery_happy_path_2_of_3.1.json index 174fe6f..6a5ac82 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_recovery_happy_path_2_of_3.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_recovery_happy_path_2_of_3.1.json @@ -87,7 +87,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -145,7 +145,7 @@ ], "ledger": { "protocol_version": 21, - "sequence_number": 10, + "sequence_number": 17280, "timestamp": 0, "network_id": "0000000000000000000000000000000000000000000000000000000000000000", "base_reserve": 0, @@ -262,7 +262,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -824,7 +824,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -851,7 +851,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -1115,7 +1115,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" }, { - "u32": 10 + "u32": 17280 } ] } @@ -1359,7 +1359,7 @@ "symbol": "executed_at" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -1383,7 +1383,7 @@ "symbol": "ready_at" }, "val": { - "u32": 10 + "u32": 17280 } }, { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_recovery_rejects_non_guardian.1.json b/contracts/globe-wallet/test_snapshots/tests/test_recovery_rejects_non_guardian.1.json index 00d8ce8..4fd00fb 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_recovery_rejects_non_guardian.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_recovery_rejects_non_guardian.1.json @@ -87,7 +87,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -217,7 +217,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -713,7 +713,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -740,7 +740,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_remove_guardian_below_threshold_fails.1.json b/contracts/globe-wallet/test_snapshots/tests/test_remove_guardian_below_threshold_fails.1.json index d1db159..d00d209 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_remove_guardian_below_threshold_fails.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_remove_guardian_below_threshold_fails.1.json @@ -87,7 +87,7 @@ "u32": 3 }, { - "u32": 10 + "u32": 17280 } ] } @@ -217,7 +217,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -713,7 +713,7 @@ "u32": 3 }, { - "u32": 10 + "u32": 17280 } ] } @@ -740,7 +740,7 @@ "u32": 3 }, { - "u32": 10 + "u32": 17280 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_remove_guardian_dequorated_proposal_can_requorum_with_fresh_timelock.1.json b/contracts/globe-wallet/test_snapshots/tests/test_remove_guardian_dequorated_proposal_can_requorum_with_fresh_timelock.1.json index 8708f79..644993a 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_remove_guardian_dequorated_proposal_can_requorum_with_fresh_timelock.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_remove_guardian_dequorated_proposal_can_requorum_with_fresh_timelock.1.json @@ -87,7 +87,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -185,7 +185,7 @@ ], "ledger": { "protocol_version": 21, - "sequence_number": 15, + "sequence_number": 17285, "timestamp": 0, "network_id": "0000000000000000000000000000000000000000000000000000000000000000", "base_reserve": 0, @@ -291,7 +291,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -919,7 +919,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -946,7 +946,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -1101,7 +1101,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" }, { - "u32": 10 + "u32": 17280 } ] } @@ -1363,7 +1363,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" }, { - "u32": 15 + "u32": 17285 } ] } @@ -1482,7 +1482,7 @@ "symbol": "ready_at" }, "val": { - "u32": 15 + "u32": 17285 } } ] @@ -1577,7 +1577,7 @@ "symbol": "executed_at" }, "val": { - "u32": 15 + "u32": 17285 } }, { @@ -1601,7 +1601,7 @@ "symbol": "ready_at" }, "val": { - "u32": 15 + "u32": 17285 } }, { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_remove_guardian_who_never_approved_leaves_proposal_untouched.1.json b/contracts/globe-wallet/test_snapshots/tests/test_remove_guardian_who_never_approved_leaves_proposal_untouched.1.json index d8730bc..1ff19de 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_remove_guardian_who_never_approved_leaves_proposal_untouched.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_remove_guardian_who_never_approved_leaves_proposal_untouched.1.json @@ -109,7 +109,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -188,7 +188,7 @@ ], "ledger": { "protocol_version": 21, - "sequence_number": 10, + "sequence_number": 17280, "timestamp": 0, "network_id": "0000000000000000000000000000000000000000000000000000000000000000", "base_reserve": 0, @@ -305,7 +305,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -1007,7 +1007,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -1034,7 +1034,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -1189,7 +1189,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" }, { - "u32": 10 + "u32": 17280 } ] } @@ -1308,7 +1308,7 @@ "symbol": "ready_at" }, "val": { - "u32": 10 + "u32": 17280 } } ] @@ -1461,7 +1461,7 @@ "symbol": "ready_at" }, "val": { - "u32": 10 + "u32": 17280 } } ] @@ -1556,7 +1556,7 @@ "symbol": "executed_at" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -1580,7 +1580,7 @@ "symbol": "ready_at" }, "val": { - "u32": 10 + "u32": 17280 } }, { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_removed_guardian_approval_no_longer_counts_toward_quorum.1.json b/contracts/globe-wallet/test_snapshots/tests/test_removed_guardian_approval_no_longer_counts_toward_quorum.1.json index 446bcd1..b3d47d6 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_removed_guardian_approval_no_longer_counts_toward_quorum.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_removed_guardian_approval_no_longer_counts_toward_quorum.1.json @@ -87,7 +87,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -272,7 +272,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -906,7 +906,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -933,7 +933,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -1088,7 +1088,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" }, { - "u32": 10 + "u32": 17280 } ] } @@ -1207,7 +1207,7 @@ "symbol": "ready_at" }, "val": { - "u32": 10 + "u32": 17280 } } ] diff --git a/contracts/globe-wallet/test_snapshots/tests/test_removed_guardian_cannot_initiate_recovery.1.json b/contracts/globe-wallet/test_snapshots/tests/test_removed_guardian_cannot_initiate_recovery.1.json index 6bf10e0..5d5f474 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_removed_guardian_cannot_initiate_recovery.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_removed_guardian_cannot_initiate_recovery.1.json @@ -109,7 +109,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -261,7 +261,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -897,7 +897,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -924,7 +924,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_revoke_recovery_approval_rejects_non_guardian.1.json b/contracts/globe-wallet/test_snapshots/tests/test_revoke_recovery_approval_rejects_non_guardian.1.json index 4432243..37b7a03 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_revoke_recovery_approval_rejects_non_guardian.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_revoke_recovery_approval_rejects_non_guardian.1.json @@ -87,7 +87,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -239,7 +239,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -807,7 +807,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -834,7 +834,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_revoke_recovery_approval_rejects_removed_guardian.1.json b/contracts/globe-wallet/test_snapshots/tests/test_revoke_recovery_approval_rejects_removed_guardian.1.json index 9b74483..859bdb3 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_revoke_recovery_approval_rejects_removed_guardian.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_revoke_recovery_approval_rejects_removed_guardian.1.json @@ -109,7 +109,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -302,7 +302,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -1043,7 +1043,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -1070,7 +1070,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -1225,7 +1225,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" }, { - "u32": 10 + "u32": 17280 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_revoking_approval_below_threshold_resets_timelock.1.json b/contracts/globe-wallet/test_snapshots/tests/test_revoking_approval_below_threshold_resets_timelock.1.json index b3ce397..016403f 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_revoking_approval_below_threshold_resets_timelock.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_revoking_approval_below_threshold_resets_timelock.1.json @@ -87,7 +87,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -182,7 +182,7 @@ ], "ledger": { "protocol_version": 21, - "sequence_number": 20, + "sequence_number": 34560, "timestamp": 0, "network_id": "0000000000000000000000000000000000000000000000000000000000000000", "base_reserve": 0, @@ -299,7 +299,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -551,7 +551,7 @@ }, "ext": "v0" }, - 6312009 + 6329279 ] ], [ @@ -584,7 +584,7 @@ }, "ext": "v0" }, - 6312009 + 6329279 ] ], [ @@ -927,7 +927,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -954,7 +954,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -1109,7 +1109,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" }, { - "u32": 10 + "u32": 17280 } ] } @@ -1379,7 +1379,7 @@ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" }, { - "u32": 20 + "u32": 34560 } ] } @@ -1623,7 +1623,7 @@ "symbol": "executed_at" }, "val": { - "u32": 20 + "u32": 34560 } }, { @@ -1647,7 +1647,7 @@ "symbol": "ready_at" }, "val": { - "u32": 20 + "u32": 34560 } }, { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_accepts_delay_at_minimum_and_recovery_executes.1.json b/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_accepts_delay_at_minimum_and_recovery_executes.1.json new file mode 100644 index 0000000..ec7cdb1 --- /dev/null +++ b/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_accepts_delay_at_minimum_and_recovery_executes.1.json @@ -0,0 +1,1362 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_guardian", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_guardian", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_guardian", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_recovery_config", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 2 + }, + { + "u32": 17280 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "initiate_recovery", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "approve_recovery", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [], + [] + ], + "ledger": { + "protocol_version": 21, + "sequence_number": 17280, + "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "GuardianMembership" + } + ] + }, + "val": { + "map": [ + { + "key": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + "val": { + "bool": true + } + }, + { + "key": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + "val": { + "bool": true + } + }, + { + "key": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + "val": { + "bool": true + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Guardians" + } + ] + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RecoveryConfig" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "delay_in_ledgers" + }, + "val": { + "u32": 17280 + } + }, + { + "key": { + "symbol": "threshold" + }, + "val": { + "u32": 2 + } + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "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": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "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_guardian" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "guardian_added" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_guardian" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_guardian" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "guardian_added" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_guardian" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_guardian" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "guardian_added" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_guardian" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_recovery_config" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 2 + }, + { + "u32": 17280 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "recovery_config_set" + } + ], + "data": { + "vec": [ + { + "u32": 2 + }, + { + "u32": 17280 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_recovery_config" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "initiate_recovery" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "recovery_initiated" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "initiate_recovery" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "approve_recovery" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "recovery_quorum_reached" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u32": 17280 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "recovery_approved" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "approve_recovery" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "execute_recovery" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "execute_recovery" + } + ], + "data": { + "error": { + "contract": 1027 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1027 + } + } + ], + "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": 1027 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "execute_recovery" + }, + { + "vec": [] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "execute_recovery" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "admin_transferred" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "recovery_completed" + } + ], + "data": { + "map": [ + { + "key": { + "symbol": "approving_guardians" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + { + "key": { + "symbol": "executed_at" + }, + "val": { + "u32": 17280 + } + }, + { + "key": { + "symbol": "new_admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "old_admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "ready_at" + }, + "val": { + "u32": 17280 + } + }, + { + "key": { + "symbol": "threshold" + }, + "val": { + "u32": 2 + } + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "execute_recovery" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "admin" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "admin" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejected_while_recovery_pending.1.json b/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejected_while_recovery_pending.1.json index 4d3376a..f5025b7 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejected_while_recovery_pending.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejected_while_recovery_pending.1.json @@ -87,7 +87,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -155,7 +155,7 @@ "u32": 3 }, { - "u32": 5 + "u32": 17281 } ] } @@ -285,7 +285,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 5 + "u32": 17281 } }, { @@ -880,7 +880,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -907,7 +907,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -1195,7 +1195,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 10 + "u32": 17280 } }, { @@ -1307,7 +1307,7 @@ "u32": 3 }, { - "u32": 5 + "u32": 17281 } ] } @@ -1334,7 +1334,7 @@ "u32": 3 }, { - "u32": 5 + "u32": 17281 } ] } @@ -1410,7 +1410,7 @@ "symbol": "delay_in_ledgers" }, "val": { - "u32": 5 + "u32": 17281 } }, { diff --git a/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_delay_below_minimum.1.json b/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_delay_below_minimum.1.json new file mode 100644 index 0000000..dec0a11 --- /dev/null +++ b/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_delay_below_minimum.1.json @@ -0,0 +1,734 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_guardian", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_guardian", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_guardian", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + }, + "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": "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" + } + }, + { + "key": { + "vec": [ + { + "symbol": "GuardianMembership" + } + ] + }, + "val": { + "map": [ + { + "key": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + "val": { + "bool": true + } + }, + { + "key": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + "val": { + "bool": true + } + }, + { + "key": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + "val": { + "bool": true + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Guardians" + } + ] + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "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_guardian" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "guardian_added" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_guardian" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_guardian" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "guardian_added" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_guardian" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_guardian" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "guardian_added" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_guardian" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_recovery_config" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 2 + }, + { + "u32": 17279 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_recovery_config" + } + ], + "data": { + "error": { + "contract": 1038 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1038 + } + } + ], + "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": 1038 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "set_recovery_config" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 2 + }, + { + "u32": 17279 + } + ] + } + ] + } + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_single_guardian_threshold.1.json b/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_single_guardian_threshold.1.json index 0613613..b486a7d 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_single_guardian_threshold.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_single_guardian_threshold.1.json @@ -626,7 +626,7 @@ "u32": 1 }, { - "u32": 10 + "u32": 17280 } ] } @@ -719,7 +719,7 @@ "u32": 1 }, { - "u32": 10 + "u32": 17280 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_threshold_above_guardian_count.1.json b/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_threshold_above_guardian_count.1.json index bba2f36..a343025 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_threshold_above_guardian_count.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_threshold_above_guardian_count.1.json @@ -626,7 +626,7 @@ "u32": 4 }, { - "u32": 10 + "u32": 17280 } ] } @@ -719,7 +719,7 @@ "u32": 4 }, { - "u32": 10 + "u32": 17280 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_zero_delay.1.json b/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_zero_delay.1.json new file mode 100644 index 0000000..f4828bd --- /dev/null +++ b/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_rejects_zero_delay.1.json @@ -0,0 +1,780 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_guardian", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_guardian", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "add_guardian", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + }, + "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": "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" + } + }, + { + "key": { + "vec": [ + { + "symbol": "GuardianMembership" + } + ] + }, + "val": { + "map": [ + { + "key": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + "val": { + "bool": true + } + }, + { + "key": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + "val": { + "bool": true + } + }, + { + "key": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + "val": { + "bool": true + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Guardians" + } + ] + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "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_guardian" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "guardian_added" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_guardian" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_guardian" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "guardian_added" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_guardian" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "add_guardian" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "contract", + "body": { + "v0": { + "topics": [ + { + "symbol": "guardian_added" + } + ], + "data": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "add_guardian" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "set_recovery_config" + } + ], + "data": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 2 + }, + { + "u32": 0 + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "set_recovery_config" + } + ], + "data": { + "error": { + "contract": 1038 + } + } + } + } + }, + "failed_call": true + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "error" + }, + { + "error": { + "contract": 1038 + } + } + ], + "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": 1038 + } + } + ], + "data": { + "vec": [ + { + "string": "contract try_call failed" + }, + { + "symbol": "set_recovery_config" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "u32": 2 + }, + { + "u32": 0 + } + ] + } + ] + } + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": null, + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_call" + }, + { + "bytes": "0000000000000000000000000000000000000000000000000000000000000001" + }, + { + "symbol": "recovery_config" + } + ], + "data": "void" + } + } + }, + "failed_call": false + }, + { + "event": { + "ext": "v0", + "contract_id": "0000000000000000000000000000000000000000000000000000000000000001", + "type_": "diagnostic", + "body": { + "v0": { + "topics": [ + { + "symbol": "fn_return" + }, + { + "symbol": "recovery_config" + } + ], + "data": "void" + } + } + }, + "failed_call": false + } + ] +} \ No newline at end of file diff --git a/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_requires_min_guardians.1.json b/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_requires_min_guardians.1.json index 16ada50..40c67a1 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_requires_min_guardians.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_set_recovery_config_requires_min_guardians.1.json @@ -486,7 +486,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } @@ -579,7 +579,7 @@ "u32": 2 }, { - "u32": 10 + "u32": 17280 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_upgrade_propose_double_fails.1.json b/contracts/globe-wallet/test_snapshots/tests/test_upgrade_propose_double_fails.1.json index 0489e0d..0266a98 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_upgrade_propose_double_fails.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_upgrade_propose_double_fails.1.json @@ -21,7 +21,7 @@ "bytes": "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b" }, { - "u32": 0 + "u32": 51840 } ] } @@ -100,7 +100,7 @@ "symbol": "ready_at" }, "val": { - "u32": 0 + "u32": 51840 } }, { @@ -275,7 +275,7 @@ "bytes": "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b" }, { - "u32": 0 + "u32": 51840 } ] } @@ -305,7 +305,7 @@ "bytes": "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b" }, { - "u32": 0 + "u32": 51840 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_upgrade_rejects_hash_mismatch.1.json b/contracts/globe-wallet/test_snapshots/tests/test_upgrade_rejects_hash_mismatch.1.json index 772753a..73c3f43 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_upgrade_rejects_hash_mismatch.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_upgrade_rejects_hash_mismatch.1.json @@ -21,7 +21,7 @@ "bytes": "0909090909090909090909090909090909090909090909090909090909090909" }, { - "u32": 0 + "u32": 51840 } ] } @@ -100,7 +100,7 @@ "symbol": "ready_at" }, "val": { - "u32": 0 + "u32": 51840 } }, { @@ -275,7 +275,7 @@ "bytes": "0909090909090909090909090909090909090909090909090909090909090909" }, { - "u32": 0 + "u32": 51840 } ] } @@ -305,7 +305,7 @@ "bytes": "0909090909090909090909090909090909090909090909090909090909090909" }, { - "u32": 0 + "u32": 51840 } ] } diff --git a/contracts/globe-wallet/test_snapshots/tests/test_upgrade_requires_admin_and_ready_time.1.json b/contracts/globe-wallet/test_snapshots/tests/test_upgrade_requires_admin_and_ready_time.1.json index 34662de..3bfb863 100644 --- a/contracts/globe-wallet/test_snapshots/tests/test_upgrade_requires_admin_and_ready_time.1.json +++ b/contracts/globe-wallet/test_snapshots/tests/test_upgrade_requires_admin_and_ready_time.1.json @@ -21,7 +21,7 @@ "bytes": "0707070707070707070707070707070707070707070707070707070707070707" }, { - "u32": 5 + "u32": 51840 } ] } @@ -101,7 +101,7 @@ "symbol": "ready_at" }, "val": { - "u32": 5 + "u32": 51840 } }, { @@ -276,7 +276,7 @@ "bytes": "0707070707070707070707070707070707070707070707070707070707070707" }, { - "u32": 5 + "u32": 51840 } ] } @@ -306,7 +306,7 @@ "bytes": "0707070707070707070707070707070707070707070707070707070707070707" }, { - "u32": 5 + "u32": 51840 } ] }