Files
dao/ARCHITECTURE.md

191 lines
7.2 KiB
Markdown

# LuxDAO Stack Architecture
## Overview
The LuxDAO stack is a comprehensive decentralized autonomous organization (DAO) platform built with a microservices architecture. Here's how all the components fit together:
## Current Stack Components
### 🎯 **Currently Active & Working**
#### 1. **Frontend (App)** ✅
- **Location**: `/dao/app`
- **Technology**: React, TypeScript, Vite
- **Port**: 5173 (dev), 3000 (production)
- **Purpose**: Main user interface for the DAO
- **Features**:
- Wallet connection (WalletConnect, MetaMask, etc.)
- Proposal creation and voting
- Treasury management
- Role-based access control
- Multi-chain support
#### 2. **Smart Contracts** ✅
- **Location**: `/dao/contracts`
- **Technology**: Solidity, Hardhat, Foundry
- **Deployed Contracts**:
- `LinearERC20Voting`: Token-based voting
- `Governor`: Modular governance framework
- `LuxAutonomousAdmin`: Autonomous admin functions
- `LuxHats`: Role management with Hats Protocol
- `KeyValuePairs`: On-chain key-value storage
- `ERC6551Registry`: Token-bound accounts
#### 3. **Local Blockchain (Anvil)** ✅
- **Port**: 8545
- **Purpose**: Local Ethereum development network
- **Features**:
- Fast block times (3s)
- Pre-funded accounts
- Zero gas costs for testing
### 📦 **Infrastructure Services (Running but Underutilized)**
#### 4. **PostgreSQL** ⚠️
- **Port**: 5432
- **Intended Purpose**:
- Store indexed blockchain events
- Cache DAO metadata
- Store proposal history
- Analytics data
- **Current Status**: Running but not actively used
- **Future Use**: Will be used by indexer service when implemented
#### 5. **Redis** ⚠️
- **Port**: 6379
- **Intended Purpose**:
- Cache frequently accessed data
- Session management
- Rate limiting
- Job queues for background tasks
- **Current Status**: Running but not actively used
- **Future Use**: Will cache API responses and manage queues
#### 6. **IPFS** ⚠️
- **Ports**: 5001 (API), 8080 (Gateway)
- **Intended Purpose**:
- Store proposal metadata
- Store DAO documents
- Decentralized file storage
- **Current Status**: Running but not integrated
- **Future Use**: Store large proposal content off-chain
### 🚧 **Planned/Incomplete Components**
#### 7. **API Backend** (Placeholder)
- **Location**: `/dao/api/packages/offchain`
- **Intended Purpose**:
- REST/GraphQL API
- Database interactions
- Caching layer
- WebSocket subscriptions
- **Status**: Dockerfile exists but no implementation
#### 8. **Indexer Service** (Placeholder)
- **Location**: `/dao/api/packages/indexer`
- **Intended Purpose**:
- Listen to blockchain events
- Index and store in PostgreSQL
- Maintain DAO state
- **Status**: Dockerfile exists but no implementation
#### 9. **Subgraph** (Partially Implemented)
- **Location**: `/dao/subgraph`
- **Purpose**: GraphQL API for blockchain data
- **Status**: Schema defined but not deployed locally
## Data Flow Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ User Browser │
└──────────────────────────┬──────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Frontend App (:5173) │
│ React + TypeScript + Vite │
└──────────┬───────────────────────────────────┬──────────────┘
│ │
│ Direct RPC Calls │ (Future: API calls)
│ │
▼ ▼
┌──────────────────────┐ ┌──────────────────────┐
│ Anvil Blockchain │ │ API Backend (:4000) │
│ (:8545) │ │ (Not Implemented) │
│ │ └──────────┬───────────┘
│ - Smart Contracts │ │
│ - Local Test Chain │ ▼
└──────────────────────┘ ┌──────────────────────┐
│ PostgreSQL (:5432) │
│ Redis (:6379) │
│ (Underutilized) │
└──────────────────────┘
```
## Current Implementation Status
### ✅ **What's Working:**
1. **Frontend** connects directly to blockchain via RPC
2. **Smart contracts** deployed and functional on Anvil
3. **All infrastructure services** running and healthy
4. **E2E tests** passing (7/7)
### ⚠️ **What's Not Integrated:**
1. **PostgreSQL/Redis**: Running but no services use them
2. **IPFS**: Running but not connected to the app
3. **API Backend**: Not implemented
4. **Indexer**: Not implemented
5. **Subgraph**: Not deployed locally
## Why PostgreSQL and Redis?
These services are part of a **production-ready architecture** that would typically include:
### PostgreSQL Would Store:
- Indexed blockchain events (faster queries than RPC)
- Proposal metadata and history
- User preferences and settings
- DAO analytics and metrics
- Cached on-chain data for performance
### Redis Would Handle:
- API response caching
- Session management
- Rate limiting
- WebSocket pub/sub
- Background job queues
- Real-time notifications
## Current App Behavior
The app currently works in **"direct mode"**:
1. Frontend connects directly to Anvil RPC
2. All data fetched directly from blockchain
3. No caching or indexing layer
4. No backend API (everything client-side)
This works for development but would be slow/expensive in production.
## Missing Pieces for Complete Stack
1. **Indexer Service**: Need to implement blockchain event listening
2. **API Backend**: Need REST/GraphQL API implementation
3. **Database Schema**: Need to design and implement
4. **Caching Strategy**: Need to implement Redis caching
5. **IPFS Integration**: Need to connect for metadata storage
6. **Subgraph Deployment**: Need local Graph node setup
## Recommendation
For a **minimal working DAO**, you have everything you need:
- Frontend ✅
- Smart Contracts ✅
- Local Blockchain ✅
The PostgreSQL/Redis infrastructure is **future-proofing** for when you need:
- Better performance (caching)
- Historical data (indexing)
- Complex queries (database)
- Background jobs (queues)
You could simplify the stack by removing unused services for now, or keep them as placeholders for future development.