Guidelines
Troubleshooting & Pitfalls
Common mistakes and debugging strategies
Currency Handling Mistakes
❌ Forgetting Cents Conversion
// WRONG
const withdrawAmount = request.amount; // 5000 treated as $5000
// CORRECT
const withdrawAmount = request.amount / 100; // 5000 cents = $50❌ Using Floating-Point Arithmetic
// WRONG
const newBalance = balance - (amount * 0.01);
// CORRECT
const newBalance = (balanceInCents - amountInCents) / 100;Security Mistakes
❌ Skipping Signature Verification
- Always verify signatures, even in dev/staging
- Use proper RSA verification with SHA-256
- Never trust requests without valid signatures
❌ Logging Sensitive Data
// WRONG
console.log('Request:', { ...request, signature });
// CORRECT
console.log('Request:', { ...request, signature: '[REDACTED]' });Performance Issues
❌ Making Blocking External Calls
// WRONG
const externalData = await slowExternalAPI.getData();
// CORRECT
const result = processWithdraw(cachedData);
// Update cache asynchronously❌ Synchronous Operations
- Use async logging libraries
- Implement non-blocking database queries
- Avoid synchronous file operations
Data Integrity Issues
❌ Not Handling Race Conditions
- Use database transactions with proper isolation
- Implement row-level locking (
SELECT FOR UPDATE) - Queue requests per player if needed
❌ Ignoring Idempotency
- Always check
tx_idbefore processing - Store and return previous responses for duplicates
- Handle retries gracefully
❌ Missing Rollback Logic
- Wrap operations in transactions
- Implement compensating transactions for failures
- Test rollback scenarios thoroughly
Debugging Strategies
Common Issues
- Timeout errors: Check database query performance and indexes
- Balance discrepancies: Verify transaction atomicity and rollback logic
- Signature failures: Validate key format and signing process
- Race conditions: Review concurrent request handling
Circuit Breaker Implementation
- Monitor failure rates for external dependencies
- Open circuit after threshold failures
- Provide fallback responses during outages
- Automatically retry after cooldown period