diff --git a/index.html b/index.html index 07b594d..2373aea 100644 --- a/index.html +++ b/index.html @@ -12214,15 +12214,11 @@ 03F7493F11B8E44B9798CD434D20FBE7FA34B9779D144984889D11A17C56A18742,039B4AA00DBFC0A6631DE6DA83526611A0E6B857D3579DF840BBDEAE8B6898E3B6, 03C8E3836C9A77E2AF03D4265D034BA85732738919708EAF6A16382195AE796EDF,0349B08AA1ABDCFFB6D78CD7C949665AD2FF065EA02B3C6C47A5E9592C9A1C6BCB, 026FCC6CFF6EB3A39E54BEB6E13FC2F02C3A93F4767AA80E49E7E876443F95AE5F, - #!#externalFiles={"d3js":"58f54395efa8346e8e94d12609770f66b916897e7f4e05f6c98780cffa5c70a3"} #!#cashiers={"032871A74D2DDA9D0DE7135F58B5BD2D7F679D2CCA20EA7909466D1A6912DF4022":"johnDoe@upi", "03DB4A12EB543B293DDBB0CE314C46C36D6761294AFBB7264A6D78F710FFD97CF0":"janeDoe@upi"} - #!#ShamirsMaxShares=8#!#supernodeSeeds={"ranchimall1":{"ip":"127.0.0.1:9111","kbucketId":"oZxHcbSf1JC8t5GjutopWYXs7C6Fe9p7ps"}, - "ranchimall2":{"ip":"127.0.0.1:9112","kbucketId":"oTWjPupy3Z7uMdPcu5uXd521HBkcsLuSuM"}, - "ranchimall3":{"ip":"127.0.0.1:9113","kbucketId":"odYA6KagmbokSh9GY7yAfeTUZRtZLwecY1"}, - "ranchimall4":{"ip":"127.0.0.1:9114","kbucketId":"oJosrve9dBv2Hj2bfncxv2oEpTysg3Wejv"}, - "ranchimall5":{"ip":"127.0.0.1:9115","kbucketId":"oMhv5sAzqg77sYHxmUGZWKRrVo4P4JQduS"}, - "ranchimall6":{"ip":"127.0.0.1:9116","kbucketId":"oV1wCeWca3VawbBTfUGKA7Vd368PATnKAx"}}`; + #!#ShamirsMaxShares=8#!#supernodeSeeds={ + "ranchimall4":{"ip":"127.0.0.1:9114","kbucketId":"oJosrve9dBv2Hj2bfncxv2oEpTysg3Wejv"} + }`; return callback(text); let master_data = ''; @@ -12729,6 +12725,7 @@ if (typeof immigrants_data === "object") { immigrants_data.trader_flo_address = closestSu[0].data.id; immigrants_data.receiver_flo_address = closestSu[0].data.id; + immigrants_data.inform_back_on_success = true; RM_RPC.send_rpc .call( this, @@ -12744,6 +12741,8 @@ const supernodesFloList = localbitcoinplusplus.master_configurations.supernodesPubKeys .map(s => bitjs[localbitcoinplusplus.BASE_BLOCKCHAIN].pubkey2address(s)); + const extra_backup_ws = {}; + for (let f = 0; f < allUsersData.length; f++) { let closestSu = await localbitcoinplusplus.kademlia.determineClosestSupernode( allUsersData[f].trader_flo_address @@ -12762,13 +12761,61 @@ if (typeof immigrants_data === "object") { immigrants_data.trader_flo_address = closestSu[0].data.id; immigrants_data.receiver_flo_address = closestSu[0].data.id; - RM_RPC.send_rpc + + let server_sync_response = await RM_RPC.send_rpc .call( this, "sync_primary_supernode_from_backup_supernode_response", immigrants_data - ) - .then(server_sync_response => doSend(server_sync_response)); + ); + + const RM_WALLET = new localbitcoinplusplus.wallets(); + + const message256hash = Crypto.SHA256(server_sync_response); + + let msgObj = JSON.parse(server_sync_response); + + if ( + typeof localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY !== + "string" + ) + throw new Error(`WARNING: Private key could not be found.`); + + const nodeSignedMessage = RM_WALLET.sign( + message256hash, + localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY + ); + + msgObj.nodeMessage256hash = message256hash; + msgObj.nodeSignedMessage = nodeSignedMessage; + msgObj.nodePubKey=localbitcoinplusplus.wallets.my_local_flo_public_key; + + let finalMessage = JSON.stringify(msgObj); + + if(typeof localbitcoinplusplus.backupWS[closestSu[0].data.id]=="object" + && localbitcoinplusplus.backupWS[closestSu[0].data.id].ws_connection.readyState==WebSocket.OPEN) { + + localbitcoinplusplus.backupWS[closestSu[0].data.id].ws_connection.send(finalMessage); + + } else if(typeof extra_backup_ws[closestSu[0].data.id]=="object") { + + extra_backup_ws[closestSu[0].data.id].send(finalMessage); + + } else { + const url = `${WS}://${localbitcoinplusplus.myClosestSupernodes[closestSu[0].data.id].ip}`; + + if(closestSu[0].data.id==localbitcoinplusplus.wallets.my_local_flo_address) return; + + extra_backup_ws[closestSu[0].data.id] = new WebSocket(url); + extra_backup_ws[closestSu[0].data.id].onopen = function(evt) { + if (extra_backup_ws[closestSu[0].data.id].bufferedAmount == 0) { + extra_backup_ws[closestSu[0].data.id].send(finalMessage); + } + }; + extra_backup_ws[closestSu[0].data.id].onclose = function(evt) { + console.info(`Closed extra conn ${evt.srcElement.url}`); + } + } // Delete this user from kBucketStore datastore and Kbucket const UintID = localbitcoinplusplus.kademlia.floIdToKbucketId(localbitcoinplusplus.BASE_BLOCKCHAIN, closestSu[0].data.id); @@ -12780,6 +12827,14 @@ localbitcoinplusplus.kademlia.updateClosestSupernodeSeeds(myFloId); + for (const wskey in extra_backup_ws) { + if (extra_backup_ws.hasOwnProperty(wskey)) { + const conn = extra_backup_ws[wskey]; + conn.close(); + delete extra_backup_ws[wskey]; + } + } + // Rebuild KBucket // localbitcoinplusplus.kademlia.restoreKbucket( // myFloId, @@ -13468,44 +13523,6 @@ return decryptMsg; }, - // This function is only useful when sender and receiver are both online. - // If receiver is not online he might never get the message - messageBroadcasting: function( - message, - flo_id, - rpc_subject = "messageBroadcasting" - ) { - readDB("userPublicData", flo_id).then(res => { - pubKey = res.trader_flo_pubKey; - let data = localbitcoinplusplus.encrypt.encryptMessage( - message, - pubKey - ); - const RM_RPC = new localbitcoinplusplus.rpc(); - RM_RPC.send_rpc - .call(this, rpc_subject, { - data: data, - receiver_flo_address: flo_id, - trader_flo_address: - localbitcoinplusplus.wallets.my_local_flo_address - }) - .then(bar => doSend(bar)); - }); - }, - - transmitMessageToMiddleMan: function( - dataToBeSentToReceiver, - receiverFloAddress - ) { - const RM_RPC = new localbitcoinplusplus.rpc(); - dataToBeSentToReceiver.sender_flo_address = - localbitcoinplusplus.wallets.my_local_flo_address; - dataToBeSentToReceiver.trader_flo_address = - localbitcoinplusplus.wallets.my_local_flo_address; - RM_RPC.send_rpc - .call(this, "MessageForMiddleman", dataToBeSentToReceiver) - .then(bar => doSend(bar)); - } }; @@ -15206,7 +15223,6 @@ } ); if (localbitcoinplusplus.is_ui_loaded == false) { - loadExternalFiles(); dataBaseUIOperations(); } @@ -17254,48 +17270,6 @@ } break; - case "update_external_file_server_response": - if (typeof params == "object") { - if (params.filename == "UPDATE_ALL_FILES") { - let file_details_str = JSON.stringify(params.file_updated); - if ( - RM_WALLET.verify( - file_details_str, - params.server_sign, - params.server_pubkey - ) - ) { - params.file_updated.map(new_file => { - updateinDB("external_files", new_file); - createScript(new_file.filename, new_file.content); - }); - return true; - } - } else { - let file_details_string = JSON.stringify( - params.file_updated - ); - if ( - RM_WALLET.verify( - file_details_string, - params.server_sign, - params.server_pubkey - ) - ) { - updateinDB("external_files", params.file_updated); - createScript( - params.file_updated.filename, - params.file_updated.content - ); - return true; - } - } - showMessage( - `WARNING: Failed to update external files from server.` - ); - } - break; - default: showMessage("WARNING: Unknown method called for execution."); break; @@ -19185,54 +19159,6 @@ } break; - case "update_external_file_server_response": - if (typeof params == "object") { - if (params.filename == "UPDATE_ALL_FILES") { - let file_details_str = JSON.stringify(params.file_updated); - if ( - RM_WALLET.verify( - file_details_str, - params.server_sign, - params.server_pubkey - ) - ) { - params.file_updated.map(new_file => { - backup_server_db_instance.backup_updateinDB( - "external_files", - new_file - ); - createScript(new_file.filename, new_file.content); - }); - return true; - } - } else { - let file_details_string = JSON.stringify( - params.file_updated - ); - if ( - RM_WALLET.verify( - file_details_string, - params.server_sign, - params.server_pubkey - ) - ) { - backup_server_db_instance.backup_updateinDB( - "external_files", - params.file_updated - ); - createScript( - params.file_updated.filename, - params.file_updated.content - ); - return true; - } - } - showMessage( - `WARNING: Failed to update external files from server.` - ); - } - break; - default: break; } @@ -21444,14 +21370,12 @@ .length < 1 ) { RM_WALLET.manually_assign_my_private_key(); - loadExternalFiles(); dataBaseUIOperations(); } else if ( typeof localbitcoinplusplus.wallets .MY_SUPERNODE_PRIVATE_KEY == "string" && localbitcoinplusplus.is_ui_loaded == false ) { - loadExternalFiles(); dataBaseUIOperations(); } clearTimeout(); @@ -21528,12 +21452,16 @@ `INFO: Invalid connection. Refreshing the closest supernode list in DB.` ); - // Possible entry of new Supernode. Export data of users - //localbitcoinplusplus.actions.exportUserDataFromOneSupernodeToAnother(idbData.myLocalFLOAddress); - wsUri = await localbitcoinplusplus.kademlia.updateClosestSupernodeSeeds( idbData.myLocalFLOAddress ); + + // Reconfigure ws conns + reactor.dispatchEvent('resolve_backup_ws_connections'); + + // Possible entry of new Supernode. Export data of users + localbitcoinplusplus.actions.exportUserDataFromOneSupernodeToAnother(idbData.myLocalFLOAddress); + } } @@ -21562,14 +21490,12 @@ localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY.length < 1 ) { RM_WALLET.manually_assign_my_private_key(); - loadExternalFiles(); dataBaseUIOperations(); } else if ( typeof localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY == "string" && localbitcoinplusplus.is_ui_loaded == false ) { - loadExternalFiles(); dataBaseUIOperations(); } }, 10000); @@ -21645,12 +21571,6 @@ let is_corona_positive = quarantineCoronaElements(response); if(is_corona_positive===true) throw new Error("Response failed sanitization test."); - let isItANodeLeavingMessage = response.search(`\\-- left`); - if (isItANodeLeavingMessage >= 0) { - //localbitcoinplusplus.actions.informAllANodeLeft(response); - return; - } - let isRequestToLinkIp = response.search("linkMyLocalIPToMyFloId"); let isRequestToLinkOthersIp = response.search( "link_Others_Local_IP_To_Their_Flo_Id" @@ -21831,14 +21751,12 @@ ) { const RM_WALLET = new localbitcoinplusplus.wallets(); RM_WALLET.manually_assign_my_private_key(); - loadExternalFiles(); dataBaseUIOperations(); } else if ( typeof localbitcoinplusplus.wallets .MY_SUPERNODE_PRIVATE_KEY == "string" && localbitcoinplusplus.is_ui_loaded == false ) { - loadExternalFiles(); dataBaseUIOperations(); } }); @@ -21934,14 +21852,6 @@ // Check if request is clean or not let is_corona_positive = quarantineCoronaElements(response); if(is_corona_positive===true) throw new Error("Response failed sanitization test."); - - // If the message is about leaving of a node determine its FLO Id - // and fire respective events - let isItANodeLeavingMessage = response.search(`\\-- left`); - if (isItANodeLeavingMessage >= 0) { - //localbitcoinplusplus.actions.informAllANodeLeft(response); - return; - } const isMsgFromCashier = response.search("__FOR__CASHIER__"); if (isMsgFromCashier >= 0) { @@ -22173,8 +22083,6 @@ 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.` @@ -22716,7 +22624,6 @@ .MY_SUPERNODE_PRIVATE_KEY == "string" && localbitcoinplusplus.is_ui_loaded == false ) { - loadExternalFiles(); dataBaseUIOperations(); return; } @@ -22966,109 +22873,6 @@ ); break; - case "update_external_file_request": - RM_RPC.filter_legit_requests( - res_obj.params[0].trader_flo_address, - is_valid_request => { - if (is_valid_request !== true) return false; - let update_script_request = res_obj.params[0]; - - if ( - typeof update_script_request.trader_flo_address !== - "string" - ) - throw new Error("Unknown user"); - - let server_pubkey = - localbitcoinplusplus.wallets.my_local_flo_public_key; - - if ( - typeof update_script_request.file_to_update == "string" - ) { - readDB( - "external_files", - update_script_request.file_to_update - ).then(file_details => { - if ( - typeof file_details !== "undefined" && - typeof file_details.content == "string" && - file_details.content.length > 0 - ) { - let file_details_string = JSON.stringify( - file_details - ); - let server_sign = RM_WALLET.sign( - file_details_string, - localbitcoinplusplus.wallets - .MY_SUPERNODE_PRIVATE_KEY - ); - RM_RPC.send_rpc - .call( - this, - "update_external_file_server_response", - { - trader_flo_address: - update_script_request.trader_flo_address, - file_updated: file_details, - server_sign: server_sign, - server_pubkey: server_pubkey, - filename: - update_script_request.file_to_update, - trader_flo_address: - update_script_request.trader_flo_address, - receiver_flo_address: - update_script_request.trader_flo_address - } - ) - .then(response_from_sever => - doSend(response_from_sever) - ); - } - }); - } else { - readAllDB("external_files").then(file_details => { - if (file_details.length > 0) { - let file_details_str = JSON.stringify(file_details); - let server_sign = RM_WALLET.sign( - file_details_str, - localbitcoinplusplus.wallets - .MY_SUPERNODE_PRIVATE_KEY - ); - RM_RPC.send_rpc - .call( - this, - "update_external_file_server_response", - { - trader_flo_address: - update_script_request.trader_flo_address, - file_updated: file_details, - server_sign: server_sign, - server_pubkey: server_pubkey, - filename: "UPDATE_ALL_FILES", - receiver_flo_address: - update_script_request.trader_flo_address, - trader_flo_address: - update_script_request.trader_flo_address - } - ) - .then(response_from_sever => - doSend(response_from_sever) - ); - } - }); - } - } - ); - break; - - case "update_external_file_server_response": - response_from_sever = RM_RPC.receive_rpc_response.call( - this, - JSON.stringify(res_obj) - ); - doSend(JSON.stringify(response_from_sever)); // send response to client - break; - case "updateUserCryptoBalanceRequest": if ( localbitcoinplusplus.master_configurations.supernodesPubKeys.includes( @@ -23221,24 +23025,6 @@ } break; - case "queryKbucket": - try { - const kBucketQuery = res_obj.params[0]; - const kfrom = kBucketQuery.query.from; - const kto = kBucketQuery.query.to; - const kmsg = kBucketQuery.query.msg; - - buckId = localbitcoinplusplus.kademlia.floIdToKbucketId( - localbitcoinplusplus.BASE_BLOCKCHAIN, - kto - ); - const getItem = KBucket.get(buckId); - const getData = getItem.data; - } catch (error) { - console.error(error); - } - break; - case "link_My_Local_IP_To_My_Flo_Id": if ( typeof res_obj.params == "object" && @@ -23289,154 +23075,6 @@ } break; - case "supernode_to_supernode_backup_request": - // RM_RPC.filter_legit_requests(function (is_valid_request) { - // if (is_valid_request === true) { - let data = res_obj.params[0]; - const tableArray = [ - "deposit", - "cash_deposits", - "withdraw_cash", - "withdraw_btc", - "crypto_balances", - "cash_balances", - "userPublicData", - "buyOrders", - "sellOrders", - "system_btc_reserves_private_keys", - "supernode_private_key_chunks" - ]; - localbitcoinplusplus.actions - .get_sharable_db_data(tableArray) - .then(function(su_db_data) { - su_db_data.trader_flo_address = data.trader_flo_address; - - let msg_sha256 = Crypto.SHA256( - JSON.stringify(su_db_data) - ); - - localbitcoinplusplus.encrypt.messageBroadcasting( - msg_sha256, - data.trader_flo_address, - "supernode_to_supernode_backup_response" - ); - - // if (typeof su_db_data == "object") { - // su_db_data.trader_flo_address = data.trader_flo_address; - // let server_sync_response = RM_RPC - // .send_rpc - // .call(this, "supernode_to_supernode_backup_response", - // su_db_data); - // doSend(server_sync_response); - // } - }); - // } - // }) - break; - - case "supernode_to_supernode_backup_response": - console.log(res_obj.params[0]); - - if ( - typeof res_obj.params == "object" && - typeof res_obj.params[0] == "object" - ) { - let su_db_data = res_obj.params[0]; - - let db_data = localbitcoinplusplus.encrypt.decryptMessage( - su_db_data.secret, - su_db_data.senderPublicKeyString - ); - console.log(db_data); - return; - - if ( - typeof localbitcoinplusplus.wallets - .my_local_flo_address !== "string" || - su_db_data.trader_flo_address !== - localbitcoinplusplus.wallets.my_local_flo_address - ) - return false; - - (async function() { - for (let tableStoreName in su_db_data) { - // skip loop if the property is from prototype - if ( - tableStoreName == "trader_flo_address" || - !su_db_data.hasOwnProperty(tableStoreName) - ) - continue; - - try { - let obj = su_db_data[tableStoreName]; - if ( - [ - "crypto_balances", - "cash_balances", - "userPublicData" - ].includes(tableStoreName) - ) { - if (obj.length > 0) { - for (var prop in obj) { - if (!obj.hasOwnProperty(prop)) continue; - await BACKUP_DB.backup_updateinDB( - tableStoreName, - obj[prop], - obj[prop].trader_flo_address - ); - } - } - } else { - if (resdbdata !== false) { - if (obj.length > 0) { - for (var prop in obj) { - if (!obj.hasOwnProperty(prop)) continue; - await BACKUP_DB.backup_updateinDB( - resdbdata, - obj[prop], - obj[prop].trader_flo_address, - true, - false - ); - } - } - } - } - } catch (error) { - console.log(error); - } - } - })(); - } - break; - - case "messageBroadcasting": - console.log(res_obj); - try { - let response = res_obj.params[0]; - let msg = localbitcoinplusplus.encrypt.decryptMessage( - response.data.secret, - response.data.senderPublicKeyString - ); - console.log(msg); - } catch (error) { - console.error(error); - } - break; - - case "MessageForMiddleman": - RM_RPC.filter_legit_requests( - dataToBeSentToReceiver.sender_flo_address, - function(is_valid_request) { - console.log(is_valid_request); - } - ); - break; - - case "backup_server_sync_response": - console.log(res_obj); - break; - case "sync_data_by_vector_clock": if ( localbitcoinplusplus.master_configurations.supernodesPubKeys.includes( @@ -23812,27 +23450,6 @@ } break; - case "you_are_set_to_serve_given_supernode": - if ( - res_obj.method == "you_are_set_to_serve_given_supernode" && - localbitcoinplusplus.master_configurations.supernodesPubKeys.includes( - localbitcoinplusplus.wallets.my_local_flo_public_key - ) && - res_obj.params[0].receiver_flo_address == - localbitcoinplusplus.wallets.my_local_flo_address - ) { - 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_${res_obj.params[0].can_serve_supernode}` - ] = true; - } - } - break; - case "request_me_db_data": if ( localbitcoinplusplus.master_configurations.supernodesPubKeys.includes( @@ -23895,14 +23512,6 @@ async function processBackupUserOnMesssageRequest(response) { console.log("processBackupUserOnMesssageRequest RESPONSE: " + response); - // If the message is about leaving of a node determine its FLO Id - // and fire respective events - let isItANodeLeavingMessage = response.search(`\\-- left`); - - if (isItANodeLeavingMessage >= 0) { - //localbitcoinplusplus.actions.informAllANodeLeft(response); - return; - } var res_pos = response.indexOf("{"); if (res_pos >= 0) { @@ -24669,7 +24278,6 @@ .MY_SUPERNODE_PRIVATE_KEY == "string" && localbitcoinplusplus.is_ui_loaded == false ) { - loadExternalFiles(); dataBaseUIOperations(); return; } @@ -24962,135 +24570,6 @@ ); break; - case "update_external_file_request": - RM_RPC.filter_legit_requests( - res_obj.params[0].trader_flo_address, - is_valid_request => { - if (is_valid_request !== true) return false; - let update_script_request = res_obj.params[0]; - - if ( - typeof update_script_request.trader_flo_address !== - "string" - ) - throw new Error("Unknown user"); - - let server_pubkey = - localbitcoinplusplus.wallets.my_local_flo_public_key; - - 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); - } - - if ( - typeof update_script_request.file_to_update == - "string" - ) { - backup_server_db_instance - .backup_readDB( - "external_files", - update_script_request.file_to_update - ) - .then(file_details => { - if ( - typeof file_details !== "undefined" && - typeof file_details.content == "string" && - file_details.content.length > 0 - ) { - let file_details_string = JSON.stringify( - file_details - ); - let server_sign = RM_WALLET.sign( - file_details_string, - localbitcoinplusplus.wallets - .MY_SUPERNODE_PRIVATE_KEY - ); - RM_RPC.send_rpc - .call( - this, - "update_external_file_server_response", - { - trader_flo_address: - update_script_request.trader_flo_address, - file_updated: file_details, - server_sign: server_sign, - server_pubkey: server_pubkey, - filename: - update_script_request.file_to_update, - receiver_flo_address: - update_script_request.trader_flo_address - } - ) - .then(response_from_sever => - doSend(response_from_sever) - ); - } - }); - } else { - backup_server_db_instance - .backup_readAllDB("external_files") - .then(file_details => { - if (file_details.length > 0) { - let file_details_str = JSON.stringify( - file_details - ); - let server_sign = RM_WALLET.sign( - file_details_str, - localbitcoinplusplus.wallets - .MY_SUPERNODE_PRIVATE_KEY - ); - RM_RPC.send_rpc - .call( - this, - "update_external_file_server_response", - { - trader_flo_address: - update_script_request.trader_flo_address, - file_updated: file_details, - server_sign: server_sign, - server_pubkey: server_pubkey, - filename: "UPDATE_ALL_FILES", - receiver_flo_address: - update_script_request.trader_flo_address - } - ) - .then(response_from_sever => - doSend(response_from_sever) - ); - } - }); - } - }); - } - ); - break; - - case "update_external_file_server_response": - response_from_sever = RM_RPC.backup_receive_rpc_response.call( - this, - JSON.stringify(res_obj) - ); - doSend(JSON.stringify(response_from_sever)); // send response to client - break; - case "updateUserCryptoBalanceRequest": if ( localbitcoinplusplus.master_configurations.supernodesPubKeys.includes( @@ -25262,24 +24741,6 @@ } break; - case "queryKbucket": - try { - const kBucketQuery = res_obj.params[0]; - const kfrom = kBucketQuery.query.from; - const kto = kBucketQuery.query.to; - const kmsg = kBucketQuery.query.msg; - - buckId = localbitcoinplusplus.kademlia.floIdToKbucketId( - localbitcoinplusplus.BASE_BLOCKCHAIN, - kto - ); - const getItem = KBucket.get(buckId); - const getData = getItem.data; - } catch (error) { - console.error(error); - } - break; - case "link_My_Local_IP_To_My_Flo_Id": if ( typeof res_obj.params == "object" && @@ -25330,154 +24791,6 @@ } break; - case "supernode_to_supernode_backup_request": - // RM_RPC.filter_legit_requests(function (is_valid_request) { - // if (is_valid_request === true) { - let data = res_obj.params[0]; - const tableArray = [ - "deposit", - "cash_deposits", - "withdraw_cash", - "withdraw_btc", - "crypto_balances", - "cash_balances", - "userPublicData", - "buyOrders", - "sellOrders", - "system_btc_reserves_private_keys", - "supernode_private_key_chunks" - ]; - localbitcoinplusplus.actions - .get_sharable_db_data(tableArray) - .then(function(su_db_data) { - su_db_data.trader_flo_address = data.trader_flo_address; - - let msg_sha256 = Crypto.SHA256( - JSON.stringify(su_db_data) - ); - - localbitcoinplusplus.encrypt.messageBroadcasting( - msg_sha256, - data.trader_flo_address, - "supernode_to_supernode_backup_response" - ); - - // if (typeof su_db_data == "object") { - // su_db_data.trader_flo_address = data.trader_flo_address; - // let server_sync_response = RM_RPC - // .send_rpc - // .call(this, "supernode_to_supernode_backup_response", - // su_db_data); - // doSend(server_sync_response); - // } - }); - // } - // }) - break; - - case "supernode_to_supernode_backup_response": - console.log(res_obj.params[0]); - - if ( - typeof res_obj.params == "object" && - typeof res_obj.params[0] == "object" - ) { - let su_db_data = res_obj.params[0]; - - let db_data = localbitcoinplusplus.encrypt.decryptMessage( - su_db_data.secret, - su_db_data.senderPublicKeyString - ); - console.log(db_data); - return; - - if ( - typeof localbitcoinplusplus.wallets - .my_local_flo_address !== "string" || - su_db_data.trader_flo_address !== - localbitcoinplusplus.wallets.my_local_flo_address - ) - return false; - - (async function() { - for (let tableStoreName in su_db_data) { - // skip loop if the property is from prototype - if ( - tableStoreName == "trader_flo_address" || - !su_db_data.hasOwnProperty(tableStoreName) - ) - continue; - - try { - let obj = su_db_data[tableStoreName]; - if ( - [ - "crypto_balances", - "cash_balances", - "userPublicData" - ].includes(tableStoreName) - ) { - if (obj.length > 0) { - for (var prop in obj) { - if (!obj.hasOwnProperty(prop)) continue; - await BACKUP_DB.backup_updateinDB( - tableStoreName, - obj[prop], - obj[prop].trader_flo_address - ); - } - } - } else { - if (resdbdata !== false) { - if (obj.length > 0) { - for (var prop in obj) { - if (!obj.hasOwnProperty(prop)) continue; - await BACKUP_DB.backup_updateinDB( - resdbdata, - obj[prop], - obj[prop].trader_flo_address, - true, - false - ); - } - } - } - } - } catch (error) { - console.log(error); - } - } - })(); - } - break; - - case "messageBroadcasting": - console.log(res_obj); - try { - let response = res_obj.params[0]; - let msg = localbitcoinplusplus.encrypt.decryptMessage( - response.data.secret, - response.data.senderPublicKeyString - ); - console.log(msg); - } catch (error) { - console.error(error); - } - break; - - case "MessageForMiddleman": - RM_RPC.filter_legit_requests( - dataToBeSentToReceiver.sender_flo_address, - function(is_valid_request) { - console.log(is_valid_request); - } - ); - break; - - case "backup_server_sync_response": - console.log(res_obj); - break; - case "sync_data_by_vector_clock": if ( localbitcoinplusplus.master_configurations.supernodesPubKeys.includes( @@ -25896,16 +25209,8 @@ } async function handle_backup_server_messages(response) { - //var response = evt.data; console.log("backup response: " + response); - let isItANodeLeavingMessage = response.search(`\\-- left`); - - if (isItANodeLeavingMessage >= 0) { - //localbitcoinplusplus.actions.informAllANodeLeft(response); - return; - } - var res_pos = response.indexOf("{"); if (res_pos >= 0) { let isRequestToLinkIp = response.search("linkMyLocalIPToMyFloId"); @@ -25952,61 +25257,7 @@ const RM_RPC = new localbitcoinplusplus.rpc(); switch (res_obj.method) { - case "give_me_your_backup": - if ( - typeof res_obj.params == "object" && - typeof res_obj.params[0] == "object" - ) { - let received_resp = res_obj.params[0]; - RM_RPC.filter_legit_backup_requests( - received_resp.trader_flo_address, - function(is_valid_request) { - if ( - !is_valid_request || - received_resp.JOB !== "BACKUP_SERVER_REQUEST" - ) - return; - const requester_supernode_pubkey = - received_resp.requesters_pub_key; - const requester_supernode_flo_address = - received_resp.trader_flo_address; - - const tableArray = [ - "deposit", - "cash_deposits", - "withdraw_cash", - "withdraw_btc", - "crypto_balances", - "cash_balances", - "userPublicData", - "buyOrders", - "sellOrders", - "system_btc_reserves_private_keys", - "supernode_private_key_chunks" - ]; - localbitcoinplusplus.actions - .get_sharable_db_data(tableArray) - .then(function(su_db_data) { - if (typeof su_db_data == "object") { - su_db_data.trader_flo_address = - localbitcoinplusplus.wallets.my_local_flo_address; - su_db_data.receiver_flo_address = requester_supernode_flo_address; - RM_RPC.send_rpc - .call( - this, - "backup_server_sync_response", - su_db_data - ) - .then(server_sync_response => - doSend(server_sync_response) - ); - } - }); - } - ); - } - break; - + case "server_sync_response": if ( typeof res_obj.params !== "object" || @@ -29673,57 +28924,6 @@ } }; - const loadExternalFiles = async function() { - try { - const user_flo_details = await readDB("localbitcoinUser", "00-01"); - - if ( - typeof user_flo_details.myLocalFLOAddress == "undefined" || - user_flo_details.myLocalFLOAddress.trim() == "" - ) { - showMessage( - `WARNING: Failed to load external files. Please refresh the page.` - ); - throw new Error( - `Failed to load external files as user FLO id could not be found.` - ); - } - - const ext_scripts_hashes_object = JSON.parse( - localbitcoinplusplus.master_configurations.externalFiles - ); - - Object.keys(ext_scripts_hashes_object).map(async ext_file => { - let readExtFile = await readDB("external_files", ext_file); - if ( - typeof readExtFile == "object" && - readExtFile.filehash == ext_scripts_hashes_object[ext_file] - ) { - createScript(ext_file, readExtFile.content); - } else { - updateFileRequest(user_flo_details.myLocalFLOAddress, ext_file); - } - }); - } catch (error) { - console.error(error); - } - }; - - const updateFileRequest = (user_flo_address, filename) => { - const RM_RPC = new localbitcoinplusplus.rpc(); - RM_RPC.send_rpc - .call(this, "update_external_file_request", { - trader_flo_address: user_flo_address, - file_to_update: filename, - receiver_flo_address: localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS - }) - .then(update_external_file => doSend(update_external_file)); - - let file_to_be_updated = filename == null ? "each" : filename; - showMessage(`Updating ${file_to_be_updated} file. Please do not - perform any operation until next confirmation.`); - }; - const privateKeyBuilder = () => { return new Promise(async (resolve, reject) => { let supernode_transaction_key_arr = []; @@ -29758,7 +28958,6 @@ "string" && localbitcoinplusplus.is_ui_loaded == false ) { - loadExternalFiles(); dataBaseUIOperations(); } } @@ -30996,19 +30195,6 @@ } } - function giveMeYourBackup(backup_server_flo_id) { - const RM_RPC = new localbitcoinplusplus.rpc(); - RM_RPC.send_rpc - .call(this, "give_me_your_backup", { - JOB: "BACKUP_SERVER_REQUEST", - requesters_pub_key: - localbitcoinplusplus.wallets.my_local_flo_public_key, - trader_flo_address: - localbitcoinplusplus.wallets.my_local_flo_address - }) - .then(send_backup_request => doSend(send_backup_request)); - } - function linkMyLocalIPToMyFloId() { const RM_RPC = new localbitcoinplusplus.rpc(); RM_RPC.send_rpc