Bug fixes
- Fixed: get-sink, generate-sink, reshare-sink, discard-sink API not working - Fixed: API not working - Fixed: SQL syntax in to_refund_sql in verifyConvert for timeout requests - Fixed: key management init not invoked - Fixed: Minor bug in getConvertValues. Also, have null value if not available. - Added console.debug to rejected promise (SQL write) on readDataFromBlockchain in Blockchain bonds and Bob's fund
This commit is contained in:
parent
c911ca671e
commit
506087e856
@ -610,7 +610,7 @@
|
|||||||
|
|
||||||
exchangeAPI.getSink = function (service = serviceList.EXCHANGE) {
|
exchangeAPI.getSink = function (service = serviceList.EXCHANGE) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!(service in serviceList))
|
if (!(Object.values(serviceList).includes(service)))
|
||||||
return reject(ExchangeError(ExchangeError.BAD_REQUEST_CODE, 'service required', errorCode.INVALID_VALUE));
|
return reject(ExchangeError(ExchangeError.BAD_REQUEST_CODE, 'service required', errorCode.INVALID_VALUE));
|
||||||
fetch_api('/get-sink?service=' + service)
|
fetch_api('/get-sink?service=' + service)
|
||||||
.then(result => {
|
.then(result => {
|
||||||
@ -1559,6 +1559,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
exchangeAPI.generateSink = function (group, floID, privKey) {
|
exchangeAPI.generateSink = function (group, floID, privKey) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
if (!floCrypto.verifyPrivKey(privKey, floID))
|
if (!floCrypto.verifyPrivKey(privKey, floID))
|
||||||
return reject(ExchangeError(ExchangeError.BAD_REQUEST_CODE, "Invalid Private Key", errorCode.INVALID_PRIVATE_KEY));
|
return reject(ExchangeError(ExchangeError.BAD_REQUEST_CODE, "Invalid Private Key", errorCode.INVALID_PRIVATE_KEY));
|
||||||
if (floID !== DEFAULT.marketID)
|
if (floID !== DEFAULT.marketID)
|
||||||
@ -1587,9 +1588,11 @@
|
|||||||
.then(result => resolve(result))
|
.then(result => resolve(result))
|
||||||
.catch(error => reject(error))
|
.catch(error => reject(error))
|
||||||
}).catch(error => reject(error))
|
}).catch(error => reject(error))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
exchangeAPI.reshareSink = function (sinkID, floID, privKey) {
|
exchangeAPI.reshareSink = function (sinkID, floID, privKey) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
if (!floCrypto.verifyPrivKey(privKey, floID))
|
if (!floCrypto.verifyPrivKey(privKey, floID))
|
||||||
return reject(ExchangeError(ExchangeError.BAD_REQUEST_CODE, "Invalid Private Key", errorCode.INVALID_PRIVATE_KEY));
|
return reject(ExchangeError(ExchangeError.BAD_REQUEST_CODE, "Invalid Private Key", errorCode.INVALID_PRIVATE_KEY));
|
||||||
if (floID !== DEFAULT.marketID)
|
if (floID !== DEFAULT.marketID)
|
||||||
@ -1618,9 +1621,11 @@
|
|||||||
.then(result => resolve(result))
|
.then(result => resolve(result))
|
||||||
.catch(error => reject(error))
|
.catch(error => reject(error))
|
||||||
}).catch(error => reject(error))
|
}).catch(error => reject(error))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
exchangeAPI.discardSink = function (sinkID, floID, privKey) {
|
exchangeAPI.discardSink = function (sinkID, floID, privKey) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
if (!floCrypto.verifyPrivKey(privKey, floID))
|
if (!floCrypto.verifyPrivKey(privKey, floID))
|
||||||
return reject(ExchangeError(ExchangeError.BAD_REQUEST_CODE, "Invalid Private Key", errorCode.INVALID_PRIVATE_KEY));
|
return reject(ExchangeError(ExchangeError.BAD_REQUEST_CODE, "Invalid Private Key", errorCode.INVALID_PRIVATE_KEY));
|
||||||
if (floID !== DEFAULT.marketID)
|
if (floID !== DEFAULT.marketID)
|
||||||
@ -1649,6 +1654,8 @@
|
|||||||
.then(result => resolve(result))
|
.then(result => resolve(result))
|
||||||
.catch(error => reject(error))
|
.catch(error => reject(error))
|
||||||
}).catch(error => reject(error))
|
}).catch(error => reject(error))
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exchangeAPI.init = function refreshDataFromBlockchain() {
|
exchangeAPI.init = function refreshDataFromBlockchain() {
|
||||||
|
|||||||
@ -90,7 +90,7 @@ module.exports = function App(secret) {
|
|||||||
|
|
||||||
//generate or discard sinks (admin only)
|
//generate or discard sinks (admin only)
|
||||||
app.post('/generate-sink', Request.GenerateSink);
|
app.post('/generate-sink', Request.GenerateSink);
|
||||||
app.post('/reshare-sink', Request.DiscardSink);
|
app.post('/reshare-sink', Request.ReshareSink);
|
||||||
app.post('/discard-sink', Request.DiscardSink);
|
app.post('/discard-sink', Request.DiscardSink);
|
||||||
|
|
||||||
//convert from or to coin
|
//convert from or to coin
|
||||||
|
|||||||
@ -221,7 +221,7 @@ function verifyConvert() {
|
|||||||
//Set all timeout convert request to refund mode (thus, asset will be refund if tx gets confirmed later)
|
//Set all timeout convert request to refund mode (thus, asset will be refund if tx gets confirmed later)
|
||||||
let req_timeout = new Date(Date.now() - REQUEST_TIMEOUT),
|
let req_timeout = new Date(Date.now() - REQUEST_TIMEOUT),
|
||||||
to_refund_sql = "INSERT INTO RefundConvert (floID, in_txid, asset_type, asset, r_status)" +
|
to_refund_sql = "INSERT INTO RefundConvert (floID, in_txid, asset_type, asset, r_status)" +
|
||||||
" SELECT floID, in_txid, ? AS asset_type, ? AS asset, r_status" +
|
" SELECT floID, in_txid, ? AS asset_type, ? AS asset, r_status FROM DirectConvert" +
|
||||||
" WHERE r_status=? AND locktime<? AND mode=?";
|
" WHERE r_status=? AND locktime<? AND mode=?";
|
||||||
let txQueries = [];
|
let txQueries = [];
|
||||||
txQueries.push([to_refund_sql, [pCode.ASSET_TYPE_TOKEN, floGlobals.currency, pCode.STATUS_PENDING, req_timeout, pCode.CONVERT_MODE_GET]]);
|
txQueries.push([to_refund_sql, [pCode.ASSET_TYPE_TOKEN, floGlobals.currency, pCode.STATUS_PENDING, req_timeout, pCode.CONVERT_MODE_GET]]);
|
||||||
|
|||||||
@ -188,6 +188,8 @@ module.exports = function startServer() {
|
|||||||
console.log("Logged in as", keys.node_id);
|
console.log("Logged in as", keys.node_id);
|
||||||
|
|
||||||
DB.connect(config["sql_user"], config["sql_pwd"], config["sql_db"], config["sql_host"]).then(result => {
|
DB.connect(config["sql_user"], config["sql_pwd"], config["sql_db"], config["sql_host"]).then(result => {
|
||||||
|
keys.init().then(result => {
|
||||||
|
console.log(result);
|
||||||
app = new App(config['secret']);
|
app = new App(config['secret']);
|
||||||
refreshData(true).then(_ => {
|
refreshData(true).then(_ => {
|
||||||
app.start(config['port']).then(result => {
|
app.start(config['port']).then(result => {
|
||||||
@ -196,5 +198,6 @@ module.exports = function startServer() {
|
|||||||
setInterval(refreshData, BLOCKCHAIN_REFRESH_INTERVAL)
|
setInterval(refreshData, BLOCKCHAIN_REFRESH_INTERVAL)
|
||||||
}).catch(error => console.error(error))
|
}).catch(error => console.error(error))
|
||||||
}).catch(error => console.error(error))
|
}).catch(error => console.error(error))
|
||||||
|
}).catch(error => console.error(error))
|
||||||
}).catch(error => console.error(error));
|
}).catch(error => console.error(error));
|
||||||
};
|
};
|
||||||
@ -318,11 +318,12 @@ function GenerateSink(req, res) {
|
|||||||
type: "generate_sink",
|
type: "generate_sink",
|
||||||
group: data.group,
|
group: data.group,
|
||||||
timestamp: data.timestamp
|
timestamp: data.timestamp
|
||||||
}, () => sink.generate(group));
|
}, () => sink.generate(data.group));
|
||||||
}
|
}
|
||||||
|
|
||||||
function ReshareSink(req, res) {
|
function ReshareSink(req, res) {
|
||||||
let data = req.body;
|
let data = req.body;
|
||||||
|
console.debug(data)
|
||||||
if (data.floID !== floGlobals.adminID)
|
if (data.floID !== floGlobals.adminID)
|
||||||
res.status(INVALID.e_code).send(INVALID.str(eCode.ACCESS_DENIED, "Access Denied"));
|
res.status(INVALID.e_code).send(INVALID.str(eCode.ACCESS_DENIED, "Access Denied"));
|
||||||
else if (!data.pubKey)
|
else if (!data.pubKey)
|
||||||
@ -333,7 +334,7 @@ function ReshareSink(req, res) {
|
|||||||
type: "reshare_sink",
|
type: "reshare_sink",
|
||||||
id: data.id,
|
id: data.id,
|
||||||
timestamp: data.timestamp
|
timestamp: data.timestamp
|
||||||
}, () => sink.reshare(id));
|
}, () => sink.reshare(data.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
function DiscardSink(req, res) {
|
function DiscardSink(req, res) {
|
||||||
@ -346,7 +347,7 @@ function DiscardSink(req, res) {
|
|||||||
type: "discard_sink",
|
type: "discard_sink",
|
||||||
id: data.id,
|
id: data.id,
|
||||||
timestamp: data.timestamp
|
timestamp: data.timestamp
|
||||||
}, () => sink.discard(id));
|
}, () => sink.discard(data.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
function ConvertTo(req, res) {
|
function ConvertTo(req, res) {
|
||||||
@ -559,15 +560,15 @@ function GetSink(req, res) {
|
|||||||
let service = req.query.service;
|
let service = req.query.service;
|
||||||
if (!service)
|
if (!service)
|
||||||
res.status(INVALID.e_code).send(INVALID.str(eCode.MISSING_PARAMETER, "Missing service parameter"));
|
res.status(INVALID.e_code).send(INVALID.str(eCode.MISSING_PARAMETER, "Missing service parameter"));
|
||||||
else if (!(service in serviceList))
|
else if (!(Object.values(serviceList).includes(service)))
|
||||||
res.status(INVALID.e_code).send(INVALID.str(eCode.INVALID_VALUE, "Invalid service parameter"));
|
res.status(INVALID.e_code).send(INVALID.str(eCode.INVALID_VALUE, "Invalid service parameter"));
|
||||||
else {
|
else {
|
||||||
let group;
|
let group;
|
||||||
switch (service) {
|
switch (service) {
|
||||||
case serviceList[EXCHANGE]: group = keys.sink_groups.EXCHANGE; break;
|
case serviceList.EXCHANGE: group = keys.sink_groups.EXCHANGE; break;
|
||||||
case serviceList[CONVERT]: group = keys.sink_groups.CONVERT; break;
|
case serviceList.CONVERT: group = keys.sink_groups.CONVERT; break;
|
||||||
case serviceList[BLOCKCHAIN_BOND]: group = keys.sink_groups.BLOCKCHAIN_BONDS; break;
|
case serviceList.BLOCKCHAIN_BOND: group = keys.sink_groups.BLOCKCHAIN_BONDS; break;
|
||||||
case serviceList[BOBS_FUND]: group = keys.sink_groups.BOBS_FUND; break;
|
case serviceList.BOBS_FUND: group = keys.sink_groups.BOBS_FUND; break;
|
||||||
}
|
}
|
||||||
res.send(keys.sink_chest.active_pick(group));
|
res.send(keys.sink_chest.active_pick(group));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -237,9 +237,10 @@ function refreshBlockchainData(nodeList = []) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
Promise.allSettled(promises).then(results => {
|
Promise.allSettled(promises).then(results => {
|
||||||
//console.debug(results.filter(r => r.status === "rejected"));
|
if (results.reduce((a, r) => r.status === "rejected" ? ++a : a, 0)) {
|
||||||
if (results.reduce((a, r) => r.status === "rejected" ? ++a : a, 0))
|
console.debug(results.filter(r => r.status === "rejected"));
|
||||||
reject("Some fund data might not have been saved in database correctly");
|
reject("Some fund data might not have been saved in database correctly");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
DB.query("INSERT INTO LastTx (floID, num) VALUE (?) ON DUPLICATE KEY UPDATE num=?", [[bobsFund.config.adminID, result.totalTxs], result.totalTxs])
|
DB.query("INSERT INTO LastTx (floID, num) VALUE (?) ON DUPLICATE KEY UPDATE num=?", [[bobsFund.config.adminID, result.totalTxs], result.totalTxs])
|
||||||
.then(_ => resolve(result.totalTxs))
|
.then(_ => resolve(result.totalTxs))
|
||||||
|
|||||||
@ -206,9 +206,10 @@ function refreshBlockchainData(nodeList = []) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
Promise.allSettled(promises).then(results => {
|
Promise.allSettled(promises).then(results => {
|
||||||
//console.debug(results.filter(r => r.status === "rejected"));
|
if (results.reduce((a, r) => r.status === "rejected" ? ++a : a, 0)) {
|
||||||
if (results.reduce((a, r) => r.status === "rejected" ? ++a : a, 0))
|
|
||||||
reject("Some bond data might not have been saved in database correctly");
|
reject("Some bond data might not have been saved in database correctly");
|
||||||
|
console.debug(results.filter(r => r.status === "rejected"));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
DB.query("INSERT INTO LastTx (floID, num) VALUE (?) ON DUPLICATE KEY UPDATE num=?", [[blockchainBond.config.adminID, result.totalTxs], result.totalTxs])
|
DB.query("INSERT INTO LastTx (floID, num) VALUE (?) ON DUPLICATE KEY UPDATE num=?", [[blockchainBond.config.adminID, result.totalTxs], result.totalTxs])
|
||||||
.then(_ => resolve(result.totalTxs))
|
.then(_ => resolve(result.totalTxs))
|
||||||
|
|||||||
@ -114,16 +114,16 @@ function getConvertValues() {
|
|||||||
result[pCode.CONVERT_MODE_GET] = { min: 0 };
|
result[pCode.CONVERT_MODE_GET] = { min: 0 };
|
||||||
result[pCode.CONVERT_MODE_GET].max = (!TO_MAX_VALUE || TO_MIN_VALUE >= coin_availability) ? coin_availability : TO_MAX_VALUE;
|
result[pCode.CONVERT_MODE_GET].max = (!TO_MAX_VALUE || TO_MIN_VALUE >= coin_availability) ? coin_availability : TO_MAX_VALUE;
|
||||||
}
|
}
|
||||||
}
|
} else result[pCode.CONVERT_MODE_GET] = null;
|
||||||
if (avail.cash > 0) {
|
if (avail.cash > 0) {
|
||||||
let cash_availability = avail.cash / avail.rate; //convert to coin value
|
let cash_availability = avail.cash / avail.rate; //convert to coin value
|
||||||
if (Array.isArray(FROM_FIXED_VALUES) && FROM_FIXED_VALUES.length)
|
if (Array.isArray(FROM_FIXED_VALUES) && FROM_FIXED_VALUES.length)
|
||||||
result[pCode.CONVERT_MODE_GET] = FROM_FIXED_VALUES.filter(a => a < cash_availability);
|
result[pCode.CONVERT_MODE_PUT] = FROM_FIXED_VALUES.filter(a => a < cash_availability);
|
||||||
else if (!FROM_MIN_VALUE || FROM_MIN_VALUE <= cash_availability) {
|
else if (!FROM_MIN_VALUE || FROM_MIN_VALUE <= cash_availability) {
|
||||||
result[pCode.CONVERT_MODE_GET] = { min: 0 };
|
result[pCode.CONVERT_MODE_PUT] = { min: 0 };
|
||||||
result[pCode.CONVERT_MODE_GET].max = (!FROM_MAX_VALUE || FROM_MIN_VALUE >= cash_availability) ? cash_availability : FROM_MAX_VALUE;
|
result[pCode.CONVERT_MODE_PUT].max = (!FROM_MAX_VALUE || FROM_MIN_VALUE >= cash_availability) ? cash_availability : FROM_MAX_VALUE;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
} else result[pCode.CONVERT_MODE_PUT] = null;
|
||||||
resolve(result)
|
resolve(result)
|
||||||
}).catch(error => reject(error))
|
}).catch(error => reject(error))
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user