7.7 KiB
7.7 KiB
Architecture — DEXAgents
System Overview
DEXAgents is a multi-agent LLM framework built on LangGraph. It orchestrates specialized AI agents that collaboratively analyse DeFi tokens and execute on-chain trades.
The system follows a pipeline architecture: analysts produce reports → researchers debate → trader decides → execution engine acts.
Agent Pipeline
Input: token_address, chain, date
│
▼
┌─────────────────────────────────────────┐
│ ANALYST TEAM │
│ │
│ ┌─────────────┐ ┌──────────────────┐ │
│ │ Market │ │ Fundamentals │ │
│ │ Analyst │ │ Analyst │ │
│ └─────────────┘ └──────────────────┘ │
│ ┌─────────────┐ ┌──────────────────┐ │
│ │ News │ │ Social Media │ │
│ │ Analyst │ │ Analyst │ │
│ └─────────────┘ └──────────────────┘ │
│ ┌──────────────────────────────────┐ │
│ │ Web Research Analyst │ │
│ │ (Google CSE - DeFi sites) │ │
│ └──────────────────────────────────┘ │
└─────────────────┬───────────────────────┘
│ analyst reports
▼
┌─────────────────────────────────────────┐
│ RESEARCHER TEAM │
│ Bull Research ↔ Bear Research │
│ (structured debate) │
└─────────────────┬───────────────────────┘
│ research consensus
▼
┌─────────────────────────────────────────┐
│ TRADER AGENT │
│ Generates trade proposal (BUY / │
│ SELL / HOLD + amount + rationale) │
└─────────────────┬───────────────────────┘
│ trade proposal
▼
┌─────────────────────────────────────────┐
│ RISK MANAGEMENT │
│ Evaluates: volatility, liquidity, │
│ position size, max drawdown limits │
└─────────────────┬───────────────────────┘
│ risk-adjusted order
▼
┌─────────────────────────────────────────┐
│ PORTFOLIO MANAGER │
│ Final approve / reject │
└─────────────────┬───────────────────────┘
│ approved order
▼
┌─────────────────────────────────────────┐
│ EXECUTION ENGINE │
│ │
│ JupiterExecutor │ OneInchExecutor │
│ (Solana) │ (EVM chains) │
└─────────────────────────────────────────┘
Module Structure
tradingagents/
├── agents/
│ ├── analysts/
│ │ ├── market_analyst.py # Token price/volume (DeFi adapted)
│ │ ├── fundamentals_analyst.py # Protocol fundamentals
│ │ ├── news_analyst.py # Crypto news analysis
│ │ ├── social_media_analyst.py # Community sentiment
│ │ └── web_research_analyst.py # Google CSE DeFi search ← NEW
│ ├── researchers/ # Bull/bear debate agents
│ ├── trader/ # Trading decision agent
│ ├── risk_mgmt/ # Risk evaluation
│ └── managers/ # Portfolio management
│
├── dataflows/
│ ├── interface.py # Vendor routing layer
│ ├── google_search_tools.py # Google CSE + quota guard ← NEW
│ ├── y_finance.py # Stock data (legacy)
│ └── alpha_vantage.py # Stock data (legacy)
│
├── execution/ # On-chain execution ← NEW
│ ├── base_executor.py # BaseExecutor, TradeOrder, TradeResult
│ ├── jupiter_executor.py # Solana swaps via Jupiter V6
│ ├── oneinch_executor.py # EVM swaps via 1inch V6
│ └── order_manager.py # Signal → TradeOrder converter
│
├── portfolio/ # Portfolio tracking ← NEW
│ └── portfolio_tracker.py # On-chain balance + P&L
│
├── graph/
│ └── trading_graph.py # LangGraph orchestration
│
└── default_config.py # Default configuration
Data Flow: Analyst Team
Each analyst receives a token identifier and returns a structured text report.
Web Research Analyst (DeFi-native)
Uses Google Custom Search Engine restricted to curated DeFi sites:
| Category | Sites |
|---|---|
| Security | honeypot.is, tokensniffer.com |
| News | coindesk.com, theblock.co, cryptopanic.com, bloomberg.com |
| Analytics | defillama.com, dune.com, geckoterminal.com, dexscreener.com, bubblemaps.io |
| Sentiment | lunarcrush.com |
| Markets | polymarket.com, hyperliquid.xyz, coinglass.com |
| Governance | snapshot.org, tally.xyz |
Quota guard: Hard limit at GOOGLE_SEARCH_DAILY_LIMIT (default: 95). Gracefully degrades to partial results if quota is exhausted mid-analysis.
Execution Layer
JupiterExecutor (Solana)
Flow:
GET /v6/quote— get best swap routePOST /v6/swap— get serialized transaction- Deserialize with
solders→ sign with keypair - Submit via Solana RPC
send_transaction
OneInchExecutor (EVM)
Flow:
GET /swap/v6.0/{chainId}/quote— get price estimateGET /swap/v6.0/{chainId}/swap— get calldata + gas- Build EIP-155 transaction → sign with
web3.eth.account - Broadcast via
eth_sendRawTransaction
Key Design Decisions
| Decision | Rationale |
|---|---|
| TDD for all new code | Execution is financial-critical; untested code is unacceptable |
| Mock network in tests | Jupiter/1inch APIs are blocked in CI; all HTTP mocked with unittest.mock |
| Quota guard hard block | API cost caps are non-negotiable; QuotaExceededError prevents overruns |
| Graceful degradation | Partial results are better than crashing the analysis pipeline |
uv for dependencies |
Speed + reproducibility vs pip |
| Worktree per feature | Isolates development without stashing WIP; see using-git-worktrees skill |