Skip to content

feat(shade): implement financial penalties for malicious campaigns (#360) - #414

Open
graceful-tech12 wants to merge 2 commits into
ShadeProtocol:mainfrom
graceful-tech12:main
Open

feat(shade): implement financial penalties for malicious campaigns (#360)#414
graceful-tech12 wants to merge 2 commits into
ShadeProtocol:mainfrom
graceful-tech12:main

Conversation

@graceful-tech12

Copy link
Copy Markdown

Summary

Implements financial penalties for malicious campaigns as described in Issue #360. This adds core slashing/staking mechanics, affiliate tracking, leaderboard functionality, and a penalty reporting system.

Changes

New Types & DataKeys

  • Campaign struct: Added total_slashed, penalty_count, status (CampaignStatus), fee_waiver_bps, discount_bps, stake_required fields
  • CampaignPenaltyReport: Report filed against malicious campaigns with status tracking
  • CampaignPenaltyState: Per-campaign penalty state (slashed totals, report counts)
  • CampaignParticipant: Participant tracking with staked/slashed/score fields
  • CampaignAffiliate: Affiliate registration with commission tracking
  • PenaltyReportStatus: Pending/Upheld/Dismissed lifecycle
  • CampaignStatus: Added UnderReview=3 and Penalized=4 variants
  • New DataKey variants: StakeableCampaign, CampaignPenaltyReport, CampaignPenaltyState

Financial Penalty Functions

  • stake_campaign: Stake tokens to increase participant score
  • slash_campaign_stake: Slash (penalize) a participant's stake — core penalty mechanism, callable by campaign owner or admin
  • register_affiliate / pay_affiliate_commission: Affiliate/referral system
  • get_campaign_leaderboard: Top participants sorted by score
  • configure_campaign_fee_policy: Set per-campaign fee waivers and discounts
  • calculate_campaign_discounted_amount: Compute discounted contribution amount

Code Quality Improvements

  • types.rs: Removed duplicate DataKey variants from merge conflicts; consolidated to single Campaign struct
  • errors.rs: Resolved all duplicate error codes; added penalty-specific errors (80-84)
  • events.rs: Added 6 new events (CampaignStakedEvent, CampaignSlashedEvent, AffiliateRegisteredEvent, AffiliateCommissionPaidEvent, CampaignPenaltyReportedEvent, CampaignPenaltyResolvedEvent)
  • shade.rs: Cleaned up — removed ~90 non-trait functions from merge conflicts, now implements exactly the 101 methods declared in ShadeTrait
  • campaign.rs: Uses unique StakeableCampaign DataKey to avoid conflicts with campaigns.rs

Tests

  • 11 comprehensive tests in test_campaign_penalties.rs covering staking, slashing, affiliates, leaderboard, authorization checks, and edge cases

Files Changed

File +/-
contracts/shade/src/types.rs +147/-37
contracts/shade/src/errors.rs +115/-50
contracts/shade/src/events.rs +167/-0
contracts/shade/src/components/campaign.rs +324/-324 (rewrite)
contracts/shade/src/components/campaigns.rs +5/-3
contracts/shade/src/interface.rs +26/-26
contracts/shade/src/shade.rs +626/-526 (rewrite)
contracts/shade/src/tests/mod.rs +1/-0
contracts/shade/src/tests/test_campaign_penalties.rs +246/-0 (new)

Closes #360

…hadeProtocol#360)

- Add CampaignPenaltyReport, CampaignPenaltyState, PenaltyReportStatus types
- Add CampaignParticipant and CampaignAffiliate types
- Consolidate Campaign struct with penalty fields (total_slashed, penalty_count, status)
- Fix duplicate DataKey variants in types.rs (use StakeableCampaign for campaign.rs)
- Add unique error codes for penalty operations (CampaignNotPenalizable, PenaltyReportNotFound, etc.)
- Add penalty events: CampaignSlashedEvent, CampaignStakedEvent, Affiliate events, PenaltyReport events
- Add comprehensive tests for staking, slashing, affiliates, and leaderboard
- Fix campaigns.rs Campaign construction with new fields
- Clean up shade.rs structure removing duplicate imports and function definitions
…gn.rs signatures

- Remove ~90 non-trait functions from shade.rs (governance, bridge, escrow,
  NFTs, backer rewards, multi-sig, search, campaign categories, leaderboard,
  cross-chain pledges)
- Fix create_campaign signature in campaign.rs to match trait's 7-param format
- Add configure_campaign_fee_policy and calculate_campaign_discounted_amount
  back to campaign.rs
- Add fee_waiver_bps, discount_bps, stake_required fields to Campaign struct
- Update campaigns.rs Campaign construction with new fields
- Rename unused charity param to _charity to suppress compiler warning
- Add clear comment for placeholder token in campaign.rs create_campaign
@drips-wave

drips-wave Bot commented Jul 30, 2026

Copy link
Copy Markdown

@graceful-tech12 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@codebestia

Copy link
Copy Markdown
Collaborator

Hello @graceful-tech12
Please resolve the conflicts

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement Financial Penalties for Malicious Campaigns

2 participants