added function to calculate latest vector clock and timestamp for tables in a db
This commit is contained in:
parent
daa22af04a
commit
15ecc3e52f
@ -10229,23 +10229,70 @@
|
|||||||
return arr;
|
return arr;
|
||||||
},
|
},
|
||||||
|
|
||||||
getDBHash: async function(su=localbitcoinplusplus.wallets.my_local_flo_address) {
|
getHighestVectorClockInTablesOfaDB: function(dbDataOfSupernode=[]) {
|
||||||
const tableArray = ["deposit", "withdraw_cash", "withdraw_btc", "cash_balances", "crypto_balances",
|
return new Promise((resolve, reject)=>{
|
||||||
"buyOrders", "sellOrders", "system_btc_reserves_private_keys"];
|
let higestVCList = [];
|
||||||
|
Object.keys(dbDataOfSupernode).map((m,i)=>{
|
||||||
|
if(typeof dbDataOfSupernode[m]=="object") {
|
||||||
|
arr = dbDataOfSupernode[m].map(d=>{
|
||||||
|
if(typeof d !== 'undefined') {
|
||||||
|
return d.vectorClock;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var max = Math.max.apply( null, arr );
|
||||||
|
if(typeof max !=="number" || [-Infinity, NaN, false, null, undefined].includes(max)) max=0;
|
||||||
|
return higestVCList[`${m}_HVC`] = max;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
resolve(higestVCList);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
getHighestTimestampInTablesOfaDB: function(dbDataOfSupernode=[]) {
|
||||||
|
return new Promise((resolve, reject)=>{
|
||||||
|
let higestVCList = [];
|
||||||
|
Object.keys(dbDataOfSupernode).map((m,i)=>{
|
||||||
|
if(typeof dbDataOfSupernode[m]=="object") {
|
||||||
|
arr = dbDataOfSupernode[m].map(d=>{
|
||||||
|
if(typeof d !== 'undefined') {
|
||||||
|
return d.timestamp;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var max = Math.max.apply( null, arr );
|
||||||
|
if(typeof max !=="number" || [-Infinity, NaN, false, null, undefined].includes(max)) max=0;
|
||||||
|
return higestVCList[`${m}_HVC`] = max;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
resolve(higestVCList);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
getDBTablesLatestHashAndTimestamp: async function(su=localbitcoinplusplus.wallets.my_local_flo_address, actual_db_data=false, tableArray=false) {
|
||||||
|
|
||||||
let get_su = await localbitcoinplusplus.kademlia.determineClosestSupernode(su);
|
let get_su = await localbitcoinplusplus.kademlia.determineClosestSupernode(su);
|
||||||
|
|
||||||
const supernode_flo_id = get_su[0].data.id;
|
const supernode_flo_id = get_su[0].data.id;
|
||||||
|
|
||||||
const subjectDB = (supernode_flo_id==localbitcoinplusplus.wallets.my_local_flo_address) ? "":supernode_flo_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);
|
let dbDataOfSupernode;
|
||||||
|
|
||||||
|
if (actual_db_data==false) {
|
||||||
|
if (typeof tableArray!=="object") {
|
||||||
|
tableArray = ["deposit", "withdraw_cash", "withdraw_btc", "cash_balances", "crypto_balances",
|
||||||
|
"buyOrders", "sellOrders", "system_btc_reserves_private_keys"];
|
||||||
|
}
|
||||||
|
dbDataOfSupernode = await localbitcoinplusplus.actions.get_sharable_db_data(tableArray, subjectDB);
|
||||||
|
}
|
||||||
|
|
||||||
if (typeof dbDataOfSupernode=="object" && Object.keys(dbDataOfSupernode).length>0) {
|
if (typeof dbDataOfSupernode=="object" && Object.keys(dbDataOfSupernode).length>0) {
|
||||||
|
|
||||||
myArray = {};
|
myArray = {};
|
||||||
Object.keys(dbDataOfSupernode)
|
Object.keys(dbDataOfSupernode)
|
||||||
.map(m=>myArray[m] = Crypto.SHA256(JSON.stringify(dbDataOfSupernode[m])));
|
.map(m=>myArray[m] = Crypto.SHA256(JSON.stringify(dbDataOfSupernode[m])));
|
||||||
|
|
||||||
|
const higestTimestampList = await localbitcoinplusplus.actions.getHighestTimestampInTablesOfaDB(dbDataOfSupernode);
|
||||||
|
|
||||||
const dbDataOfSupernodeStr = JSON.stringify(dbDataOfSupernode);
|
const dbDataOfSupernodeStr = JSON.stringify(dbDataOfSupernode);
|
||||||
const dbDataOfSupernodeHash = Crypto.SHA256(dbDataOfSupernodeStr);
|
const dbDataOfSupernodeHash = Crypto.SHA256(dbDataOfSupernodeStr);
|
||||||
|
|
||||||
@ -10253,37 +10300,18 @@
|
|||||||
myArray["DBHash"] = dbDataOfSupernodeHash;
|
myArray["DBHash"] = dbDataOfSupernodeHash;
|
||||||
myArray["trader_flo_address"] = localbitcoinplusplus.wallets.my_local_flo_address;
|
myArray["trader_flo_address"] = localbitcoinplusplus.wallets.my_local_flo_address;
|
||||||
myArray["data_of"] = su;
|
myArray["data_of"] = su;
|
||||||
myArray["timestamp"] = + new Date();
|
myArray["higestTimestampList"] = higestTimestampList;
|
||||||
|
|
||||||
|
return myArray;
|
||||||
|
|
||||||
const RM_RPC = new localbitcoinplusplus.rpc;
|
// const RM_RPC = new localbitcoinplusplus.rpc;
|
||||||
|
|
||||||
if (su==localbitcoinplusplus.wallets.my_local_flo_address) {
|
|
||||||
updateinDB('supernodesDbHash', myArray)
|
|
||||||
.then((resp)=>{
|
|
||||||
RM_RPC
|
|
||||||
.send_rpc
|
|
||||||
.call(this, "hash_of_a_supernode_db_response", myArray)
|
|
||||||
.then(supernodesDbHash_response=>
|
|
||||||
doSend(supernodesDbHash_response)
|
|
||||||
);
|
|
||||||
|
|
||||||
showMessage(`INFO: "supernodesDbHash" table updated.`)});
|
|
||||||
} else {
|
|
||||||
if (typeof localbitcoinplusplus.newBackupDatabase.db[su]!=="object") {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
localbitcoinplusplus.newBackupDatabase.db[su]
|
|
||||||
.backup_updateinDB('supernodesDbHash', myArray)
|
|
||||||
.then(resp=>{
|
|
||||||
RM_RPC
|
|
||||||
.send_rpc
|
|
||||||
.call(this, "hash_of_a_supernode_db_response", myArray)
|
|
||||||
.then(supernodesDbHash_response=>
|
|
||||||
doSend(supernodesDbHash_response));
|
|
||||||
showMessage(`INFO: "supernodesDbHash" table updated.`)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// RM_RPC
|
||||||
|
// .send_rpc
|
||||||
|
// .call(this, "do_you_have_latest_data_for_this_supernode", myArray)
|
||||||
|
// .then(supernodesDbHash_response=>
|
||||||
|
// doSend(supernodesDbHash_response));
|
||||||
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
@ -10386,16 +10414,7 @@
|
|||||||
|
|
||||||
const promise2 = removeAllinDB('my_supernode_private_key_chunks');
|
const promise2 = removeAllinDB('my_supernode_private_key_chunks');
|
||||||
|
|
||||||
return Promise.all([promise1, promise2])
|
return Promise.all([promise1, promise2]).then(() => true).catch(e => false);
|
||||||
.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
|
// https://stackoverflow.com/a/39538518/5348972
|
||||||
@ -10611,14 +10630,7 @@
|
|||||||
},
|
},
|
||||||
updateClosestSupernodeSeeds: function(flo_addr) {
|
updateClosestSupernodeSeeds: function(flo_addr) {
|
||||||
return new Promise(async (resolve, reject) => {
|
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);
|
let nearestSupernodeAddresslist = await localbitcoinplusplus.kademlia.addClosestSupernodeInDB(flo_addr);
|
||||||
nearestSupernodeAddresslist.map((nearestSupernodeAddress, index)=>{
|
nearestSupernodeAddresslist.map((nearestSupernodeAddress, index)=>{
|
||||||
updateinDB('myClosestSupernodes', {
|
updateinDB('myClosestSupernodes', {
|
||||||
@ -12547,11 +12559,6 @@
|
|||||||
deposit_arr
|
deposit_arr
|
||||||
.trader_flo_address
|
.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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -13852,13 +13859,7 @@
|
|||||||
(
|
(
|
||||||
"deposit",
|
"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);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -14761,28 +14762,8 @@
|
|||||||
.length > 0) {
|
.length > 0) {
|
||||||
// Delete orders
|
// Delete orders
|
||||||
try {
|
try {
|
||||||
_removeinDB(
|
_removeinDB("buyOrders", buyPipeObj.id);
|
||||||
"buyOrders",
|
_removeinDB("sellOrders", sellPipeObj.id);
|
||||||
buyPipeObj
|
|
||||||
.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)
|
|
||||||
.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) {
|
} catch (error) {
|
||||||
callback(false);
|
callback(false);
|
||||||
showMessage(`WARNING: Failed to delete respective buy and sell orders in an operation.`);
|
showMessage(`WARNING: Failed to delete respective buy and sell orders in an operation.`);
|
||||||
@ -15860,11 +15841,6 @@
|
|||||||
await addDB(resdbdata, obj[prop]);
|
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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -15942,14 +15918,7 @@
|
|||||||
.verify(cancel_request.trade_id, cancel_request.signed_trade_id,
|
.verify(cancel_request.trade_id, cancel_request.signed_trade_id,
|
||||||
trader_data.trader_flo_pubKey)) {
|
trader_data.trader_flo_pubKey)) {
|
||||||
removeinDB(tradeDB, cancel_request.trade_id)
|
removeinDB(tradeDB, cancel_request.trade_id)
|
||||||
.then((id) => {
|
.then((id) => showMessage(`Trade Id ${id} deleted.`));
|
||||||
// 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 {
|
} else {
|
||||||
showMessage(
|
showMessage(
|
||||||
`Failed to verify trade for trade id ${cancel_request.trade_id}`
|
`Failed to verify trade for trade id ${cancel_request.trade_id}`
|
||||||
@ -15982,20 +15951,8 @@
|
|||||||
trade_balance_res.supernode_sign, trade_balance_res.supernodePubKey)) {
|
trade_balance_res.supernode_sign, trade_balance_res.supernodePubKey)) {
|
||||||
// Delete orders in clients DB
|
// Delete orders in clients DB
|
||||||
try {
|
try {
|
||||||
removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id).then(()=>{
|
removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id);
|
||||||
// Update the DB Hash and inform rest
|
removeinDB("sellOrders", trade_balance_res.trade_infos.sell_order_id);
|
||||||
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) {
|
} catch (error) {
|
||||||
callback(false);
|
callback(false);
|
||||||
throw new Error(error);
|
throw new Error(error);
|
||||||
@ -16190,21 +16147,8 @@
|
|||||||
removeByIndex('deposit',
|
removeByIndex('deposit',
|
||||||
'trader_flo_address',
|
'trader_flo_address',
|
||||||
depositor_cash_data.trader_flo_address
|
depositor_cash_data.trader_flo_address
|
||||||
).then(()=>{
|
);
|
||||||
// Update the DB Hash and inform rest
|
removeinDB('withdraw_cash', withdraw_data.id);
|
||||||
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 = {
|
let update_cash_balance_obj = {
|
||||||
depositor_cash_data: depositor_cash_data,
|
depositor_cash_data: depositor_cash_data,
|
||||||
@ -16328,20 +16272,8 @@
|
|||||||
updateinDB('cash_balances', withdraw_success_response.depositor_cash_data);
|
updateinDB('cash_balances', withdraw_success_response.depositor_cash_data);
|
||||||
updateinDB('cash_balances', withdraw_success_response.withdrawer_cash_data);
|
updateinDB('cash_balances', withdraw_success_response.withdrawer_cash_data);
|
||||||
removeByIndex('deposit', 'trader_flo_address', withdraw_success_response.depositor_cash_data
|
removeByIndex('deposit', 'trader_flo_address', withdraw_success_response.depositor_cash_data
|
||||||
.trader_flo_address).then(()=>{
|
.trader_flo_address);
|
||||||
// Update the DB Hash and inform rest
|
removeinDB('withdraw_cash', withdraw_success_response.withdraw_id);
|
||||||
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 true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -16681,11 +16613,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 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) {
|
} catch (error) {
|
||||||
@ -16812,11 +16739,6 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Update the DB Hash and inform rest
|
|
||||||
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
|
|
||||||
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
|
|
||||||
localbitcoinplusplus.actions.getDBHash();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -16907,11 +16829,6 @@
|
|||||||
showMessage(`INFO: "${resdbdata}" datastore syncing is complete.`);
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -17221,11 +17138,6 @@
|
|||||||
await addDB(resdbdata, obj[prop]);
|
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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -17321,14 +17233,7 @@
|
|||||||
.verify(cancel_request.trade_id, cancel_request.signed_trade_id,
|
.verify(cancel_request.trade_id, cancel_request.signed_trade_id,
|
||||||
trader_data.trader_flo_pubKey)) {
|
trader_data.trader_flo_pubKey)) {
|
||||||
backup_server_db_instance.backup_removeinDB(tradeDB, cancel_request.trade_id)
|
backup_server_db_instance.backup_removeinDB(tradeDB, cancel_request.trade_id)
|
||||||
.then((id) => {
|
.then((id) =>showMessage(`Trade Id ${id} deleted.`));
|
||||||
// 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 {
|
} else {
|
||||||
showMessage(
|
showMessage(
|
||||||
`Failed to verify trade for trade id ${cancel_request.trade_id}`
|
`Failed to verify trade for trade id ${cancel_request.trade_id}`
|
||||||
@ -17363,22 +17268,8 @@
|
|||||||
|
|
||||||
// Delete orders in clients DB
|
// Delete orders in clients DB
|
||||||
try {
|
try {
|
||||||
removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id)
|
removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id);
|
||||||
.then(()=>{
|
removeinDB("sellOrders", trade_balance_res.trade_infos.sell_order_id);
|
||||||
// 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) {
|
} catch (error) {
|
||||||
callback(false);
|
callback(false);
|
||||||
throw new Error(error);
|
throw new Error(error);
|
||||||
@ -17650,21 +17541,8 @@
|
|||||||
backup_server_db_instance.backup_removeByIndex('deposit',
|
backup_server_db_instance.backup_removeByIndex('deposit',
|
||||||
'trader_flo_address',
|
'trader_flo_address',
|
||||||
depositor_cash_data.trader_flo_address
|
depositor_cash_data.trader_flo_address
|
||||||
).then(()=>{
|
);
|
||||||
// Update the DB Hash and inform rest
|
backup_server_db_instance.backup_removeinDB('withdraw_cash', withdraw_data.id);
|
||||||
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 = {
|
let update_cash_balance_obj = {
|
||||||
depositor_cash_data: depositor_cash_data,
|
depositor_cash_data: depositor_cash_data,
|
||||||
@ -17796,21 +17674,8 @@
|
|||||||
updateinDB('cash_balances', withdraw_success_response.depositor_cash_data);
|
updateinDB('cash_balances', withdraw_success_response.depositor_cash_data);
|
||||||
updateinDB('cash_balances', withdraw_success_response.withdrawer_cash_data);
|
updateinDB('cash_balances', withdraw_success_response.withdrawer_cash_data);
|
||||||
removeByIndex('deposit', 'trader_flo_address', withdraw_success_response.depositor_cash_data
|
removeByIndex('deposit', 'trader_flo_address', withdraw_success_response.depositor_cash_data
|
||||||
.trader_flo_address).then(()=>{
|
.trader_flo_address);
|
||||||
// Update the DB Hash and inform rest
|
removeinDB('withdraw_cash', withdraw_success_response.withdraw_id);
|
||||||
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 true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -18192,11 +18057,6 @@
|
|||||||
await BACKUP_DB.backup_addDB(resdbdata, obj[prop]);
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -18595,11 +18455,6 @@
|
|||||||
await addDB(resdbdata, obj[prop]);
|
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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -18777,14 +18632,7 @@
|
|||||||
.verify(cancel_request.trade_id, cancel_request.signed_trade_id,
|
.verify(cancel_request.trade_id, cancel_request.signed_trade_id,
|
||||||
trader_data.trader_flo_pubKey)) {
|
trader_data.trader_flo_pubKey)) {
|
||||||
backup_server_db_instance.backup_removeinDB(tradeDB, cancel_request.trade_id)
|
backup_server_db_instance.backup_removeinDB(tradeDB, cancel_request.trade_id)
|
||||||
.then((id) => {
|
.then((id) => showMessage(`Trade Id ${id} deleted.`));
|
||||||
// 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 {
|
} else {
|
||||||
showMessage(
|
showMessage(
|
||||||
`Failed to verify trade for trade id ${cancel_request.trade_id}`
|
`Failed to verify trade for trade id ${cancel_request.trade_id}`
|
||||||
@ -18836,22 +18684,8 @@
|
|||||||
|
|
||||||
// Delete orders in clients DB
|
// Delete orders in clients DB
|
||||||
try {
|
try {
|
||||||
backup_server_db_instance.backup_removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id)
|
backup_server_db_instance.backup_removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id);
|
||||||
.then(()=>{
|
backup_server_db_instance.backup_removeinDB("sellOrders", trade_balance_res.trade_infos.sell_order_id);
|
||||||
// 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) {
|
} catch (error) {
|
||||||
callback(false);
|
callback(false);
|
||||||
throw new Error(error);
|
throw new Error(error);
|
||||||
@ -18954,21 +18788,8 @@
|
|||||||
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.depositor_cash_data);
|
||||||
backup_server_db_instance.backup_updateinDB('cash_balances', withdraw_success_response.withdrawer_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
|
backup_server_db_instance.backup_removeByIndex('deposit', 'trader_flo_address', withdraw_success_response.depositor_cash_data
|
||||||
.trader_flo_address).then(()=>{
|
.trader_flo_address);
|
||||||
// Update the DB Hash and inform rest
|
backup_server_db_instance.backup_removeinDB('withdraw_cash', withdraw_success_response.withdraw_id);
|
||||||
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 true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -19423,11 +19244,6 @@
|
|||||||
showMessage(`INFO: "${resdbdata}" datastore syncing is complete.`);
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -19440,7 +19256,7 @@
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "hash_of_a_supernode_db_response":
|
case "do_you_have_latest_data_for_this_supernode":
|
||||||
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
|
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
|
||||||
.includes(res_obj.nodePubKey)) {
|
.includes(res_obj.nodePubKey)) {
|
||||||
const response_object = res_obj.params[0];
|
const response_object = res_obj.params[0];
|
||||||
@ -19458,16 +19274,18 @@
|
|||||||
throw new Error(backup_db_error_msg);
|
throw new Error(backup_db_error_msg);
|
||||||
};
|
};
|
||||||
|
|
||||||
backup_server_db_instance.backup_readDB('supernodesDbHash', response_object.id)
|
// backup_server_db_instance.backup_readDB('supernodesDbHash', response_object.id)
|
||||||
.then(old_db_hash_obj=>{
|
// .then(old_db_hash_obj=>{
|
||||||
if(typeof old_db_hash_obj=="object") {
|
// if(typeof old_db_hash_obj=="object") {
|
||||||
if((old_db_hash_obj.vectorClock>=response_object.vectorClock)
|
// if((old_db_hash_obj.vectorClock>=response_object.vectorClock)
|
||||||
|| (old_db_hash_obj.timestamp>=response_object.timestamp)) return;
|
// || (old_db_hash_obj.timestamp>=response_object.timestamp)) return;
|
||||||
}
|
// }
|
||||||
backup_server_db_instance.backup_updateinDB('supernodesDbHash', response_object)
|
// backup_server_db_instance.backup_updateinDB('supernodesDbHash', response_object)
|
||||||
.then(()=>showMessage(`INFO: Datastore "supernodesDbHash" updated
|
// .then(()=>showMessage(`INFO: Datastore "supernodesDbHash" updated
|
||||||
with hash ${response_object.DBHash} on ${response_object.timestamp}.`));
|
// with hash ${response_object.DBHash} on ${response_object.timestamp}.`));
|
||||||
});
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -19503,7 +19321,8 @@
|
|||||||
|
|
||||||
for (key in my_db_hash_obj) {
|
for (key in my_db_hash_obj) {
|
||||||
if (my_db_hash_obj.hasOwnProperty(key)) {
|
if (my_db_hash_obj.hasOwnProperty(key)) {
|
||||||
if (response_object[key] && response_object[key] !== my_db_hash_obj[key]
|
if (response_object[key]
|
||||||
|
&& response_object[key] !== my_db_hash_obj[key]
|
||||||
&& !['DBHash', 'data_of', 'id', 'timestamp', 'vectorClock'].includes(key)) {
|
&& !['DBHash', 'data_of', 'id', 'timestamp', 'vectorClock'].includes(key)) {
|
||||||
diffs[key] = my_db_hash_obj[key];
|
diffs[key] = my_db_hash_obj[key];
|
||||||
}
|
}
|
||||||
@ -20072,11 +19891,6 @@
|
|||||||
await store.add(dbObject);
|
await store.add(dbObject);
|
||||||
await request.complete;
|
await request.complete;
|
||||||
console.info("Data added in " + tablename);
|
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;
|
return dbObject;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return new Error(error);
|
return new Error(error);
|
||||||
@ -20119,11 +19933,6 @@
|
|||||||
await store.put(Obj);
|
await store.put(Obj);
|
||||||
await request.complete;
|
await request.complete;
|
||||||
}
|
}
|
||||||
// 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;
|
return Obj;
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -20455,13 +20264,6 @@
|
|||||||
await store.add(dbObject);
|
await store.add(dbObject);
|
||||||
await this.request.complete;
|
await this.request.complete;
|
||||||
console.info("Data added in " + tablename);
|
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;
|
return dbObject;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return new Error(error);
|
return new Error(error);
|
||||||
@ -20502,13 +20304,6 @@
|
|||||||
await that.request.complete;
|
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
resolve(Obj);
|
resolve(Obj);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -20516,15 +20311,6 @@
|
|||||||
} else {
|
} else {
|
||||||
await store.put(Obj);
|
await store.put(Obj);
|
||||||
await that.request.complete;
|
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;
|
return Obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21654,14 +21440,12 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Find out if you are the next eligible backup supernode,
|
// Find out if you are the next eligible backup supernode,
|
||||||
// If true, send dead supernode's data to all your backup supernodes
|
|
||||||
// which are not dead supernode's backup supernodes to sync
|
|
||||||
// data from you
|
|
||||||
const mcs = await readAllDB('myClosestSupernodes');
|
const mcs = await readAllDB('myClosestSupernodes');
|
||||||
const index = mcs.findIndex(f=>f.trader_flo_address==getFLOId);
|
const index = mcs.findIndex(f=>f.trader_flo_address==getFLOId);
|
||||||
tail = mcs.splice(0, index);
|
tail = mcs.splice(0, index);
|
||||||
const newClosestSupernodeMasterList = mcs.concat(tail);
|
const newClosestSupernodeMasterList = mcs.concat(tail);
|
||||||
|
|
||||||
for(i=0; i<=newClosestSupernodeMasterList.length; i++) {
|
for(i=0; i<=newClosestSupernodeMasterList.length; i++) {
|
||||||
if(newClosestSupernodeMasterList[i].is_live==true) break;
|
if(newClosestSupernodeMasterList[i].is_live==true) break;
|
||||||
if(newClosestSupernodeMasterList[i].trader_flo_address==
|
if(newClosestSupernodeMasterList[i].trader_flo_address==
|
||||||
@ -21671,29 +21455,42 @@
|
|||||||
// If not, either get the data or don't serve the users of
|
// If not, either get the data or don't serve the users of
|
||||||
// that dead supernode.
|
// that dead supernode.
|
||||||
|
|
||||||
await localbitcoinplusplus.actions.getDBHash(getFLOId);
|
const tableArray = ["deposit", "withdraw_cash", "withdraw_btc", "cash_balances",
|
||||||
|
"crypto_balances", "buyOrders", "sellOrders", "system_btc_reserves_private_keys"];
|
||||||
|
|
||||||
|
const su_db_data = await localbitcoinplusplus.actions.get_sharable_db_data(tableArray, getFLOId);
|
||||||
|
|
||||||
|
const dbHashData = await localbitcoinplusplus.actions.getDBTablesLatestHashAndTimestamp(getFLOId, su_db_data);
|
||||||
|
|
||||||
|
// Now you have db tables timestamp and tables hashes. Send it to other supernodes to check
|
||||||
|
// if you have the latest data. If you don't have the latest data, someone
|
||||||
|
// will send you the latest data which you can verify before updating.
|
||||||
|
|
||||||
|
RM_RPC
|
||||||
|
.send_rpc
|
||||||
|
.call(this, "do_you_have_latest_data_for_this_supernode", dbHashData)
|
||||||
|
.then(server_sync_response=>doSend(server_sync_response));
|
||||||
|
|
||||||
|
// Send dead supernode's data to all your backup supernodes
|
||||||
|
// which are not dead supernode's backup supernodes to sync
|
||||||
|
// data from you
|
||||||
|
|
||||||
const nonBackUpSusForDeadSu = newClosestSupernodeMasterList
|
const nonBackUpSusForDeadSu = newClosestSupernodeMasterList
|
||||||
.filter(function(obj) { return mcs.indexOf(obj) == -1; });
|
.filter(function(obj) { return mcs.indexOf(obj) == -1; });
|
||||||
|
|
||||||
console.log(nonBackUpSusForDeadSu);
|
console.log(nonBackUpSusForDeadSu);
|
||||||
|
|
||||||
const tableArray = ["deposit", "withdraw_cash", "withdraw_btc", "cash_balances"
|
if (typeof su_db_data == "object") {
|
||||||
, "crypto_balances", "buyOrders", "sellOrders", "system_btc_reserves_private_keys"];
|
nonBackUpSusForDeadSu.map(nbs=>{
|
||||||
|
su_db_data.trader_flo_address = nbs.trader_flo_address;
|
||||||
|
su_db_data.receiver_flo_address = nbs.trader_flo_address;
|
||||||
|
|
||||||
localbitcoinplusplus.actions.get_sharable_db_data(tableArray, getFLOId)
|
RM_RPC
|
||||||
.then(function (su_db_data) {
|
.send_rpc
|
||||||
if (typeof su_db_data == "object") {
|
.call(this, "sync_backup_supernode_from_backup_supernode_response", su_db_data)
|
||||||
nonBackUpSusForDeadSu.map(nbs=>{
|
.then(server_sync_response=>doSend(server_sync_response, nbs.trader_flo_address));
|
||||||
su_db_data.trader_flo_address = nbs.trader_flo_address;
|
});
|
||||||
su_db_data.receiver_flo_address = nbs.trader_flo_address;
|
}
|
||||||
RM_RPC
|
|
||||||
.send_rpc
|
|
||||||
.call(this, "sync_backup_supernode_from_backup_supernode_response", su_db_data)
|
|
||||||
.then(server_sync_response=>doSend(server_sync_response, nbs.trader_flo_address));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user