https://github.com/core-euler/trade_game
Real Trading mini game
https://github.com/core-euler/trade_game
docker nestjs postgresql redis ton tonconnect vite vue websocket
Last synced: 26 days ago
JSON representation
Real Trading mini game
- Host: GitHub
- URL: https://github.com/core-euler/trade_game
- Owner: core-euler
- License: mit
- Created: 2025-05-11T08:34:31.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-11-05T12:29:53.000Z (7 months ago)
- Last Synced: 2026-02-28T18:54:06.818Z (4 months ago)
- Topics: docker, nestjs, postgresql, redis, ton, tonconnect, vite, vue, websocket
- Language: TypeScript
- Homepage: https://trade.ruble.website/
- Size: 475 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Ruble Trade Game
[Ruble Trade Game](https://t.me/ruble_caller_bot) is a Telegram Web App for trading TON/USDT pairs, managing wallet balances, and earning RUBLE tokens based on trading volume. Built with a Vue.js frontend and a NestJS backend, it integrates with the TON blockchain via TonConnect for wallet authentication and transactions. The app supports real-time market data, trade history, and user statistics, with a focus on a seamless user experience in a Telegram environment.
**Features**
- **Trading:** Execute buy/sell trades for TON/USDT with real-time market prices.
- **Wallet Management:** Deposit and withdraw TON through a smart contract (WalletContract), and withdraw RUBLE tokens to a TON wallet.
- **RUBLE Tokens:** Earn up to 10 RUBLE tokens daily based on trading volume (1 RUBLE per $10 traded).
- **Trade History:** View trade history with details like type, amount, price, profit/loss, and date.
- **Real-time Market Data:** Display current TON/USDT price via WebSocket (market.gateway.ts).
- **Localization:** Support for English and Russian languages.
- **Authentication:** Secure wallet-based authentication using TonConnect.
- **Responsive UI:** Built with Vuetify for a modern, mobile-friendly interface.
## Tech Stack
### Frontend
- **Vue.js 3:** Component-based UI with Composition API.
- **Vite:** Build tool for fast development and optimized production builds.
- **Vuetify:** Material Design component library.
- **Pinia:** State management for stores (auth, wallet, trading, market).
- **TonConnect (@townsquarelabs/ui-vue):** TON wallet integration.
- **vue-i18n:** Localization for EN/RU.
- **Axios:** HTTP client for API requests.
- **@twa-dev/sdk:** Telegram Web App integration.
- **lightweight-charts:** Charting for market data visualization.
### Backend
- **NestJS:** Node.js framework for scalable server-side applications.
- **TypeORM:** ORM for PostgreSQL database management.
- **Redis:** Caching for market prices and daily trading volumes.
- **JWT:** Authentication for secure API endpoints.
- **Axios:** For fetching market data.
- **WebSocket:** Real-time market updates via market.gateway.ts.
- **TON SDK:** Blockchain interactions for token transfers and smart contract integration.
- **@ton/core:** TON blockchain utilities for building BOC (Bag of Cells) messages.
### Database
- **PostgreSQL:** Stores users, trades, and transactions.
- **Entities:**
- **User:** Stores ton_address, token_balance, balance (TON - trading balance), usdt_balance.
- **Trade:** Stores trade details (type, amount, usdt_price, profit_loss, created_at).
- **Transaction:** Stores blockchain transactions (type: 'deposit' | 'withdraw' | 'ruble', amount, ton_tx_hash, status).
### Blockchain
- **Smart Contract (WalletContract):** TON smart contract written in Tact for managing user balances.
- **Deposit:** Users can deposit TON to the contract, increasing their on-chain balance.
- **Withdraw:** Users can withdraw TON from the contract with a configurable fee (withdrawFeeBps).
- **Balance Management:** On-chain balances stored in the contract, synchronized with database trading balances.
- **Contract Features:** Pause/unpause functionality, emergency withdraw (owner only), and jetton award support.
### Prerequisites
- **Node.js:** v18.x or higher
- **PostgreSQL:** v13 or higher
- **Redis:** v6 or higher
- **Docker:** For containerized deployment
- **Telegram Web App:** Access via Telegram bot
- **TON Wallet:** For testing wallet interactions
## Manual Testing
### Wallet Operations
1. **Deposit TON via Smart Contract:**
- Connect a TON wallet via TonConnect in the app.
- Navigate to Wallet and click Deposit.
- Enter amount and confirm transaction.
- Verify transaction is sent to WalletContract.
- Check that trading balance in database is updated (added to current balance).
- Verify transaction record in transactions table with type: 'deposit'.
2. **Withdraw TON via Smart Contract:**
- Navigate to Wallet and click Withdraw.
- Enter amount (minimum 0.11 TON) and confirm transaction.
- Note: 0.05 TON is required for contract call (returned to wallet).
- Verify transaction is sent to WalletContract.
- Check that trading balance in database is updated (subtracted from current balance).
- Verify transaction record in transactions table with type: 'withdraw'.
- Confirm TON is received in wallet (amount minus contract fee).
3. **Withdraw RUBLE Tokens:**
- Navigate to Wallet and click Withdraw RUBLE.
- Enter amount and confirm transaction.
- Verify transaction in the transactions table with type: 'ruble'.
### Trading Operations
1. **Execute Buy/Sell Trades:**
- Connect a TON wallet via TonConnect in the app.
- Navigate to Trading page.
- Execute a buy/sell trade in TradeButtons.vue.
- Verify that usdt_price is saved in the trades table.
- Check trade history in TradeHistory.vue for Price column.
- Confirm trading balances (TON and USDT) are updated correctly.
## Contributing
Fork the repository.
Create a feature branch (git checkout -b feature/your-feature).
Commit changes (git commit -m "Add your feature").
Push to the branch (git push origin feature/your-feature).
Open a Pull Request.
### Architecture Notes
**Balance Management:**
- **On-chain Balance:** Stored in WalletContract smart contract, represents actual TON in the contract.
- **Trading Balance:** Stored in database (user.balance), used for trading operations.
- **Synchronization:**
- On deposit: Trading balance is increased by deposit amount (added to current balance).
- On withdrawal: Trading balance is decreased by withdrawal amount (subtracted from current balance).
- Initial sync: If trading balance is null/undefined, it syncs with on-chain balance on first fetch.
**Smart Contract Integration:**
- Deposit and withdrawal operations require blockchain transactions via TonConnect.
- Transactions are prepared on the backend (BOC generation) and sent from the frontend.
- Backend processes transactions after they are sent to sync balances with the contract state.
### Known Issues
- **Dynamic Imports:** auth.js and wallet.js have mixed static/dynamic imports, causing Vite warnings. Consider using fully dynamic imports for better chunk splitting.
- **Source Maps:** vite-plugin-vue-svg generates incorrect source maps, which may affect debugging. Check for updates or switch to vite-svg-loader.
- **Buffer Polyfill:** Requires Buffer polyfill for browser environment (configured in vite.config.js).
License
MIT License. See LICENSE for details.
## Authors
[okoloboga](https://t.me/okolo_boga)