diff --git a/crates/contracts/core/src/lib.rs b/crates/contracts/core/src/lib.rs index eb7c344..afd9675 100644 --- a/crates/contracts/core/src/lib.rs +++ b/crates/contracts/core/src/lib.rs @@ -101,6 +101,15 @@ fn total_withdrawals_key() -> Symbol { symbol_short!("totalwd") } +/// Issue #24 – O(1) active-campaign counter key. +/// Incremented when a campaign is created (all campaigns start active). +/// Decremented when a campaign transitions from active → inactive (future +/// deactivation support). Reading this key in `get_dashboard_metrics` avoids +/// the previous O(N) full-scan over every stored campaign. +fn active_campaign_count_key() -> Symbol { + symbol_short!("actvcnt") +} + // ── Events ─────────────────────────────────────────────────────────────────── #[contracttype] @@ -282,6 +291,16 @@ impl MilestoneXCoreContract { .instance() .set(&symbol_short!("count"), &count); + // Issue #24 – increment O(1) active-campaign counter (every new campaign starts active). + let active_count: u64 = env + .storage() + .instance() + .get(&active_campaign_count_key()) + .unwrap_or(0); + env.storage() + .instance() + .set(&active_campaign_count_key(), &(active_count + 1)); + // Emit CampaignCreated event env.events() .publish((Symbol::new(&env, "CampaignCreated"), creator), count); @@ -766,25 +785,20 @@ impl MilestoneXCoreContract { /// Issue #148 – dashboard analytics endpoint returning aggregate metrics, /// including a derived `active_campaigns` count. + /// + /// Issue #24 – `active_campaigns` is now read from the dedicated + /// `ActiveCampaignCount` storage key in O(1) instead of iterating over + /// every campaign in persistent storage. pub fn get_dashboard_metrics(env: Env) -> DashboardMetrics { let total_campaigns = Self::get_campaign_count(env.clone()); - // Walk every stored campaign once to count active ones. Cheap because - // it only reads instance/persistent storage already paid for. - let mut active_campaigns: u64 = 0; - let mut id: u64 = 1; - while id <= total_campaigns { - if let Some(c) = env - .storage() - .persistent() - .get::<_, Campaign>(&campaign_key(id)) - { - if c.active { - active_campaigns += 1; - } - } - id += 1; - } + // Issue #24 – O(1): read the pre-maintained active-campaign counter + // instead of walking all N campaigns. + let active_campaigns: u64 = env + .storage() + .instance() + .get(&active_campaign_count_key()) + .unwrap_or(0); DashboardMetrics { total_campaigns, @@ -1171,4 +1185,73 @@ mod tests { assert_eq!(metrics.total_withdrawals, 0); assert_eq!(metrics.total_transactions, 0); } + + /// Issue #24 – ActiveCampaignCount is incremented by create_campaign and + /// get_dashboard_metrics reads it in O(1). + /// + /// Verifies: + /// - Counter starts at 0 on a fresh contract. + /// - Each create_campaign increments it by 1. + /// - The value returned in DashboardMetrics.active_campaigns matches. + /// - Donations and withdrawals do NOT alter the counter (active flag is + /// not changed by those operations in the core contract). + #[test] + fn test_active_campaign_count_tracking() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register_contract(None, MilestoneXCoreContract); + let client = MilestoneXCoreContractClient::new(&env, &contract_id); + let admin = Address::generate(&env); + client.initialize(&admin); + + // No campaigns yet → counter is 0. + let m0 = client.get_dashboard_metrics(); + assert_eq!(m0.active_campaigns, 0, "expected 0 active campaigns before any are created"); + + let creator = Address::generate(&env); + + // Create first campaign → counter increments to 1. + let cid1 = client.create_campaign(&creator, &symbol_short!("camp1"), &10_000, &9_999_999); + let m1 = client.get_dashboard_metrics(); + assert_eq!(m1.active_campaigns, 1, "expected 1 active campaign after first create"); + assert_eq!(m1.total_campaigns, 1); + + // Create second campaign → counter increments to 2. + let _cid2 = client.create_campaign(&creator, &symbol_short!("camp2"), &20_000, &9_999_999); + let m2 = client.get_dashboard_metrics(); + assert_eq!(m2.active_campaigns, 2, "expected 2 active campaigns after second create"); + assert_eq!(m2.total_campaigns, 2); + + // Create third campaign → counter reaches 3. + let _cid3 = client.create_campaign(&creator, &symbol_short!("camp3"), &30_000, &9_999_999); + let m3 = client.get_dashboard_metrics(); + assert_eq!(m3.active_campaigns, 3, "expected 3 active campaigns after third create"); + + // Donations must NOT change the active counter. + let donor = Address::generate(&env); + let xlm = symbol_short!("XLM"); + let memo = String::from_str(&env, "m"); + client.donate(&donor, &cid1, &1_000, &xlm, &memo); + let m4 = client.get_dashboard_metrics(); + assert_eq!( + m4.active_campaigns, 3, + "donate must not alter active_campaigns counter" + ); + + // Withdrawal requests must NOT change the active counter. + let recipient = Address::generate(&env); + client.withdraw(&creator, &cid1, &recipient, &500); + let m5 = client.get_dashboard_metrics(); + assert_eq!( + m5.active_campaigns, 3, + "withdraw must not alter active_campaigns counter" + ); + + // The counter must equal total_campaigns since no deactivation path + // exists yet in the core contract. + assert_eq!( + m5.active_campaigns, m5.total_campaigns, + "all created campaigns are active; counters must be equal" + ); + } } diff --git a/crates/contracts/core/test_snapshots/tests/test_active_campaign_count_tracking.1.json b/crates/contracts/core/test_snapshots/tests/test_active_campaign_count_tracking.1.json new file mode 100644 index 0000000..9e920bd --- /dev/null +++ b/crates/contracts/core/test_snapshots/tests/test_active_campaign_count_tracking.1.json @@ -0,0 +1,913 @@ +{ + "generators": { + "address": 5, + "nonce": 0, + "mux_id": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "create_campaign", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "symbol": "camp1" + }, + { + "i128": "10000" + }, + { + "u64": "9999999" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "create_campaign", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "symbol": "camp2" + }, + { + "i128": "20000" + }, + { + "u64": "9999999" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "create_campaign", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "symbol": "camp3" + }, + { + "i128": "30000" + }, + { + "u64": "9999999" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "donate", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "u64": "1" + }, + { + "i128": "1000" + }, + { + "symbol": "XLM" + }, + { + "string": "m" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "withdraw", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": "500" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 26, + "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": [ + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "araised" + }, + { + "u64": "1" + }, + { + "symbol": "XLM" + } + ] + }, + "durability": "persistent", + "val": { + "i128": "900" + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "camp" + }, + { + "u64": "1" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "deadline" + }, + "val": { + "u64": "9999999" + } + }, + { + "key": { + "symbol": "goal" + }, + "val": { + "i128": "10000" + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "symbol": "raised" + }, + "val": { + "i128": "900" + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "symbol": "camp1" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "camp" + }, + { + "u64": "2" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "deadline" + }, + "val": { + "u64": "9999999" + } + }, + { + "key": { + "symbol": "goal" + }, + "val": { + "i128": "20000" + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": "2" + } + }, + { + "key": { + "symbol": "raised" + }, + "val": { + "i128": "0" + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "symbol": "camp2" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "camp" + }, + { + "u64": "3" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "active" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "deadline" + }, + "val": { + "u64": "9999999" + } + }, + { + "key": { + "symbol": "goal" + }, + "val": { + "i128": "30000" + } + }, + { + "key": { + "symbol": "id" + }, + "val": { + "u64": "3" + } + }, + { + "key": { + "symbol": "raised" + }, + "val": { + "i128": "0" + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "symbol": "camp3" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "don" + }, + { + "u64": "1" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "1000" + } + }, + { + "key": { + "symbol": "campaign_id" + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "symbol": "donor" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "memo" + }, + "val": { + "string": "m" + } + }, + { + "key": { + "symbol": "timestamp" + }, + "val": { + "u64": "0" + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "donors" + }, + { + "u64": "1" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "history" + }, + { + "u64": "1" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "900" + } + }, + { + "key": { + "symbol": "asset" + }, + "val": { + "symbol": "XLM" + } + }, + { + "key": { + "symbol": "donor" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "fee" + }, + "val": { + "i128": "100" + } + }, + { + "key": { + "symbol": "timestamp" + }, + "val": { + "u64": "0" + } + } + ] + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "pendwith" + }, + { + "u64": "1" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "amount" + }, + "val": { + "i128": "500" + } + }, + { + "key": { + "symbol": "campaign_id" + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "symbol": "recipient" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "status" + }, + "val": { + "u32": 0 + } + } + ] + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "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": { + "symbol": "actvcnt" + }, + "val": { + "u64": "3" + } + }, + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "count" + }, + "val": { + "u64": "3" + } + }, + { + "key": { + "symbol": "totaldon" + }, + "val": { + "u64": "1" + } + }, + { + "key": { + "symbol": "totaltx" + }, + "val": { + "u64": "2" + } + }, + { + "key": { + "symbol": "totalwd" + }, + "val": { + "u64": "1" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": "801925984706572462" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "1033654523790656264" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "4270020994084947596" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "4837995959683129791" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": "5541220902715666415" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": "2032731177588607455" + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + "live_until": 6311999 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + "live_until": 4095 + } + ] + }, + "events": [] +} \ No newline at end of file diff --git a/crates/contracts/core/test_snapshots/tests/test_campaign_report_progress_clamped.1.json b/crates/contracts/core/test_snapshots/tests/test_campaign_report_progress_clamped.1.json index 5623401..853a0ca 100644 --- a/crates/contracts/core/test_snapshots/tests/test_campaign_report_progress_clamped.1.json +++ b/crates/contracts/core/test_snapshots/tests/test_campaign_report_progress_clamped.1.json @@ -399,6 +399,14 @@ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }, "storage": [ + { + "key": { + "symbol": "actvcnt" + }, + "val": { + "u64": "1" + } + }, { "key": { "symbol": "admin" diff --git a/crates/contracts/core/test_snapshots/tests/test_count_total_transactions_split.1.json b/crates/contracts/core/test_snapshots/tests/test_count_total_transactions_split.1.json index ec3b400..8f3d68d 100644 --- a/crates/contracts/core/test_snapshots/tests/test_count_total_transactions_split.1.json +++ b/crates/contracts/core/test_snapshots/tests/test_count_total_transactions_split.1.json @@ -720,6 +720,14 @@ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }, "storage": [ + { + "key": { + "symbol": "actvcnt" + }, + "val": { + "u64": "1" + } + }, { "key": { "symbol": "admin" diff --git a/crates/contracts/core/test_snapshots/tests/test_create_and_donate_with_metadata_and_tracking.1.json b/crates/contracts/core/test_snapshots/tests/test_create_and_donate_with_metadata_and_tracking.1.json index e29769b..4512a93 100644 --- a/crates/contracts/core/test_snapshots/tests/test_create_and_donate_with_metadata_and_tracking.1.json +++ b/crates/contracts/core/test_snapshots/tests/test_create_and_donate_with_metadata_and_tracking.1.json @@ -402,6 +402,14 @@ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }, "storage": [ + { + "key": { + "symbol": "actvcnt" + }, + "val": { + "u64": "1" + } + }, { "key": { "symbol": "admin" diff --git a/crates/contracts/core/test_snapshots/tests/test_get_campaign_report_accuracy.1.json b/crates/contracts/core/test_snapshots/tests/test_get_campaign_report_accuracy.1.json index e33644d..7640129 100644 --- a/crates/contracts/core/test_snapshots/tests/test_get_campaign_report_accuracy.1.json +++ b/crates/contracts/core/test_snapshots/tests/test_get_campaign_report_accuracy.1.json @@ -625,6 +625,14 @@ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }, "storage": [ + { + "key": { + "symbol": "actvcnt" + }, + "val": { + "u64": "1" + } + }, { "key": { "symbol": "admin" diff --git a/crates/contracts/core/test_snapshots/tests/test_get_dashboard_metrics.1.json b/crates/contracts/core/test_snapshots/tests/test_get_dashboard_metrics.1.json index 6545a53..483d97a 100644 --- a/crates/contracts/core/test_snapshots/tests/test_get_dashboard_metrics.1.json +++ b/crates/contracts/core/test_snapshots/tests/test_get_dashboard_metrics.1.json @@ -624,6 +624,14 @@ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }, "storage": [ + { + "key": { + "symbol": "actvcnt" + }, + "val": { + "u64": "3" + } + }, { "key": { "symbol": "admin" diff --git a/crates/contracts/core/test_snapshots/tests/test_get_platform_summary.1.json b/crates/contracts/core/test_snapshots/tests/test_get_platform_summary.1.json index f1ee4a2..b87e20c 100644 --- a/crates/contracts/core/test_snapshots/tests/test_get_platform_summary.1.json +++ b/crates/contracts/core/test_snapshots/tests/test_get_platform_summary.1.json @@ -834,6 +834,14 @@ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }, "storage": [ + { + "key": { + "symbol": "actvcnt" + }, + "val": { + "u64": "2" + } + }, { "key": { "symbol": "admin" diff --git a/crates/contracts/core/test_snapshots/tests/test_prevent_double_withdrawal.1.json b/crates/contracts/core/test_snapshots/tests/test_prevent_double_withdrawal.1.json index aaa2321..164db73 100644 --- a/crates/contracts/core/test_snapshots/tests/test_prevent_double_withdrawal.1.json +++ b/crates/contracts/core/test_snapshots/tests/test_prevent_double_withdrawal.1.json @@ -487,6 +487,14 @@ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }, "storage": [ + { + "key": { + "symbol": "actvcnt" + }, + "val": { + "u64": "1" + } + }, { "key": { "symbol": "admin" diff --git a/crates/contracts/core/test_snapshots/tests/test_submit_transaction.1.json b/crates/contracts/core/test_snapshots/tests/test_submit_transaction.1.json index b2f44c1..5182a9d 100644 --- a/crates/contracts/core/test_snapshots/tests/test_submit_transaction.1.json +++ b/crates/contracts/core/test_snapshots/tests/test_submit_transaction.1.json @@ -530,6 +530,14 @@ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }, "storage": [ + { + "key": { + "symbol": "actvcnt" + }, + "val": { + "u64": "1" + } + }, { "key": { "symbol": "admin" diff --git a/crates/contracts/core/test_snapshots/tests/test_total_tx_count.1.json b/crates/contracts/core/test_snapshots/tests/test_total_tx_count.1.json index af31d7e..b34909c 100644 --- a/crates/contracts/core/test_snapshots/tests/test_total_tx_count.1.json +++ b/crates/contracts/core/test_snapshots/tests/test_total_tx_count.1.json @@ -489,6 +489,14 @@ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }, "storage": [ + { + "key": { + "symbol": "actvcnt" + }, + "val": { + "u64": "1" + } + }, { "key": { "symbol": "admin" diff --git a/crates/contracts/core/test_snapshots/tests/test_withdraw_and_approve.1.json b/crates/contracts/core/test_snapshots/tests/test_withdraw_and_approve.1.json index 46353cc..3ae683c 100644 --- a/crates/contracts/core/test_snapshots/tests/test_withdraw_and_approve.1.json +++ b/crates/contracts/core/test_snapshots/tests/test_withdraw_and_approve.1.json @@ -510,6 +510,14 @@ "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }, "storage": [ + { + "key": { + "symbol": "actvcnt" + }, + "val": { + "u64": "1" + } + }, { "key": { "symbol": "admin"