Skip to content

Issue 11: Dynamic Token-Bucket Rate Limiter with Fraud-Detection Context #11

Description

@elizabetheonoja-art

File: /src/api/middleware.rs

Category: API / Security

Description: The TokenBucket rate limiter in middleware.rs applies a uniform rate limit to all requests regardless of source. It has no awareness of anomalous traffic patterns (e.g., a compromised edge unit sending 10,000 requests/second from a previously quiescent meter). There is no sliding window, no per-IP or per-meter differentiation, and no integration with fraud detection signals.

Parameters:

  • Global rate: 10,000 req/s
  • Per-meter rate: 100 req/s normal, 10 req/s if flagged
  • Fraud signal latency: < 50ms from detection to rate-limit adjustment

Codebase Navigation:

  1. src/api/middleware.rs:6TokenBucket — single global bucket
  2. src/api/middleware.rs:36rate_limit_layer — no per-source discrimination

Resolution Blueprint:

  1. Replace single bucket with a two-tier rate limiter: global tier (10K req/s) + per-source tier (meter_id or IP-based) using a DashMap<String, TokenBucket>
  2. Implement a sliding window counter (instead of token bucket) for the fraud detection path — allows detecting spikes within a 1-second granularity
  3. Integrate with a fraud detection signal bus: when a meter is flagged, dynamically reduce its per-source limit from 100 → 10 req/s
  4. Add exponential backoff for flagged sources: each subsequent violation doubles the cooldown period
  5. Expose GET /api/v1/rate-limiter/status showing top 10 most rate-limited sources

Acceptance Criteria:

  • Per-source rate limits enforced independently
  • Fraud signal adjusts rate limit within 50ms
  • Sliding window detects 10x spikes within 1 second
  • Flagged sources experience exponential backoff correctly

Metadata

Metadata

Assignees

Labels

GrantFox OSSIssue tracked in GrantFox OSSMaybe RewardedIssue may be eligible for a GrantFox rewardOfficial CampaignCampaign: Official CampaignenhancementNew feature or requesthardcoreHardcore structural/system-level challengestructuralArchitectural or structural concern

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