diff --git a/index.html b/index.html
index 6807523..bb4d439 100644
--- a/index.html
+++ b/index.html
@@ -11627,7 +11627,7 @@
const ENVR = 'TEST'; // LIVE, TEST
const WS = 'ws';
- const DBName = "localbitcoinDB";
+ const DBName = "localbitcoinDBRemote";
if(ENVR === 'LIVE') {
@@ -20331,19 +20331,19 @@
RM_TRADE.launchTrade(
buyPipe.value[i],
sellPipe.value[i],
- function(supernode_res) {
- if (typeof supernode_res == "object") {
- RM_RPC.send_rpc
+ backup_db
+ ).then(supernode_res=>{
+ if (supernode_res!==false
+ && typeof supernode_res == "object") {
+ RM_RPC.send_rpc
.call(
- this,
- "trade_balance_updates",
- supernode_res
+ this,
+ "trade_balance_updates",
+ supernode_res
)
.then(server_res => doSend(server_res));
}
- },
- backup_db
- );
+ });
}
}
}
@@ -20356,7 +20356,7 @@
console.error(e);
}
},
- launchTrade(buyPipeObj, sellPipeObj, callback, backup_db = "") {
+ async launchTrade(buyPipeObj, sellPipeObj, backup_db = "") {
let _addDB = addDB;
let _readDB = readDB;
let _readDBbyIndex = readDBbyIndex;
@@ -20366,203 +20366,172 @@
let _removeByIndex = removeByIndex;
let _removeAllinDB = removeAllinDB;
if (typeof backup_db == "string" && backup_db.length > 0) {
- if (
- typeof localbitcoinplusplus.newBackupDatabase.db[backup_db] ==
- "object"
- ) {
- const foreign_db =
- localbitcoinplusplus.newBackupDatabase.db[backup_db];
- _addDB = foreign_db.backup_addDB.bind(foreign_db);
- _readDB = foreign_db.backup_readDB.bind(foreign_db);
- _readDBbyIndex = foreign_db.backup_readDBbyIndex.bind(foreign_db);
- _readAllDB = foreign_db.backup_readAllDB.bind(foreign_db);
- _updateinDB = foreign_db.backup_updateinDB.bind(foreign_db);
- _removeinDB = foreign_db.backup_removeinDB.bind(foreign_db);
- _removeByIndex = foreign_db.backup_removeByIndex.bind(foreign_db);
- } else {
- err_msg = `WARNING: Invalid Backup DB Instance Id: ${backup_db}.`;
- showMessage(err_msg);
- throw new Error(err_msg);
- }
- }
- if (
- buyPipeObj.order_type == "buy" &&
- sellPipeObj.order_type == "sell" &&
- buyPipeObj.buy_price == sellPipeObj.buy_price &&
- buyPipeObj.currency == sellPipeObj.currency &&
- buyPipeObj.product == sellPipeObj.product
- ) {
- const RM_TRADE = new localbitcoinplusplus.trade();
- const RM_WALLET = new localbitcoinplusplus.wallets();
- let err_msg;
- // Check buyer's cash balance
- const buyer_cash_id = `${buyPipeObj.trader_flo_address}_${buyPipeObj.currency}`;
- _readDB("cash_balances", buyer_cash_id).then(function(
- buyPipeCashRes
- ) {
if (
- typeof buyPipeCashRes == "object" &&
- typeof buyPipeCashRes.cash_balance == "number"
+ typeof localbitcoinplusplus.newBackupDatabase.db[backup_db] ==
+ "object"
) {
- let buyer_cash_balance = parseFloat(
- buyPipeCashRes.cash_balance
- );
- let buy_price_btc = parseFloat(buyPipeObj.buy_price);
- if (buyer_cash_balance < buy_price_btc) {
- err_msg = "Insufficient cash balance of buyer.";
+ const foreign_db =
+ localbitcoinplusplus.newBackupDatabase.db[backup_db];
+ _addDB = foreign_db.backup_addDB.bind(foreign_db);
+ _readDB = foreign_db.backup_readDB.bind(foreign_db);
+ _readDBbyIndex = foreign_db.backup_readDBbyIndex.bind(foreign_db);
+ _readAllDB = foreign_db.backup_readAllDB.bind(foreign_db);
+ _updateinDB = foreign_db.backup_updateinDB.bind(foreign_db);
+ _removeinDB = foreign_db.backup_removeinDB.bind(foreign_db);
+ _removeByIndex = foreign_db.backup_removeByIndex.bind(foreign_db);
+ } else {
+ err_msg = `WARNING: Invalid Backup DB Instance Id: ${backup_db}.`;
showMessage(err_msg);
throw new Error(err_msg);
}
- // calculate equivalent BTC for x amount of Cash
- let eqBTCBuyer = RM_TRADE.calculateCryptoEquivalentOfCash(
- buy_price_btc,
- buyPipeObj.currency,
- buyPipeObj.product
- );
-
+ }
+ if (
+ buyPipeObj.order_type == "buy" &&
+ sellPipeObj.order_type == "sell" &&
+ buyPipeObj.buy_price == sellPipeObj.buy_price &&
+ buyPipeObj.currency == sellPipeObj.currency &&
+ buyPipeObj.product == sellPipeObj.product
+ ) {
+ const RM_TRADE = new localbitcoinplusplus.trade();
+ const RM_WALLET = new localbitcoinplusplus.wallets();
+ let err_msg;
+ // Check buyer's cash balance
+ const buyer_cash_id = `${buyPipeObj.trader_flo_address}_${buyPipeObj.currency}`;
+ const buyPipeCashRes = await _readDB("cash_balances", buyer_cash_id);
if (
- !isNaN(eqBTCBuyer) &&
- eqBTCBuyer != "" &&
- eqBTCBuyer != undefined
+ typeof buyPipeCashRes == "object" &&
+ typeof buyPipeCashRes.cash_balance == "number"
) {
- eqBTCBuyer = helper_functions.truncateDecimals(eqBTCBuyer);
- }
+ let buyer_cash_balance = parseFloat(buyPipeCashRes.cash_balance);
- // Check seller's crypto balance
- let seller_btc_id = `${sellPipeObj.trader_flo_address}_${sellPipeObj.product}`;
- _readDB("crypto_balances", seller_btc_id).then(function(
- sellPipeBTCRes
- ) {
- if (
- typeof sellPipeBTCRes == "object" &&
- typeof sellPipeBTCRes.crypto_balance == "number"
- ) {
- let seller_btc_balance = helper_functions.truncateDecimals(sellPipeBTCRes.crypto_balance);
- let sell_price_in_inr = parseFloat(sellPipeObj.buy_price);
- let eqBTCSeller = RM_TRADE.calculateCryptoEquivalentOfCash(
- sell_price_in_inr,
+ let buy_price_btc = parseFloat(buyPipeObj.buy_price);
+ if (buyer_cash_balance < buy_price_btc) {
+ err_msg = "Insufficient cash balance of buyer.";
+ console.warn(err_msg);
+ return false;
+ }
+ // calculate equivalent BTC for x amount of Cash
+ let eqBTCBuyer = RM_TRADE.calculateCryptoEquivalentOfCash(
+ buy_price_btc,
buyPipeObj.currency,
buyPipeObj.product
);
+
if (
- !isNaN(eqBTCSeller) &&
- eqBTCSeller != "" &&
- eqBTCSeller != undefined
+ !isNaN(eqBTCBuyer) &&
+ eqBTCBuyer != "" &&
+ eqBTCBuyer != undefined
) {
- eqBTCSeller = helper_functions.truncateDecimals(eqBTCSeller);
- if (seller_btc_balance < eqBTCSeller) {
- err_msg = "Insufficient BTC balance of seller.";
- showMessage(err_msg);
- throw new Error(err_msg);
- }
+ eqBTCBuyer = helper_functions.truncateDecimals(eqBTCBuyer);
+ }
- // Increase buyer's crypto balance
- let buyerBTCResponseObject;
- let buyer_btc_id = `${buyPipeObj.trader_flo_address}_${buyPipeObj.product}`;
- _readDB("crypto_balances", buyer_btc_id).then(function(
- buyPipeBTCRes
- ) {
+ // Check seller's crypto balance
+ let seller_btc_id = `${sellPipeObj.trader_flo_address}_${sellPipeObj.product}`;
+ const sellPipeBTCRes = await _readDB("crypto_balances", seller_btc_id);
+ if (
+ typeof sellPipeBTCRes == "object" &&
+ typeof sellPipeBTCRes.crypto_balance == "number"
+ ) {
+ let seller_btc_balance = helper_functions.truncateDecimals(sellPipeBTCRes.crypto_balance);
+ let sell_price_in_inr = parseFloat(sellPipeObj.buy_price);
+ let eqBTCSeller = RM_TRADE.calculateCryptoEquivalentOfCash(
+ sell_price_in_inr,
+ buyPipeObj.currency,
+ buyPipeObj.product
+ );
if (
- typeof buyPipeBTCRes == "object" &&
- typeof buyPipeBTCRes.crypto_balance == "number"
+ !isNaN(eqBTCSeller) &&
+ eqBTCSeller != "" &&
+ eqBTCSeller != undefined
) {
- buyPipeBTCRes.crypto_balance =
- helper_functions.truncateDecimals(buyPipeBTCRes.crypto_balance) +
- eqBTCBuyer;
- buyerBTCResponseObject = buyPipeBTCRes;
- } else {
- // The user bought BTC for first time
- buyerBTCResponseObject = {
- id: buyer_btc_id,
- trader_flo_address: buyPipeObj.trader_flo_address,
- crypto_balance: eqBTCBuyer,
- crypto_currency: buyPipeObj.product
- };
- }
-
- // Decrease buyer 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;
- const seller_cash_id = `${sellPipeObj.trader_flo_address}_${buyPipeObj.currency}`;
- _readDB("cash_balances", seller_cash_id).then(function(
- sellPipeCashRes
- ) {
- if (
- typeof sellPipeCashRes == "object" &&
- typeof sellPipeCashRes.cash_balance == "number" &&
- !isNaN(sellPipeCashRes.cash_balance)
- ) {
- sellPipeCashRes.cash_balance =
- parseFloat(sellPipeCashRes.cash_balance) +
- sell_price_in_inr;
- sellerCashResponseObject = sellPipeCashRes;
- } else {
- // User got cash for the first time
- let seller_cash_id = `${sellPipeObj.trader_flo_address}_${buyPipeObj.currency}`;
- sellerCashResponseObject = {
- id: seller_cash_id,
- trader_flo_address:
- sellPipeObj.trader_flo_address,
- currency: buyPipeObj.currency,
- cash_balance: sell_price_in_inr
- };
+ eqBTCSeller = helper_functions.truncateDecimals(eqBTCSeller);
+ if (seller_btc_balance < eqBTCSeller) {
+ err_msg = "Insufficient BTC balance of seller.";
+ console.warn(err_msg);
+ return false;
}
- // Decrease seller BTC balance
- let new_seller_btc_balance =
- seller_btc_balance - eqBTCSeller;
- new_seller_btc_balance = helper_functions.truncateDecimals(new_seller_btc_balance);
+ // Get Buyer's crypto balance
+ let buyerBTCResponseObject;
+ let buyer_btc_id = `${buyPipeObj.trader_flo_address}_${buyPipeObj.product}`;
+ const buyPipeBTCRes = await _readDB("crypto_balances", buyer_btc_id);
+
+ // Increase buyer's crypto balance
+ if (
+ typeof buyPipeBTCRes == "object" &&
+ typeof buyPipeBTCRes.crypto_balance == "number"
+ ) {
+ buyPipeBTCRes.crypto_balance =
+ helper_functions.truncateDecimals(buyPipeBTCRes.crypto_balance) +
+ eqBTCBuyer;
+ buyerBTCResponseObject = buyPipeBTCRes;
+ } else {
+ // The user bought BTC for first time
+ buyerBTCResponseObject = {
+ id: buyer_btc_id,
+ trader_flo_address: buyPipeObj.trader_flo_address,
+ crypto_balance: eqBTCBuyer,
+ crypto_currency: buyPipeObj.product
+ };
+ }
- let sellerBTCResponseObject = {
- id: `${sellPipeObj.trader_flo_address}_${sellPipeObj.product}`,
- trader_flo_address: sellPipeObj.trader_flo_address,
- crypto_balance: new_seller_btc_balance,
- crypto_currency: sellPipeObj.product
- };
+ // Get Seller's cash balance
+ let sellerCashResponseObject;
+ const seller_cash_id = `${sellPipeObj.trader_flo_address}_${buyPipeObj.currency}`;
+ const sellPipeCashRes = await _readDB("cash_balances", seller_cash_id);
+
+ // Increase seller's Cash balance
+ if (
+ typeof sellPipeCashRes == "object" &&
+ typeof sellPipeCashRes.cash_balance == "number" &&
+ !isNaN(sellPipeCashRes.cash_balance)
+ ) {
+ sellPipeCashRes.cash_balance =
+ parseFloat(sellPipeCashRes.cash_balance) +
+ sell_price_in_inr;
+ sellerCashResponseObject = sellPipeCashRes;
+ } else {
+ // User got cash for the first time
+ let seller_cash_id = `${sellPipeObj.trader_flo_address}_${buyPipeObj.currency}`;
+ sellerCashResponseObject = {
+ id: seller_cash_id,
+ trader_flo_address:
+ sellPipeObj.trader_flo_address,
+ currency: buyPipeObj.currency,
+ cash_balance: sell_price_in_inr
+ };
+ }
+
+ // Decrease buyer cash balance
+ buyPipeCashRes.cash_balance = buyer_cash_balance - buy_price_btc;
+ let buyerCashResponseObject = buyPipeCashRes;
+
+ // Decrease seller BTC balance
+ sellPipeBTCRes.crypto_balance = helper_functions.truncateDecimals(seller_btc_balance - eqBTCSeller);
+
+ let sellerBTCResponseObject = sellPipeBTCRes;
// supernode data query
- readDB("localbitcoinUser", "00-01").then(async function(
- user_data
- ) {
+ const user_data = await readDB("localbitcoinUser", "00-01");
if (
typeof user_data == "object" &&
typeof localbitcoinplusplus.wallets
- .MY_SUPERNODE_PRIVATE_KEY == "string" &&
+ .MY_SUPERNODE_PRIVATE_KEY == "string" &&
localbitcoinplusplus.wallets
- .MY_SUPERNODE_PRIVATE_KEY.length > 0
+ .MY_SUPERNODE_PRIVATE_KEY.length > 0
) {
// Delete orders
try {
- _removeinDB("buyOrders", buyPipeObj.id);
- _removeinDB("sellOrders", sellPipeObj.id);
+ await _removeinDB("buyOrders", buyPipeObj.id);
+ await _removeinDB("sellOrders", sellPipeObj.id);
} catch (error) {
- callback(false);
- showMessage(
- `WARNING: Failed to delete respective buy and sell orders in an operation.`
- );
- throw new Error(error);
+ console.error(`WARNING: Failed to delete respective buy
+ and sell orders in an operation:
+ ${error} `);
+ return false;
}
// 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(
"cash_balances",
@@ -20570,34 +20539,37 @@
buyPipeObj.trader_flo_address
);
let sellerCashResponseObjectPromise = _updateinDB(
- "cash_balances",
- sellerCashResponseObject,
- sellPipeObj.trader_flo_address
+ "cash_balances",
+ sellerCashResponseObject,
+ sellPipeObj.trader_flo_address
);
let buyerBTCResponseObjectPromise = _updateinDB(
- "crypto_balances",
- buyerBTCResponseObject,
- buyPipeObj.trader_flo_address
+ "crypto_balances",
+ buyerBTCResponseObject,
+ buyPipeObj.trader_flo_address
);
let sellerBTCResponseObjectPromise = _updateinDB(
- "crypto_balances",
- sellerBTCResponseObject,
- sellPipeObj.trader_flo_address
+ "crypto_balances",
+ sellerBTCResponseObject,
+ sellPipeObj.trader_flo_address
);
const balanceUpdatePromises = await Promise.all([
- buyerCashResponseObjectPromise,
- sellerCashResponseObjectPromise,
- buyerBTCResponseObjectPromise,
+ buyerCashResponseObjectPromise,
+ sellerCashResponseObjectPromise,
+ buyerBTCResponseObjectPromise,
sellerBTCResponseObjectPromise
- ]);
+ ]).catch(error=>{
+ console.error(error);
+ return false;
+ });
// Prepare response
let trade_infos = {
- buy_order_id: buyPipeObj.id,
- sell_order_id: sellPipeObj.id,
- buyer_flo_id: buyPipeObj.trader_flo_address,
- seller_flo_id: sellPipeObj.trader_flo_address
+ buy_order_id: buyPipeObj.id,
+ sell_order_id: sellPipeObj.id,
+ buyer_flo_id: buyPipeObj.trader_flo_address,
+ seller_flo_id: sellPipeObj.trader_flo_address
};
let trade_infos_str = JSON.stringify(trade_infos);
@@ -20620,42 +20592,36 @@
// Signing of the data by Supernode
let signed_data = RM_WALLET.sign(
- hashed_data,
- localbitcoinplusplus.wallets
- .MY_SUPERNODE_PRIVATE_KEY
+ hashed_data,
+ localbitcoinplusplus.wallets
+ .MY_SUPERNODE_PRIVATE_KEY
);
localbitcoinplusplus.kademlia
- .determineClosestSupernode(
- buyPipeObj.trader_flo_address
- )
- .then(getPrimarySuObj => {
- let response_for_client = {
- trade_infos: trade_infos,
- buyer_cash_data: balanceUpdatePromises[0],
- seller_cash_data: balanceUpdatePromises[1],
- buyer_btc_data: balanceUpdatePromises[2],
- seller_btc_data: balanceUpdatePromises[3],
- data_hash: hashed_data,
- supernode_sign: signed_data,
- supernodePubKey:
- user_data.myLocalFLOPublicKey,
- trader_flo_address:
- getPrimarySuObj[0].data.id
- };
- callback(response_for_client);
- return true;
- });
- }
- });
- });
- });
- }
- }
- });
- }
- });
- callback(false);
+ .determineClosestSupernode(
+ buyPipeObj.trader_flo_address
+ )
+ .then(getPrimarySuObj => {
+ let response_for_client = {
+ trade_infos: trade_infos,
+ buyer_cash_data: balanceUpdatePromises[0],
+ seller_cash_data: balanceUpdatePromises[1],
+ buyer_btc_data: balanceUpdatePromises[2],
+ seller_btc_data: balanceUpdatePromises[3],
+ data_hash: hashed_data,
+ supernode_sign: signed_data,
+ supernodePubKey:
+ user_data.myLocalFLOPublicKey,
+ trader_flo_address:
+ getPrimarySuObj[0].data.id
+ };
+ return response_for_client;
+ });
+ }
+
+ }
+ } else return false;
+ } else return false;
}
},
cancelTrade(trade_id, trader_flo_address, trade_type) {
@@ -29130,10 +29096,10 @@
};
this.request.onsuccess = function(event) {
- if(!exception_datastores.includes(tablename)) {
- if(!verifyDBData(parent_request.result)) return resolve();
- }
if (parent_request.result) {
+ if(!exception_datastores.includes(tablename)) {
+ if(!verifyDBData(parent_request.result)) return resolve();
+ }
if (filter_deletables == true) {
if (
typeof parent_request.result.is_deletable == "undefined"