Summary
The GlobalStats struct includes a total_campaigns: u64 field, initialized to 0 in initialize. None of record_impression, record_click, or record_conversion ever increment it. get_global_stats always returns total_campaigns = 0 regardless of how many campaigns have analytics data recorded.
Location
contracts/analytics-aggregator/src/lib.rs
pub struct GlobalStats {
pub total_campaigns: u64, // always 0 — never incremented
pub total_impressions: u64,
pub total_clicks: u64,
pub total_spend: i128,
pub last_updated: u64,
}
Fix
Increment total_campaigns the first time analytics are recorded for a new campaign_id. Track seen campaigns using a SeenCampaign(u64) key, or increment on first record_impression when the campaign analytics record is newly created (i.e., total_impressions was 0 before):
if analytics.total_impressions == 1 { // first impression = first time seen
global.total_campaigns += 1;
}
Summary
The
GlobalStatsstruct includes atotal_campaigns: u64field, initialized to 0 ininitialize. None ofrecord_impression,record_click, orrecord_conversionever increment it.get_global_statsalways returnstotal_campaigns = 0regardless of how many campaigns have analytics data recorded.Location
contracts/analytics-aggregator/src/lib.rsFix
Increment
total_campaignsthe first time analytics are recorded for a newcampaign_id. Track seen campaigns using aSeenCampaign(u64)key, or increment on firstrecord_impressionwhen the campaign analytics record is newly created (i.e.,total_impressionswas 0 before):