Different Components -
1) User Interface - How your traders see your exchange. Must be user-friendly and intuitive. UI needs to be mobile friendly too. It should have following functionalities :
- Register and access an account (modify userDetails)
- View current order, past transactions, balance , statistics etc
- Analytics (optional)
- Place buy and sell orders
- Payment (Fiat, BTC, Eth)
- Wallet Management
- Access the support mechanism (communication with the admin)
2) Admin Interface – To Control and Manage the exchange. It should have following functionalities :
- Editing the trading fees (in percentage)
- Approving user accounts for trading (User Management View – Active/Inactive user, send email functionality)
- Approving transactions (only deposit request)
- Addressing the support requests raised by users (optional)
3) Trading – Transaction Management – accesses the order book, matches buy/sell orders, executes transactions and calculates balances
4) Wallet - Multiple currency wallet with minimum basic functionality
The manner in which these components are shown and defined above, one can easily picturize a microservice architecture for development. The development process should take between 3 to 6 months depending on the complexity of the trading platform.
Basic Schema
User : id, userName, email, phoneNo, status (active/inactive), Country, createdOn, passwd
Role : authority (String) {admin, user, manager}
Transaction : currency {Fiat, Crypto}, exchangeRate (Null for Fiat), fee (in percentage), amount, buyer (Null for Fiat) (user), seller (Null for Fiat) (user), status {success, failure, pending, cancelled}, grossAmount, transactionId
User has many Role
User has many Transaction
User has many Wallet
AuthToken : authType, token, userId
Message : subject, to , from, body , dateCreated, status, isChecked
Wallet : id, userId, balance, shadow_balance, walletType
Currency : type, name, symbol, fee
Order : amount, fee, currencyId, orderType, dateCreated, status
TraderAd : minTrans, maxTrans, totalSupply, currencyId, traderName