feat: Hybrid RPC strategy (Helius init + Alchemy trades)

CRITICAL: Fix rate limiting by using dual RPC approach

Problem:
- Helius RPC gets overwhelmed during trade execution (429 errors)
- Exit orders fail to place, leaving positions UNPROTECTED
- No on-chain TP/SL orders = unlimited risk if container crashes

Solution: Hybrid RPC Strategy
- Helius for Drift SDK initialization (handles burst subscriptions well)
- Alchemy for trade operations (better sustained rate limits)
- Falls back to Helius if Alchemy not configured

Implementation:
- DriftService now has two connections: connection (Helius) + tradeConnection (Alchemy)
- Added getTradeConnection() method for trade operations
- Updated openPosition() and closePosition() to use trade connection
- Added ALCHEMY_RPC_URL to .env (optional, falls back to Helius)

Benefits:
- Helius: 0 subscription errors during init (proven reliable for SDK setup)
- Alchemy: 300M compute units/month for sustained trade operations
- Best of both worlds: reliable init + reliable trades

Files:
- lib/drift/client.ts: Dual connection support
- lib/drift/orders.ts: Use getTradeConnection() for confirmations
- .env: Added ALCHEMY_RPC_URL

Testing: Deploy and execute test trade to verify orders place successfully
This commit is contained in:
mindesbunister
2025-11-15 12:00:57 +01:00
parent f8141009a8
commit 0ef6b82106
3 changed files with 35 additions and 2 deletions

View File

@@ -147,7 +147,7 @@ export async function openPosition(
// CRITICAL: Confirm transaction actually executed on-chain
console.log('⏳ Confirming transaction on-chain...')
const connection = driftService.getConnection()
const connection = driftService.getTradeConnection() // Use Alchemy for trade operations
try {
const confirmation = await connection.confirmTransaction(txSig, 'confirmed')
@@ -559,7 +559,7 @@ export async function closePosition(
// CRITICAL: Confirm transaction on-chain to prevent phantom closes
// BUT: Use timeout to prevent API hangs during network congestion
console.log('⏳ Confirming transaction on-chain (30s timeout)...')
const connection = driftService.getConnection()
const connection = driftService.getTradeConnection() // Use Alchemy for trade operations
try {
const confirmationPromise = connection.confirmTransaction(txSig, 'confirmed')