modified db read functions to fetch both deletable/non-deletable data

This commit is contained in:
Abhishek Sinha 2019-07-11 19:53:05 +05:30
parent 17fbd1f80c
commit 31b0f8547e

View File

@ -11382,35 +11382,34 @@
if (typeof localbitcoinplusplus.wallets.my_local_flo_address == "string") { if (typeof localbitcoinplusplus.wallets.my_local_flo_address == "string") {
request.globalParams.senderFloId = localbitcoinplusplus.wallets.my_local_flo_address; request.globalParams.senderFloId = localbitcoinplusplus.wallets.my_local_flo_address;
if (typeof params[0].trader_flo_address !=="string") { //if (typeof params[0].trader_flo_address !=="string") {
const my_closest_su = await localbitcoinplusplus.kademlia const my_closest_su = await localbitcoinplusplus.kademlia
.determineClosestSupernode(localbitcoinplusplus.wallets.my_local_flo_address); .determineClosestSupernode('', '', supernodeKBucket, localbitcoinplusplus.wallets.my_local_flo_address);
if (typeof my_closest_su=="object") { if (typeof my_closest_su=="object") {
request.globalParams.primarySupernode = my_closest_su[0].data.id; request.globalParams.primarySupernode = my_closest_su[0].data.id;
request.globalParams["receiversList"] = []; request.globalParams["receiversList"] = [];
for (let j = 0; j <= localbitcoinplusplus.master_configurations.MaxBackups; j++) { for (let j = 1; j <= localbitcoinplusplus.master_configurations.MaxBackups; j++) {
request.globalParams.receiversList.push(my_closest_su[j].data.id); request.globalParams.receiversList.push(my_closest_su[j].data.id);
} }
} }
} //}
} else { } else {
const resObj = await readDB('localbitcoinUser', '00-01'); const resObj = await readDB('localbitcoinUser', '00-01');
if(typeof resObj !== "object" || typeof resObj.myLocalFLOAddress !== "string") return; if(typeof resObj !== "object" || typeof resObj.myLocalFLOAddress !== "string") return;
request.globalParams.senderFloId = resObj.myLocalFLOAddress; request.globalParams.senderFloId = resObj.myLocalFLOAddress;
if (typeof params[0].trader_flo_address !=="string") { //if (typeof params[0].trader_flo_address !=="string") {
const n = localbitcoinplusplus.master_configurations.MaxBackups+1;
const my_closest_su = await localbitcoinplusplus.kademlia const my_closest_su = await localbitcoinplusplus.kademlia
.determineClosestSupernode(resObj.myLocalFLOAddress, n); .determineClosestSupernode('', '', supernodeKBucket, resObj.myLocalFLOAddress);
if (typeof my_closest_su=="object") { if (typeof my_closest_su=="object") {
request.globalParams.primarySupernode = my_closest_su[0].data.id; request.globalParams.primarySupernode = my_closest_su[0].data.id;
request.globalParams["receiversList"] = []; request.globalParams["receiversList"] = [];
for (let j = 0; j <= localbitcoinplusplus.master_configurations.MaxBackups; j++) { for (let j = 1; j <= localbitcoinplusplus.master_configurations.MaxBackups; j++) {
request.globalParams.receiversList.push(my_closest_su[j].data.id); request.globalParams.receiversList.push(my_closest_su[j].data.id);
} }
} }
} //}
} }
if (typeof params[0].receiver_flo_address == "string") { if (typeof params[0].receiver_flo_address == "string") {
@ -11866,7 +11865,10 @@
addDB( addDB(
"system_btc_reserves_private_keys", "system_btc_reserves_private_keys",
system_btc_reserves_private_keys_object system_btc_reserves_private_keys_object
); ).then(pk_res=>{
// Send it to neighbor nodes to store as backup
reactor.dispatchEvent('store_backup_crypto_pk_object', pk_res);
});
} catch (error) { } catch (error) {
throw new Error( error); throw new Error( error);
} }
@ -13080,7 +13082,10 @@
backup_server_db_instance.backup_addDB( backup_server_db_instance.backup_addDB(
"system_btc_reserves_private_keys", "system_btc_reserves_private_keys",
system_btc_reserves_private_keys_object system_btc_reserves_private_keys_object
); ).then(pk_res=>{
// Send it to neighbor nodes to store as backup
reactor.dispatchEvent('store_backup_crypto_pk_object', pk_res);
});
} catch (error) { } catch (error) {
throw new Error( error); throw new Error( error);
} }
@ -14304,9 +14309,14 @@
let current_rate_obj = localbitcoinplusplus.trade[`current_${crypto_code}_price_in_${currency_code}`]; let current_rate_obj = localbitcoinplusplus.trade[`current_${crypto_code}_price_in_${currency_code}`];
if (typeof current_rate_obj=="object" if (typeof current_rate_obj=="object"
&& localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(current_rate_obj.supernode_pub_key)) { && localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(current_rate_obj.supernode_pub_key)) {
if (crypto_code=="BTC_TEST") {
crypto_code = "BTC"
}
if (crypto_code=="FLO_TEST") {
crypto_code = "FLO"
}
let rate_obj = { let rate_obj = {
id: `${current_rate_obj.crypto_code}_${current_rate_obj.currency_code}`, id: `${crypto_code}_${currency_code}`,
crypto_code: crypto_code, crypto_code: crypto_code,
currency_code: currency_code, currency_code: currency_code,
rate: current_rate_obj.rate, rate: current_rate_obj.rate,
@ -15816,6 +15826,10 @@
.includes(localbitcoinplusplus.wallets.my_local_flo_address) .includes(localbitcoinplusplus.wallets.my_local_flo_address)
)) return; )) return;
if (typeof res_obj.globalParams.receiverFloId=="string"
&& res_obj.globalParams.receiverFloId !==
localbitcoinplusplus.wallets.my_local_flo_address) return;
const isIncomingMessageValid = await validateIncomingMessage(res); const isIncomingMessageValid = await validateIncomingMessage(res);
console.log("isIncomingMessageValid: ", isIncomingMessageValid); console.log("isIncomingMessageValid: ", isIncomingMessageValid);
@ -17088,6 +17102,10 @@
.includes(localbitcoinplusplus.wallets.my_local_flo_address) .includes(localbitcoinplusplus.wallets.my_local_flo_address)
)) return; )) return;
if (typeof res_obj.globalParams.receiverFloId=="string"
&& res_obj.globalParams.receiverFloId !==
localbitcoinplusplus.wallets.my_local_flo_address) return;
// Check if request is from primary user or backup user // Check if request is from primary user or backup user
// If request is from backup user, divert the request to backup onmessage event // If request is from backup user, divert the request to backup onmessage event
let get_requester_supernode = ''; let get_requester_supernode = '';
@ -18520,6 +18538,10 @@
if (!localbitcoinplusplus.master_configurations.supernodesPubKeys if (!localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(res_obj.nodePubKey)) return; .includes(res_obj.nodePubKey)) return;
if (typeof res_obj.globalParams.receiverFloId=="string"
&& res_obj.globalParams.receiverFloId !==
localbitcoinplusplus.wallets.my_local_flo_address) return;
if (typeof res_obj.method !== "undefined") { if (typeof res_obj.method !== "undefined") {
let response_from_sever; let response_from_sever;
@ -19607,6 +19629,36 @@
} }
break; break;
case "store_backup_system_btc_reserves_private_keys":
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object"
&& localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(res_obj.nodePubKey)
&& res_obj.globalParams.receiverFloId==localbitcoinplusplus.wallets.my_local_flo_address
) {
const resp_data = res_obj.params[0];
let btc_pk_obj = localbitcoinplusplus.encrypt
.decryptMessage(resp_data.data.secret, resp_data.data.senderPublicKeyString);
localbitcoinplusplus.kademlia.determineClosestSupernode(su).then(get_su=>{
const supernode_flo_id = get_su[0].data.id;
if (typeof supernode_flo_id !=="string") throw new Error(`ERROR: Invalid FLO key.`);
if (typeof btc_pk_obj =="object"){
}
if (supernode_flo_id==localbitcoinplusplus.wallets.my_local_flo_address) {
updateinDB("system_btc_reserves_private_keys",
btc_pk_obj, btc_pk_obj.id, false, false);
} else if(typeof localbitcoinplusplus.newBackupDatabase.db[supernode_flo_id]=="object") {
localbitcoinplusplus.newBackupDatabase
.db[supernode_flo_id].backup_updateinDB("system_btc_reserves_private_keys",
btc_pk_obj, btc_pk_obj.id, false, false);
} else {
throw new Error(`ERROR: Failed to store backup system_btc_reserves_private_keys id ${btc_pk_obj.id}`);
}
});
}
break;
default: default:
break; break;
} }
@ -20070,7 +20122,7 @@
} }
} }
function readDB(tablename, id) { function readDB(tablename, id, filter_deletables=true) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
var transaction = db.transaction([tablename]); var transaction = db.transaction([tablename]);
var objectStore = transaction.objectStore(tablename); var objectStore = transaction.objectStore(tablename);
@ -20081,9 +20133,17 @@
}; };
request.onsuccess = function (event) { request.onsuccess = function (event) {
if (request.result if (request.result){
&& typeof request.result.is_deletable == "undefined") { if (filter_deletables==true) {
resolve(request.result); if(typeof request.result.is_deletable == "undefined") {
resolve(request.result);
} else {
resolve();
}
} else {
resolve(request.result);
}
} else { } else {
resolve(); resolve();
} }
@ -20091,7 +20151,7 @@
}); });
} }
function readDBbyIndex(tablename, index, indexValue) { function readDBbyIndex(tablename, index, indexValue, filter_deletables=true) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
var transaction = db.transaction([tablename]); var transaction = db.transaction([tablename]);
var objectStore = transaction.objectStore(tablename); var objectStore = transaction.objectStore(tablename);
@ -20103,9 +20163,14 @@
objectStore.openCursor().onsuccess = function (event) { objectStore.openCursor().onsuccess = function (event) {
let cursor = event.target.result; let cursor = event.target.result;
if (cursor) { if (cursor) {
if (cursor.value[index] == indexValue if (cursor.value[index] == indexValue) {
&& typeof cursor.value.is_deletable == "undefined") { if (filter_deletables==true) {
response.push(cursor.value); if (typeof cursor.value.is_deletable == "undefined") {
response.push(cursor.value);
}
} else {
response.push(cursor.value);
}
} }
cursor.continue(); cursor.continue();
} else { } else {
@ -20115,7 +20180,7 @@
}); });
} }
function readAllDB(tablename, limit=0) { function readAllDB(tablename, filter_deletables=true, limit=0) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let response = []; let response = [];
// let keyRangeValue; // let keyRangeValue;
@ -20125,8 +20190,15 @@
var objectStore = db.transaction(tablename).objectStore(tablename); var objectStore = db.transaction(tablename).objectStore(tablename);
objectStore.openCursor().onsuccess = function (event) { objectStore.openCursor().onsuccess = function (event) {
let cursor = event.target.result; let cursor = event.target.result;
if (cursor && typeof cursor.value.is_deletable == "undefined") { if (cursor) {
response.push(cursor.value); if (filter_deletables==true) {
if (typeof cursor.value.is_deletable == "undefined") {
response.push(cursor.value);
}
} else {
response.push(cursor.value);
}
cursor.continue(); cursor.continue();
} else { } else {
resolve(response); resolve(response);
@ -20438,7 +20510,7 @@
}, },
backup_readDB(tablename, id) { backup_readDB(tablename, id, filter_deletables=true) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.transaction = this.db.transaction([tablename]); this.transaction = this.db.transaction([tablename]);
var objectStore = this.transaction.objectStore(tablename); var objectStore = this.transaction.objectStore(tablename);
@ -20450,17 +20522,23 @@
}; };
this.request.onsuccess = function (event) { this.request.onsuccess = function (event) {
if (parent_request.result if (parent_request.result) {
&& typeof parent_request.result.is_deletable == "undefined") { if (filter_deletables==true) {
resolve(parent_request.result); if(typeof parent_request.result.is_deletable == "undefined") {
} else { resolve(parent_request.result);
resolve(); } else {
resolve();
}
} else {
resolve(parent_request.result);
}
} }
}; };
}); });
}, },
backup_readDBbyIndex(tablename, index, indexValue) { backup_readDBbyIndex(tablename, index, indexValue, filter_deletables=true) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.transaction = this.db.transaction([tablename]); this.transaction = this.db.transaction([tablename]);
var objectStore = this.transaction.objectStore(tablename); var objectStore = this.transaction.objectStore(tablename);
@ -20472,9 +20550,14 @@
objectStore.openCursor().onsuccess = function (event) { objectStore.openCursor().onsuccess = function (event) {
let cursor = event.target.result; let cursor = event.target.result;
if (cursor) { if (cursor) {
if (cursor.value[index] == indexValue if (cursor.value[index] == indexValue) {
&& typeof cursor.value.is_deletable == "undefined") { if (filter_deletables==true) {
response.push(cursor.value); if(typeof cursor.value.is_deletable == "undefined") {
response.push(cursor.value);
}
} else {
response.push(cursor.value);
}
} }
cursor.continue(); cursor.continue();
} else { } else {
@ -20484,14 +20567,21 @@
}); });
}, },
backup_readAllDB(tablename) { backup_readAllDB(tablename, filter_deletables=true) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let response = []; let response = [];
var objectStore = this.db.transaction(tablename).objectStore(tablename); var objectStore = this.db.transaction(tablename).objectStore(tablename);
objectStore.openCursor().onsuccess = function (event) { objectStore.openCursor().onsuccess = function (event) {
let cursor = event.target.result; let cursor = event.target.result;
if (cursor && typeof cursor.value.is_deletable == "undefined") { if (cursor) {
response.push(cursor.value); if (filter_deletables==true) {
if (typeof cursor.value.is_deletable == "undefined") {
response.push(cursor.value);
}
} else {
response.push(cursor.value);
}
cursor.continue(); cursor.continue();
} else { } else {
resolve(response); resolve(response);
@ -21643,6 +21733,7 @@
reactor.registerEvent('nodeIsAlive'); reactor.registerEvent('nodeIsAlive');
reactor.registerEvent('get_node_status_request'); reactor.registerEvent('get_node_status_request');
reactor.registerEvent('sync_primary_and_backup_db'); reactor.registerEvent('sync_primary_and_backup_db');
reactor.registerEvent('store_backup_crypto_pk_object');
reactor.addEventListener('fireNodeWelcomeBackEvent', function(evt) { reactor.addEventListener('fireNodeWelcomeBackEvent', function(evt) {
let getFLOId = bitjs.FLO_TEST.pubkey2address(evt.flo_public_key); let getFLOId = bitjs.FLO_TEST.pubkey2address(evt.flo_public_key);
@ -21880,6 +21971,38 @@
} }
}); });
reactor.addEventListener('store_backup_crypto_pk_object', function(btc_pk_obj) {
readAllDB('myClosestSupernodes').then(res=>{
myNeighborNodes = res.filter((k,i)=>
i<=localbitcoinplusplus.master_configurations.MaxBackups);
myNeighborNodes.shift();
myNeighborNodesPubKeys=myNeighborNodes
.map(m=>localbitcoinplusplus.wallets.prototype
.getSupernodePublicKeyFromFloId(m.trader_flo_address))
myNeighborNodesPubKeys.map(resp=>{
let pubk = resp[0];
let floAddr = resp[1];
if(typeof pubk == "string"
&& localbitcoinplusplus.master_configurations
.supernodesPubKeys.includes(pubk)) {
const data = localbitcoinplusplus.encrypt
.encryptMessage(JSON.stringify(btc_pk_obj), pubk);
const RM_RPC = new localbitcoinplusplus.rpc;
RM_RPC.send_rpc
.call(this, "store_backup_system_btc_reserves_private_keys", {
data: data,
receiver_flo_address: floAddr,
trader_flo_address: localbitcoinplusplus.wallets.my_local_flo_address
}).then(bar=>doSend(bar, floAddr));
}
});
});
});
</script> </script>