- Comprehensive guide to Helius rate limit tiers - Current bot configuration and retry strategy - Estimated daily RPC usage calculation - Monitoring queries and warning signs - Optimization strategies (short/medium/long-term) - Cost-benefit analysis for tier upgrades Key insights: - Free tier: 10 RPS sustained, 100k/month - Current usage: ~8,880 requests/day (24 trades) - Free tier capacity: 3,300/day → DEFICIT - Recommendation: Upgrade to Developer tier at 200+ trades/month
4.3 KiB
4.3 KiB
Helius RPC Rate Limits
Overview
Our bot uses Helius RPC as the Solana endpoint. Understanding rate limits is critical for reliable operation.
Helius Rate Limit Tiers
Free Tier (Current)
- Burst: 100 requests/second
- Sustained: 10 requests/second
- Monthly: 100k requests
- Best for: Testing, small-scale trading
Paid Tiers
- Developer ($49/month): 50 RPS sustained, 1M requests/month
- Professional ($199/month): 100 RPS sustained, 10M requests/month
- Business ($499/month): 300 RPS sustained, 100M requests/month
Bot Configuration (Nov 14, 2025)
Retry Strategy
// lib/drift/orders.ts
retryWithBackoff(operation, maxRetries=3, baseDelay=5000)
// Progression: 5s → 10s → 20s
Why 5s base delay?
- Free tier: 10 req/s = 1 request every 100ms maximum
- If rate limited, need >1s to clear backlog
- 5s gives ample time for Helius to recover
- Prevents cascade of failed retries
Operations that Hit RPC
High frequency (every price update):
getPosition()- Check current position size (for TP1/TP2 detection)
Medium frequency (on trade events):
placeExitOrders()- Place TP/SL orders (3-6 requests: cancel old + place new)cancelAllOrders()- Cancel orders (2-3 requests)
Low frequency (trade open/close):
placePerpOrder()+confirmTransaction()- Open position (2 requests)closePosition()+confirmTransaction()- Close position (2 requests)
Estimated Daily Usage
1 trade/hour scenario:
- Open: 2 RPC calls
- Monitoring: ~1 call/10s = 360 calls/hour
- TP1 hit: 6 calls (cancel + place breakeven orders)
- Close: 2 calls
- Per trade: ~370 requests
- Per day (24 trades): ~8,880 requests
Free tier capacity: 100,000/month = ~3,300/day Headroom: 3,300 - 8,880 = DEFICIT of -5,580/day
Monitoring
Check current rate limit health:
curl http://localhost:3001/api/analytics/rate-limits | jq .
SQL query for rate limit events:
SELECT
"eventType",
COUNT(*) as count,
MAX("createdAt") as last_occurrence
FROM "SystemEvent"
WHERE "eventType" IN ('rate_limit_hit', 'rate_limit_recovered', 'rate_limit_exhausted')
AND "createdAt" > NOW() - INTERVAL '24 hours'
GROUP BY "eventType";
Warning Signs
🔴 Critical (Upgrade Required)
rate_limit_exhaustedevents > 0/dayrate_limit_hitevents > 20/day- Positions closed late due to rate limits
- Missing trades due to failed opens
⚠️ Warning (Monitor Closely)
rate_limit_hitevents 10-20/day- Recovery times > 10 seconds
- Frequent retries during high volatility
✅ Healthy
rate_limit_hitevents < 5/day- All recoveries within 2 retries
- No exhausted events
Optimization Strategies
Short-term (Current)
- ✅ Increased retry delays (5s base)
- ✅ Rate limit-aware error handling
- ✅ Database logging for analytics
Medium-term (If limits become issue)
-
Reduce monitoring frequency:
- Current: Every Pyth price update (~1s)
- Alternative: Sample every 5s instead
-
Batch order operations:
- Combine cancel + place into fewer RPC calls
- Use Drift SDK's batch order methods
-
Cache position data:
- Only call
getPosition()when price crosses key levels - Trust Position Manager's tracked size between checks
- Only call
Long-term (Growth)
-
Upgrade to Developer tier ($49/month):
- 5x sustained capacity (50 RPS vs 10 RPS)
- 10x monthly quota (1M vs 100k)
- Cost: ~$2/day for reliable trading
-
Implement request queueing:
- Rate limiter middleware
- Priority queue (closes > opens > monitoring)
- Automatic backoff when approaching limits
Cost-Benefit Analysis
Current situation:
- Free tier: $0/month
- Risk: Missed trades, late closes, orphaned positions
- Manual intervention required
Developer tier ($49/month):
- Eliminates rate limit issues
- Reliable trade execution
- Cost per trade: ~$0.10 (assuming 500 trades/month)
- ROI: One avoided $5 loss pays for 50 trades worth of RPC cost
Recommendation: Upgrade to Developer tier once reaching 200+ trades/month or experiencing frequent rate limit events.