Commit Graph

158 Commits

Author SHA1 Message Date
sairajzero
d444e96259 checkSellRequirement: sell-chip's base
- Check for sell-chips's base price when placing sell order.
- Returns 'Cannot sell below purchased price' when not enough sell-chips above the base for placing order
2022-05-07 01:04:49 +05:30
sairajzero
fb9ac8080b Fixed: price storeHistory
- price.storeHistory interval will trigger only when node is master
2022-05-07 00:15:34 +05:30
sairajzero
54470b42d7 get-rates API improved
- get-rates API will now give a countDown timer
- this will be time at which next price update will happen unless a trade occurs
- Update: _constants.js for previous update
2022-05-07 00:03:36 +05:30
sairajzero
d3c5682994 Improved Triggers for coupling process
- moved periodic-process start/stop to market.js
- price.getRates() will update price only when updatePrice is true (ie, regular fn call wont update price unnecessarily)
- Trigger coupling for asset on successful order placement
- Return (or wait) if a coupling instance is running for asset
- Reset timeout when price is updated and/or trade has happened.
- Next coupling instance will be set for timeout upon completion of one instance
- Stop all coupling instances on app pause (i.e., node is not master)
2022-05-06 23:43:44 +05:30
sairajzero
d44531211a Bug Fix: list buy/sell giving error
Fixed: only_full_group_by error return by SQL statement
2022-05-04 15:16:18 +05:30
sairajzero
55bd121021 API for ordered list for sell/buy
- The API for Listing sell/buy orders now returns ordered list of the queue (approx).
- list-buyorders, list-sellorders and list-trades API now accepts optional GET parameter 'asset'.
  . If passed, then orders/trades of only given asset will be returned.
  . If asset is not passed, then returns all asset by default as before.
- list buy/sell order API return max of 100 best orders
- list trade API return max of 1000 recent trades
2022-05-02 22:53:57 +05:30
sairajzero
3c97cb4810 Update _constants.js
- dec MAXIMUM_LAUNCH_SELL_CHIPS to 250K
- inc SIGN_EXPIRE_TIME to 5 mins
2022-05-01 20:18:03 +05:30
sairajzero
6c86c0a94b Adding switch for rated-seller check 2022-05-01 19:49:22 +05:30
sairajzero
7092213826 Bug fixes
- Fixed: Trade balance not updated correctly
- Fixed: sell-chips were not checked correctly on placing sell orders
- Fixed: sell-chips not added when distributed
- Fixed: sell-chips (FLO) not added when deposited by launch-seller
- Fixed various bugs
- initialPrice will be added to priceHistory table (initially)
2022-04-27 00:29:51 +05:30
sairajzero
e88799f01f update std-op 2022-04-26 03:30:51 +05:30
sairajzero
74b643fc08 Ambiguity fix
Changes to remove ambiguity of data during backup system
- Converted all Float and Decimal to DECIMAL(16, 8)
- Converted Datetime to Timestamp
- Fixed: Storing time data in backup
2022-04-18 21:07:15 +05:30
sairajzero
f9551c856d Updating sell-requirement
- Users can only sell when enough sell-chips (for asset) are available.
- sell-chips are obtained by
  . buying assets
  . receiving asset from distributor
  . deposit (FLO only) as launch-seller (maximum of 1 million)
