diff --git a/supernode/index.html b/supernode/index.html
index a7f0e9f..cd83868 100644
--- a/supernode/index.html
+++ b/supernode/index.html
@@ -12124,6 +12124,10 @@
.length >
0 && typeof params.currency == "string"
) {
+ const get_requester_primary_supernode = await localbitcoinplusplus.kademlia
+ .determineClosestSupernode(params.trader_flo_address);
+ const primarySupernodeForThisUser = get_requester_primary_supernode[0].data.id;
+
await RM_TRADE.resolve_current_crypto_price_in_fiat(params.product,
params.currency);
let trade_margin = await RM_TRADE.getAssetTradeAndWithdrawLimit(
@@ -12314,7 +12318,8 @@
"send_back_shamirs_secret_btc_pvtkey", {
retrieve_pvtkey_req_id: retrieve_pvtkey_req_id,
chunk_val: bpks,
- withdraw_id: vbl.withdraw_id
+ withdraw_id: vbl.withdraw_id,
+ db_inst: primarySupernodeForThisUser
}
).then(retrieve_pvtkey_req=>doSend(retrieve_pvtkey_req));
@@ -12479,6 +12484,9 @@
if (typeof rec_flo_id == "undefined" || rec_flo_id !==
localbitcoinplusplus.wallets.my_local_flo_address) return;
+ if(typeof params.db_inst !== "string") throw new Error(`ERROR: No DB instance provided.`);
+ if(params.db_inst!==localbitcoinplusplus.wallets.my_local_flo_address) return;
+
let btc_private_key_str = params.btc_private_key_array;
let retrieve_pvtkey_req_id = params.retrieve_pvtkey_req_id;
let withdraw_id = params.withdraw_id;
@@ -13703,6 +13711,9 @@
if (typeof rec_flo_id == "undefined" || rec_flo_id !==
localbitcoinplusplus.wallets.my_local_flo_address) return;
+ if(typeof params.db_inst !== "string") throw new Error(`ERROR: No DB instance provided.`);
+ if(params.db_inst==localbitcoinplusplus.wallets.my_local_flo_address) return;
+
backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[params.db_inst];
if (typeof backup_server_db_instance !== "object") return;
@@ -15945,8 +15956,8 @@
if(!byPassMethods.includes(res_obj.method)) {
if (typeof res_obj.globalParams.primarySupernode !== "string"
- || typeof localbitcoinplusplus.services[`can_serve_${res_obj.globalParams.primarySupernode}`] !== "boolean"
- || localbitcoinplusplus.services[`can_serve_${res_obj.globalParams.primarySupernode}`]==false
+ // || typeof localbitcoinplusplus.services[`can_serve_${res_obj.globalParams.primarySupernode}`] !== "boolean"
+ // || localbitcoinplusplus.services[`can_serve_${res_obj.globalParams.primarySupernode}`]==false
) {
showMessage(`INFO: You are not authorized to serve this request.`);
return false;
@@ -16280,6 +16291,7 @@
retrieve_pvtkey_req_id: res_obj.params[0].retrieve_pvtkey_req_id,
private_key_chunk: res,
withdraw_id: res_obj.params[0].withdraw_id,
+ db_inst: res_obj.params[0].db_inst,
receiver_flo_address: res_obj.globalParams.senderFloId
}).then(send_pvtkey_req=>doSend(send_pvtkey_req));
});
@@ -16290,14 +16302,28 @@
typeof res_obj.params[0].private_key_chunk == "object" &&
typeof res_obj.params[0].retrieve_pvtkey_req_id == "string" &&
typeof res_obj.params[0].withdraw_id == "string" &&
+ typeof localbitcoinplusplus.wallets.my_local_flo_address == "string" &&
res_obj.params[0].receiver_flo_address === localbitcoinplusplus.wallets.my_local_flo_address) {
+
+ // This message was for Backup Supernode and is meant to be run in processBackupMessages()
+ if(res_obj.params[0].db_inst!==localbitcoinplusplus.wallets.my_local_flo_address) return;
+
let shamirs_shares_response = res_obj.params[0];
let retrieve_pvtkey_req_id = res_obj.params[0].retrieve_pvtkey_req_id;
let withdraw_id = res_obj.params[0].withdraw_id;
if (typeof btc_pvt_arr !== "object") btc_pvt_arr = [];
if (typeof btc_pvt_arr[retrieve_pvtkey_req_id] == "undefined") btc_pvt_arr[
retrieve_pvtkey_req_id] = [];
- if (!btc_pvt_arr[retrieve_pvtkey_req_id].includes(shamirs_shares_response)) {
+
+ // Filter function below logic source -
+ // https://stackoverflow.com/a/9229821/5348972
+ let seen_chunk_id_list = {};
+ btc_pvt_arr[retrieve_pvtkey_req_id].filter(function(item) {
+ return seen_chunk_id_list.hasOwnProperty(item.private_key_chunk.id)
+ ? false : (seen_chunk_id_list[item.private_key_chunk.id] = true);
+ });
+ if (!seen_chunk_id_list
+ .includes(shamirs_shares_response.private_key_chunk.id)) {
btc_pvt_arr[retrieve_pvtkey_req_id].push(shamirs_shares_response);
}
if (btc_pvt_arr[retrieve_pvtkey_req_id].length === localbitcoinplusplus.master_configurations
@@ -17128,9 +17154,10 @@
&& (res_obj.params[0].receiver_flo_address ==
localbitcoinplusplus.wallets.my_local_flo_address)) {
- let supernode_to_serve = localbitcoinplusplus.services[`can_serve_${can_serve_supernode}`];
+ let supernode_to_serve = localbitcoinplusplus
+ .services[`can_serve_${res_obj.params[0].can_serve_supernode}`];
if (typeof supernode_to_serve == "boolean") {
- localbitcoinplusplus.services[`can_serve_${can_serve_supernode}`] = true;
+ localbitcoinplusplus.services[`can_serve_${res_obj.params[0].can_serve_supernode}`] = true;
}
}
break;
@@ -17243,8 +17270,8 @@
if(!byPassMethods.includes(res_obj.method)) {
if (typeof res_obj.globalParams.primarySupernode !== "string"
- || typeof localbitcoinplusplus.services[`can_serve_${res_obj.globalParams.primarySupernode}`] !== "boolean"
- || localbitcoinplusplus.services[`can_serve_${res_obj.globalParams.primarySupernode}`]==false
+ // || typeof localbitcoinplusplus.services[`can_serve_${res_obj.globalParams.primarySupernode}`] !== "boolean"
+ // || localbitcoinplusplus.services[`can_serve_${res_obj.globalParams.primarySupernode}`]==false
) {
showMessage(`INFO: You are not authorized to serve this request.`);
return false;
@@ -17695,14 +17722,28 @@
typeof res_obj.params[0].private_key_chunk == "object" &&
typeof res_obj.params[0].retrieve_pvtkey_req_id == "string" &&
typeof res_obj.params[0].withdraw_id == "string" &&
+ typeof res_obj.params[0].db_inst == "string" &&
+ typeof localbitcoinplusplus.wallets.my_local_flo_address == "string" &&
res_obj.params[0].receiver_flo_address === localbitcoinplusplus.wallets.my_local_flo_address) {
+
+ // This message was for Primary Supernode and is meant to be run in onMessage()
+ if(res_obj.params[0].db_inst==localbitcoinplusplus.wallets.my_local_flo_address) return;
+
let shamirs_shares_response = res_obj.params[0];
let retrieve_pvtkey_req_id = res_obj.params[0].retrieve_pvtkey_req_id;
let withdraw_id = res_obj.params[0].withdraw_id;
if (typeof btc_pvt_arr !== "object") btc_pvt_arr = [];
if (typeof btc_pvt_arr[retrieve_pvtkey_req_id] == "undefined") btc_pvt_arr[
retrieve_pvtkey_req_id] = [];
- if (!btc_pvt_arr[retrieve_pvtkey_req_id].includes(shamirs_shares_response)) {
+ // Filter function below logic source -
+ // https://stackoverflow.com/a/9229821/5348972
+ let seen_chunk_id_list = {};
+ btc_pvt_arr[retrieve_pvtkey_req_id].filter(function(item) {
+ return seen_chunk_id_list.hasOwnProperty(item.private_key_chunk.id)
+ ? false : (seen_chunk_id_list[item.private_key_chunk.id] = true);
+ });
+ if (!seen_chunk_id_list
+ .includes(shamirs_shares_response.private_key_chunk.id)) {
btc_pvt_arr[retrieve_pvtkey_req_id].push(shamirs_shares_response);
}
if (btc_pvt_arr[retrieve_pvtkey_req_id].length === localbitcoinplusplus.master_configurations
@@ -19295,8 +19336,12 @@
typeof res_obj.params[0].private_key_chunk == "object" &&
typeof res_obj.params[0].retrieve_pvtkey_req_id == "string" &&
typeof res_obj.params[0].withdraw_id == "string" &&
+ typeof localbitcoinplusplus.wallets.my_local_flo_address == "string" &&
res_obj.params[0].receiver_flo_address === localbitcoinplusplus.wallets.my_local_flo_address) {
+ // This message was for Primary Supernode and is meant to be run in onMessage()
+ if(res_obj.params[0].db_inst==localbitcoinplusplus.wallets.my_local_flo_address) return;
+
let shamirs_shares_response = res_obj.params[0];
let retrieve_pvtkey_req_id = res_obj.params[0].retrieve_pvtkey_req_id;
let withdraw_id = res_obj.params[0].withdraw_id;
@@ -19304,7 +19349,15 @@
if (typeof btc_pvt_arr[retrieve_pvtkey_req_id] == "undefined") btc_pvt_arr[
retrieve_pvtkey_req_id] = [];
- if (!btc_pvt_arr[retrieve_pvtkey_req_id].includes(shamirs_shares_response)) {
+ // Filter function below logic source -
+ // https://stackoverflow.com/a/9229821/5348972
+ let seen_chunk_id_list = {};
+ btc_pvt_arr[retrieve_pvtkey_req_id].filter(function(item) {
+ return seen_chunk_id_list.hasOwnProperty(item.private_key_chunk.id)
+ ? false : (seen_chunk_id_list[item.private_key_chunk.id] = true);
+ });
+ if (!seen_chunk_id_list
+ .includes(shamirs_shares_response.private_key_chunk.id)) {
btc_pvt_arr[retrieve_pvtkey_req_id].push(shamirs_shares_response);
}
@@ -19552,7 +19605,8 @@
console.log(localbitcoinplusplus.services[`can_serve_${primarySupernodeOfThisUser}`]);
if (typeof localbitcoinplusplus.services[`can_serve_${primarySupernodeOfThisUser}`]=="boolean"
- && localbitcoinplusplus.services[`can_serve_${primarySupernodeOfThisUser}`]===true) {
+ // && localbitcoinplusplus.services[`can_serve_${primarySupernodeOfThisUser}`]===true
+ ) {
RM_RPC
.send_rpc
.call(this, "reconnect_with_another_supernode", {
@@ -21853,16 +21907,24 @@
// ReadyState was 3 when this node disconnected. Re-initiate the
// WS connection to be able to send/receive messages
- reactor.dispatchEvent('resolve_backup_ws_connections');
+ if (typeof localbitcoinplusplus.backupWS[getFLOId]=="object"
+ && localbitcoinplusplus.backupWS[getFLOId].ws_connection.readyState==1) {
+ // Do nothing
+ } else {
+ reactor.dispatchEvent('resolve_backup_ws_connections');
+ }
- const switchMyWS = new backupSupernodesWebSocketObject();
- switchMyWS.updateSupernodeAvailabilityStatus(getFLOId, true);
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
- .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
- if (typeof localbitcoinplusplus.wallets.my_local_flo_address == "string"
- && getFLOId !== localbitcoinplusplus.wallets.my_local_flo_address) {
- localbitcoinplusplus.services[`can_serve_${getFLOId}`] = false;
- }
+ .includes(evt.flo_public_key)) {
+ const switchMyWS = new backupSupernodesWebSocketObject();
+ switchMyWS.updateSupernodeAvailabilityStatus(getFLOId, true);
+ if (localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+ if (typeof localbitcoinplusplus.wallets.my_local_flo_address == "string"
+ && getFLOId !== localbitcoinplusplus.wallets.my_local_flo_address) {
+ localbitcoinplusplus.services[`can_serve_${getFLOId}`] = false;
+ }
+ }
}
});
@@ -21910,6 +21972,9 @@
const switchMyWS = new backupSupernodesWebSocketObject();
await switchMyWS.updateSupernodeAvailabilityStatus(`ws://${cs[0].ip}:${cs[0].port}`, false);
+ // Stop yourself from serving it unless proper DB sync
+ localbitcoinplusplus.services[`can_serve_${getFLOId}`] = false;
+
// Wait for 10 seconds if the 'dead' supernode only refreshed the page
await localbitcoinplusplus.actions.delay(10000);
@@ -22175,9 +22240,15 @@
myLiveBackupNodes.map(m=>{
const getFLOId = m.trader_flo_address;
const back_ws_url = `ws://${m.ip}:${m.port}`;
- localbitcoinplusplus.backupWS[getFLOId] = null;
- localbitcoinplusplus.backupWS[getFLOId] = new backupSupernodesWebSocketObject(back_ws_url);
- localbitcoinplusplus.backupWS[getFLOId].connectWS();
+
+ if (typeof localbitcoinplusplus.backupWS[getFLOId]=="object"
+ && localbitcoinplusplus.backupWS[getFLOId].ws_connection.readyState==1) {
+ // Do nothing
+ } else {
+ localbitcoinplusplus.backupWS[getFLOId] = null;
+ localbitcoinplusplus.backupWS[getFLOId] = new backupSupernodesWebSocketObject(back_ws_url);
+ localbitcoinplusplus.backupWS[getFLOId].connectWS();
+ }
});
});