diff --git a/supernode/index.html b/supernode/index.html
index c129d4c..855accc 100644
--- a/supernode/index.html
+++ b/supernode/index.html
@@ -10164,19 +10164,7 @@
sync_primary_supernode_from_backup_supernode: async function (primary_su="", backup_su="") {
const RM_RPC = new localbitcoinplusplus.rpc;
- // RM_RPC.send_rpc.call(this,
- // "sync_primary_supernode_from_backup_supernode", {
- // "trader_flo_address": primary_su,
- // "job": "SYNC_PRIMARY_SUPERNODE_DB_WITH_BACKUP_SUPERNODE_DB",
- // "receiver_flo_address": backup_su,
- // }).then(sync_request=>{
- // if (typeof localbitcoinplusplus.backupWS[backup_su]=="object") {
- // doSend(sync_request, backup_su);
- // } else {
- // doSend(sync_request);
- // }
- // });
-
+
// First check if you yourself have the right data to serve
// If not, either get the data or don't serve the users of
// that dead supernode.
@@ -10201,20 +10189,7 @@
sync_backup_supernode_from_backup_supernode: async function (requester="", receiversList="", flo_addr_of_backup="") {
const RM_RPC = new localbitcoinplusplus.rpc;
- // RM_RPC.send_rpc.call(this,
- // "sync_backup_supernode_from_backup_supernode", {
- // "trader_flo_address": flo_addr_of_backup,
- // "job": "SYNC_BACKUP_SUPERNODE_DB_WITH_BACKUP_SUPERNODE_DB",
- // "receiver_flo_address": receiver,
- // "requester_flo_id": requester
- // }).then(sync_request=>{
- // if (typeof localbitcoinplusplus.backupWS[receiver]=="object") {
- // doSend(sync_request, receiver);
- // } else {
- // doSend(sync_request);
- // }
- // });
-
+
// First check if you yourself have the right data to serve
// If not, either get the data or don't serve the users of
// that dead supernode.
@@ -12725,63 +12700,6 @@
return;
}
- if (method=="sync_primary_supernode_from_backup_supernode") {
- // params.trader_flo_address -> primary supernode flo id
- RM_RPC.filter_legit_backup_requests(params.trader_flo_address, function (is_valid_request) {
- if (is_valid_request === true && params.job ==
- "SYNC_PRIMARY_SUPERNODE_DB_WITH_BACKUP_SUPERNODE_DB" && params.trader_flo_address.length >
- 0) {
- const tableArray = ["deposit", "withdraw_cash", "withdraw_btc", "cash_balances", "crypto_balances",
- "system_btc_reserves_private_keys", "buyOrders", "sellOrders"];
-
- localbitcoinplusplus.actions.get_sharable_db_data(tableArray, params.trader_flo_address).then(
- function (su_db_data) {
- if (typeof su_db_data == "object") {
- su_db_data.trader_flo_address = params.trader_flo_address;
- su_db_data.receiver_flo_address = params.trader_flo_address;
- RM_RPC
- .send_rpc
- .call(this, "sync_primary_supernode_from_backup_supernode_response",
- su_db_data)
- .then(server_sync_response=>
- doSend(server_sync_response));
- }
- });
- }
- });
- return;
- }
-
- if (method=="sync_backup_supernode_from_backup_supernode") {
- // params.trader_flo_address -> primary supernode flo id
- RM_RPC.filter_legit_backup_requests(params.trader_flo_address, function (is_valid_request) {
- if (is_valid_request === true && params.job ==
- "SYNC_BACKUP_SUPERNODE_DB_WITH_BACKUP_SUPERNODE_DB" && params.trader_flo_address.length >
- 0) {
- const tableArray = ["deposit", "withdraw_cash", "withdraw_btc", "cash_balances", "crypto_balances",
- "buyOrders", "sellOrders", "system_btc_reserves_private_keys"];
-
- let rec_flo_id = (params.receiver_flo_address==params.trader_flo_address) ? "" : params.trader_flo_address;
-
- localbitcoinplusplus.actions.get_sharable_db_data(tableArray, rec_flo_id).then(
- function (su_db_data) {
- if (typeof su_db_data == "object") {
- su_db_data.trader_flo_address = params.trader_flo_address;
- su_db_data.receiver_flo_address = params.requester_flo_id;
- RM_RPC
- .send_rpc
- .call(this, "sync_backup_supernode_from_backup_supernode_response",
- su_db_data)
- .then(server_sync_response=>
- doSend(server_sync_response));
- //doSend(server_sync_response, params.requester_flo_id));
- }
- });
- }
- });
- return;
- }
-
let backup_server_db_instance;
if (method !== "retrieve_shamirs_secret_btc_pvtkey") {
if (typeof localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser] == "object") {
@@ -15898,14 +15816,24 @@
// Don't serve the request if data is not synced.
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
-
- 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
- ) {
- showMessage(`INFO: You are not authorized to serve this request.`);
- return false;
- }
+
+ let byPassMethods = ['sync_backup_supernode_from_backup_supernode_response',
+ 'sync_primary_supernode_from_backup_supernode_response', 'supernode_message',
+ 'store_shamirs_secret_pvtkey_shares', 'send_back_shamirs_secret_supernode_pvtkey',
+ 'retrieve_shamirs_secret_supernode_pvtkey', 'send_back_shamirs_secret_btc_pvtkey',
+ 'retrieve_shamirs_secret_btc_pvtkey', 'add_user_public_data', 'link_My_Local_IP_To_My_Flo_Id',
+ 'link_Others_Local_IP_To_Their_Flo_Id', 'sync_data_by_vector_clock', 'is_node_alive_request',
+ 'yup_i_am_awake'];
+
+ 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
+ ) {
+ showMessage(`INFO: You are not authorized to serve this request.`);
+ return false;
+ }
+ }
}
if (typeof res_obj.method !== "undefined") {
@@ -16904,12 +16832,11 @@
try {
let obj = su_db_data[tableStoreName];
- if (["crypto_balances", "cash_balances", "userPublicData"].includes(
- tableStoreName)) {
+ if (["crypto_balances", "cash_balances", "userPublicData", "system_btc_reserves_private_keys"]
+ .includes(tableStoreName)) {
if (obj.length > 0) {
for (var prop in obj) {
if (!obj.hasOwnProperty(prop)) continue;
- //if(obj[prop].)
await updateinDB(tableStoreName, obj[prop], obj[prop].id, true, false)
.then(()=>{
showMessage(`INFO: "${tableStoreName}" datastore syncing is complete.`);
@@ -16922,7 +16849,7 @@
if (obj.length > 0) {
for (var prop in obj) {
if (!obj.hasOwnProperty(prop)) continue;
- await addDB(resdbdata, obj[prop]).then(()=>{
+ await updateinDB(resdbdata, obj[prop], obj[prop].id, true, false).then(()=>{
showMessage(`INFO: "${resdbdata}" datastore syncing is complete.`);
});
}
@@ -16931,22 +16858,15 @@
}
if (i==Object.keys(su_db_data).length-2) {
- // Get data for crypto and fiat balances based on vector clock from all backup supernodes
- reactor.dispatchEvent('primarySupernodeUpdatingLatestDataForItsUserFromOtherSupernodes',
- { requesting_user_id: localbitcoinplusplus.wallets.my_local_flo_address});
- await localbitcoinplusplus.actions.delay(180000).then(()=>{
- showMessage(`INFO: Balance syncing is complete.`);
- localbitcoinplusplus.services[`can_serve_${su_db_data.trader_flo_address}`] = true;
+ localbitcoinplusplus.services[`can_serve_${su_db_data.trader_flo_address}`] = true;
- const RM_RPC = new localbitcoinplusplus.rpc;
- RM_RPC
- .send_rpc
- .call(this, "supernode_message", {
- "trader_flo_address": su_db_data.trader_flo_address,
- "server_msg": `System is synced and ready to serve.`
- }).then(server_response=>doSend(server_response));
-
- });
+ const RM_RPC = new localbitcoinplusplus.rpc;
+ RM_RPC
+ .send_rpc
+ .call(this, "supernode_message", {
+ "trader_flo_address": su_db_data.trader_flo_address,
+ "server_msg": `System is synced and ready to serve.`
+ }).then(server_response=>doSend(server_response));
}
} catch (error) {
@@ -16960,11 +16880,14 @@
case "sync_backup_supernode_from_backup_supernode_response":
let su_db_data = res_obj.params[0];
- // if (typeof localbitcoinplusplus.wallets.my_local_flo_address !== "string" ||
- // su_db_data.trader_flo_address !== localbitcoinplusplus.wallets.my_local_flo_address
+ if (typeof localbitcoinplusplus.wallets.my_local_flo_address !== "string"
+ || typeof su_db_data.receiver_flo_address !== "string"
+ || su_db_data.receiver_flo_address !== localbitcoinplusplus.wallets.my_local_flo_address){
+ console.warn(`WARNING: This backup response data was not meant for you.`);
+ return;
+ }
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
- // ) return false;
-
+
(async function () {
let _addDB = addDB;
let _removeAllinDB = removeAllinDB;
@@ -16986,6 +16909,7 @@
_readDB = foreign_db.backup_readDB.bind(foreign_db);
_readDBbyIndex = foreign_db.backup_readDBbyIndex.bind(foreign_db);
_updateinDB = foreign_db.backup_updateinDB.bind(foreign_db);
+ _removeAllinDB = foreign_db.backup_removeAllinDB.bind(foreign_db);
} else {
err_msg = `WARNING: Invalid Backup DB Instance Id: ${backup_db}.`;
showMessage(err_msg);
@@ -16996,15 +16920,7 @@
for (let tableStoreName in su_db_data) {
i++;
if (i==Object.keys(su_db_data).length-2) {
- // Get data for crypto and fiat balances based on vector clock from all backup supernodes
- // reactor.dispatchEvent('primarySupernodeUpdatingLatestDataForItsUserFromOtherSupernodes',
- // { requesting_user_id: localbitcoinplusplus.wallets.my_local_flo_address});
- // await localbitcoinplusplus.actions.delay(180000).then(()=>{
- // showMessage(`INFO: Balance syncing is complete.`);
-
- localbitcoinplusplus.services[`can_serve_${su_db_data[`trader_flo_address`]}`] = true;
-
- //});
+ localbitcoinplusplus.services[`can_serve_${su_db_data[`trader_flo_address`]}`] = true;
}
// skip loop if the property is from prototype
if (tableStoreName == 'trader_flo_address'
@@ -17013,8 +16929,8 @@
try {
let obj = su_db_data[tableStoreName];
- if (["crypto_balances", "cash_balances", "userPublicData"].includes(
- tableStoreName)) {
+ if (["crypto_balances", "cash_balances", "userPublicData", "system_btc_reserves_private_keys"]
+ .includes(tableStoreName)) {
if (obj.length > 0) {
for (var prop in obj) {
if (!obj.hasOwnProperty(prop)) continue;
@@ -17025,12 +16941,12 @@
}
}
} else {
- let resdbdata = await _removeAllinDB(tableStoreName);
+ let resdbdata = await _removeAllinDB(tableStoreName); // returns tableStoreName or false
if (resdbdata !== false) {
if (obj.length > 0) {
for (var prop in obj) {
if (!obj.hasOwnProperty(prop)) continue;
- _addDB(resdbdata, obj[prop]).then(()=>{
+ _updateinDB(resdbdata, obj[prop], obj[prop].id, true, false).then(()=>{
showMessage(`INFO: "${resdbdata}" datastore syncing is complete.`);
});
}
@@ -17048,7 +16964,7 @@
case "reconnect_with_another_supernode":
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object"
- && localbitcoinplusplus.master_configurations.supernodesPubKeys
+ && !localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(res_obj.nodePubKey)
) {
(async function() {
@@ -17109,18 +17025,6 @@
}
break;
- case "sync_backup_supernode_from_backup_supernode":
- if (localbitcoinplusplus.master_configurations.supernodesPubKeys
- .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)
- && typeof res_obj.globalParams.receiverFloId == "string"
- && localbitcoinplusplus.wallets.my_local_flo_address == res_obj.globalParams.receiverFloId
- ) {
- const RM_RPC = new localbitcoinplusplus.rpc;
- response_from_sever = RM_RPC.backup_receive_rpc_response.call(this,
- JSON.stringify(res_obj));
- }
- break;
-
default:
break;
}
@@ -17209,12 +17113,22 @@
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
- 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
- ) {
- showMessage(`INFO: You are not authorized to serve this request.`);
- return false;
+ let byPassMethods = ['sync_backup_supernode_from_backup_supernode_response',
+ 'sync_primary_supernode_from_backup_supernode_response', 'supernode_message',
+ 'store_shamirs_secret_pvtkey_shares', 'send_back_shamirs_secret_supernode_pvtkey',
+ 'retrieve_shamirs_secret_supernode_pvtkey', 'send_back_shamirs_secret_btc_pvtkey',
+ 'retrieve_shamirs_secret_btc_pvtkey', 'add_user_public_data', 'link_My_Local_IP_To_My_Flo_Id',
+ 'link_Others_Local_IP_To_Their_Flo_Id', 'sync_data_by_vector_clock', 'is_node_alive_request',
+ 'yup_i_am_awake'];
+
+ 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
+ ) {
+ showMessage(`INFO: You are not authorized to serve this request.`);
+ return false;
+ }
}
}
@@ -18480,25 +18394,6 @@
}
break;
- case "sync_primary_supernode_from_backup_supernode":
- if (localbitcoinplusplus.master_configurations.supernodesPubKeys
- .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
- response_from_sever = RM_RPC.backup_receive_rpc_response.call(this,
- JSON.stringify(res_obj));
- }
- break;
-
- case "sync_backup_supernode_from_backup_supernode":
- if (localbitcoinplusplus.master_configurations.supernodesPubKeys
- .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)
- && typeof res_obj.globalParams.receiverFloId == "string"
- && localbitcoinplusplus.wallets.my_local_flo_address == res_obj.globalParams.receiverFloId
- ) {
- response_from_sever = RM_RPC.backup_receive_rpc_response.call(this,
- JSON.stringify(res_obj));
- }
- break;
-
case "is_node_alive_request":
if(localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
@@ -19421,11 +19316,14 @@
case "sync_backup_supernode_from_backup_supernode_response":
let su_db_data = res_obj.params[0];
- // if (typeof localbitcoinplusplus.wallets.my_local_flo_address !== "string" ||
- // su_db_data.trader_flo_address !== localbitcoinplusplus.wallets.my_local_flo_address
+ if (typeof localbitcoinplusplus.wallets.my_local_flo_address !== "string"
+ || typeof su_db_data.receiver_flo_address !== "string"
+ || su_db_data.receiver_flo_address !== localbitcoinplusplus.wallets.my_local_flo_address){
+ console.warn(`WARNING: This backup response data was not meant for you.`);
+ return;
+ }
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
- // ) return false;
-
+
(async function () {
let _addDB = addDB;
let _removeAllinDB = removeAllinDB;
@@ -19447,6 +19345,7 @@
_readDB = foreign_db.backup_readDB.bind(foreign_db);
_readDBbyIndex = foreign_db.backup_readDBbyIndex.bind(foreign_db);
_updateinDB = foreign_db.backup_updateinDB.bind(foreign_db);
+ _removeAllinDB = foreign_db.backup_removeAllinDB.bind(foreign_db);
} else {
err_msg = `WARNING: Invalid Backup DB Instance Id: ${backup_db}.`;
showMessage(err_msg);
@@ -19457,15 +19356,7 @@
for (let tableStoreName in su_db_data) {
i++;
if (i==Object.keys(su_db_data).length-2) {
- // Get data for crypto and fiat balances based on vector clock from all backup supernodes
- // reactor.dispatchEvent('primarySupernodeUpdatingLatestDataForItsUserFromOtherSupernodes',
- // { requesting_user_id: localbitcoinplusplus.wallets.my_local_flo_address});
- // await localbitcoinplusplus.actions.delay(180000).then(()=>{
- // showMessage(`INFO: Balance syncing is complete.`);
-
- localbitcoinplusplus.services[`can_serve_${su_db_data.trader_flo_address}`] = true;
-
- //});
+ localbitcoinplusplus.services[`can_serve_${su_db_data.trader_flo_address}`] = true;
}
// skip loop if the property is from prototype
if (tableStoreName == 'trader_flo_address'
@@ -19474,8 +19365,8 @@
try {
let obj = su_db_data[tableStoreName];
- if (["crypto_balances", "cash_balances", "userPublicData"].includes(
- tableStoreName)) {
+ if (["crypto_balances", "cash_balances", "userPublicData", "system_btc_reserves_private_keys"]
+ .includes(tableStoreName)) {
if (obj.length > 0) {
for (var prop in obj) {
if (!obj.hasOwnProperty(prop)) continue;
@@ -19491,7 +19382,7 @@
if (obj.length > 0) {
for (var prop in obj) {
if (!obj.hasOwnProperty(prop)) continue;
- _addDB(resdbdata, obj[prop]).then(()=>{
+ _updateinDB(resdbdata, obj[prop], obj[prop].id, true, false).then(()=>{
showMessage(`INFO: "${resdbdata}" datastore syncing is complete.`);
});
}
@@ -21691,7 +21582,6 @@
reactor.registerEvent('backup_supernode_down');
reactor.registerEvent('fireNodeWelcomeBackEvent');
reactor.registerEvent('fireNodeGoodByeEvent');
- reactor.registerEvent('primarySupernodeUpdatingLatestDataForItsUserFromOtherSupernodes');
reactor.registerEvent('nodeIsAlive');
reactor.registerEvent('get_node_status_request');
reactor.registerEvent('sync_primary_and_backup_db');
@@ -21840,7 +21730,6 @@
break;
}
}
-
}
msg = `INFO: Supernode ${getFLOId} left.`;
@@ -21852,62 +21741,6 @@
});
});
- reactor.addEventListener('primarySupernodeUpdatingLatestDataForItsUserFromOtherSupernodes', async function(params) {
- let msg = '';
- if (typeof params.requesting_user_id !== "string") {
- msg = 'ERROR: Invalid User id provided in "primarySupernodeUpdatingLatestDataForItsUserFromOtherSupernodes" request.';
- showMessage(msg);
- throw new Error(msg);
- }
-
- let getPrimarySuObj = await localbitcoinplusplus.kademlia.determineClosestSupernode(params.requesting_user_id, 3);
- let primarySupernode = getPrimarySuObj[0].data.id;
-
- if (typeof primarySupernode !== "string") {
- let msg = `WARNING: Failed to determine primary supernode for ${params.requesting_user_id}.`;
- showMessage(msg);
- throw new Error(msg);
- }
-
- let getNextClosestSuObjOfPrimarySupernode = await localbitcoinplusplus.kademlia.determineClosestSupernode("", 3, supernodeKBucket, primarySupernode);
-
- if (localbitcoinplusplus.wallets.my_local_flo_address !== primarySupernode) return;
-
- const RM_RPC = new localbitcoinplusplus.rpc;
-
- const table_array = ["crypto_balances", "cash_balances"];
-
- table_array.map(async tbl=>{
- let record = await readDBbyIndex(tbl, 'trader_flo_address', params.requesting_user_id);
-
- record.map(rec=>{
- getNextClosestSuObjOfPrimarySupernode.map(nextSu=>{
- if (nextSu.data.id !== primarySupernode) {
- let nextSuConn = localbitcoinplusplus.newBackupDatabase.db[nextSu.data.id];
- if(typeof nextSuConn !== "object") {
- let msg = `WARNING: Failed to open a backup DB with Supernode ${nextSu}.`;
- showMessage(msg);
- throw new Error(msg);
- }
-
- RM_RPC
- .send_rpc
- .call(this, "sync_data_by_vector_clock", {
- trader_flo_address: params.requesting_user_id,
- receiver_flo_address: nextSu.data.id,
- leaving_supernode_flo_id: primarySupernode,
- data: rec,
- dbTable: tbl
- }).then(server_response=>doSend(server_response, nextSu.data.id));
- }
- });
-
- });
-
- });
-
- });
-
reactor.addEventListener('nodeIsAlive', function(res_obj) {
try {
if (res_obj.params[0].JOB !== "ARE_YOU_ALIVE"