- Updated coupling for the requirement
- Improved getBestSeller and getBestBuyer: Directly fetch from SQL query
- Removed group.js (moved required functions to market.js)
- Updated SQL schema
2022-04-17 03:44:34 +05:30
sairajzero
9caf3fc9ec Distributor feature and Balance structure change
- Distributor feature allows to mark floIDs as distributors for certain asset.
- Added 2 APIs: add-distributor, remove-distributor
- Changing structure for token balance in exchange system. (requirement for new rule update).
2022-04-13 01:06:01 +05:30
sairajzero
deb746ef9e Increase decimal toFixed(8) 2022-03-30 20:38:08 +05:30
sairajzero
4967d52a88 Bug fix: rate history API not working 2022-03-30 05:49:43 +05:30
sairajzero
6451f02546 rate-history API 2022-03-30 05:38:55 +05:30
sairajzero
fa46e1132f Bug fix: getRate for an asset not working 2022-03-29 15:53:01 +05:30
sairajzero
01dcd9b2d1 Bug fix
Fixed: Unable to process null returned from SQL SUM()
2022-03-22 14:11:55 +05:30
sairajzero
6add4625c8 Renaming files
Renamed tokenAPI to floTokenAPI
Renamed exchangeAPI to floExchangeAPI
2022-03-21 16:24:25 +05:30
sairajzero
5e074f5e1d warping exchange-api functions
- Warped exchange api functions into an object (works with both modules.exports and window (browser))
- Moved K_bucket.js into exchangeAPI.js
2022-03-21 16:20:33 +05:30
sairajzero
ef0599d915 get-balance API
Added: get-balance API to fetch total balance
- accepts 2 parameters: floID and token. Requires atleast one of them for the API to work
/get-balance?floID=<floID>&token=<token> : responses balance of a specific token for a floID
/get-balance?floID=<floID> : responses all token balance for a floID
/get-balance?token=<token> : reponses balance of a specific token for every floID

Note (optional): in GET request
- floID=<floID> can be replaced with addr=<floID>
- token=<token> can be replaced with asset=<asset>
Both responses the same result as above
2022-03-18 00:50:39 +05:30
sairajzero
2b2c231f0b Bug fix
- Fixed: txid not stored in DB when retrying withdraw FLO
- UI: disabled all registration/signup buttons (as there is not need for signup)
2022-03-17 18:49:41 +05:30
sairajzero
eed495ab83 Bug fixes
- Fixed: transferToken not processed by server
- blockchainReCheck stops and adds itself to Timeout callback when sinkID is not loaded (uses MINI_PERIOD_INTERVAL = PERIOD_INTERVAL/10 for timeout ms)
- Fixed: confirmDepositFLO - asset attribute missing in SQL syntax
- When sinkID is not loaded, cancel check for confirmDepositFLO and confirmDepositToken
- Fixed: Incorrect receiver (sinkID) bug in confirmDepositFLO.checkTx
- Uncommented loaded, received, retrived sink logs
- Changed (SQL schema) sign field in RequestLog table to VARCHAR(160)
- Fixed: minor syntax errors and typos bugs
2022-03-17 03:06:00 +05:30
sairajzero
eeb3c70a10 Optimised request.js code 2022-03-16 02:11:36 +05:30
sairajzero
b229b6b3d5 Arranging files
Moved all public/ to docs/ so that github pages can be hosted on docs/ alone

- Moved floGlobals.js, lib.js, floCrypto.js, floBlockchainAPI.js, tokenAPI.js, KBucket.js to docs/scripts/
- Renamed api.js to exchangeAPI.js and moved to docs/scripts/
- Moved index.html to docs/
- Moved css components to docs/css
- Updated all imports for the above changes.
- User pages (index.html) uses floCrypto.js and floBlockchainAPI.js in docs/script dir instead of fetching from cdn
2022-03-16 01:06:59 +05:30
sairajzero
1823a46a98 Transfer transactions now support one-to-many
- receiver parameter now requires an object in the format
{floID1: amount1, floID2: amount2 ...}
- Transaction hash (id) for both trade and transfer transactions are now generated using SHA of JSON-string object
- Updated schema for one-to-many TransferTransactions
2022-03-16 00:33:22 +05:30
sairajzero
f59c6b3f2a Removing need for user registration
- Users can directly login or request without the need for user registration.
- Users can sign the requests either directly with own privateKey or by using a proxy
- Request's timestamp will be checked for Sign expiry.
- Request's sign will be checked for duplication.
- Cash table update will try to insert if record is not there
- Request Log table will also store a boolean value for sign by proxy or not
- Updated the SQL schema for the above changes.
2022-03-15 04:06:43 +05:30
sairajzero
3296b16710 Get transaction details
- Transaction details can be fetched using the following API
/get-transaction?txid=<txid>
- Get rates now accepts parameter 'asset' (optional) to return rate of particular asset.
/get-rates?asset=<asset>
/get-rates
- Get transactions (trade) API is changed to the following
/list-trades
2022-03-12 03:31:01 +05:30
sairajzero
0520791696 Adding transfer token feature
Transfer tokens
- Added transferToken: Users can directly transfer tokens (including FLO) to other registered users.
- Updated schema changes for the above requirement.
- Trade transactions and transfer transactions will generate a txid (using SHA256).

