
- Built complete CEX platform with FastAPI and Python - JWT-based authentication system with secure password hashing - Multi-currency crypto wallet support (BTC, ETH, USDT) - Fiat account management (USD, EUR, GBP) - Local transaction signing without external APIs - Comprehensive transaction handling (send/receive/deposit/withdraw) - SQLAlchemy models with Alembic migrations - Security middleware (rate limiting, headers, logging) - Input validation and sanitization - Encrypted private key storage with PBKDF2 - Standardized codebase architecture with service layer pattern - Complete API documentation with health endpoints - Comprehensive README with setup instructions Features: - User registration and authentication - Crypto wallet creation and management - Secure transaction signing using local private keys - Fiat deposit/withdrawal system - Transaction history and tracking - Rate limiting and security headers - Input validation for all endpoints - Error handling and logging
230 lines
7.1 KiB
Markdown
230 lines
7.1 KiB
Markdown
# Cryptocurrency Exchange Platform
|
|
|
|
A comprehensive cryptocurrency exchange (CEX) platform built with FastAPI, featuring secure wallet management, transaction signing, fiat transfers, and crypto trading capabilities.
|
|
|
|
## Features
|
|
|
|
### 🔐 Authentication & Security
|
|
- JWT-based authentication system
|
|
- Secure password hashing with bcrypt
|
|
- Rate limiting middleware (100 requests/minute)
|
|
- Security headers middleware
|
|
- Input validation and sanitization
|
|
|
|
### 💰 Wallet Management
|
|
- Multi-currency crypto wallet support (BTC, ETH, USDT)
|
|
- Fiat account management (USD, EUR, GBP)
|
|
- Local private key generation and encryption
|
|
- Secure wallet address generation
|
|
|
|
### 💸 Transaction Handling
|
|
- Local transaction signing (no external APIs)
|
|
- Crypto send/receive functionality
|
|
- Fiat deposit/withdrawal system
|
|
- Transaction history and tracking
|
|
- Fee calculation and management
|
|
|
|
### 🏗️ Architecture
|
|
- Clean, modular codebase structure
|
|
- SQLAlchemy ORM with Alembic migrations
|
|
- Pydantic schemas for data validation
|
|
- Service layer pattern
|
|
- Comprehensive error handling
|
|
|
|
## Tech Stack
|
|
|
|
- **Framework**: FastAPI 0.104.1
|
|
- **Database**: SQLite with SQLAlchemy
|
|
- **Authentication**: JWT with python-jose
|
|
- **Cryptography**: ecdsa, bitcoin, web3, cryptography
|
|
- **Validation**: Pydantic
|
|
- **Server**: Uvicorn
|
|
- **Code Quality**: Ruff
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
├── app/
|
|
│ ├── api/ # API endpoints
|
|
│ │ ├── auth.py # Authentication routes
|
|
│ │ ├── wallets.py # Wallet management routes
|
|
│ │ └── transactions.py # Transaction routes
|
|
│ ├── core/ # Core configuration
|
|
│ │ ├── config.py # Application settings
|
|
│ │ ├── security.py # Security utilities
|
|
│ │ └── middleware.py # Security middleware
|
|
│ ├── db/ # Database configuration
|
|
│ │ ├── base.py # SQLAlchemy base
|
|
│ │ └── session.py # Database session
|
|
│ ├── models/ # Database models
|
|
│ │ ├── user.py # User model
|
|
│ │ ├── wallet.py # Wallet & fiat account models
|
|
│ │ └── transaction.py # Transaction models
|
|
│ ├── schemas/ # Pydantic schemas
|
|
│ ├── services/ # Business logic
|
|
│ │ ├── auth.py # Authentication service
|
|
│ │ ├── wallet.py # Wallet service
|
|
│ │ └── transaction.py # Transaction service
|
|
│ ├── utils/ # Utilities
|
|
│ │ ├── crypto.py # Cryptocurrency utilities
|
|
│ │ └── validation.py # Input validation
|
|
│ └── storage/ # Application storage
|
|
│ ├── db/ # SQLite database
|
|
│ └── logs/ # Application logs
|
|
├── alembic/ # Database migrations
|
|
├── requirements.txt # Python dependencies
|
|
├── main.py # Application entry point
|
|
└── .env.example # Environment variables template
|
|
```
|
|
|
|
## Installation & Setup
|
|
|
|
### 1. Clone the repository
|
|
```bash
|
|
git clone <repository-url>
|
|
cd cryptocurrencyexchangeplatform-vgi538
|
|
```
|
|
|
|
### 2. Install dependencies
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### 3. Environment Configuration
|
|
```bash
|
|
cp .env.example .env
|
|
# Edit .env file with your configuration
|
|
```
|
|
|
|
**Required Environment Variables:**
|
|
- `SECRET_KEY`: JWT secret key (use a long, random string in production)
|
|
- `DATABASE_URL`: SQLite database path
|
|
- `BTC_NETWORK`: Bitcoin network (mainnet/testnet)
|
|
- `ETH_NETWORK`: Ethereum network (mainnet/goerli)
|
|
|
|
### 4. Database Setup
|
|
```bash
|
|
# Run migrations
|
|
alembic upgrade head
|
|
```
|
|
|
|
### 5. Run the application
|
|
```bash
|
|
# Development mode
|
|
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
|
|
|
|
# Production mode
|
|
python main.py
|
|
```
|
|
|
|
## API Documentation
|
|
|
|
Once running, access the interactive API documentation:
|
|
- **Swagger UI**: http://localhost:8000/docs
|
|
- **ReDoc**: http://localhost:8000/redoc
|
|
- **OpenAPI JSON**: http://localhost:8000/openapi.json
|
|
|
|
## API Endpoints
|
|
|
|
### Authentication
|
|
- `POST /auth/register` - User registration
|
|
- `POST /auth/login` - User login
|
|
- `GET /auth/me` - Get current user info
|
|
|
|
### Wallets
|
|
- `POST /wallets/crypto` - Create crypto wallet
|
|
- `POST /wallets/fiat` - Create fiat account
|
|
- `GET /wallets/crypto` - Get user's crypto wallets
|
|
- `GET /wallets/fiat` - Get user's fiat accounts
|
|
- `GET /wallets/crypto/{wallet_id}` - Get specific crypto wallet
|
|
- `GET /wallets/fiat/{account_id}` - Get specific fiat account
|
|
|
|
### Transactions
|
|
- `POST /transactions/crypto/send` - Send cryptocurrency
|
|
- `POST /transactions/fiat/deposit` - Deposit fiat currency
|
|
- `POST /transactions/fiat/withdraw` - Withdraw fiat currency
|
|
- `GET /transactions/crypto` - Get crypto transaction history
|
|
- `GET /transactions/fiat` - Get fiat transaction history
|
|
- `GET /transactions/crypto/{transaction_id}` - Get specific transaction
|
|
|
|
### System
|
|
- `GET /` - Application info
|
|
- `GET /health` - Health check endpoint
|
|
|
|
## Security Features
|
|
|
|
### 🔒 Private Key Management
|
|
- Private keys are generated locally using secure random number generation
|
|
- Keys are encrypted using PBKDF2 with SHA-256 and stored encrypted in database
|
|
- Encryption uses user-specific salts and application secret key
|
|
|
|
### 🛡️ Transaction Security
|
|
- All transactions are signed locally using the wallet's private key
|
|
- No external APIs required for transaction signing
|
|
- Transaction data integrity verified through cryptographic signatures
|
|
|
|
### 🚦 Rate Limiting
|
|
- 100 requests per minute per IP address
|
|
- Automatic cleanup of rate limit storage
|
|
- Configurable limits per endpoint
|
|
|
|
### 🔐 Input Validation
|
|
- Comprehensive input validation for all endpoints
|
|
- Email, password, and phone number format validation
|
|
- Transaction amount and currency validation
|
|
- Address format validation for different cryptocurrencies
|
|
|
|
## Supported Cryptocurrencies
|
|
|
|
- **Bitcoin (BTC)**: Testnet and Mainnet support
|
|
- **Ethereum (ETH)**: Goerli and Mainnet support
|
|
- **Tether (USDT)**: ERC-20 token on Ethereum network
|
|
|
|
## Supported Fiat Currencies
|
|
|
|
- USD (US Dollar)
|
|
- EUR (Euro)
|
|
- GBP (British Pound)
|
|
|
|
## Error Handling
|
|
|
|
The application includes comprehensive error handling:
|
|
- HTTP status codes for different error types
|
|
- Detailed error messages for debugging
|
|
- Global exception handler for unhandled errors
|
|
- Validation errors with specific field information
|
|
|
|
## Development
|
|
|
|
### Code Quality
|
|
```bash
|
|
# Run linting and auto-fix
|
|
ruff check --fix .
|
|
```
|
|
|
|
### Testing
|
|
```bash
|
|
# Run tests (when implemented)
|
|
pytest
|
|
```
|
|
|
|
## Production Deployment
|
|
|
|
### Environment Variables for Production
|
|
- Set `DEBUG=False`
|
|
- Use a strong, unique `SECRET_KEY`
|
|
- Configure proper database URL
|
|
- Set appropriate CORS origins
|
|
- Use production cryptocurrency networks
|
|
|
|
### Security Considerations
|
|
- Use HTTPS in production
|
|
- Implement proper key management
|
|
- Set up database backups
|
|
- Monitor transaction activity
|
|
- Implement additional KYC/AML compliance
|
|
|
|
## License
|
|
|
|
This project is developed for educational and development purposes. Ensure compliance with financial regulations in your jurisdiction before production use.
|