Files
Exchange/README.md
2025-11-07 22:24:40 +01:00

265 lines
7.1 KiB
Markdown

# Cryptocurrency Exchange Platform
A comprehensive cryptocurrency exchange server built with Node.js, TypeScript, and Express. This platform supports trading of Bitcoin, Ethereum, and Tron cryptocurrencies with Iranian Rial (IRR) support.
## Features
- **Multi-Cryptocurrency Support**: Bitcoin (BTC), Ethereum (ETH), and Tron (TRX)
- **User Authentication**: Email and phone verification, session management
- **Wallet Management**: Secure wallet operations with support for multiple cryptocurrencies
- **Trading System**: Buy/sell orders, offer management, and order matching
- **Price Statistics**: Real-time and historical price data (hourly, daily, weekly, monthly, yearly)
- **Real-time Updates**: WebSocket integration via Socket.io for live updates
- **Admin Panel**: Administrative tools for managing the exchange
- **Support Tickets**: Integrated ticketing system for customer support
- **Automated Backups**: Daily database backups
- **Rate Limiting**: Brute force protection and rate limiting
## Tech Stack
- **Runtime**: Node.js
- **Language**: TypeScript
- **Framework**: Express.js
- **Database**: MongoDB (Mongoose)
- **Cache**: Redis
- **Message Queue**: AMQP (RabbitMQ)
- **Real-time**: Socket.io
- **Blockchain Libraries**:
- `bitcoin-core` for Bitcoin
- `web3` and `ethereumjs-tx` for Ethereum
- `tronweb` for Tron
- **Other**: Winston (logging), Nodemailer (emails), bcrypt (hashing)
## Prerequisites
- Node.js (v14 or higher)
- MongoDB
- Redis
- RabbitMQ (AMQP)
- TypeScript
## Installation
1. Clone the repository:
```bash
git clone <repository-url>
cd Exchange
```
2. Navigate to the server directory:
```bash
cd server
```
3. Install dependencies:
```bash
npm install
```
4. Create a `.env` file in the server directory with the following variables:
```env
# Database
MONGO_DATABASE=mongodb://localhost:27017/exchange
MONGO_DATABASE_NAME_TICKETS=trudesk
# Session
SESSION_SECRET=your-session-secret-key
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
# REDIS_PASS=your-redis-password
# AMQP (RabbitMQ)
AMQP_URL=amqp://localhost
# Email (Nodemailer)
NODEMAILER_HOST=smtp.gmail.com
NODEMAILER_PORT=587
NODEMAILER_USER=your-email@gmail.com
NODEMAILER_PASS=your-email-password
SENDER_ADDRESS=your-email@gmail.com
# API
API=http://localhost:3001
# External APIs
CURRENCY_API_KEY=your-nomics-api-key
SMS_API_ACCESS_KEY=your-sms-api-key
SMS_API_PHONE_PATTERN_CODE=your-sms-pattern-code
SMS_API_DEFINITE_SENDER_NUMBER=your-sms-sender-number
# Ticket System
TICKET_START_CONVERSATION=your-ticket-api-url
TICKET_GET_MESSAGES_URL=your-ticket-api-url
TICKET_CREATE_TICKET_URL=your-ticket-api-url
TICKET_ADD_COMMENT_URL=your-ticket-api-url
TICKET_SEND_MESSAGE_URL=your-ticket-api-url
SUPPORT_ROLE_ID=your-support-role-id
USER_ROLE_ID=your-user-role-id
ACCESS_TOKEN=your-access-token
# Crypto
CRYPTO_SECRET=your-crypto-secret
SALT_I=10
OBJECTID_RIAL=your-rial-currency-object-id
# Feature Flags
BUYFROMOFFERS=true
# Chart
CHART_LIMIT=20
# Test
TEST_API_URL=http://localhost:3001
NODE_ENV=development
```
5. Compile TypeScript (if needed):
```bash
npx tsc
```
## Running the Application
### Development Mode
```bash
npm start
```
The server will start on `http://localhost:3001`
### Test Mode
```bash
npm run test-env
```
### Running Tests
```bash
npm test
```
## Project Structure
```
server/
├── api/ # API utilities and integrations
│ ├── walletApi/ # Blockchain wallet APIs (Bitcoin, Ethereum, Tron)
│ ├── amqp.ts # AMQP message queue configuration
│ ├── logger.ts # Winston logger configuration
│ ├── redis.ts # Redis client configuration
│ └── socket.ts # Socket.io configuration
├── db/ # Database models and schemas
│ ├── user.ts # User model
│ ├── currencies.ts # Currency model
│ ├── activeOffers.ts # Active trading offers
│ ├── acceptedOffers.ts # Accepted offers
│ └── ... # Other models
├── middlewares/ # Express middlewares
│ ├── auth.ts # Authentication middleware
│ ├── validation.ts # Request validation
│ ├── errorHandler.ts # Error handling
│ └── preventBruteForce.ts # Rate limiting
├── routes/ # API routes
│ ├── auth.ts # Authentication routes
│ ├── user.ts # User routes
│ ├── wallet.ts # Wallet routes
│ ├── admin.ts # Admin routes
│ ├── service.ts # Service routes
│ └── tickets.ts # Support ticket routes
├── scripts/ # Utility scripts
│ ├── priceStats.ts # Price statistics
│ ├── currenciesadder.ts # Currency management
│ └── localPriceScript.ts # Local price tracking
└── test/ # Test files
```
## API Endpoints
### Authentication (`/auth`)
- `GET /auth` - Check authentication status
- `POST /register` - User registration
- `POST /login` - User login
- `GET /logout` - User logout
- `POST /verify` - Verify email/phone
### User (`/user`)
- `GET /getUserWallet` - Get user wallet balance
- `GET /getUserOffers` - Get user's trading offers
- `POST /createOffer` - Create a new trading offer
- `GET /getUserTransactions` - Get user transaction history
### Wallet (`/wallet`)
- `GET /getEtheriumNonce` - Get Ethereum nonce
- `POST /transferToExchange` - Transfer cryptocurrency to exchange
- `POST /transferFromExchange` - Transfer cryptocurrency from exchange
- `POST /transferToExchangeById` - Transfer by transaction ID
### Service (`/service`)
- `GET /getDeafultAcceptedOffers` - Get default accepted offers
- `GET /getPriceChart` - Get price chart data
- `GET /getCurrencies` - Get supported currencies
### Admin (`/admin`)
- Admin-specific endpoints for managing the exchange
### Tickets (`/tickets`)
- Support ticket management endpoints
## Key Features
### Automated Tasks
- Daily database backups (runs at 11:59 PM)
- Continuous price statistics updates
- Local price tracking (hourly, daily, weekly, monthly, yearly)
- Dollar to Rial price updates
### Security
- Session-based authentication
- CSRF protection
- Rate limiting and brute force protection
- Password hashing with bcrypt
- Input validation
### Real-time Features
- Socket.io for real-time updates
- Online user tracking
- Live price updates
## Logging
The application uses Winston for logging. Logs are written to:
- `combined.log` - All logs
- `error.log` - Error logs
- `exceptions.log` - Uncaught exceptions
## Database
The application uses MongoDB with the following main databases:
- `exchange` - Main application data
- `trudesk` - Support ticket system
## Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Write tests if applicable
5. Submit a pull request
## License
MIT
## Notes
- Make sure MongoDB, Redis, and RabbitMQ are running before starting the server
- Configure all environment variables in the `.env` file
- The application includes automated backup scripts that run daily
- Price statistics are updated continuously for real-time trading data