Other changes
- changed all signing type to lowercase
2022-03-12 02:25:31 +05:30
sairajzero
e2d8abe347 Update floBlockchainAPI.js 2022-03-08 02:30:21 +05:30
sairajzero
f9f89d91d3 BugFix: consumeAsset - not working when using entire coin 2022-02-24 17:59:09 +05:30
sairajzero
456c85c805 Bug fix 2022-02-18 23:09:41 +05:30
sairajzero
6aa5d13cc3 websocket ws:// to wss:// 2022-02-18 23:03:48 +05:30
sairajzero
4434ad6b3e Support for SQL version 5.7 2022-02-18 22:23:17 +05:30
sairajzero
53b47057ff Minor fixes
- Sell requirement checks for respective asset for minimum buy
- Minimum buy is set to 0 (for exchange startup)
- Fixed: buy/sell orders sorted incorrectly by time_placed (should be FCFS. ie, ASC)
2022-02-18 20:11:34 +05:30
sairajzero
4416ab5ad3 Adding Blockchain refresh interval
- Added blockchain refresh interval
- Updating some constants
- Disabled various console.debug
2022-02-18 19:24:09 +05:30
sairajzero
1fcd62f2e5 Slave: wait before sync on master-change
When Update master event occurs, master needs time to sync its missing data, so slaves should sync only after BACKUP_INTERVAL
2022-02-18 00:11:55 +05:30
sairajzero
15d36eb088 All Constants moved to _constants.js 2022-02-17 23:52:31 +05:30
sairajzero
a2dcfb27ce Bug fixes
- Fixed: Buy/sell order placement not working in UI
- Fixed: Buy order placement not checking the cash balance properly
- Fixed: Re-sync not working properly
  . (Master) Typo in SQL syntax
  . (Master) Incorrect index of data sent by master
  . (Slave) Invalid request send when requesting re-sync
