- Fixed various bugs in the last update
- Added 'use strict'; to multiple files to prevent undeclared variables
This commit is contained in:
sairajzero 2021-12-03 20:09:40 +05:30
parent 4a898e6bff
commit d3b27348ee
7 changed files with 45 additions and 25 deletions

View File

@ -1,9 +1,10 @@
'use strict';
const express = require('express');
const cookieParser = require("cookie-parser");
const sessions = require('express-session');
const Request = require('./request');
const REFRESH_INTERVAL = 60 * 1000; //1 min
const REFRESH_INTERVAL = 5 * 1000; //10 * 60 * 1000;
module.exports = function App(secret, trustedIDs, DB) {

View File

@ -1,3 +1,4 @@
'use strict';
const config = require('../../args/backup-config.json');
const floGlobals = require('../../public/floGlobals');
require('../set_globals');

View File

@ -1,3 +1,4 @@
'use strict';
const WebSocket = require('ws');
var DB; //Container for database

View File

@ -1,3 +1,5 @@
'use strict';
var DB; //container for database
function addTag(floID, tag) {
@ -127,7 +129,7 @@ const bestPair = function(cur_rate, tags_buy, tags_sell) {
.then(result => resolve(result))
.catch(error => reject(error))
}).catch(error => reject(error));
} else if (!mode_null) { //Lowest priority Coins (FLO Brought from other sources)
} else if (!cache.mode_null) { //Lowest priority Coins (FLO Brought from other sources)
cache.orders = cache.null_queue.reverse(); //Reverse it so that we can pop the highest priority
cache.mode_null = true;
cache.null_queue = null;

View File

@ -1,3 +1,5 @@
'use strict';
const group = require("./group");
const price = require("./price");
const MINIMUM_BUY_REQUIREMENT = 0.1;
@ -155,7 +157,7 @@ function initiateCoupling() {
group.getBestPairs(cur_rate)
.then(bestPairQueue => processCoupling(bestPairQueue))
.catch(error => console.error("initiateCoupling", error))
}).catch(error => reject(error));
}).catch(error => console.error(error));
}
function processCoupling(bestPairQueue) {
@ -172,7 +174,7 @@ function processCoupling(bestPairQueue) {
updateBalance(seller_best, buyer_best, txQueries, bestPairQueue.cur_rate, tx_quantity);
//process txn query in SQL
DB.transaction(txQueries).then(_ => {
bestPairQueue.next(quantity, spend_result.incomplete, spend_result.flag_baseNull);
bestPairQueue.next(tx_quantity, spend_result.incomplete, spend_result.flag_baseNull);
console.log(`Transaction was successful! BuyOrder:${buyer_best.id}| SellOrder:${seller_best.id}`);
price.updateLastTime();
//Since a tx was successful, match again
@ -192,7 +194,7 @@ function processCoupling(bestPairQueue) {
}
if (error.sell === undefined)
noSell = false;
if (error.sell !== false) {
else if (error.sell !== false) {
console.error(error.sell);
noSell = null;
} else {
@ -207,8 +209,8 @@ function spendFLO(buyOrder, sellOrder, null_base) {
return new Promise((resolve, reject) => {
DB.query("SELECT id, quantity, base FROM Vault WHERE floID=? ORDER BY base", [sellOrder.floID]).then(result => {
let rem = Math.min(buyOrder.quantity, sellOrder.quantity),
txQueries = []
flag_baseNull = false;
txQueries = [],
flag_baseNull = false;
for (let i = 0; i < result.length && rem > 0; i++)
if (result[i].base || null_base) {
if (rem < result[i].quantity) {

View File

@ -1,22 +1,28 @@
const MIN_TIME = 1 * 60 * 60 * 1000,
'use strict';
const MIN_TIME = 10 * 1000, // 1 * 60 * 60 * 1000,
DOWN_RATE = 0.2 / 100,
UP_RATE = 0.5 / 100,
MAX_DOWN_PER_DAY = 4.8 / 100,
MAX_UP_PER_DAY = 12 / 100,
TOP_RANGE = 10 / 100;
TOP_RANGE = 10 / 100,
REC_HISTORY_INTERVAL = 5 * 60 * 1000; // 1 * 60 * 60 * 1000;
var DB; //container for database
var cur_rate, //container for FLO price (from API or by model)
lastTxTime = Date.now(), //container for timestamp of the last tx
lastTime = Date.now(), //container for timestamp of the last tx
noBuyOrder,
noSellOrder
noSellOrder;
const updateLastTime = () => lastTime = Date.now();
//store FLO price in DB every 1 hr
setInterval(function storeRate() {
DB.query("INSERT INTO priceHistory (rate) VALUE (?)", cur_rate)
function storeRate(rate = cur_rate) {
DB.query("INSERT INTO priceHistory (rate) VALUE (?)", rate)
.then(_ => null).catch(error => console.error(error))
})
}
setInterval(storeRate, REC_HISTORY_INTERVAL)
function getPastRate(hrs = 24) {
return new Promise((resolve, reject) => {
@ -43,8 +49,9 @@ function fetchRates() {
return new Promise((resolve, reject) => {
fetchRates.FLO_USD().then(FLO_rate => {
fetchRates.USD_INR().then(INR_rate => {
FLO_INR_rate = FLO_rate * INR_rate;
let FLO_INR_rate = FLO_rate * INR_rate;
console.debug('Rates:', FLO_rate, INR_rate, FLO_INR_rate);
storeRate(FLO_INR_rate);
resolve(FLO_INR_rate);
}).catch(error => reject(error))
}).catch(error => reject(error))
@ -81,7 +88,7 @@ function getRates() {
return new Promise((resolve, reject) => {
loadRate().then(_ => {
let cur_time = Date.now();
if (cur_time - lastTxTime < MIN_TIME) //Minimum time to update not crossed: No update required
if (cur_time - lastTime < MIN_TIME) //Minimum time to update not crossed: No update required
resolve(cur_rate);
else if (noBuyOrder && noSellOrder) //Both are not available: No update required
resolve(cur_rate);
@ -92,16 +99,20 @@ function getRates() {
if (noBuyOrder) {
//No Buy, But Sell available: Decrease the price
let tmp_val = cur_rate * (1 - DOWN_RATE);
if (tmp_val >= ratePast24hr * (1 - MAX_DOWN_PER_DAY))
cur_rate *= tmp_val;
if (tmp_val >= ratePast24hr * (1 - MAX_DOWN_PER_DAY)) {
cur_rate = tmp_val;
updateLastTime();
}
resolve(cur_rate);
} else if (noSellOrder) {
//No Sell, But Buy available: Increase the price
checkForRatedSellers().then(result => {
if (result) {
let tmp_val = cur_rate * (1 + UP_RATE)
if (tmp_val >= ratePast24hr * (1 + MAX_UP_PER_DAY))
cur_rate *= tmp_val;
let tmp_val = cur_rate * (1 + UP_RATE);
if (tmp_val <= ratePast24hr * (1 + MAX_UP_PER_DAY)) {
cur_rate = tmp_val;
updateLastTime();
}
}
}).catch(error => console.error(error)).finally(_ => resolve(cur_rate));
}
@ -116,8 +127,8 @@ function getRates() {
function checkForRatedSellers() {
//Check if there are best rated sellers?
return new Promise((resolve, reject) => {
DB.query("SELECT MAX(sellPriority) as maxValue FROM TagList").then(result => {
let ratedMin = result[0].maxValue * (1 - TOP_RANGE);
DB.query("SELECT MAX(sellPriority) as max_p FROM TagList").then(result => {
let ratedMin = result[0].max_p * (1 - TOP_RANGE);
DB.query("SELECT COUNT(*) as value FROM SellOrder WHERE floID IN (" +
" SELECT Tags.floID FROM Tags INNER JOIN TagList ON Tags.tag = TagList.tag" +
" WHERE TagList.sellPriority > ?)", [ratedMin]).then(result => {
@ -129,8 +140,8 @@ function checkForRatedSellers() {
module.exports = {
getRates,
updateLastTime: () => lastTxTime = Date.now(),
set noOrder(buy, sell) {
updateLastTime,
noOrder(buy, sell) {
noBuyOrder = buy;
noSellOrder = sell;
},

View File

@ -1,3 +1,5 @@
'use strict';
const market = require("./market");
var DB, trustedIDs; //container for database