modified code in buy, sell and launchTrade due to dbHash logic

This commit is contained in:
Abhishek Sinha 2020-03-31 19:52:23 +05:30
parent 78321e0079
commit 7a9204d308

View File

@ -519,7 +519,7 @@
.sidenav {
position: fixed;
z-index: 1;
z-index: 2;
top: 20px;
left: 10px;
background: #eee;
@ -15541,7 +15541,9 @@
"sellOrders"
];
localbitcoinplusplus.actions
.get_sharable_db_data_for_single_user(tableArray)
.get_sharable_db_data_for_single_user(
params.trader_flo_address,
tableArray)
.then(function(su_db_data) {
if (typeof su_db_data == "object") {
su_db_data.trader_flo_address =
@ -15673,12 +15675,13 @@
trade_margin.remaining_fiat_credit > 0 &&
trade_margin.remaining_fiat_credit >= params.buy_price
) {
request.params.receiver_flo_address = params.trader_flo_address;
request.response = RM_TRADE.trade_buy.call(
this,
...request.params,
function(supernode_signed_res) {
supernode_signed_res.receiver_flo_address =
params.trader_flo_address;
// supernode_signed_res.receiver_flo_address =
// params.trader_flo_address;
if (typeof supernode_signed_res == "object") {
RM_RPC.send_rpc
.call(
@ -15745,14 +15748,14 @@
trade_margin.remaining_crypto_credit > 0 &&
trade_margin.remaining_crypto_credit >= eqCrypto
) {
request.params.receiver_flo_address = params.trader_flo_address;
request.response = RM_TRADE.trade_sell.call(
this,
...request.params,
function(supernode_signed_res) {
if (typeof supernode_signed_res == "object") {
supernode_signed_res.receiver_flo_address =
params.trader_flo_address;
// supernode_signed_res.receiver_flo_address =
// params.trader_flo_address;
RM_RPC.send_rpc
.call(
this,
@ -16622,6 +16625,46 @@
);
break;
case "cancel_trade":
RM_RPC.filter_legit_requests(
params.trader_flo_address,
async function(is_valid_request) {
if (is_valid_request !== true) return false;
let cancel_request = params;
if (cancel_request.job == "cancel_trade_request") {
tradeDB =
cancel_request.trade_type == "buy"
? "buyOrders"
: "sellOrders";
if (
RM_WALLET.verify(
cancel_request.trade_id,
cancel_request.signed_trade_id,
res_obj.nodePubKey
)
) {
removeinDB(tradeDB, cancel_request.trade_id).then(
id => {
msg_response = {
user_flo_addr: cancel_request.trader_flo_address,
msg: `Order id ${cancel_request.trade_id} is deleted.`
}
reactor.dispatchEvent('message_for_user', msg_response);
}
);
} else {
err_response = {
user_flo_addr: cancel_request.trader_flo_address,
msg: `Failed to verify order for order id ${cancel_request.trade_id}`
}
reactor.dispatchEvent('message_for_user', err_response);
}
}
});
break;
case "retrieve_shamirs_secret_btc_pvtkey":
RM_RPC.filter_legit_requests(
params.trader_flo_address,
@ -17162,6 +17205,7 @@
localbitcoinplusplus.actions
.get_sharable_db_data_for_single_user(
params.trader_flo_address,
tableArray,
primarySupernodeOfThisUser
)
@ -17298,12 +17342,14 @@
trade_margin.remaining_fiat_credit > 0 &&
trade_margin.remaining_fiat_credit >= params.buy_price
) {
request.params.receiver_flo_address = params.trader_flo_address;
request.response = RM_TRADE.trade_buy.call(
this,
...request.params,
function(supernode_signed_res) {
supernode_signed_res.receiver_flo_address =
params.trader_flo_address;
// supernode_signed_res.receiver_flo_address =
// params.trader_flo_address;
if (typeof supernode_signed_res == "object") {
RM_RPC.send_rpc
.call(
@ -17379,13 +17425,14 @@
trade_margin.remaining_crypto_credit > 0 &&
trade_margin.remaining_crypto_credit >= eqCrypto
) {
request.params.receiver_flo_address = params.trader_flo_address;
request.response = RM_TRADE.trade_sell.call(
this,
...request.params,
function(supernode_signed_res) {
if (typeof supernode_signed_res == "object") {
supernode_signed_res.receiver_flo_address =
params.trader_flo_address;
// supernode_signed_res.receiver_flo_address =
// params.trader_flo_address;
RM_RPC.send_rpc
.call(
this,
@ -18274,6 +18321,82 @@
);
break;
case "cancel_trade":
RM_RPC.filter_legit_backup_requests(
params.trader_flo_address,
async function (is_valid_request) {
if (is_valid_request !== true) return false;
let cancel_request = params;
if (cancel_request.job == "cancel_trade_request") {
if (
typeof cancel_request.trader_flo_address != "string"
)
return;
localbitcoinplusplus.kademlia
.determineClosestSupernode(
cancel_request.trader_flo_address
)
.then(my_closest_su_list => {
const primarySupernodeOfThisUser =
my_closest_su_list[0].data.id;
const backup_server_db_instance =
localbitcoinplusplus.newBackupDatabase.db[
primarySupernodeOfThisUser
];
if (typeof backup_server_db_instance !== "object") {
let backup_db_error_msg = `WARNING: Unknown DB instance. DB Backup failed.`;
showMessage(backup_db_error_msg);
throw new Error(backup_db_error_msg);
}
tradeDB =
cancel_request.trade_type == "buy"
? "buyOrders"
: "sellOrders";
if (
RM_WALLET.verify(
cancel_request.trade_id,
cancel_request.signed_trade_id,
nodePubKey.trader_flo_pubKey
)
) {
backup_server_db_instance
.backup_removeinDB(
tradeDB,
cancel_request.trade_id
)
.then(id =>
{
err_response = {
user_flo_addr: cancel_request.trader_flo_address,
msg: `Order Id ${id} deleted.`
}
reactor.dispatchEvent('message_for_user', err_response);
}
);
} else {
err_response = {
user_flo_addr: cancel_request.trader_flo_address,
msg: `Failed to verify order for order id ${cancel_request.trade_id}`
}
reactor.dispatchEvent('message_for_user', err_response);
}
});
} else {
err_response = {
user_flo_addr: params.trader_flo_address,
msg: `Failed to cancel order for order id ${cancel_request.trade_id}`
}
reactor.dispatchEvent('message_for_user', err_response);
}
});
break;
case "retrieve_shamirs_secret_btc_pvtkey":
RM_RPC.filter_legit_backup_requests(
params.trader_flo_address,
@ -20234,297 +20357,306 @@
}
},
launchTrade(buyPipeObj, sellPipeObj, callback, backup_db = "") {
let _addDB = addDB;
let _readDB = readDB;
let _readDBbyIndex = readDBbyIndex;
let _readAllDB = readAllDB;
let _updateinDB = updateinDB;
let _removeinDB = removeinDB;
let _removeByIndex = removeByIndex;
let _removeAllinDB = removeAllinDB;
if (typeof backup_db == "string" && backup_db.length > 0) {
let _addDB = addDB;
let _readDB = readDB;
let _readDBbyIndex = readDBbyIndex;
let _readAllDB = readAllDB;
let _updateinDB = updateinDB;
let _removeinDB = removeinDB;
let _removeByIndex = removeByIndex;
let _removeAllinDB = removeAllinDB;
if (typeof backup_db == "string" && backup_db.length > 0) {
if (
typeof localbitcoinplusplus.newBackupDatabase.db[backup_db] ==
"object"
typeof localbitcoinplusplus.newBackupDatabase.db[backup_db] ==
"object"
) {
const foreign_db =
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);
_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);
err_msg = `WARNING: Invalid Backup DB Instance Id: ${backup_db}.`;
showMessage(err_msg);
throw new Error(err_msg);
}
}
if (
}
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
buyPipeCashRes
) {
if (
if (
typeof buyPipeCashRes == "object" &&
typeof buyPipeCashRes.cash_balance == "number"
) {
) {
let buyer_cash_balance = parseFloat(
buyPipeCashRes.cash_balance
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.";
showMessage(err_msg);
throw new Error(err_msg);
err_msg = "Insufficient cash balance of buyer.";
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
buy_price_btc,
buyPipeObj.currency,
buyPipeObj.product
);
if (
!isNaN(eqBTCBuyer) &&
eqBTCBuyer != "" &&
eqBTCBuyer != undefined
!isNaN(eqBTCBuyer) &&
eqBTCBuyer != "" &&
eqBTCBuyer != undefined
) {
eqBTCBuyer = helper_functions.truncateDecimals(eqBTCBuyer);
eqBTCBuyer = helper_functions.truncateDecimals(eqBTCBuyer);
}
// Check seller's crypto balance
let seller_btc_id = `${sellPipeObj.trader_flo_address}_${sellPipeObj.product}`;
_readDB("crypto_balances", seller_btc_id).then(function(
sellPipeBTCRes
sellPipeBTCRes
) {
if (
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
sell_price_in_inr,
buyPipeObj.currency,
buyPipeObj.product
);
if (
!isNaN(eqBTCSeller) &&
eqBTCSeller != "" &&
eqBTCSeller != undefined
!isNaN(eqBTCSeller) &&
eqBTCSeller != "" &&
eqBTCSeller != undefined
) {
eqBTCSeller = helper_functions.truncateDecimals(eqBTCSeller);
if (seller_btc_balance < eqBTCSeller) {
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);
}
}
// 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(
// 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
) {
if (
typeof buyPipeBTCRes == "object" &&
typeof buyPipeBTCRes.crypto_balance == "number"
) {
buyPipeBTCRes.crypto_balance =
if (
typeof buyPipeBTCRes == "object" &&
typeof buyPipeBTCRes.crypto_balance == "number"
) {
buyPipeBTCRes.crypto_balance =
helper_functions.truncateDecimals(buyPipeBTCRes.crypto_balance) +
eqBTCBuyer;
buyerBTCResponseObject = buyPipeBTCRes;
buyerBTCResponseObject = buyPipeBTCRes;
} else {
// The user bought BTC for first time
buyerBTCResponseObject = {
// 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;
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
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
sellPipeCashRes
) {
if (
if (
typeof sellPipeCashRes == "object" &&
typeof sellPipeCashRes.cash_balance == "number" &&
!isNaN(sellPipeCashRes.cash_balance)
) {
) {
sellPipeCashRes.cash_balance =
parseFloat(sellPipeCashRes.cash_balance) +
sell_price_in_inr;
parseFloat(sellPipeCashRes.cash_balance) +
sell_price_in_inr;
sellerCashResponseObject = sellPipeCashRes;
} else {
} 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:
id: seller_cash_id,
trader_flo_address:
sellPipeObj.trader_flo_address,
currency: buyPipeObj.currency,
cash_balance: sell_price_in_inr
currency: buyPipeObj.currency,
cash_balance: sell_price_in_inr
};
}
}
// Decrease seller BTC balance
let new_seller_btc_balance =
// Decrease seller BTC balance
let new_seller_btc_balance =
seller_btc_balance - eqBTCSeller;
new_seller_btc_balance = helper_functions.truncateDecimals(new_seller_btc_balance);
let sellerBTCResponseObject = {
new_seller_btc_balance = helper_functions.truncateDecimals(new_seller_btc_balance);
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
};
};
// supernode data query
readDB("localbitcoinUser", "00-01").then(function(
// supernode data query
readDB("localbitcoinUser", "00-01").then(async function(
user_data
) {
) {
if (
typeof user_data == "object" &&
typeof localbitcoinplusplus.wallets
typeof user_data == "object" &&
typeof localbitcoinplusplus.wallets
.MY_SUPERNODE_PRIVATE_KEY == "string" &&
localbitcoinplusplus.wallets
localbitcoinplusplus.wallets
.MY_SUPERNODE_PRIVATE_KEY.length > 0
) {
// Delete orders
try {
// Delete orders
try {
_removeinDB("buyOrders", buyPipeObj.id);
_removeinDB("sellOrders", sellPipeObj.id);
} catch (error) {
} catch (error) {
callback(false);
showMessage(
`WARNING: Failed to delete respective buy and sell orders in an operation.`
`WARNING: Failed to delete respective buy and sell orders in an operation.`
);
throw new Error(error);
}
}
// Update balances
try {
_updateinDB(
"cash_balances",
buyerCashResponseObject,
buyPipeObj.trader_flo_address
);
_updateinDB(
"cash_balances",
sellerCashResponseObject,
sellPipeObj.trader_flo_address
);
_updateinDB(
"crypto_balances",
buyerBTCResponseObject,
buyPipeObj.trader_flo_address
);
_updateinDB(
"crypto_balances",
sellerBTCResponseObject,
sellPipeObj.trader_flo_address
);
} catch (error) {
// Update balances
try {
} catch (error) {
showMessage(
`WARNING: Failed to update cash and crypto balances during launch trade operation.`
`WARNING: Failed to update cash and crypto balances during launch trade operation.`
);
callback(false);
throw new Error(error);
}
}
// Prepare response
let trade_infos = {
let buyerCashResponseObjectPromise = _updateinDB(
"cash_balances",
buyerCashResponseObject,
buyPipeObj.trader_flo_address
);
let sellerCashResponseObjectPromise = _updateinDB(
"cash_balances",
sellerCashResponseObject,
sellPipeObj.trader_flo_address
);
let buyerBTCResponseObjectPromise = _updateinDB(
"crypto_balances",
buyerBTCResponseObject,
buyPipeObj.trader_flo_address
);
let sellerBTCResponseObjectPromise = _updateinDB(
"crypto_balances",
sellerBTCResponseObject,
sellPipeObj.trader_flo_address
);
const balanceUpdatePromises = await Promise.all([
buyerCashResponseObjectPromise,
sellerCashResponseObjectPromise,
buyerBTCResponseObjectPromise,
sellerBTCResponseObjectPromise
]);
// 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
};
};
let trade_infos_str = JSON.stringify(trade_infos);
let buyerCashResponseObjectStr = JSON.stringify(
buyerCashResponseObject
);
let sellerCashResponseObjectStr = JSON.stringify(
sellerCashResponseObject
);
let buyerBTCResponseObjectStr = JSON.stringify(
buyerBTCResponseObject
);
let sellerBTCResponseObjectStr = JSON.stringify(
sellerBTCResponseObject
);
let trade_infos_str = JSON.stringify(trade_infos);
let buyerCashResponseObjectStr = JSON.stringify(
balanceUpdatePromises[0]
);
let sellerCashResponseObjectStr = JSON.stringify(
balanceUpdatePromises[1]
);
let buyerBTCResponseObjectStr = JSON.stringify(
balanceUpdatePromises[2]
);
let sellerBTCResponseObjectStr = JSON.stringify(
balanceUpdatePromises[3]
);
let res_str = `${trade_infos_str}${buyerCashResponseObjectStr}${sellerCashResponseObjectStr}${buyerBTCResponseObjectStr}${sellerBTCResponseObjectStr}`;
let res_str = `${trade_infos_str}${buyerCashResponseObjectStr}${sellerCashResponseObjectStr}${buyerBTCResponseObjectStr}${sellerBTCResponseObjectStr}`;
let hashed_data = Crypto.SHA256(res_str);
let hashed_data = Crypto.SHA256(res_str);
// Signing of the data by Supernode
let signed_data = RM_WALLET.sign(
// Signing of the data by Supernode
let signed_data = RM_WALLET.sign(
hashed_data,
localbitcoinplusplus.wallets
.MY_SUPERNODE_PRIVATE_KEY
);
.MY_SUPERNODE_PRIVATE_KEY
);
localbitcoinplusplus.kademlia
localbitcoinplusplus.kademlia
.determineClosestSupernode(
buyPipeObj.trader_flo_address
buyPipeObj.trader_flo_address
)
.then(getPrimarySuObj => {
let response_for_client = {
let response_for_client = {
trade_infos: trade_infos,
buyer_cash_data: buyerCashResponseObject,
seller_cash_data: sellerCashResponseObject,
buyer_btc_data: buyerBTCResponseObject,
seller_btc_data: sellerBTCResponseObject,
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,
user_data.myLocalFLOPublicKey,
trader_flo_address:
getPrimarySuObj[0].data.id
};
callback(response_for_client);
return true;
getPrimarySuObj[0].data.id
};
callback(response_for_client);
return true;
});
}
});
});
});
});
});
}
}
}
});
}
}
});
callback(false);
}
}
},
cancelTrade(trade_id, trader_flo_address, trade_type) {
if (typeof trade_id !== "string") {
@ -22129,41 +22261,10 @@
}
break;
case "cancel_trade":
if (
typeof res_obj.params == "object" &&
typeof res_obj.params[0] == "object"
) {
let cancel_request = res_obj.params[0];
if (cancel_request.job == "cancel_trade_request") {
tradeDB =
cancel_request.trade_type == "buy"
? "buyOrders"
: "sellOrders";
if (
RM_WALLET.verify(
cancel_request.trade_id,
cancel_request.signed_trade_id,
res_obj.nodePubKey
)
) {
removeinDB(tradeDB, cancel_request.trade_id).then(
id => {
msg_response = {
user_flo_addr: cancel_request.trader_flo_address,
msg: `Order id ${cancel_request.trade_id} is deleted.`
}
reactor.dispatchEvent('message_for_user', msg_response);
}
);
} else {
err_response = {
user_flo_addr: cancel_request.trader_flo_address,
msg: `Failed to verify order for order id ${cancel_request.trade_id}`
}
reactor.dispatchEvent('message_for_user', err_response);
}
}
}
response_from_sever = RM_RPC.receive_rpc_response.call(
this,
JSON.stringify(res_obj)
);
break;
case "trade_balance_updates":
if (
@ -24083,76 +24184,10 @@
}
break;
case "cancel_trade":
if (
typeof res_obj.params == "object" &&
typeof res_obj.params[0] == "object"
) {
let cancel_request = res_obj.params[0];
if (cancel_request.job == "cancel_trade_request") {
if (
typeof res_obj.params[0].trader_flo_address != "string"
)
return;
localbitcoinplusplus.kademlia
.determineClosestSupernode(
res_obj.params[0].trader_flo_address
)
.then(my_closest_su_list => {
const primarySupernodeOfThisUser =
my_closest_su_list[0].data.id;
const backup_server_db_instance =
localbitcoinplusplus.newBackupDatabase.db[
primarySupernodeOfThisUser
];
if (typeof backup_server_db_instance !== "object") {
let backup_db_error_msg = `WARNING: Unknown DB instance. DB Backup failed.`;
showMessage(backup_db_error_msg);
throw new Error(backup_db_error_msg);
}
tradeDB =
cancel_request.trade_type == "buy"
? "buyOrders"
: "sellOrders";
if (
RM_WALLET.verify(
cancel_request.trade_id,
cancel_request.signed_trade_id,
nodePubKey.trader_flo_pubKey
)
) {
backup_server_db_instance
.backup_removeinDB(
tradeDB,
cancel_request.trade_id
)
.then(id =>
{
err_response = {
user_flo_addr: cancel_request.trader_flo_address,
msg: `Order Id ${id} deleted.`
}
reactor.dispatchEvent('message_for_user', err_response);
}
);
} else {
err_response = {
user_flo_addr: cancel_request.trader_flo_address,
msg: `Failed to verify order for order id ${cancel_request.trade_id}`
}
reactor.dispatchEvent('message_for_user', err_response);
}
});
} else {
err_response = {
user_flo_addr: params.trader_flo_address,
msg: `Failed to cancel order for order id ${cancel_request.trade_id}`
}
reactor.dispatchEvent('message_for_user', err_response);
}
}
response_from_sever = RM_RPC.backup_receive_rpc_response.call(
this,
JSON.stringify(res_obj)
);
break;
case "trade_balance_updates":
if (
@ -26150,23 +26185,7 @@
tradeDB,
cancel_request.trade_id
)
.then(id =>
{
err_response = {
user_flo_addr: cancel_request.trader_flo_address,
msg: `Order Id ${id} is deleted.`
}
reactor.dispatchEvent('message_for_user', err_response);
}
);
} else {
err_response = {
user_flo_addr: cancel_request.trader_flo_address,
msg: `Failed to verify order for order id ${cancel_request.trade_id}`
}
reactor.dispatchEvent('message_for_user', err_response);
}
}
}
}
}
@ -28387,7 +28406,8 @@
}
};
const exception_datastores = ['localbitcoinUser', 'ipTable', 'kBucketStore', 'myClosestSupernodes'];
const exception_datastores = ['localbitcoinUser', 'ipTable', 'kBucketStore', 'myClosestSupernodes',
'my_supernode_private_key_chunks'];
function signDBData(objectdata) {
try {
@ -28725,18 +28745,40 @@
return new Error(error);
}
});
async function formatIDB() {
}
async function formatIDB() {
db.close();
for(su in localbitcoinplusplus.newBackupDatabase.db) {
localbitcoinplusplus.newBackupDatabase.db[su].db.close();
}
const dbs = await window.indexedDB.databases()
const dbs = await window.indexedDB.databases();
dbs.forEach(db => { window.indexedDB.deleteDatabase(db.name) })
}
}
async function clearAllDBData(dabse='') {
try {
let su_list = localbitcoinplusplus.master_configurations.supernodesPubKeys.map(m=>bitjs[localbitcoinplusplus.BASE_BLOCKCHAIN].pubkey2address(m));
for (const su of su_list) {
if(su===localbitcoinplusplus.wallets.my_local_flo_address) {
} else {
}
}
} catch(error) {
throw new Error(error)
}
}
async function clearDBData(dbName='') {
return new Promise((resolve, reject)=>{
});
}
</script>
<!-- Backup Indexed db Object -->
@ -30723,7 +30765,7 @@
const RM_RPC = new localbitcoinplusplus.rpc();
const updatedBTCBalanceObjectString = JSON.stringify(
updatedCryptobalances
updatedBTCBalanceObject
);
const updatedBTCBalanceObjectStringHash = Crypto.SHA256(
updatedBTCBalanceObjectString