- Removed counts for add, delete packets and total-add (As resync uses diff count)
2022-02-17 22:53:03 +05:30
sairajzero
12e90abe8b Re-sync Improvements
When table data needs resync (ie, when checksum fails), Instead of requesting the entire data, following procedure is done
- row-group (based on id column) hashes is requested from master
- hashes are checked on the DB
- request chunks that have failed hash check
2022-02-17 04:43:05 +05:30
sairajzero
d30603134f Sink threshold fix 2022-02-16 14:07:12 +05:30
sairajzero
2a125eb4d2 Verify backup data integrity
- Backup data integrity is verified using Checksum for each table
- If checksum mismatch is found (for a table) after a backup sync, the table data is cleared and re-synced
- Moved backup sync module to backup/sync.js
- Fixed: checkForRatedSellers not using correct asset when checking for rated sellers
- Others: priceHistory is converted toFixed(3) before storing in DB. (As large/non-terminating decimals cause ambiguity btw nodes during checksum)
2022-02-16 01:55:31 +05:30
sairajzero
0ff3f2a7fb Update Sink key transfer
- Same sink is used across nodes (sink is generated only when exchange starts for the 1st time)
- Shares as encrypted before sending to nodes (also store encrypted share in DB)
- Load share/key from DB (if available) when node starts
- share-threshold is calculated based on number of alive nodes
- Fixed: Shamirs algo fails when threshold is less than 2 (used round-about)
- Fixed: Minor bugs
2022-02-12 05:41:01 +05:30
sairajzero
cab65161ba Bug fix And UI for asset/token selection
- Fixed bugs in deposit and withdrawal
- Added UI select option for token selection on deposit and withdrawal
- Added UI style to buy/sell asset selection
2022-02-08 20:44:55 +05:30
sairajzero
a06c5b4c7b Backup Sync improvements
- Removed: Immutable table-type (Previously immutable tables are now considered as mutable tables in backup feature)
- Backup sync-data from master are temporally cached and then processed after receiving all sync-data
- Backup sync-data from cache are now processed in ordered manner (to prevent foreign key constrain error, repeated data, re-adding a deleted data)
- Updated SQL Schema
2022-02-08 06:26:03 +05:30
sairajzero
ab3df761b0 Bug fixes
- Fixed: SQL schema asset foreign key incorrectly referenced
- Fixed: initial rate of asset not loading correctly from DB
- Fixed: get-rate API returning [object Object] instead of rates
- Fixed: Bug where transaction-loop happens with 0 quantity
- Improved: spendAsset to use assets NULL/Non-NULL base correctly
- Fixed: minor typos, syntax errors and SQL query errors

User-pages:
- Added: UI fields for assets in Buy/Sell orders
- Updated: UI display of correct asset in listing orders and transactions
- Updated: localStorage keys are prefixed 'exchange-'
- Fixed: Rates and Balance amount not displayed correctly

Others:
- Added: temporary code for tracing output lines in set_globals.js (commented out by default)
2022-02-07 03:12:20 +05:30
sairajzero
048ab0667b Multi asset: initial price and other improvements
- Read blockchain for asset's initial price
- Transfer all tokens to new sink on master transfer

Other Improvements:
- Slave: close existing backup sync when master WS closes
- Updated SQL schema, updated SQL syntax as required
2022-02-05 20:23:36 +05:30
sairajzero
df69ee0f7b Multi-asset: User API 2022-02-04 02:54:05 +05:30
sairajzero
92caef2c37 Multi-asset: coupling process 2022-02-04 02:28:02 +05:30
sairajzero
dbad25044a Multi-asset price.js 2022-02-03 05:46:26 +05:30
sairajzero
67c31d79a9 Multiple asset support
2 types of property:
1. Cash - main/central currency used for trading
2. Asset - (FLO/tokens) Can be brought or sold in the exchange market .

- Allow multiple tokens to act as asset in addition to FLO.
- Changes required for the above in deposits, withdraws, placing orders
- some code optimization in market.js
- Updated SQL schema
2022-02-02 04:17:47 +05:30
sairajzero
512dc3bcbc Automatically reload user page upon incorrect server
- Upon receiving responseError INCORRECT_SERVER_ERROR, reload the client page.
(Triggered mainly when master is changed).
- Fixed some minor syntax bugs
2022-01-26 21:46:19 +05:30
sairajzero
827bdcd793 Use sinkID for deposits
- Send Sink ID to users on get-account request
- In user page, store sink ID and use it for deposit FLO/Rupee
2022-01-26 16:08:30 +05:30
sairajzero
bf302c3ebc bug fix: backup/sync
- Fixed minor bugs in backup/sync process
- Fixed: Master doesn't sync when it comes back online
- Decreased backup interval time to 1 min.
2022-01-26 02:20:34 +05:30
sairajzero
2c35c545e8 Bug fixes (client side)
Fixed Client page bugs:
- Fixed minor bugs in client side pages
- client page to use floGlobals.js
- moved KBucket.js to public (as its need by client page too).
Fixed Server Bugs:
- Added Access-Control-Allow-Origin to response headers
- Fixed: trustedIDs not loaded
- Fixed minor bugs (syntax errors)
2022-01-25 01:28:22 +05:30
sairajzero
8c1aad3d28 Bug fixes
- Added lastTx table to SQL schema
- setup file 'reset-password' now accepts any private key (node keys)
- Fixed minor SQL syntax
2022-01-23 04:51:15 +05:30
sairajzero
11b99c3e76 Process for exception cases
Case: No other node active when self node is init
- Start the exchange system.
Case: When node becomes master when prev node goes down
- Add self share to collectShare
- collect shares from other node to re-construct sink private key
- Fixed some minor bugs
2022-01-23 04:49:15 +05:30
sairajzero
52a1b3077d multi-node support
- Run multiple nodes in the same directory with diff config files
- pass the env variable 'I' (optional) to run a diff node instance with config file config<I>.json (also uses keys<I>.json)
- Updated setup files
- Fixed bugs in SQL schema
2022-01-23 03:24:27 +05:30
sairajzero
9760710c18 Check session expiry on each request 2022-01-20 05:35:48 +05:30
sairajzero
348cc989c9 Custom session for distributed servers
- Adding custom session login for the distributed server system.
- Added Sessions table to backup
2022-01-18 05:11:34 +05:30
sairajzero
abb82b0b34 Minor Fixes
- Adding tables to SQL schema
- Moved Kbucket usage from main.js to backup/head.js
- node Kbucket, ordered NodeList are calculated in backup/head.js
2022-01-14 04:52:41 +05:30
sairajzero
c32833e625 Adding application name in floGlobals 2022-01-14 04:15:21 +05:30
sairajzero
0ba0f10245 Renaming files 2022-01-14 04:11:25 +05:30
sairajzero
626c9ec214 Backup transfer/retrieval process 2022-01-14 04:08:44 +05:30
sairajzero
9fd1ae49c2 move tokenAPI to tokenAPI.js 2022-01-14 04:07:51 +05:30
sairajzero
db9ff02488 Update main.js
- fetch data (nodeList, TagList, trustedIDs) from blockchain
- Act as slave or master when needed
2021-12-30 06:53:04 +05:30
sairajzero
0b70f099b0 Update App Server
- Use App server port for Websocket Server.
- pause/resume serving and market when node acts as slave/master respectively.
2021-12-30 06:49:48 +05:30
sairajzero
c4732f5831 Restoration 2021-12-30 06:33:10 +05:30
sairajzero
4b9a5e656b Create KBucket.js 2021-12-30 06:30:06 +05:30
sairajzero
f1e9658007 Audit Transaction
Store the following values upon successful transaction
- Timestamp
- Quanity, unit value, total cost
- Old/New Balance of Rupee and FLO for both seller and buyer
2021-12-06 22:13:37 +05:30
sairajzero
946087481a Move transaction process to coupling.js 2021-12-06 20:55:35 +05:30
sairajzero
1b6488bdd1 Adding foreign key attributes to SQL schema
- All floID based columns (floID, seller, buyer) are now foreign keys with reference to User.floID
- tag in Tags table is now referred to tag in TagList
- Indicate the error when adding user tags via API
2021-12-05 00:40:49 +05:30
sairajzero
9feef5bfe9 Minor fixes
- Fixed bug: sell order placement not working.
- log the current_rate
- indicate when max price-up/down has reached.
2021-12-05 00:37:45 +05:30
sairajzero
d3b27348ee Bug fix
- Fixed various bugs in the last update
- Added 'use strict'; to multiple files to prevent undeclared variables
2021-12-03 20:09:40 +05:30
sairajzero
4a898e6bff Initial price
- load init price from DB if possible, else fetch from API
- store the price history in DB every 1 hr
- get the 24hr-past-rate from DB
- update the last tx timestamp upon successful transaction
- added priceHistory table to SQL schema and backup
2021-12-03 01:45:59 +05:30
sairajzero
278fc8bcbd Price updation
- Update current_price when no seller or buyer available.
- Inc price only when sell-orders from rated sellers are available.
- User must buy a minimum FLO before placing a sell order unless they are a 'Miner'.
2021-12-02 05:26:01 +05:30
sairajzero
a7c96e9ce2 Priority case: FLO brought from outside
FLO brought from outside the source will be processed after those brought from source-market.
2021-11-25 05:10:39 +05:30
sairajzero
5ac3316008 Allow trusted IDs to add/rm user tags via API 2021-11-18 15:58:40 +05:30
sairajzero
b5cde90e89 Bug fix 2021-11-05 21:43:26 +05:30
sairajzero
d435157bd2 Different group/tag priority for sell and buy 2021-11-02 03:39:07 +05:30
sairajzero
c14f10eade Use Group priority to get best buy/sell order 2021-10-30 21:35:18 +05:30
sairajzero
0e34dcb5e3 Update group.js
- Adding functions to get best buy-order.
- Renamed some fns of get-sell-order for easier identification.
2021-10-30 20:13:48 +05:30
sairajzero
097b64b82f Update group.js
- Adding getBestPairs
- best pair of orders (buy, sell) can be fetched using the new functions
2021-10-30 03:39:10 +05:30
sairajzero
bb0d49614b Create group.js 2021-10-30 00:24:38 +05:30
sairajzero
f7584629b9 Bug fixes
- Fixed: error caused during inputRupee
- Passing timezone UTC in DB connection for uniformity between main server and backups.
- Changed single-line comments to multi-line comments in schema.sql
- Addng truncateAll.sql: can be used to clear the database (data only).
2021-10-21 21:08:12 +05:30
sairajzero
57eb249ed6 Bug fix 2021-10-15 22:54:56 +05:30
sairajzero
a7bab7ed6e Backup DB feature 2021-10-15 22:54:15 +05:30
sairajzero
96b9d3b6e9 Setup files
- Adding setup files to configure, set password.
- Private key will now be stored in encrypted shares. Password will be required for running the server.
- Automated creation of MySQL schema.
- Making floGlobals common for both server and client.
- Fixed a minor bug in database.js
2021-09-29 04:14:02 +05:30
sairajzero
8a014405f4 display current rate
Display FLO-INR rate in client page
2021-09-25 22:16:06 +05:30
sairajzero
9ec17b4d55 Debugging 2021-09-25 00:29:48 +05:30
sairajzero
7362d0d4b7 Fixed various bugs in server scripts 2021-09-24 03:35:04 +05:30
sairajzero
8c31de3ccc Config update
- private key and flo addr for the admin
- Adding token URL
2021-09-24 03:34:01 +05:30
sairajzero
bfc6a1091a Changing XMLHttpRequest to fetch 2021-09-24 03:31:33 +05:30
sairajzero
60f1a2742d Update floCrypto.js 2021-09-24 03:31:03 +05:30
sairajzero
5164d51146 Bug fix: some variables not declared 2021-09-24 03:30:51 +05:30
sairajzero
c238e57132 Bug fix
- Fixed signature text construct bug (time -> timestamp)
2021-09-20 20:50:48 +05:30
sairajzero
c8e27f7315 updating floBlockchainAPI to latest (v2.1.1) 2021-09-20 20:48:01 +05:30
sairajzero
20fd7aaeb1 Deposit and withdraw request processing
- Processing of Deposit/Withdraw request for FLO/Rupee.
- renamed database's TxQuery to transaction
2021-09-16 03:17:33 +05:30
sairajzero
84b914bc9b Proxy key signatures for requests
- Uses the proxy public key sent by the users upon login to verify signatures on requests.
* This allows the users to not store their actual private key in the browser. Only the proxy private-key will be needed to be stored in the browser in addition to respective session data.
- Stores the request data and respective signatures upon successful processing.
2021-09-16 03:14:28 +05:30
sairajzero
9443ac5d51 Adding Order cancellation request 2021-09-02 21:24:11 +05:30