improved launchTrade function

This commit is contained in:
Abhishek Sinha 2020-04-01 18:17:53 +05:30
parent 7a9204d308
commit 8c7fa7a25d

View File

@ -11627,7 +11627,7 @@
const ENVR = 'TEST'; // LIVE, TEST const ENVR = 'TEST'; // LIVE, TEST
const WS = 'ws'; const WS = 'ws';
const DBName = "localbitcoinDB"; const DBName = "localbitcoinDBRemote";
if(ENVR === 'LIVE') { if(ENVR === 'LIVE') {
@ -20331,8 +20331,10 @@
RM_TRADE.launchTrade( RM_TRADE.launchTrade(
buyPipe.value[i], buyPipe.value[i],
sellPipe.value[i], sellPipe.value[i],
function(supernode_res) { backup_db
if (typeof supernode_res == "object") { ).then(supernode_res=>{
if (supernode_res!==false
&& typeof supernode_res == "object") {
RM_RPC.send_rpc RM_RPC.send_rpc
.call( .call(
this, this,
@ -20341,9 +20343,7 @@
) )
.then(server_res => doSend(server_res)); .then(server_res => doSend(server_res));
} }
}, });
backup_db
);
} }
} }
} }
@ -20356,7 +20356,7 @@
console.error(e); console.error(e);
} }
}, },
launchTrade(buyPipeObj, sellPipeObj, callback, backup_db = "") { async launchTrade(buyPipeObj, sellPipeObj, backup_db = "") {
let _addDB = addDB; let _addDB = addDB;
let _readDB = readDB; let _readDB = readDB;
let _readDBbyIndex = readDBbyIndex; let _readDBbyIndex = readDBbyIndex;
@ -20397,21 +20397,18 @@
let err_msg; let err_msg;
// Check buyer's cash balance // Check buyer's cash balance
const buyer_cash_id = `${buyPipeObj.trader_flo_address}_${buyPipeObj.currency}`; const buyer_cash_id = `${buyPipeObj.trader_flo_address}_${buyPipeObj.currency}`;
_readDB("cash_balances", buyer_cash_id).then(function( const buyPipeCashRes = await _readDB("cash_balances", buyer_cash_id);
buyPipeCashRes
) {
if ( if (
typeof buyPipeCashRes == "object" && typeof buyPipeCashRes == "object" &&
typeof buyPipeCashRes.cash_balance == "number" typeof buyPipeCashRes.cash_balance == "number"
) { ) {
let buyer_cash_balance = parseFloat( let buyer_cash_balance = parseFloat(buyPipeCashRes.cash_balance);
buyPipeCashRes.cash_balance
);
let buy_price_btc = parseFloat(buyPipeObj.buy_price); let buy_price_btc = parseFloat(buyPipeObj.buy_price);
if (buyer_cash_balance < buy_price_btc) { if (buyer_cash_balance < buy_price_btc) {
err_msg = "Insufficient cash balance of buyer."; err_msg = "Insufficient cash balance of buyer.";
showMessage(err_msg); console.warn(err_msg);
throw new Error(err_msg); return false;
} }
// calculate equivalent BTC for x amount of Cash // calculate equivalent BTC for x amount of Cash
let eqBTCBuyer = RM_TRADE.calculateCryptoEquivalentOfCash( let eqBTCBuyer = RM_TRADE.calculateCryptoEquivalentOfCash(
@ -20430,9 +20427,7 @@
// Check seller's crypto balance // Check seller's crypto balance
let seller_btc_id = `${sellPipeObj.trader_flo_address}_${sellPipeObj.product}`; let seller_btc_id = `${sellPipeObj.trader_flo_address}_${sellPipeObj.product}`;
_readDB("crypto_balances", seller_btc_id).then(function( const sellPipeBTCRes = await _readDB("crypto_balances", seller_btc_id);
sellPipeBTCRes
) {
if ( if (
typeof sellPipeBTCRes == "object" && typeof sellPipeBTCRes == "object" &&
typeof sellPipeBTCRes.crypto_balance == "number" typeof sellPipeBTCRes.crypto_balance == "number"
@ -20452,16 +20447,16 @@
eqBTCSeller = helper_functions.truncateDecimals(eqBTCSeller); eqBTCSeller = helper_functions.truncateDecimals(eqBTCSeller);
if (seller_btc_balance < eqBTCSeller) { if (seller_btc_balance < eqBTCSeller) {
err_msg = "Insufficient BTC balance of seller."; err_msg = "Insufficient BTC balance of seller.";
showMessage(err_msg); console.warn(err_msg);
throw new Error(err_msg); return false;
} }
// Increase buyer's crypto balance // Get Buyer's crypto balance
let buyerBTCResponseObject; let buyerBTCResponseObject;
let buyer_btc_id = `${buyPipeObj.trader_flo_address}_${buyPipeObj.product}`; let buyer_btc_id = `${buyPipeObj.trader_flo_address}_${buyPipeObj.product}`;
_readDB("crypto_balances", buyer_btc_id).then(function( const buyPipeBTCRes = await _readDB("crypto_balances", buyer_btc_id);
buyPipeBTCRes
) { // Increase buyer's crypto balance
if ( if (
typeof buyPipeBTCRes == "object" && typeof buyPipeBTCRes == "object" &&
typeof buyPipeBTCRes.crypto_balance == "number" typeof buyPipeBTCRes.crypto_balance == "number"
@ -20480,23 +20475,12 @@
}; };
} }
// Decrease buyer cash balance // Get Seller's cash balance
let buyer_new_cash_balance =
buyer_cash_balance - buy_price_btc;
let buyerCashResponseObject = {
id: buyer_cash_id,
currency: buyPipeObj.currency,
trader_flo_address: buyPipeObj.trader_flo_address,
cash_balance: buyer_new_cash_balance
};
// Increase seller's Cash balance
let sellerCashResponseObject; let sellerCashResponseObject;
const seller_cash_id = `${sellPipeObj.trader_flo_address}_${buyPipeObj.currency}`; const seller_cash_id = `${sellPipeObj.trader_flo_address}_${buyPipeObj.currency}`;
_readDB("cash_balances", seller_cash_id).then(function( const sellPipeCashRes = await _readDB("cash_balances", seller_cash_id);
sellPipeCashRes
) { // Increase seller's Cash balance
if ( if (
typeof sellPipeCashRes == "object" && typeof sellPipeCashRes == "object" &&
typeof sellPipeCashRes.cash_balance == "number" && typeof sellPipeCashRes.cash_balance == "number" &&
@ -20518,22 +20502,17 @@
}; };
} }
// Decrease seller BTC balance // Decrease buyer cash balance
let new_seller_btc_balance = buyPipeCashRes.cash_balance = buyer_cash_balance - buy_price_btc;
seller_btc_balance - eqBTCSeller; let buyerCashResponseObject = buyPipeCashRes;
new_seller_btc_balance = helper_functions.truncateDecimals(new_seller_btc_balance);
let sellerBTCResponseObject = { // Decrease seller BTC balance
id: `${sellPipeObj.trader_flo_address}_${sellPipeObj.product}`, sellPipeBTCRes.crypto_balance = helper_functions.truncateDecimals(seller_btc_balance - eqBTCSeller);
trader_flo_address: sellPipeObj.trader_flo_address,
crypto_balance: new_seller_btc_balance, let sellerBTCResponseObject = sellPipeBTCRes;
crypto_currency: sellPipeObj.product
};
// supernode data query // supernode data query
readDB("localbitcoinUser", "00-01").then(async function( const user_data = await readDB("localbitcoinUser", "00-01");
user_data
) {
if ( if (
typeof user_data == "object" && typeof user_data == "object" &&
typeof localbitcoinplusplus.wallets typeof localbitcoinplusplus.wallets
@ -20543,26 +20522,16 @@
) { ) {
// Delete orders // Delete orders
try { try {
_removeinDB("buyOrders", buyPipeObj.id); await _removeinDB("buyOrders", buyPipeObj.id);
_removeinDB("sellOrders", sellPipeObj.id); await _removeinDB("sellOrders", sellPipeObj.id);
} catch (error) { } catch (error) {
callback(false); console.error(`WARNING: Failed to delete respective buy
showMessage( and sell orders in an operation:
`WARNING: Failed to delete respective buy and sell orders in an operation.` ${error} `);
); return false;
throw new Error(error);
} }
// Update balances // Update balances
try {
} catch (error) {
showMessage(
`WARNING: Failed to update cash and crypto balances during launch trade operation.`
);
callback(false);
throw new Error(error);
}
let buyerCashResponseObjectPromise = _updateinDB( let buyerCashResponseObjectPromise = _updateinDB(
"cash_balances", "cash_balances",
@ -20590,7 +20559,10 @@
sellerCashResponseObjectPromise, sellerCashResponseObjectPromise,
buyerBTCResponseObjectPromise, buyerBTCResponseObjectPromise,
sellerBTCResponseObjectPromise sellerBTCResponseObjectPromise
]); ]).catch(error=>{
console.error(error);
return false;
});
// Prepare response // Prepare response
let trade_infos = { let trade_infos = {
@ -20643,19 +20615,13 @@
trader_flo_address: trader_flo_address:
getPrimarySuObj[0].data.id getPrimarySuObj[0].data.id
}; };
callback(response_for_client); return response_for_client;
return true;
}); });
} }
});
});
});
} }
} } else return false;
}); } else return false;
}
});
callback(false);
} }
}, },
cancelTrade(trade_id, trader_flo_address, trade_type) { cancelTrade(trade_id, trader_flo_address, trade_type) {
@ -29130,10 +29096,10 @@
}; };
this.request.onsuccess = function(event) { this.request.onsuccess = function(event) {
if (parent_request.result) {
if(!exception_datastores.includes(tablename)) { if(!exception_datastores.includes(tablename)) {
if(!verifyDBData(parent_request.result)) return resolve(); if(!verifyDBData(parent_request.result)) return resolve();
} }
if (parent_request.result) {
if (filter_deletables == true) { if (filter_deletables == true) {
if ( if (
typeof parent_request.result.is_deletable == "undefined" typeof parent_request.result.is_deletable == "undefined"