Automated Action 73b706f0eb Set up Solana Arbitrage Trading System
- Created Alembic migrations for SQLite database
- Set up database initialization on app startup
- Fixed linting issues with Ruff
- Updated README with comprehensive documentation
- Configured startup tasks and health checks
2025-06-05 19:34:12 +00:00

119 lines
2.9 KiB
Python

from typing import List, Optional
from datetime import datetime
from pydantic import BaseModel, Field
class ArbitrageOpportunityBase(BaseModel):
token_address: str
token_symbol: str
source_dex: str
target_dex: str
source_price: float
target_price: float
price_difference: float
price_difference_percent: float
estimated_profit_usd: float
estimated_profit_token: float
max_trade_amount_usd: float
max_trade_amount_token: float
slippage_estimate: float
fees_estimate: float
is_viable: bool
class ArbitrageOpportunityCreate(ArbitrageOpportunityBase):
pass
class ArbitrageOpportunity(ArbitrageOpportunityBase):
id: int
created_at: datetime
was_executed: bool
class Config:
from_attributes = True
class TradeBase(BaseModel):
token_address: str
token_symbol: str
source_dex: str
target_dex: str
input_amount: float
input_amount_usd: float
output_amount: float
output_amount_usd: float
profit_amount: float
profit_amount_usd: float
profit_percent: float
class TradeCreate(TradeBase):
opportunity_id: int
tx_signature: Optional[str] = None
tx_status: str
tx_error: Optional[str] = None
class Trade(TradeBase):
id: int
created_at: datetime
opportunity_id: int
tx_signature: Optional[str] = None
tx_status: str
tx_error: Optional[str] = None
class Config:
from_attributes = True
class SystemEventBase(BaseModel):
event_type: str
component: str
message: str
details: Optional[str] = None
class SystemEventCreate(SystemEventBase):
pass
class SystemEvent(SystemEventBase):
id: int
timestamp: datetime
class Config:
from_attributes = True
class StatusResponse(BaseModel):
"""Response model for the status endpoint"""
status: str
version: str
network: str
execution_enabled: bool
scan_interval_seconds: int
last_scan_time: Optional[datetime] = None
monitored_tokens_count: int
enabled_dexes: List[str]
wallet_connected: bool
wallet_balance_sol: Optional[float] = None
wallet_balance_usdc: Optional[float] = None
active_opportunities_count: int = Field(default=0, description="Number of currently viable arbitrage opportunities")
trades_last_24h: int = Field(default=0, description="Number of trades executed in the last 24 hours")
profit_last_24h_usd: float = Field(default=0.0, description="Total profit in USD for the last 24 hours")
class OpportunitiesList(BaseModel):
"""Response model for the opportunities endpoint"""
opportunities: List[ArbitrageOpportunity]
count: int
timestamp: datetime = Field(default_factory=datetime.utcnow)
class TradesList(BaseModel):
"""Response model for the trades endpoint"""
trades: List[Trade]
count: int
timestamp: datetime = Field(default_factory=datetime.utcnow)
total_profit_usd: float = 0.0