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
This commit is contained in:
parent
946087481a
commit
f1e9658007
@ -137,6 +137,25 @@ CREATE TABLE priceHistory (
|
|||||||
rec_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
rec_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE TABLE auditTransaction(
|
||||||
|
rec_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
unit_price FLOAT NOT NULL,
|
||||||
|
quantity FLOAT NOT NULL,
|
||||||
|
total_cost FLOAT NOT NULL,
|
||||||
|
sellerID CHAR(34) NOT NULL,
|
||||||
|
FLO_seller_old FLOAT NOT NULL,
|
||||||
|
FLO_seller_new FLOAT NOT NULL,
|
||||||
|
Rupee_seller_old FLOAT NOT NULL,
|
||||||
|
Rupee_seller_new FLOAT NOT NULL,
|
||||||
|
buyerID CHAR(34) NOT NULL,
|
||||||
|
FLO_buyer_old FLOAT NOT NULL,
|
||||||
|
FLO_buyer_new FLOAT NOT NULL,
|
||||||
|
Rupee_buyer_old FLOAT NOT NULL,
|
||||||
|
Rupee_buyer_new FLOAT NOT NULL,
|
||||||
|
FOREIGN KEY (sellerID) REFERENCES Users(floID),
|
||||||
|
FOREIGN KEY (buyerID) REFERENCES Users(floID)
|
||||||
|
);
|
||||||
|
|
||||||
/* Backup feature (Table and Triggers) */
|
/* Backup feature (Table and Triggers) */
|
||||||
|
|
||||||
CREATE TABLE _backup (
|
CREATE TABLE _backup (
|
||||||
|
|||||||
@ -25,15 +25,19 @@ function processCoupling(bestPairQueue) {
|
|||||||
clear_sell = spend_result.incomplete && !spend_result.flag_baseNull; //clear_sell can be true only if an order is placed without enough FLO
|
clear_sell = spend_result.incomplete && !spend_result.flag_baseNull; //clear_sell can be true only if an order is placed without enough FLO
|
||||||
processOrders(seller_best, buyer_best, txQueries, tx_quantity, clear_sell);
|
processOrders(seller_best, buyer_best, txQueries, tx_quantity, clear_sell);
|
||||||
updateBalance(seller_best, buyer_best, txQueries, bestPairQueue.cur_rate, tx_quantity);
|
updateBalance(seller_best, buyer_best, txQueries, bestPairQueue.cur_rate, tx_quantity);
|
||||||
|
//begin audit
|
||||||
|
beginAudit(seller_best.floID, buyer_best.floID, bestPairQueue.cur_rate, tx_quantity).then(audit => {
|
||||||
//process txn query in SQL
|
//process txn query in SQL
|
||||||
DB.transaction(txQueries).then(_ => {
|
DB.transaction(txQueries).then(_ => {
|
||||||
bestPairQueue.next(tx_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}`);
|
||||||
|
audit.end();
|
||||||
price.updateLastTime();
|
price.updateLastTime();
|
||||||
//Since a tx was successful, match again
|
//Since a tx was successful, match again
|
||||||
processCoupling(bestPairQueue);
|
processCoupling(bestPairQueue);
|
||||||
}).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 => {
|
}).catch(error => {
|
||||||
let noBuy, noSell;
|
let noBuy, noSell;
|
||||||
if (error.buy === undefined)
|
if (error.buy === undefined)
|
||||||
@ -111,6 +115,44 @@ function updateBalance(seller_best, buyer_best, txQueries, cur_price, quantity)
|
|||||||
txQueries.push(["INSERT INTO Transactions (seller, buyer, quantity, unitValue) VALUES (?, ?, ?, ?)", [seller_best.floID, buyer_best.floID, quantity, cur_price]]);
|
txQueries.push(["INSERT INTO Transactions (seller, buyer, quantity, unitValue) VALUES (?, ?, ?, ?)", [seller_best.floID, buyer_best.floID, quantity, cur_price]]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function beginAudit(sellerID, buyerID, unit_price, quantity) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
auditBalance(sellerID, buyerID).then(old_bal => resolve({
|
||||||
|
end: () => endAudit(sellerID, buyerID, old_bal, unit_price, quantity)
|
||||||
|
})).catch(error => reject(error))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function endAudit(sellerID, buyerID, old_bal, unit_price, quantity) {
|
||||||
|
auditBalance(sellerID, buyerID).then(new_bal => {
|
||||||
|
DB.query("INSERT INTO auditTransaction (sellerID, buyerID, quantity, unit_price, total_cost, " +
|
||||||
|
" Rupee_seller_old, Rupee_seller_new, Rupee_buyer_old, Rupee_buyer_new," +
|
||||||
|
" FLO_seller_old, FLO_seller_new, FLO_buyer_old, FLO_buyer_new) " +
|
||||||
|
" Value (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", [sellerID, buyerID, quantity, unit_price, quantity * unit_price,
|
||||||
|
old_bal[sellerID].Rupee, new_bal[sellerID].Rupee, old_bal[buyerID].Rupee, new_bal[buyerID].Rupee,
|
||||||
|
old_bal[sellerID].FLO, new_bal[sellerID].FLO, old_bal[buyerID].FLO, new_bal[buyerID].FLO,
|
||||||
|
]).then(_ => null).catch(error => console.error(error))
|
||||||
|
}).catch(error => console.error(error));
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditBalance(sellerID, buyerID) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let balance = {
|
||||||
|
[sellerID]: {},
|
||||||
|
[buyerID]: {}
|
||||||
|
};
|
||||||
|
DB.query("SELECT floID, rupeeBalance FROM Cash WHERE floID IN (?, ?)", [sellerID, buyerID]).then(result => {
|
||||||
|
for (let i in result)
|
||||||
|
balance[result[i].floID].Rupee = result[i].rupeeBalance;
|
||||||
|
DB.query("SELECT floID, SUM(quantity) as floBal FROM Vault WHERE floID IN (?, ?) GROUP BY floID", [sellerID, buyerID]).then(result => {
|
||||||
|
for (let i in result)
|
||||||
|
balance[result[i].floID].FLO = result[i].floBal;
|
||||||
|
resolve(balance);
|
||||||
|
}).catch(error => reject(error))
|
||||||
|
}).catch(error => reject(error))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
initiate,
|
initiate,
|
||||||
group,
|
group,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user