Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,13 @@ impl AnchornetContract {
storage::get_settlement_expiry_ledgers(&env)
}

/// Returns `true` if the settlement expiry window has been explicitly
/// configured by the admin, including an explicit zero value that disables
/// expiry. Returns `false` only when the expiry window has never been set.
pub fn is_settlement_expiry_configured(env: Env) -> bool {
storage::has_settlement_expiry_ledgers(&env)
}

/// Returns up to `limit` currently registered anchors that hold an active
/// fee waiver, in registration order, scanning the registration history
/// starting at list index `start` (0-based). Mirrors
Expand Down
8 changes: 8 additions & 0 deletions src/storage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,14 @@ pub fn set_fee_waiver(env: &Env, anchor: &Address, waived: bool) {
extend(env, &key);
}

/// Returns `true` if the settlement expiry window has been explicitly
/// configured, including an explicit zero value that disables expiry.
pub fn has_settlement_expiry_ledgers(env: &Env) -> bool {
env.storage()
.instance()
.has(&DataKey::SettlementExpiryLedgers)
}

/// Reads the settlement expiry window in ledgers (zero if never configured,
/// meaning settlements never expire).
pub fn get_settlement_expiry_ledgers(env: &Env) -> u32 {
Expand Down
17 changes: 16 additions & 1 deletion src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1693,6 +1693,7 @@ fn test_settlement_expiry_disabled_by_default() {
let (client, _admin, _anchor, _asset) = funded(&env, 1_000);

assert_eq!(client.settlement_expiry_ledgers(), 0);
assert!(!client.is_settlement_expiry_configured());
}

#[test]
Expand All @@ -1702,9 +1703,12 @@ fn test_set_settlement_expiry_ledgers_updates_value() {
let (client, admin) = setup(&env);
client.initialize(&admin);

assert!(!client.is_settlement_expiry_configured());

client.set_settlement_expiry_ledgers(&100);

assert_eq!(client.settlement_expiry_ledgers(), 100);
assert!(client.is_settlement_expiry_configured());
}

#[test]
Expand All @@ -1713,9 +1717,13 @@ fn test_cancel_expired_settlement_disabled_by_default() {
let (client, _admin, anchor, asset) = funded(&env, 1_000);
let id = client.open_settlement(&anchor, &asset, &400);

assert_eq!(client.settlement_expiry_ledgers(), 0);
assert!(!client.is_settlement_expiry_configured());

// Expiry is disabled (zero) by default, no matter how far the ledger
// advances.
env.ledger().set_sequence_number(1_000_000);
assert!(!client.is_settlement_expired(&id));
let err = client
.try_cancel_expired_settlement(&id)
.err()
Expand Down Expand Up @@ -2796,8 +2804,15 @@ fn test_settlement_expiry_disabled_at_zero() {
env.mock_all_auths();
let (client, _admin, anchor, asset) = funded(&env, 1_000);

// Explicitly set expiry to 0 (disabling it)
assert_eq!(client.settlement_expiry_ledgers(), 0);
assert!(!client.is_settlement_expiry_configured());

// Explicitly set expiry to 0 (disabling it). This must be distinguishable
// from the never-configured state even though both report a zero window.
client.set_settlement_expiry_ledgers(&0);
assert_eq!(client.settlement_expiry_ledgers(), 0);
assert!(client.is_settlement_expiry_configured());

let id = client.open_settlement(&anchor, &asset, &400);

// Advance the ledger sequence arbitrarily far in the future
Expand Down