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 { .sidenav {
position: fixed; position: fixed;
z-index: 1; z-index: 2;
top: 20px; top: 20px;
left: 10px; left: 10px;
background: #eee; background: #eee;
@ -15541,7 +15541,9 @@
"sellOrders" "sellOrders"
]; ];
localbitcoinplusplus.actions 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) { .then(function(su_db_data) {
if (typeof su_db_data == "object") { if (typeof su_db_data == "object") {
su_db_data.trader_flo_address = su_db_data.trader_flo_address =
@ -15673,12 +15675,13 @@
trade_margin.remaining_fiat_credit > 0 && trade_margin.remaining_fiat_credit > 0 &&
trade_margin.remaining_fiat_credit >= params.buy_price trade_margin.remaining_fiat_credit >= params.buy_price
) { ) {
request.params.receiver_flo_address = params.trader_flo_address;
request.response = RM_TRADE.trade_buy.call( request.response = RM_TRADE.trade_buy.call(
this, this,
...request.params, ...request.params,
function(supernode_signed_res) { function(supernode_signed_res) {
supernode_signed_res.receiver_flo_address = // supernode_signed_res.receiver_flo_address =
params.trader_flo_address; // params.trader_flo_address;
if (typeof supernode_signed_res == "object") { if (typeof supernode_signed_res == "object") {
RM_RPC.send_rpc RM_RPC.send_rpc
.call( .call(
@ -15745,14 +15748,14 @@
trade_margin.remaining_crypto_credit > 0 && trade_margin.remaining_crypto_credit > 0 &&
trade_margin.remaining_crypto_credit >= eqCrypto trade_margin.remaining_crypto_credit >= eqCrypto
) { ) {
request.params.receiver_flo_address = params.trader_flo_address;
request.response = RM_TRADE.trade_sell.call( request.response = RM_TRADE.trade_sell.call(
this, this,
...request.params, ...request.params,
function(supernode_signed_res) { function(supernode_signed_res) {
if (typeof supernode_signed_res == "object") { if (typeof supernode_signed_res == "object") {
supernode_signed_res.receiver_flo_address = // supernode_signed_res.receiver_flo_address =
params.trader_flo_address; // params.trader_flo_address;
RM_RPC.send_rpc RM_RPC.send_rpc
.call( .call(
this, this,
@ -16622,6 +16625,46 @@
); );
break; 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": case "retrieve_shamirs_secret_btc_pvtkey":
RM_RPC.filter_legit_requests( RM_RPC.filter_legit_requests(
params.trader_flo_address, params.trader_flo_address,
@ -17162,6 +17205,7 @@
localbitcoinplusplus.actions localbitcoinplusplus.actions
.get_sharable_db_data_for_single_user( .get_sharable_db_data_for_single_user(
params.trader_flo_address,
tableArray, tableArray,
primarySupernodeOfThisUser primarySupernodeOfThisUser
) )
@ -17298,12 +17342,14 @@
trade_margin.remaining_fiat_credit > 0 && trade_margin.remaining_fiat_credit > 0 &&
trade_margin.remaining_fiat_credit >= params.buy_price trade_margin.remaining_fiat_credit >= params.buy_price
) { ) {
request.params.receiver_flo_address = params.trader_flo_address;
request.response = RM_TRADE.trade_buy.call( request.response = RM_TRADE.trade_buy.call(
this, this,
...request.params, ...request.params,
function(supernode_signed_res) { function(supernode_signed_res) {
supernode_signed_res.receiver_flo_address = // supernode_signed_res.receiver_flo_address =
params.trader_flo_address; // params.trader_flo_address;
if (typeof supernode_signed_res == "object") { if (typeof supernode_signed_res == "object") {
RM_RPC.send_rpc RM_RPC.send_rpc
.call( .call(
@ -17379,13 +17425,14 @@
trade_margin.remaining_crypto_credit > 0 && trade_margin.remaining_crypto_credit > 0 &&
trade_margin.remaining_crypto_credit >= eqCrypto trade_margin.remaining_crypto_credit >= eqCrypto
) { ) {
request.params.receiver_flo_address = params.trader_flo_address;
request.response = RM_TRADE.trade_sell.call( request.response = RM_TRADE.trade_sell.call(
this, this,
...request.params, ...request.params,
function(supernode_signed_res) { function(supernode_signed_res) {
if (typeof supernode_signed_res == "object") { if (typeof supernode_signed_res == "object") {
supernode_signed_res.receiver_flo_address = // supernode_signed_res.receiver_flo_address =
params.trader_flo_address; // params.trader_flo_address;
RM_RPC.send_rpc RM_RPC.send_rpc
.call( .call(
this, this,
@ -18274,6 +18321,82 @@
); );
break; 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": case "retrieve_shamirs_secret_btc_pvtkey":
RM_RPC.filter_legit_backup_requests( RM_RPC.filter_legit_backup_requests(
params.trader_flo_address, params.trader_flo_address,
@ -20408,7 +20531,7 @@
}; };
// supernode data query // supernode data query
readDB("localbitcoinUser", "00-01").then(function( readDB("localbitcoinUser", "00-01").then(async function(
user_data user_data
) { ) {
if ( if (
@ -20432,26 +20555,7 @@
// Update balances // Update balances
try { 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) { } catch (error) {
showMessage( 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.`
@ -20460,6 +20564,34 @@
throw new Error(error); throw new Error(error);
} }
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 // Prepare response
let trade_infos = { let trade_infos = {
buy_order_id: buyPipeObj.id, buy_order_id: buyPipeObj.id,
@ -20470,16 +20602,16 @@
let trade_infos_str = JSON.stringify(trade_infos); let trade_infos_str = JSON.stringify(trade_infos);
let buyerCashResponseObjectStr = JSON.stringify( let buyerCashResponseObjectStr = JSON.stringify(
buyerCashResponseObject balanceUpdatePromises[0]
); );
let sellerCashResponseObjectStr = JSON.stringify( let sellerCashResponseObjectStr = JSON.stringify(
sellerCashResponseObject balanceUpdatePromises[1]
); );
let buyerBTCResponseObjectStr = JSON.stringify( let buyerBTCResponseObjectStr = JSON.stringify(
buyerBTCResponseObject balanceUpdatePromises[2]
); );
let sellerBTCResponseObjectStr = JSON.stringify( let sellerBTCResponseObjectStr = JSON.stringify(
sellerBTCResponseObject balanceUpdatePromises[3]
); );
let res_str = `${trade_infos_str}${buyerCashResponseObjectStr}${sellerCashResponseObjectStr}${buyerBTCResponseObjectStr}${sellerBTCResponseObjectStr}`; let res_str = `${trade_infos_str}${buyerCashResponseObjectStr}${sellerCashResponseObjectStr}${buyerBTCResponseObjectStr}${sellerBTCResponseObjectStr}`;
@ -20500,10 +20632,10 @@
.then(getPrimarySuObj => { .then(getPrimarySuObj => {
let response_for_client = { let response_for_client = {
trade_infos: trade_infos, trade_infos: trade_infos,
buyer_cash_data: buyerCashResponseObject, buyer_cash_data: balanceUpdatePromises[0],
seller_cash_data: sellerCashResponseObject, seller_cash_data: balanceUpdatePromises[1],
buyer_btc_data: buyerBTCResponseObject, buyer_btc_data: balanceUpdatePromises[2],
seller_btc_data: sellerBTCResponseObject, seller_btc_data: balanceUpdatePromises[3],
data_hash: hashed_data, data_hash: hashed_data,
supernode_sign: signed_data, supernode_sign: signed_data,
supernodePubKey: supernodePubKey:
@ -22129,41 +22261,10 @@
} }
break; break;
case "cancel_trade": case "cancel_trade":
if ( response_from_sever = RM_RPC.receive_rpc_response.call(
typeof res_obj.params == "object" && this,
typeof res_obj.params[0] == "object" JSON.stringify(res_obj)
) {
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);
}
}
}
break; break;
case "trade_balance_updates": case "trade_balance_updates":
if ( if (
@ -24083,76 +24184,10 @@
} }
break; break;
case "cancel_trade": case "cancel_trade":
if ( response_from_sever = RM_RPC.backup_receive_rpc_response.call(
typeof res_obj.params == "object" && this,
typeof res_obj.params[0] == "object" JSON.stringify(res_obj)
) {
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);
}
}
break; break;
case "trade_balance_updates": case "trade_balance_updates":
if ( if (
@ -26150,23 +26185,7 @@
tradeDB, tradeDB,
cancel_request.trade_id 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) { function signDBData(objectdata) {
try { try {
@ -28725,6 +28745,7 @@
return new Error(error); return new Error(error);
} }
}); });
}
async function formatIDB() { async function formatIDB() {
db.close(); db.close();
@ -28733,9 +28754,30 @@
localbitcoinplusplus.newBackupDatabase.db[su].db.close(); 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) }) 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> </script>
@ -30723,7 +30765,7 @@
const RM_RPC = new localbitcoinplusplus.rpc(); const RM_RPC = new localbitcoinplusplus.rpc();
const updatedBTCBalanceObjectString = JSON.stringify( const updatedBTCBalanceObjectString = JSON.stringify(
updatedCryptobalances updatedBTCBalanceObject
); );
const updatedBTCBalanceObjectStringHash = Crypto.SHA256( const updatedBTCBalanceObjectStringHash = Crypto.SHA256(
updatedBTCBalanceObjectString updatedBTCBalanceObjectString