Context:
Signal providers submit trade signals with stake verification. The system must validate signal quality, verify on-chain stake, and prevent spam.
Problem:
Build a robust signal submission endpoint that validates data, checks provider stake, and applies quality filters.
What Done Looks Like:
- POST
/signals endpoint
- Input validation (prices, rationale length, etc.)
- Stake verification via Soroban smart contract
- Rate limiting per provider
- Signal quality scoring
Folder Structure:
src/
├── signals/
│ ├── signals.controller.ts
│ ├── signals.service.ts
│ ├── validators/
│ │ ├── signal-validator.service.ts
│ │ └── stake-validator.service.ts
│ └── dto/
│ └── create-signal.dto.ts
Implementation Guidelines:
- Validate price logic (target > entry for BUY signals)
- Require minimum rationale length (50 characters)
- Check provider has minimum stake (query Soroban contract)
- Rate limit: 10 signals per provider per day
- Auto-set expiration (24 hours default)
- Generate confidence score based on provider history
Required Fields:
{
assetPair: string; // e.g., "USDC/XLM"
action: "BUY" | "SELL";
entryPrice: number;
targetPrice: number;
stopLoss: number;
rationale: string;
expiresIn?: number; // hours
}
Edge Cases:
- Provider with insufficient stake
- Invalid asset pair
- Price validation failures
- Duplicate signals within 1 hour
Validation:
- Valid signal created successfully
- Invalid prices rejected
- Stake verification calls Soroban
- Rate limit enforced
Context:
Signal providers submit trade signals with stake verification. The system must validate signal quality, verify on-chain stake, and prevent spam.
Problem:
Build a robust signal submission endpoint that validates data, checks provider stake, and applies quality filters.
What Done Looks Like:
/signalsendpointFolder Structure:
Implementation Guidelines:
Required Fields:
Edge Cases:
Validation: