Skip to content

[bug] campaign-lifecycle: register_campaign accepts end_ledger = 0 — campaign is born already expired #640

@gboigwe

Description

@gboigwe

Summary

register_campaign stores end_ledger: u32 = 0 (and sets both original_end_ledger and current_end_ledger to 0) with no validation. A campaign registered with end_ledger = 0 is immediately past its deadline at any real ledger sequence. Any system component that checks env.ledger().sequence() > lifecycle.current_end_ledger would treat the campaign as expired from the first ledger it is active. Additionally, extend_campaign computes max_end = original_end_ledger.saturating_mul(3) = 0, so no extension is possible.

Location

contracts/campaign-lifecycle/src/lib.rs, register_campaign

pub fn register_campaign(env: Env, advertiser: Address, campaign_id: u64, end_ledger: u32) {
    // ❌ No: if end_ledger <= env.ledger().sequence() { panic!(...) }

Fix

if end_ledger <= env.ledger().sequence() {
    panic!("end_ledger must be in the future");
}

Metadata

Metadata

Assignees

Labels

Stellar WaveIssues in the Stellar wave programbugSomething isn't working

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions