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)
This commit is contained in:
sairajzero 2022-02-18 20:11:34 +05:30
parent af7d4c625d
commit 53b47057ff
3 changed files with 11 additions and 12 deletions

View File

@ -8,7 +8,7 @@ module.exports = {
INVALID_SERVER_MSG: "INCORRECT_SERVER_ERROR" //Should be reflected in public backend script INVALID_SERVER_MSG: "INCORRECT_SERVER_ERROR" //Should be reflected in public backend script
}, },
market: { market: {
MINIMUM_BUY_REQUIREMENT: 0.1 MINIMUM_BUY_REQUIREMENT: 0
}, },
price: { price: {
MIN_TIME: 1 * 60 * 60 * 1000, // 1 hr MIN_TIME: 1 * 60 * 60 * 1000, // 1 hr

View File

@ -208,7 +208,7 @@ function getUntaggedSellOrders(asset, cur_price) {
DB.query("SELECT SellOrder.id, SellOrder.floID, SellOrder.quantity FROM SellOrder" + DB.query("SELECT SellOrder.id, SellOrder.floID, SellOrder.quantity FROM SellOrder" +
" LEFT JOIN UserTag ON UserTag.floID = SellOrder.floID" + " LEFT JOIN UserTag ON UserTag.floID = SellOrder.floID" +
" WHERE UserTag.floID IS NULL AND SellOrder.asset = ? AND SellOrder.minPrice <=?" + " WHERE UserTag.floID IS NULL AND SellOrder.asset = ? AND SellOrder.minPrice <=?" +
" ORDER BY SellOrder.time_placed DESC", [asset, cur_price]) " ORDER BY SellOrder.time_placed", [asset, cur_price])
.then(orders => resolve(orders)) .then(orders => resolve(orders))
.catch(error => reject(error)) .catch(error => reject(error))
}) })
@ -219,7 +219,7 @@ function getUntaggedBuyOrders(asset, cur_price) {
DB.query("SELECT BuyOrder.id, BuyOrder.floID, BuyOrder.quantity FROM BuyOrder" + DB.query("SELECT BuyOrder.id, BuyOrder.floID, BuyOrder.quantity FROM BuyOrder" +
" LEFT JOIN UserTag ON UserTag.floID = BuyOrder.floID" + " LEFT JOIN UserTag ON UserTag.floID = BuyOrder.floID" +
" WHERE UserTag.floID IS NULL AND BuyOrder.asset = ? AND BuyOrder.maxPrice >=? " + " WHERE UserTag.floID IS NULL AND BuyOrder.asset = ? AND BuyOrder.maxPrice >=? " +
" ORDER BY BuyOrder.time_placed DESC", [asset, cur_price]) " ORDER BY BuyOrder.time_placed", [asset, cur_price])
.then(orders => resolve(orders)) .then(orders => resolve(orders))
.catch(error => reject(error)) .catch(error => reject(error))
}) })
@ -230,7 +230,7 @@ function getSellOrdersInTag(tag, asset, cur_price) {
DB.query("SELECT SellOrder.id, SellOrder.floID, SellOrder.quantity FROM SellOrder" + DB.query("SELECT SellOrder.id, SellOrder.floID, SellOrder.quantity FROM SellOrder" +
" INNER JOIN UserTag ON UserTag.floID = SellOrder.floID" + " INNER JOIN UserTag ON UserTag.floID = SellOrder.floID" +
" WHERE UserTag.tag = ? AND SellOrder.asset = ? AND SellOrder.minPrice <=?" + " WHERE UserTag.tag = ? AND SellOrder.asset = ? AND SellOrder.minPrice <=?" +
" ORDER BY SellOrder.time_placed DESC", [tag, asset, cur_price]).then(orders => { " ORDER BY SellOrder.time_placed", [tag, asset, cur_price]).then(orders => {
if (orders.length <= 1) // No (or) Only-one order, hence priority sort not required. if (orders.length <= 1) // No (or) Only-one order, hence priority sort not required.
resolve(orders); resolve(orders);
else else
@ -249,7 +249,7 @@ function getBuyOrdersInTag(tag, asset, cur_price) {
DB.query("SELECT BuyOrder.id, BuyOrder.floID, BuyOrder.quantity FROM BuyOrder" + DB.query("SELECT BuyOrder.id, BuyOrder.floID, BuyOrder.quantity FROM BuyOrder" +
" INNER JOIN UserTag ON UserTag.floID = BuyOrder.floID" + " INNER JOIN UserTag ON UserTag.floID = BuyOrder.floID" +
" WHERE UserTag.tag = ? AND BuyOrder.asset = ? AND BuyOrder.maxPrice >=?" + " WHERE UserTag.tag = ? AND BuyOrder.asset = ? AND BuyOrder.maxPrice >=?" +
" ORDER BY BuyOrder.time_placed DESC", [tag, asset, cur_price]).then(orders => { " ORDER BY BuyOrder.time_placed", [tag, asset, cur_price]).then(orders => {
if (orders.length <= 1) // No (or) Only-one order, hence priority sort not required. if (orders.length <= 1) // No (or) Only-one order, hence priority sort not required.
resolve(orders); resolve(orders);
else else
@ -271,10 +271,9 @@ function getPointsFromAPI(tag, floIDs) {
Promise.allSettled(floIDs.map(id => fetch_api(api, id))).then(result => { Promise.allSettled(floIDs.map(id => fetch_api(api, id))).then(result => {
let points = {}; let points = {};
for (let i in result) for (let i in result)
if (result[i].status === "fulfilled") points[floIDs[i]] = result[i].status === "fulfilled" ? result[i].value : 0;
points[floIDs[i]] = result[i].value;
resolve(points); resolve(points);
}).catch(error => reject(error)) })
}).catch(error => reject(error)) }).catch(error => reject(error))
}); });
} }

View File

@ -69,7 +69,7 @@ function addSellOrder(floID, asset, quantity, min_price) {
else if (!assetList.includes(asset)) else if (!assetList.includes(asset))
return reject(INVALID(`Invalid asset (${asset})`)); return reject(INVALID(`Invalid asset (${asset})`));
getAssetBalance.check(floID, asset, quantity).then(_ => { getAssetBalance.check(floID, asset, quantity).then(_ => {
checkSellRequirement(floID).then(_ => { checkSellRequirement(floID, asset).then(_ => {
DB.query("INSERT INTO SellOrder(floID, asset, quantity, minPrice) VALUES (?, ?, ?, ?)", [floID, asset, quantity, min_price]) DB.query("INSERT INTO SellOrder(floID, asset, quantity, minPrice) VALUES (?, ?, ?, ?)", [floID, asset, quantity, min_price])
.then(result => resolve("Added SellOrder to DB")) .then(result => resolve("Added SellOrder to DB"))
.catch(error => reject(error)); .catch(error => reject(error));
@ -78,16 +78,16 @@ function addSellOrder(floID, asset, quantity, min_price) {
}); });
} }
const checkSellRequirement = floID => new Promise((resolve, reject) => { const checkSellRequirement = (floID, asset) => new Promise((resolve, reject) => {
DB.query("SELECT * FROM UserTag WHERE floID=? AND tag=?", [floID, "MINER"]).then(result => { DB.query("SELECT * FROM UserTag WHERE floID=? AND tag=?", [floID, "MINER"]).then(result => {
if (result.length) if (result.length)
return resolve(true); return resolve(true);
//TODO: Should seller need to buy same type of asset before selling? //TODO: Should seller need to buy same type of asset before selling?
DB.query("SELECT SUM(quantity) AS brought FROM TransactionHistory WHERE buyer=?", [floID]).then(result => { DB.query("SELECT SUM(quantity) AS brought FROM TransactionHistory WHERE buyer=? AND asset=?", [floID, asset]).then(result => {
if (result[0].brought >= MINIMUM_BUY_REQUIREMENT) if (result[0].brought >= MINIMUM_BUY_REQUIREMENT)
resolve(true); resolve(true);
else else
reject(INVALID(`Sellers required to buy atleast ${MINIMUM_BUY_REQUIREMENT} FLO before placing a sell order unless they are a Miner`)); reject(INVALID(`Sellers required to buy atleast ${MINIMUM_BUY_REQUIREMENT} ${asset} before placing a sell order unless they are a Miner`));
}).catch(error => reject(error)) }).catch(error => reject(error))
}).catch(error => reject(error)) }).catch(error => reject(error))
}); });