diff --git a/src/campaigns/cancel.rs b/src/campaigns/cancel.rs index 9fda789d..0f33a357 100644 --- a/src/campaigns/cancel.rs +++ b/src/campaigns/cancel.rs @@ -45,6 +45,7 @@ pub(crate) fn cancel_campaign(env: &Env, campaign_id: u32) -> Result<(), Error> campaign.is_cancelled = true; campaign.is_active = false; + campaign.effective_amount_raised = 0; set_campaign(env, campaign_id, &campaign); remove_voting_state(env, campaign_id); prune_bookmarks_for_campaign(env, campaign_id); @@ -94,6 +95,7 @@ pub(crate) fn admin_cancel_campaign( campaign.is_cancelled = true; campaign.is_active = false; + campaign.effective_amount_raised = 0; set_campaign(env, campaign_id, &campaign); remove_voting_state(env, campaign_id); prune_bookmarks_for_campaign(env, campaign_id); diff --git a/src/contributions.rs b/src/contributions.rs index 1a8ec0fc..67358975 100644 --- a/src/contributions.rs +++ b/src/contributions.rs @@ -278,10 +278,12 @@ pub(crate) fn claim_refund(env: &Env, campaign_id: u32, contributor: Address) -> decrement_contributor_count(env, campaign_id); - campaign.effective_amount_raised = campaign - .effective_amount_raised - .checked_sub(amount) - .ok_or(Error::Overflow)?; + if !campaign.is_cancelled { + campaign.effective_amount_raised = campaign + .effective_amount_raised + .checked_sub(amount) + .ok_or(Error::Overflow)?; + } set_campaign(env, campaign_id, &campaign); let total_raised = get_total_raised_global(env);