diff --git a/supernode/index.html b/supernode/index.html
index 97d1f68..a14c3f3 100644
--- a/supernode/index.html
+++ b/supernode/index.html
@@ -10229,11 +10229,17 @@
return arr;
},
- getDBHash: async function(su="") {
+ getDBHash: async function(su=localbitcoinplusplus.wallets.my_local_flo_address) {
const tableArray = ["deposit", "withdraw_cash", "withdraw_btc", "cash_balances", "crypto_balances",
"buyOrders", "sellOrders", "system_btc_reserves_private_keys"];
- const dbDataOfSupernode = await localbitcoinplusplus.actions.get_sharable_db_data(tableArray, su);
+ let get_su = await localbitcoinplusplus.kademlia.determineClosestSupernode(su);
+
+ const supernode_flo_id = get_su[0].data.id;
+
+ const subjectDB = (supernode_flo_id==localbitcoinplusplus.wallets.my_local_flo_address) ? "":supernode_flo_id;
+
+ const dbDataOfSupernode = await localbitcoinplusplus.actions.get_sharable_db_data(tableArray, subjectDB);
if (typeof dbDataOfSupernode=="object" && Object.keys(dbDataOfSupernode).length>0) {
myArray = {};
@@ -10243,12 +10249,10 @@
const dbDataOfSupernodeStr = JSON.stringify(dbDataOfSupernode);
const dbDataOfSupernodeHash = Crypto.SHA256(dbDataOfSupernodeStr);
- let data_of = su.length>0 ? su:localbitcoinplusplus.wallets.my_local_flo_address;
-
- myArray["id"] = `SU_DB_${data_of}`;
+ myArray["id"] = `SU_DB_${subjectDB}`;
myArray["DBHash"] = dbDataOfSupernodeHash;
myArray["trader_flo_address"] = localbitcoinplusplus.wallets.my_local_flo_address;
- myArray["data_of"] = data_of;
+ myArray["data_of"] = subjectDB;
myArray["timestamp"] = + new Date();
const RM_RPC = new localbitcoinplusplus.rpc;
@@ -10366,7 +10370,16 @@
const promise2 = removeAllinDB('my_supernode_private_key_chunks');
- return Promise.all([promise1, promise2]).then(() => true).catch(e => false);
+ return Promise.all([promise1, promise2])
+ .then(() => {
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
+ return true;
+ })
+ .catch(e => false);
},
// https://stackoverflow.com/a/39538518/5348972
@@ -10582,7 +10595,14 @@
},
updateClosestSupernodeSeeds: function(flo_addr) {
return new Promise(async (resolve, reject) => {
- await removeAllinDB('myClosestSupernodes');
+ await removeAllinDB('myClosestSupernodes')
+ .then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
+ });
let nearestSupernodeAddresslist = await localbitcoinplusplus.kademlia.addClosestSupernodeInDB(flo_addr);
nearestSupernodeAddresslist.map((nearestSupernodeAddress, index)=>{
updateinDB('myClosestSupernodes', {
@@ -12511,6 +12531,11 @@
deposit_arr
.trader_flo_address
);
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
}
}
);
@@ -13810,9 +13835,14 @@
backup_server_db_instance.backup_removeinDB
(
"deposit",
- deposit_arr
- .trader_flo_address
- );
+ deposit_arr.trader_flo_address
+ ).then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash(deposit_arr.trader_flo_address);
+ }
+ });
}
}
);
@@ -14718,11 +14748,25 @@
_removeinDB(
"buyOrders",
buyPipeObj
- .id);
+ .id)
+ .then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash(buyPipeObj.trader_flo_address);
+ }
+ });
_removeinDB(
"sellOrders",
sellPipeObj
- .id);
+ .id)
+ .then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash(sellPipeObj.trader_flo_address);
+ }
+ });
} catch (error) {
callback(false);
showMessage(`WARNING: Failed to delete respective buy and sell orders in an operation.`);
@@ -15800,6 +15844,11 @@
await addDB(resdbdata, obj[prop]);
}
}
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
}
}
@@ -15877,7 +15926,14 @@
.verify(cancel_request.trade_id, cancel_request.signed_trade_id,
trader_data.trader_flo_pubKey)) {
removeinDB(tradeDB, cancel_request.trade_id)
- .then((id) => showMessage(`Trade Id ${id} deleted.`));
+ .then((id) => {
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
+ showMessage(`Trade Id ${id} deleted.`);
+ });
} else {
showMessage(
`Failed to verify trade for trade id ${cancel_request.trade_id}`
@@ -15910,8 +15966,20 @@
trade_balance_res.supernode_sign, trade_balance_res.supernodePubKey)) {
// Delete orders in clients DB
try {
- removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id);
- removeinDB("sellOrders", trade_balance_res.trade_infos.sell_order_id);
+ removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id).then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
+ });
+ removeinDB("sellOrders", trade_balance_res.trade_infos.sell_order_id).then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
+ });
} catch (error) {
callback(false);
throw new Error(error);
@@ -16106,9 +16174,21 @@
removeByIndex('deposit',
'trader_flo_address',
depositor_cash_data.trader_flo_address
- );
- removeinDB('withdraw_cash',
- withdraw_data.id);
+ ).then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
+ });
+ removeinDB('withdraw_cash', withdraw_data.id)
+ .then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
+ });
let update_cash_balance_obj = {
depositor_cash_data: depositor_cash_data,
@@ -16232,8 +16312,20 @@
updateinDB('cash_balances', withdraw_success_response.depositor_cash_data);
updateinDB('cash_balances', withdraw_success_response.withdrawer_cash_data);
removeByIndex('deposit', 'trader_flo_address', withdraw_success_response.depositor_cash_data
- .trader_flo_address);
- removeinDB('withdraw_cash', withdraw_success_response.withdraw_id);
+ .trader_flo_address).then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
+ });
+ removeinDB('withdraw_cash', withdraw_success_response.withdraw_id).then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
+ });
return true;
}
return false;
@@ -16576,6 +16668,11 @@
}
}
}
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash(su_db_data.trader_flo_address);
+ }
}
} catch (error) {
@@ -16702,6 +16799,11 @@
});
}
}
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
}
}
@@ -16792,6 +16894,11 @@
showMessage(`INFO: "${resdbdata}" datastore syncing is complete.`);
});
}
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash(su_db_data.trader_flo_address);
+ }
}
}
}
@@ -17101,6 +17208,11 @@
await addDB(resdbdata, obj[prop]);
}
}
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
}
}
@@ -17196,7 +17308,14 @@
.verify(cancel_request.trade_id, cancel_request.signed_trade_id,
trader_data.trader_flo_pubKey)) {
backup_server_db_instance.backup_removeinDB(tradeDB, cancel_request.trade_id)
- .then((id) => showMessage(`Trade Id ${id} deleted.`));
+ .then((id) => {
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash(trader_data.trader_flo_address);
+ }
+ showMessage(`Trade Id ${id} deleted.`);
+ });
} else {
showMessage(
`Failed to verify trade for trade id ${cancel_request.trade_id}`
@@ -17231,8 +17350,22 @@
// Delete orders in clients DB
try {
- removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id);
- removeinDB("sellOrders", trade_balance_res.trade_infos.sell_order_id);
+ removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id)
+ .then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
+ });
+ removeinDB("sellOrders", trade_balance_res.trade_infos.sell_order_id)
+ .then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
+ });
} catch (error) {
callback(false);
throw new Error(error);
@@ -17504,9 +17637,21 @@
backup_server_db_instance.backup_removeByIndex('deposit',
'trader_flo_address',
depositor_cash_data.trader_flo_address
- );
- backup_server_db_instance.backup_removeinDB('withdraw_cash',
- withdraw_data.id);
+ ).then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash(depositor_cash_data.trader_flo_address);
+ }
+ });
+ backup_server_db_instance.backup_removeinDB('withdraw_cash', withdraw_data.id)
+ .then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash(withdraw_data.trader_flo_address);
+ }
+ });
let update_cash_balance_obj = {
depositor_cash_data: depositor_cash_data,
@@ -17638,8 +17783,21 @@
updateinDB('cash_balances', withdraw_success_response.depositor_cash_data);
updateinDB('cash_balances', withdraw_success_response.withdrawer_cash_data);
removeByIndex('deposit', 'trader_flo_address', withdraw_success_response.depositor_cash_data
- .trader_flo_address);
- removeinDB('withdraw_cash', withdraw_success_response.withdraw_id);
+ .trader_flo_address).then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
+ });
+ removeinDB('withdraw_cash', withdraw_success_response.withdraw_id)
+ .then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
+ });
return true;
}
return false;
@@ -18024,6 +18182,11 @@
await BACKUP_DB.backup_addDB(resdbdata, obj[prop]);
}
}
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash(su_db_data.trader_flo_address);
+ }
}
}
@@ -18422,6 +18585,11 @@
await addDB(resdbdata, obj[prop]);
}
}
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
}
}
@@ -18599,7 +18767,14 @@
.verify(cancel_request.trade_id, cancel_request.signed_trade_id,
trader_data.trader_flo_pubKey)) {
backup_server_db_instance.backup_removeinDB(tradeDB, cancel_request.trade_id)
- .then((id) => showMessage(`Trade Id ${id} deleted.`));
+ .then((id) => {
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash(cancel_request.trader_flo_address);
+ }
+ showMessage(`Trade Id ${id} deleted.`);
+ });
} else {
showMessage(
`Failed to verify trade for trade id ${cancel_request.trade_id}`
@@ -18651,8 +18826,22 @@
// Delete orders in clients DB
try {
- backup_server_db_instance.backup_removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id);
- backup_server_db_instance.backup_removeinDB("sellOrders", trade_balance_res.trade_infos.sell_order_id);
+ backup_server_db_instance.backup_removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id)
+ .then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash(trade_balance_res.trade_infos.buyer_flo_id);
+ }
+ });
+ backup_server_db_instance.backup_removeinDB("sellOrders", trade_balance_res.trade_infos.sell_order_id)
+ .then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash(trade_balance_res.trade_infos.seller_flo_id);
+ }
+ });
} catch (error) {
callback(false);
throw new Error(error);
@@ -18755,8 +18944,21 @@
backup_server_db_instance.backup_updateinDB('cash_balances', withdraw_success_response.depositor_cash_data);
backup_server_db_instance.backup_updateinDB('cash_balances', withdraw_success_response.withdrawer_cash_data);
backup_server_db_instance.backup_removeByIndex('deposit', 'trader_flo_address', withdraw_success_response.depositor_cash_data
- .trader_flo_address);
- backup_server_db_instance.backup_removeinDB('withdraw_cash', withdraw_success_response.withdraw_id);
+ .trader_flo_address).then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash(withdraw_success_response.depositor_cash_data.trader_flo_address);
+ }
+ });
+ backup_server_db_instance.backup_removeinDB('withdraw_cash', withdraw_success_response.withdraw_id)
+ .then(()=>{
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash(withdraw_success_response.trader_flo_address);
+ }
+ });
return true;
}
return false;
@@ -19094,27 +19296,27 @@
showMessage(backup_db_error_msg);
throw new Error(backup_db_error_msg);
};
- });
- let updateUserDepositsResponseString = JSON.stringify(
- updateUserDepositsResponseObject.updatedTraderDepositObject);
- let updateUserDepositsResponseStringHash = Crypto.SHA256(updateUserDepositsResponseString);
- let isBalanceLegit = RM_WALLET.verify(updateUserDepositsResponseStringHash,
- updateUserDepositsResponseObject.updatedDepositsObjectSign,
- res_obj.nodePubKey
- );
- if (isBalanceLegit) {
- backup_server_db_instance.backup_updateinDB("deposits",
- updateUserDepositsResponseObject.updatedTraderDepositObject);
- if (localbitcoinplusplus.wallets.my_local_flo_address ==
- updateUserDepositsResponseObject.trader_flo_address) {
- displayBalances(updateUserDepositsResponseObject.trader_flo_address);
- showMessage(`INFO: Your balance is updated.`);
- }
- return true;
- } else {
- showMessage(`WARNING: Failed to update balance in your DB. Please refresh.`);
- }
+ let updateUserDepositsResponseString = JSON.stringify(
+ updateUserDepositsResponseObject.updatedTraderDepositObject);
+ let updateUserDepositsResponseStringHash = Crypto.SHA256(updateUserDepositsResponseString);
+ let isBalanceLegit = RM_WALLET.verify(updateUserDepositsResponseStringHash,
+ updateUserDepositsResponseObject.updatedDepositsObjectSign,
+ res_obj.nodePubKey
+ );
+ if (isBalanceLegit) {
+ backup_server_db_instance.backup_updateinDB("deposits",
+ updateUserDepositsResponseObject.updatedTraderDepositObject);
+ if (localbitcoinplusplus.wallets.my_local_flo_address ==
+ updateUserDepositsResponseObject.trader_flo_address) {
+ displayBalances(updateUserDepositsResponseObject.trader_flo_address);
+ showMessage(`INFO: Your balance is updated.`);
+ }
+ return true;
+ } else {
+ showMessage(`WARNING: Failed to update balance in your DB. Please refresh.`);
+ }
+ });
}
break;
@@ -19123,38 +19325,38 @@
.includes(res_obj.nodePubKey)) {
let updateUserReservesResponseObject = res_obj.params[0];
-
+ let backup_server_db_instance = "";
if(typeof res_obj.params[0].trader_flo_address !="string") return;
- localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj.params[0].trader_flo_address)
+ 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];
+ 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);
};
+
+ let updateUserReservesResponseString = JSON.stringify(
+ updateUserReservesResponseObject.updatedReservesObject);
+ let updateUserReservesResponseStringHash = Crypto.SHA256(updateUserReservesResponseString);
+ let isBalanceLegit = RM_WALLET.verify(updateUserReservesResponseStringHash,
+ updateUserReservesResponseObject.updatedBTCReservesObjectSign,
+ res_obj.nodePubKey
+ );
+ if (isBalanceLegit) {
+ backup_server_db_instance.backup_updateinDB("system_btc_reserves_private_keys", updateUserReservesResponseObject.updatedReservesObject);
+ if (localbitcoinplusplus.wallets.my_local_flo_address ==
+ updateUserReservesResponseObject.trader_flo_address) {
+ displayBalances(updateUserReservesResponseObject.trader_flo_address);
+ showMessage(`INFO: Your balance is updated.`);
+ }
+ return true;
+ } else {
+ showMessage(`WARNING: Failed to update balance in your DB. Please refresh.`);
+ }
});
-
- let updateUserReservesResponseString = JSON.stringify(
- updateUserReservesResponseObject.updatedReservesObject);
- let updateUserReservesResponseStringHash = Crypto.SHA256(updateUserReservesResponseString);
- let isBalanceLegit = RM_WALLET.verify(updateUserReservesResponseStringHash,
- updateUserReservesResponseObject.updatedBTCReservesObjectSign,
- res_obj.nodePubKey
- );
- if (isBalanceLegit) {
- backup_server_db_instance.backup_updateinDB("system_btc_reserves_private_keys", updateUserReservesResponseObject.updatedReservesObject);
- if (localbitcoinplusplus.wallets.my_local_flo_address ==
- updateUserReservesResponseObject.trader_flo_address) {
- displayBalances(updateUserReservesResponseObject.trader_flo_address);
- showMessage(`INFO: Your balance is updated.`);
- }
- return true;
- } else {
- showMessage(`WARNING: Failed to update balance in your DB. Please refresh.`);
- }
}
break;
@@ -19211,6 +19413,11 @@
showMessage(`INFO: "${resdbdata}" datastore syncing is complete.`);
});
}
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash(su_db_data.trader_flo_address);
+ }
}
}
}
@@ -19223,6 +19430,41 @@
}
break;
+ case "hash_of_a_supernode_db_response":
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(res_obj.nodePubKey)) {
+ const response_object = res_obj.params[0];
+ if(typeof response_object.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"
+ || backup_server_db_instance==localbitcoinplusplus.wallets.my_local_flo_address) {
+ let backup_db_error_msg = `WARNING: Unknown DB instance. DB Backup failed.`;
+ showMessage(backup_db_error_msg);
+ throw new Error(backup_db_error_msg);
+ };
+
+ backup_server_db_instance.backup_readDB('supernodesDbHash', response_object.id)
+ .then(old_db_hash_obj=>{
+ if(typeof old_db_hash_obj=="object") {
+ if((old_db_hash_obj.vectorClock>=response_object.vectorClock)
+ || (old_db_hash_obj.timestamp>=response_object.timestamp)) return;
+ }
+ backup_server_db_instance.backup_updateinDB('supernodesDbHash', response_object)
+ .then(()=>showMessage(`INFO: Datastore "supernodesDbHash" updated
+ with hash ${response_object.DBHash} on ${response_object.timestamp}.`));
+ });
+
+ });
+
+ }
+
+ break;
+
default:
break;
}
@@ -19496,19 +19738,9 @@
temporary_ip: null
}
- const closestSupernodesTable = {
- id: null,
- ip: null,
- is_live: null,
- port: null,
- timestamp: null,
- trader_flo_address: null,
- vectorClock: null
- }
-
var db;
const DBName = "localbitcoinDB";
- const request = window.indexedDB.open(DBName, 1);
+ const request = window.indexedDB.open(DBName, 2);
request.onerror = function (event) {
//https://stackoverflow.com/questions/13972385/invalidstateerror-while-opening-indexeddb-in-firefox
@@ -19691,14 +19923,6 @@
unique: false
});
}
- if (!db.objectStoreNames.contains('closestSupernodesTable')) {
- var objectStore = db.createObjectStore("closestSupernodesTable", {
- keyPath: 'id'
- });
- objectStore.createIndex('trader_flo_address', 'trader_flo_address', {
- unique: false
- });
- }
if (!db.objectStoreNames.contains('supernodesDbHash')) {
var objectStore = db.createObjectStore("supernodesDbHash", {
keyPath: 'id'
@@ -19782,6 +20006,11 @@
await store.add(dbObject);
await request.complete;
console.info("Data added in " + tablename);
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
return dbObject;
} catch (error) {
return new Error(error);
@@ -19814,20 +20043,22 @@
Obj.vectorClock = 1;
await store.put(Obj);
await request.complete;
- return Obj;
- }
- else if (myRecord.vectorClock+1 < Obj.vectorClock) {
+ } else if (myRecord.vectorClock+1 < Obj.vectorClock) {
await store.put(Obj);
await request.complete;
- return Obj;
}
}
} else {
await store.put(Obj);
await request.complete;
- return Obj;
}
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ localbitcoinplusplus.actions.getDBHash();
+ }
+ return Obj;
} catch (error) {
return new Error(error);
@@ -20144,6 +20375,13 @@
await store.add(dbObject);
await this.request.complete;
console.info("Data added in " + tablename);
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ if (typeof dbObject.trader_flo_address=="string") {
+ localbitcoinplusplus.actions.getDBHash(dbObject.trader_flo_address);
+ }
+ }
return dbObject;
} catch (error) {
return new Error(error);
@@ -20178,20 +20416,35 @@
Obj.vectorClock = 1;
await store.put(Obj);
await that.request.complete;
- resolve(Obj);
- return;
}
else if (myRecord.vectorClock+1 < Obj.vectorClock) {
await store.put(Obj);
await that.request.complete;
- resolve(Obj);
}
});
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ if (typeof dbObject.trader_flo_address=="string") {
+ localbitcoinplusplus.actions.getDBHash(dbObject.trader_flo_address);
+ }
+ }
+ resolve(Obj);
+ return;
}
} else {
await store.put(Obj);
await that.request.complete;
+
+ // Update the DB Hash and inform rest
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ if (typeof dbObject.trader_flo_address=="string") {
+ localbitcoinplusplus.actions.getDBHash(dbObject.trader_flo_address);
+ }
+ }
+
return Obj;
}
@@ -20231,21 +20484,21 @@
request.onerror = function (e) {
reject(e);
}
- })
+ });
},
async backup_removeAllinDB(tablename) {
- try {
- this.request = this.db.transaction([tablename], "readwrite")
- var objectStore = this.request.objectStore(tablename);
- var objectStoreRequest = await objectStore.clear();
- await this.request.complete;
- console.info("All the data entry has been removed from your database " + tablename);
- return tablename;
- } catch (error) {
- return new Error(error);
- }
+ try {
+ this.request = this.db.transaction([tablename], "readwrite")
+ var objectStore = this.request.objectStore(tablename);
+ var objectStoreRequest = await objectStore.clear();
+ await this.request.complete;
+ console.info("All the data entry has been removed from your database " + tablename);
+ return tablename;
+ } catch (error) {
+ return new Error(error);
}
+ }
}