Bug fix
- Fixed various bugs in the last update - Added 'use strict'; to multiple files to prevent undeclared variables
This commit is contained in:
parent
4a898e6bff
commit
d3b27348ee
@ -1,9 +1,10 @@
|
|||||||
|
'use strict';
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const cookieParser = require("cookie-parser");
|
const cookieParser = require("cookie-parser");
|
||||||
const sessions = require('express-session');
|
const sessions = require('express-session');
|
||||||
const Request = require('./request');
|
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) {
|
module.exports = function App(secret, trustedIDs, DB) {
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
'use strict';
|
||||||
const config = require('../../args/backup-config.json');
|
const config = require('../../args/backup-config.json');
|
||||||
const floGlobals = require('../../public/floGlobals');
|
const floGlobals = require('../../public/floGlobals');
|
||||||
require('../set_globals');
|
require('../set_globals');
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
'use strict';
|
||||||
const WebSocket = require('ws');
|
const WebSocket = require('ws');
|
||||||
|
|
||||||
var DB; //Container for database
|
var DB; //Container for database
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
var DB; //container for database
|
var DB; //container for database
|
||||||
|
|
||||||
function addTag(floID, tag) {
|
function addTag(floID, tag) {
|
||||||
@ -127,7 +129,7 @@ const bestPair = function(cur_rate, tags_buy, tags_sell) {
|
|||||||
.then(result => resolve(result))
|
.then(result => resolve(result))
|
||||||
.catch(error => reject(error))
|
.catch(error => reject(error))
|
||||||
}).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.orders = cache.null_queue.reverse(); //Reverse it so that we can pop the highest priority
|
||||||
cache.mode_null = true;
|
cache.mode_null = true;
|
||||||
cache.null_queue = null;
|
cache.null_queue = null;
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
const group = require("./group");
|
const group = require("./group");
|
||||||
const price = require("./price");
|
const price = require("./price");
|
||||||
const MINIMUM_BUY_REQUIREMENT = 0.1;
|
const MINIMUM_BUY_REQUIREMENT = 0.1;
|
||||||
@ -155,7 +157,7 @@ function initiateCoupling() {
|
|||||||
group.getBestPairs(cur_rate)
|
group.getBestPairs(cur_rate)
|
||||||
.then(bestPairQueue => processCoupling(bestPairQueue))
|
.then(bestPairQueue => processCoupling(bestPairQueue))
|
||||||
.catch(error => console.error("initiateCoupling", error))
|
.catch(error => console.error("initiateCoupling", error))
|
||||||
}).catch(error => reject(error));
|
}).catch(error => console.error(error));
|
||||||
}
|
}
|
||||||
|
|
||||||
function processCoupling(bestPairQueue) {
|
function processCoupling(bestPairQueue) {
|
||||||
@ -172,7 +174,7 @@ function processCoupling(bestPairQueue) {
|
|||||||
updateBalance(seller_best, buyer_best, txQueries, bestPairQueue.cur_rate, tx_quantity);
|
updateBalance(seller_best, buyer_best, txQueries, bestPairQueue.cur_rate, tx_quantity);
|
||||||
//process txn query in SQL
|
//process txn query in SQL
|
||||||
DB.transaction(txQueries).then(_ => {
|
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}`);
|
console.log(`Transaction was successful! BuyOrder:${buyer_best.id}| SellOrder:${seller_best.id}`);
|
||||||
price.updateLastTime();
|
price.updateLastTime();
|
||||||
//Since a tx was successful, match again
|
//Since a tx was successful, match again
|
||||||
@ -192,7 +194,7 @@ function processCoupling(bestPairQueue) {
|
|||||||
}
|
}
|
||||||
if (error.sell === undefined)
|
if (error.sell === undefined)
|
||||||
noSell = false;
|
noSell = false;
|
||||||
if (error.sell !== false) {
|
else if (error.sell !== false) {
|
||||||
console.error(error.sell);
|
console.error(error.sell);
|
||||||
noSell = null;
|
noSell = null;
|
||||||
} else {
|
} else {
|
||||||
@ -207,8 +209,8 @@ function spendFLO(buyOrder, sellOrder, null_base) {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
DB.query("SELECT id, quantity, base FROM Vault WHERE floID=? ORDER BY base", [sellOrder.floID]).then(result => {
|
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),
|
let rem = Math.min(buyOrder.quantity, sellOrder.quantity),
|
||||||
txQueries = []
|
txQueries = [],
|
||||||
flag_baseNull = false;
|
flag_baseNull = false;
|
||||||
for (let i = 0; i < result.length && rem > 0; i++)
|
for (let i = 0; i < result.length && rem > 0; i++)
|
||||||
if (result[i].base || null_base) {
|
if (result[i].base || null_base) {
|
||||||
if (rem < result[i].quantity) {
|
if (rem < result[i].quantity) {
|
||||||
|
|||||||
47
src/price.js
47
src/price.js
@ -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,
|
DOWN_RATE = 0.2 / 100,
|
||||||
UP_RATE = 0.5 / 100,
|
UP_RATE = 0.5 / 100,
|
||||||
MAX_DOWN_PER_DAY = 4.8 / 100,
|
MAX_DOWN_PER_DAY = 4.8 / 100,
|
||||||
MAX_UP_PER_DAY = 12 / 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 DB; //container for database
|
||||||
|
|
||||||
var cur_rate, //container for FLO price (from API or by model)
|
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,
|
noBuyOrder,
|
||||||
noSellOrder
|
noSellOrder;
|
||||||
|
|
||||||
|
const updateLastTime = () => lastTime = Date.now();
|
||||||
|
|
||||||
//store FLO price in DB every 1 hr
|
//store FLO price in DB every 1 hr
|
||||||
setInterval(function storeRate() {
|
function storeRate(rate = cur_rate) {
|
||||||
DB.query("INSERT INTO priceHistory (rate) VALUE (?)", cur_rate)
|
DB.query("INSERT INTO priceHistory (rate) VALUE (?)", rate)
|
||||||
.then(_ => null).catch(error => console.error(error))
|
.then(_ => null).catch(error => console.error(error))
|
||||||
})
|
}
|
||||||
|
setInterval(storeRate, REC_HISTORY_INTERVAL)
|
||||||
|
|
||||||
function getPastRate(hrs = 24) {
|
function getPastRate(hrs = 24) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
@ -43,8 +49,9 @@ function fetchRates() {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
fetchRates.FLO_USD().then(FLO_rate => {
|
fetchRates.FLO_USD().then(FLO_rate => {
|
||||||
fetchRates.USD_INR().then(INR_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);
|
console.debug('Rates:', FLO_rate, INR_rate, FLO_INR_rate);
|
||||||
|
storeRate(FLO_INR_rate);
|
||||||
resolve(FLO_INR_rate);
|
resolve(FLO_INR_rate);
|
||||||
}).catch(error => reject(error))
|
}).catch(error => reject(error))
|
||||||
}).catch(error => reject(error))
|
}).catch(error => reject(error))
|
||||||
@ -81,7 +88,7 @@ function getRates() {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
loadRate().then(_ => {
|
loadRate().then(_ => {
|
||||||
let cur_time = Date.now();
|
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);
|
resolve(cur_rate);
|
||||||
else if (noBuyOrder && noSellOrder) //Both are not available: No update required
|
else if (noBuyOrder && noSellOrder) //Both are not available: No update required
|
||||||
resolve(cur_rate);
|
resolve(cur_rate);
|
||||||
@ -92,16 +99,20 @@ function getRates() {
|
|||||||
if (noBuyOrder) {
|
if (noBuyOrder) {
|
||||||
//No Buy, But Sell available: Decrease the price
|
//No Buy, But Sell available: Decrease the price
|
||||||
let tmp_val = cur_rate * (1 - DOWN_RATE);
|
let tmp_val = cur_rate * (1 - DOWN_RATE);
|
||||||
if (tmp_val >= ratePast24hr * (1 - MAX_DOWN_PER_DAY))
|
if (tmp_val >= ratePast24hr * (1 - MAX_DOWN_PER_DAY)) {
|
||||||
cur_rate *= tmp_val;
|
cur_rate = tmp_val;
|
||||||
|
updateLastTime();
|
||||||
|
}
|
||||||
resolve(cur_rate);
|
resolve(cur_rate);
|
||||||
} else if (noSellOrder) {
|
} else if (noSellOrder) {
|
||||||
//No Sell, But Buy available: Increase the price
|
//No Sell, But Buy available: Increase the price
|
||||||
checkForRatedSellers().then(result => {
|
checkForRatedSellers().then(result => {
|
||||||
if (result) {
|
if (result) {
|
||||||
let tmp_val = cur_rate * (1 + UP_RATE)
|
let tmp_val = cur_rate * (1 + UP_RATE);
|
||||||
if (tmp_val >= ratePast24hr * (1 + MAX_UP_PER_DAY))
|
if (tmp_val <= ratePast24hr * (1 + MAX_UP_PER_DAY)) {
|
||||||
cur_rate *= tmp_val;
|
cur_rate = tmp_val;
|
||||||
|
updateLastTime();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}).catch(error => console.error(error)).finally(_ => resolve(cur_rate));
|
}).catch(error => console.error(error)).finally(_ => resolve(cur_rate));
|
||||||
}
|
}
|
||||||
@ -116,8 +127,8 @@ function getRates() {
|
|||||||
function checkForRatedSellers() {
|
function checkForRatedSellers() {
|
||||||
//Check if there are best rated sellers?
|
//Check if there are best rated sellers?
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
DB.query("SELECT MAX(sellPriority) as maxValue FROM TagList").then(result => {
|
DB.query("SELECT MAX(sellPriority) as max_p FROM TagList").then(result => {
|
||||||
let ratedMin = result[0].maxValue * (1 - TOP_RANGE);
|
let ratedMin = result[0].max_p * (1 - TOP_RANGE);
|
||||||
DB.query("SELECT COUNT(*) as value FROM SellOrder WHERE floID IN (" +
|
DB.query("SELECT COUNT(*) as value FROM SellOrder WHERE floID IN (" +
|
||||||
" SELECT Tags.floID FROM Tags INNER JOIN TagList ON Tags.tag = TagList.tag" +
|
" SELECT Tags.floID FROM Tags INNER JOIN TagList ON Tags.tag = TagList.tag" +
|
||||||
" WHERE TagList.sellPriority > ?)", [ratedMin]).then(result => {
|
" WHERE TagList.sellPriority > ?)", [ratedMin]).then(result => {
|
||||||
@ -129,8 +140,8 @@ function checkForRatedSellers() {
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getRates,
|
getRates,
|
||||||
updateLastTime: () => lastTxTime = Date.now(),
|
updateLastTime,
|
||||||
set noOrder(buy, sell) {
|
noOrder(buy, sell) {
|
||||||
noBuyOrder = buy;
|
noBuyOrder = buy;
|
||||||
noSellOrder = sell;
|
noSellOrder = sell;
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
const market = require("./market");
|
const market = require("./market");
|
||||||
var DB, trustedIDs; //container for database
|
var DB, trustedIDs; //container for database
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user