fixed issues on having left-right supernodes
This commit is contained in:
parent
9e8e2587d5
commit
cb00785ab6
@ -10072,12 +10072,24 @@
|
||||
`masterFLOPubKey=029EF7838D4D103E62262394B5417E8ABFD75539D19E61CA5FD0C2051B69B29910
|
||||
#!#tradableAsset1=BTC,FLO,BTC_TEST,FLO_TEST#!#tradableAsset2=INR,USD,BTC,FLO,BTC_TEST,FLO_TEST,
|
||||
#!#validTradingAmount=10000,50000,100000,#!#btcTradeMargin=5000
|
||||
#!#MaxBackups=3
|
||||
#!#supernodesPubKeys=0315C3A20FE7096CC2E0F81A80D5F1A687B8F9EFA65242A0B0881E1BA3EE7D7D53,
|
||||
03F7493F11B8E44B9798CD434D20FBE7FA34B9779D144984889D11A17C56A18742,039B4AA00DBFC0A6631DE6DA83526611A0E6B857D3579DF840BBDEAE8B6898E3B6,
|
||||
03C8E3836C9A77E2AF03D4265D034BA85732738919708EAF6A16382195AE796EDF,0349B08AA1ABDCFFB6D78CD7C949665AD2FF065EA02B3C6C47A5E9592C9A1C6BCB,
|
||||
026FCC6CFF6EB3A39E54BEB6E13FC2F02C3A93F4767AA80E49E7E876443F95AE5F,029CDB29270DC5087EF4903E8C2364552C62E935FBAA1A96AB53CC5791C7EF2067,
|
||||
022EC1D090960D9EFFFC60FDC34AB97A8395A5F6D1326DD1B1380BD9F6E31981CA,037C623A8D31DB751F666A1D2C65EC8996C5978348CEEE8566F480708D4A6335AB,
|
||||
032871A74D2DDA9D0DE7135F58B5BD2D7F679D2CCA20EA7909466D1A6912DF4022
|
||||
#!#externalFiles={"d3js":"58f54395efa8346e8e94d12609770f66b916897e7f4e05f6c98780cffa5c70a3"},
|
||||
#!#ShamirsMaxShares=8#!#supernodeSeeds={"ranchimall1":{"ip":"127.0.0.1","port":"9001","kbucketId":"oZxHcbSf1JC8t5GjutopWYXs7C6Fe9p7ps"},
|
||||
"ranchimall2":{"ip":"127.0.0.1","port":"9002","kbucketId":"oTWjPupy3Z7uMdPcu5uXd521HBkcsLuSuM"},
|
||||
"ranchimall3":{"ip":"127.0.0.1","port":"9003","kbucketId":"odYA6KagmbokSh9GY7yAfeTUZRtZLwecY1"}}`;
|
||||
"ranchimall3":{"ip":"127.0.0.1","port":"9003","kbucketId":"odYA6KagmbokSh9GY7yAfeTUZRtZLwecY1"},
|
||||
"ranchimall4":{"ip":"127.0.0.1","port":"9004","kbucketId":"oJosrve9dBv2Hj2bfncxv2oEpTysg3Wejv"},
|
||||
"ranchimall5":{"ip":"127.0.0.1","port":"9005","kbucketId":"oMhv5sAzqg77sYHxmUGZWKRrVo4P4JQduS"},
|
||||
"ranchimall6":{"ip":"127.0.0.1","port":"9006","kbucketId":"oV1wCeWca3VawbBTfUGKA7Vd368PATnKAx"},
|
||||
"ranchimall7":{"ip":"127.0.0.1","port":"9007","kbucketId":"oSqFZePXibNJqeiboTYmmaqqVkd6esDUfZ"},
|
||||
"ranchimall8":{"ip":"127.0.0.1","port":"9008","kbucketId":"odUQekfMPsZV3ocneFW8SNSZADFtx9xUtm"},
|
||||
"ranchimall9":{"ip":"127.0.0.1","port":"9009","kbucketId":"oLYeoBfXWxKkUmRxhn1pcmJWtTu5kZoUJq"},
|
||||
"ranchimall10":{"ip":"127.0.0.1","port":"9010","kbucketId":"oJJe8wkADkCT28BMLkyf79fqBZeoF21cXL"}}`;
|
||||
// RMAssets =
|
||||
// `tradableAsset1=BTC,FLO,BTC_TEST,FLO_TEST#!#tradableAsset2=INR,USD,BTC,FLO,BTC_TEST,FLO_TEST,
|
||||
// #!#supernodes=127.0.0.1,212.88.88.2#!#MASTER_NODE=023B9F60692A17FAC805D012C5C8ADA3DD19A980A3C5F0D8A5B3500CC54D6E8B75
|
||||
@ -10139,6 +10151,17 @@
|
||||
"receiver_flo_address": backup_su,
|
||||
}).then(sync_request=>doSend(sync_request, backup_su));
|
||||
},
|
||||
|
||||
sync_backup_supernode_from_backup_supernode: function (requester="", receiver="", 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=>doSend(sync_request, receiver));
|
||||
},
|
||||
|
||||
get_sharable_db_data: async function (dbTableNamesArray, backup_db="") {
|
||||
let arr = {};
|
||||
@ -12585,6 +12608,33 @@
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
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"];
|
||||
|
||||
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, params.trader_flo_address));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
RM_RPC.filter_legit_backup_requests(params.trader_flo_address, async function (is_valid_request) {
|
||||
if (is_valid_request !== true) return false;
|
||||
@ -15114,12 +15164,12 @@
|
||||
|
||||
// Connect with backup supernodes
|
||||
wsUri.filter((uri, index)=>{
|
||||
if(index>0 && localbitcoinplusplus.master_configurations.supernodesPubKeys
|
||||
if(index>0 && index<=localbitcoinplusplus.master_configurations.MaxBackups
|
||||
&& localbitcoinplusplus.master_configurations.supernodesPubKeys
|
||||
.includes(localbitcoinplusplusObj.myLocalFLOPublicKey)) {
|
||||
return uri;
|
||||
}
|
||||
}).map((uri, index)=>{
|
||||
console.log(uri);
|
||||
backUpSupernodesWS[uri.trader_flo_address] = new backupSupernodesWebSocketObject(`ws://${uri.ip}:${uri.port}`);
|
||||
backUpSupernodesWS[uri.trader_flo_address].connectWS();
|
||||
|
||||
@ -15173,20 +15223,37 @@
|
||||
|
||||
// Check last connected supernode, if not primary then
|
||||
// update the user data from other su first
|
||||
if (typeof idbData.lastConnectedSupernode == "string"
|
||||
&& idbData.lastConnectedSupernode !== wsUri[0].trader_flo_address) {
|
||||
showMessage(`INFO: We are fetching your latest data. This could take some time. Do not close the window until then.`);
|
||||
|
||||
// Get data for deposits and withdraw starting from first (and currently alive) backup supernode
|
||||
// readAllDB('myClosestSupernodes').then(cs=>{
|
||||
// // for (let index = cs.length; index > 0; index--) {
|
||||
if (localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(idbData.myLocalFLOPublicKey)) {
|
||||
if (typeof idbData.lastConnectedSupernode == "string"
|
||||
&& idbData.lastConnectedSupernode !== wsUri[0].trader_flo_address) {
|
||||
showMessage(`INFO: We are fetching your latest data. This could take some time. Do not close the window until then.`);
|
||||
|
||||
// });
|
||||
let getPrimarySuObj = await localbitcoinplusplus.kademlia.determineClosestSupernode(idbData.myLocalFLOAddress, 3);
|
||||
for (let index = 1; index <= cs.length-1; index++) {
|
||||
localbitcoinplusplus.actions
|
||||
.sync_primary_supernode_from_backup_supernode(getPrimarySuObj[0].data.id, getPrimarySuObj[index].data.id);
|
||||
}
|
||||
// Get data for deposits and withdraw starting from first (and currently alive) backup supernode
|
||||
let closestSuNodes = await readAllDB('myClosestSupernodes');
|
||||
let firstAliveBackupFloIdForPrimarySupernode;
|
||||
|
||||
for (let index = 1; index <= closestSuNodes.length-1; index++) {
|
||||
if (closestSuNodes[index].is_live==true && typeof firstAliveBackupFloIdForPrimarySupernode !== "string") {
|
||||
firstAliveBackupFloIdForPrimarySupernode = closestSuNodes[index].trader_flo_address;
|
||||
localbitcoinplusplus.actions
|
||||
.sync_primary_supernode_from_backup_supernode(closestSuNodes[0].trader_flo_address, firstAliveBackupFloIdForPrimarySupernode);
|
||||
}
|
||||
}
|
||||
|
||||
// Update backup db as well for all supernodes you're serving as backup
|
||||
for (let index = 1; index <= closestSuNodes.length-1; index++) {
|
||||
let firstAliveBackupFloIdForBackupSupernode;
|
||||
if (closestSuNodes[index].is_live==true && typeof firstAliveBackupFloIdForBackupSupernode !== "string") {
|
||||
firstAliveBackupFloIdForBackupSupernode = closestSuNodes[index].trader_flo_address;
|
||||
localbitcoinplusplus.actions
|
||||
.sync_backup_supernode_from_backup_supernode(closestSuNodes[0].trader_flo_address,
|
||||
firstAliveBackupFloIdForBackupSupernode, closestSuNodes[index].trader_flo_address);
|
||||
} else {
|
||||
// it will ask backup from backup su next closest
|
||||
console.info(`da daa`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// rebuild private key
|
||||
@ -15210,7 +15277,8 @@
|
||||
|
||||
// Connect with backup supernodes
|
||||
wsUri.filter((uri, index)=>{
|
||||
if(index>0 && localbitcoinplusplus.master_configurations.supernodesPubKeys
|
||||
if(index>0 && index<=localbitcoinplusplus.master_configurations.MaxBackups
|
||||
&& localbitcoinplusplus.master_configurations.supernodesPubKeys
|
||||
.includes(idbData.myLocalFLOPublicKey)) {
|
||||
return uri;
|
||||
}
|
||||
@ -15243,6 +15311,7 @@
|
||||
backupSupernodesWebSocketObject.prototype = {
|
||||
|
||||
async handle_backup_server_messages(evt) {
|
||||
|
||||
var response = evt.data;
|
||||
writeToScreen('backup response: '+response);
|
||||
|
||||
@ -15367,23 +15436,50 @@
|
||||
|
||||
break;
|
||||
|
||||
case "trade_buy_request_response":
|
||||
if (typeof res_obj.params !== "object"
|
||||
|| typeof res_obj.params[0] !== "object") return;
|
||||
let buyOrders_data = res_obj.params[0];
|
||||
case "trade_buy_request_response":
|
||||
if (typeof res_obj.params !== "object"
|
||||
|| typeof res_obj.params[0] !== "object") return;
|
||||
let buyOrders_data = res_obj.params[0];
|
||||
|
||||
if (typeof localbitcoinplusplus.master_configurations.supernodesPubKeys == "object" &&
|
||||
localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(
|
||||
buyOrders_data.supernodePubKey)) {
|
||||
if (typeof localbitcoinplusplus.master_configurations.supernodesPubKeys == "object" &&
|
||||
localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(
|
||||
buyOrders_data.supernodePubKey)) {
|
||||
let isDataSignedBySuperNode = RM_WALLET
|
||||
.verify(buyOrders_data.data_hash, buyOrders_data.supernode_sign,
|
||||
buyOrders_data.supernodePubKey);
|
||||
if (isDataSignedBySuperNode === true) {
|
||||
|
||||
let getPrimarySuObj = await localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj[0].trader_flo_address);
|
||||
const primarySupernode = getPrimarySuObj[0].data.id;
|
||||
const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernode];
|
||||
|
||||
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);
|
||||
};
|
||||
|
||||
// Add buy order
|
||||
backup_server_db_instance.backup_addDB("buyOrders", buyOrders_data).then(() => {
|
||||
showMessage(`Your buy order is placed successfully.`);
|
||||
});
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "trade_sell_request_response":
|
||||
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
|
||||
let sellOrders_data = res_obj.params[0];
|
||||
if (typeof localbitcoinplusplus.master_configurations.supernodesPubKeys == "object" &&
|
||||
localbitcoinplusplus.master_configurations.supernodesPubKeys
|
||||
.includes(sellOrders_data.supernodePubKey)) {
|
||||
let isDataSignedBySuperNode = RM_WALLET
|
||||
.verify(buyOrders_data.data_hash, buyOrders_data.supernode_sign,
|
||||
buyOrders_data.supernodePubKey);
|
||||
.verify(sellOrders_data.data_hash, sellOrders_data.supernode_sign,
|
||||
sellOrders_data.supernodePubKey);
|
||||
if (isDataSignedBySuperNode === true) {
|
||||
|
||||
let getPrimarySuObj = await localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj[0].trader_flo_address);
|
||||
const primarySupernode = getPrimarySuObj[0].data.id;
|
||||
const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernode];
|
||||
|
||||
|
||||
if(typeof backup_server_db_instance !== "object") {
|
||||
let backup_db_error_msg = `WARNING: Unknown DB instance. DB Backup failed.`;
|
||||
showMessage(backup_db_error_msg);
|
||||
@ -15391,111 +15487,84 @@
|
||||
};
|
||||
|
||||
// Add buy order
|
||||
backup_server_db_instance.backup_addDB("buyOrders", buyOrders_data).then(() => {
|
||||
showMessage(`Your buy order is placed successfully.`);
|
||||
backup_server_db_instance.backup_addDB("sellOrders", sellOrders_data).then(() => {
|
||||
showMessage(`Your sell order is placed successfully.`);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "trade_sell_request_response":
|
||||
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
|
||||
let sellOrders_data = res_obj.params[0];
|
||||
if (typeof localbitcoinplusplus.master_configurations.supernodesPubKeys == "object" &&
|
||||
localbitcoinplusplus.master_configurations.supernodesPubKeys
|
||||
.includes(sellOrders_data.supernodePubKey)) {
|
||||
let isDataSignedBySuperNode = RM_WALLET
|
||||
.verify(sellOrders_data.data_hash, sellOrders_data.supernode_sign,
|
||||
sellOrders_data.supernodePubKey);
|
||||
if (isDataSignedBySuperNode === true) {
|
||||
let getPrimarySuObj = await localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj[0].trader_flo_address);
|
||||
const primarySupernode = getPrimarySuObj[0].data.id;
|
||||
const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernode];
|
||||
|
||||
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);
|
||||
};
|
||||
break;
|
||||
|
||||
case "deposit_asset_request_response":
|
||||
if (typeof res_obj.params !== "object"
|
||||
|| typeof res_obj.params[0] !== "object") return;
|
||||
let deposit_res_data = res_obj.params[0];
|
||||
RM_RPC.filter_legit_backup_requests(deposit_res_data.trader_flo_address,
|
||||
async function (is_valid_request) {
|
||||
if(!is_valid_request) return false;
|
||||
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object"
|
||||
&& typeof res_obj.params[0].data == "object") {
|
||||
let resp = res_obj.params[0];
|
||||
if (RM_WALLET
|
||||
.verify(resp.data.depositDataHash, resp.data.order_validator_sign, resp.data.order_validator_public_key)
|
||||
) {
|
||||
let getPrimarySuObj = await localbitcoinplusplus.kademlia.determineClosestSupernode(resp.data.trader_flo_address);
|
||||
const primarySupernode = getPrimarySuObj[0].data.id;
|
||||
const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernode];
|
||||
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);
|
||||
};
|
||||
|
||||
// Add buy order
|
||||
backup_server_db_instance.backup_addDB("sellOrders", sellOrders_data).then(() => {
|
||||
showMessage(`Your sell order is placed successfully.`);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "deposit_asset_request_response":
|
||||
if (typeof res_obj.params !== "object"
|
||||
|| typeof res_obj.params[0] !== "object") return;
|
||||
let deposit_res_data = res_obj.params[0];
|
||||
RM_RPC.filter_legit_backup_requests(deposit_res_data.trader_flo_address,
|
||||
async function (is_valid_request) {
|
||||
if(!is_valid_request) return false;
|
||||
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object"
|
||||
&& typeof res_obj.params[0].data == "object") {
|
||||
let resp = res_obj.params[0];
|
||||
if (RM_WALLET
|
||||
.verify(resp.data.depositDataHash, resp.data.order_validator_sign, resp.data.order_validator_public_key)
|
||||
) {
|
||||
let getPrimarySuObj = await localbitcoinplusplus.kademlia.determineClosestSupernode(resp.data.trader_flo_address);
|
||||
const primarySupernode = getPrimarySuObj[0].data.id;
|
||||
const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernode];
|
||||
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);
|
||||
};
|
||||
|
||||
backup_server_db_instance.backup_addDB('deposit', resp.data);
|
||||
if (typeof resp.withdrawer_data == "object") {
|
||||
backup_server_db_instance.backup_updateinDB("withdraw_cash", resp.withdrawer_data, resp.withdrawer_data.trader_flo_address);
|
||||
}
|
||||
backup_server_db_instance.backup_readDB("localbitcoinUser", "00-01").then(function (user) {
|
||||
if (typeof user == "object" && user.myLocalFLOAddress == resp.data.trader_flo_address) {
|
||||
let counterTraderAccountAddress =
|
||||
`<p><strong>Please pay the amount to following address:</strong></p>
|
||||
<p>${resp.msg}</p>`;
|
||||
showMessage(counterTraderAccountAddress);
|
||||
modalWindow(counterTraderAccountAddress);
|
||||
backup_server_db_instance.backup_addDB('deposit', resp.data);
|
||||
if (typeof resp.withdrawer_data == "object") {
|
||||
backup_server_db_instance.backup_updateinDB("withdraw_cash", resp.withdrawer_data, resp.withdrawer_data.trader_flo_address);
|
||||
}
|
||||
});
|
||||
backup_server_db_instance.backup_readDB("localbitcoinUser", "00-01").then(function (user) {
|
||||
if (typeof user == "object" && user.myLocalFLOAddress == resp.data.trader_flo_address) {
|
||||
let counterTraderAccountAddress =
|
||||
`<p><strong>Please pay the amount to following address:</strong></p>
|
||||
<p>${resp.msg}</p>`;
|
||||
showMessage(counterTraderAccountAddress);
|
||||
modalWindow(counterTraderAccountAddress);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
break;
|
||||
});
|
||||
break;
|
||||
|
||||
case "withdrawal_request_response":
|
||||
if (typeof res_obj.params !== "object"
|
||||
|| typeof res_obj.params[0] !== "object") return;
|
||||
let withdrawal_res_data = res_obj.params[0];
|
||||
RM_RPC.filter_legit_backup_requests(withdrawal_res_data.trader_flo_address,
|
||||
async function (is_valid_request) {
|
||||
if(!is_valid_request) return false;
|
||||
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
|
||||
if (RM_WALLET
|
||||
.verify(res_obj.params[0].withdrawDataHash, res_obj.params[0].order_validator_sign,
|
||||
res_obj.params[0].order_validator_public_key)) {
|
||||
case "withdrawal_request_response":
|
||||
if (typeof res_obj.params !== "object"
|
||||
|| typeof res_obj.params[0] !== "object") return;
|
||||
let withdrawal_res_data = res_obj.params[0];
|
||||
RM_RPC.filter_legit_backup_requests(withdrawal_res_data.trader_flo_address,
|
||||
async function (is_valid_request) {
|
||||
if(!is_valid_request) return false;
|
||||
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
|
||||
if (RM_WALLET
|
||||
.verify(res_obj.params[0].withdrawDataHash, res_obj.params[0].order_validator_sign,
|
||||
res_obj.params[0].order_validator_public_key)) {
|
||||
|
||||
let getPrimarySuObj = await localbitcoinplusplus.kademlia
|
||||
.determineClosestSupernode(withdrawal_res_data.trader_flo_address);
|
||||
const primarySupernode = getPrimarySuObj[0].data.id;
|
||||
const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernode];
|
||||
let getPrimarySuObj = await localbitcoinplusplus.kademlia
|
||||
.determineClosestSupernode(withdrawal_res_data.trader_flo_address);
|
||||
const primarySupernode = getPrimarySuObj[0].data.id;
|
||||
const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernode];
|
||||
|
||||
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 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);
|
||||
};
|
||||
|
||||
backup_server_db_instance.backup_addDB('withdraw_cash', res_obj.params[0]).then(() => {
|
||||
showMessage(`Your cash withdrawal request is placed successfully.`);
|
||||
});
|
||||
backup_server_db_instance.backup_addDB('withdraw_cash', res_obj.params[0]).then(() => {
|
||||
showMessage(`Your cash withdrawal request is placed successfully.`);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
break;
|
||||
});
|
||||
break;
|
||||
|
||||
case "cancel_trade":
|
||||
if (typeof res_obj.params !== "object"
|
||||
@ -15949,7 +16018,7 @@
|
||||
reactor.dispatchEvent('backup_supernode_down');
|
||||
}.bind(this);
|
||||
this.ws_connection.onmessage = function (evt) {
|
||||
this.handle_backup_server_messages(evt);
|
||||
//this.handle_backup_server_messages(evt);
|
||||
}.bind(this);
|
||||
this.ws_connection.onerror = function (evt) {
|
||||
console.error(evt);
|
||||
@ -16154,6 +16223,8 @@
|
||||
processBackupUserOnMesssageRequest(response);
|
||||
return;
|
||||
}
|
||||
localbitcoinplusplus.backupWS.prototype.handle_backup_server_messages(response);
|
||||
return;
|
||||
}
|
||||
|
||||
if (typeof res_obj.method !== "undefined") {
|
||||
@ -17181,6 +17252,72 @@
|
||||
})();
|
||||
}
|
||||
break;
|
||||
|
||||
case "sync_backup_supernode_from_backup_supernode_response":
|
||||
|
||||
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
|
||||
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
|
||||
// ) return false;
|
||||
|
||||
(async function () {
|
||||
let i = 0;
|
||||
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.amIreadyToServePrimaryUsers = true;
|
||||
|
||||
//});
|
||||
}
|
||||
// skip loop if the property is from prototype
|
||||
if (tableStoreName == 'trader_flo_address'
|
||||
|| tableStoreName == 'receiver_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 localbitcoinplusplus.newBackupDatabase.db[trader_flo_address]
|
||||
.backup_updateinDB(tableStoreName, obj[prop], obj[prop]
|
||||
.trader_flo_address).then(()=>{
|
||||
showMessage(`INFO: "${tableStoreName}" datastore syncing is complete.`);
|
||||
});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
let resdbdata = await localbitcoinplusplus.newBackupDatabase.db[trader_flo_address]
|
||||
.backup_removeAllinDB(tableStoreName);
|
||||
if (resdbdata !== false) {
|
||||
if (obj.length > 0) {
|
||||
for (var prop in obj) {
|
||||
if (!obj.hasOwnProperty(prop)) continue;
|
||||
await localbitcoinplusplus.newBackupDatabase.db[trader_flo_address]
|
||||
.backup_addDB(resdbdata, obj[prop]).then(()=>{
|
||||
showMessage(`INFO: "${resdbdata}" datastore syncing is complete.`);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
})();
|
||||
}
|
||||
break;
|
||||
|
||||
case "reconnect_with_another_supernode":
|
||||
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
|
||||
@ -17262,7 +17399,8 @@
|
||||
return;
|
||||
}
|
||||
|
||||
if (res_obj.method !== "sync_primary_supernode_from_backup_supernode") {
|
||||
if (res_obj.method !== "sync_primary_supernode_from_backup_supernode"
|
||||
|| res_obj.method !== "sync_backup_supernode_from_backup_supernode") {
|
||||
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
|
||||
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
|
||||
let ifAllPrevSuAreDead = await localbitcoinplusplus.actions
|
||||
@ -17272,7 +17410,8 @@
|
||||
|
||||
if (ifAllPrevSuAreDead !== true) {
|
||||
console.log(res_obj);
|
||||
showMessage(`INFO: "checkIfAllPreviousSupernodesAreDeadForAUserNode" check failed.`)
|
||||
showMessage(`INFO: "checkIfAllPreviousSupernodesAreDeadForAUserNode" check failed.`);
|
||||
localbitcoinplusplus.backupWS.prototype.handle_backup_server_messages(response);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -18482,6 +18621,14 @@
|
||||
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)) {
|
||||
response_from_sever = RM_RPC.backup_receive_rpc_response.call(this,
|
||||
JSON.stringify(res_obj));
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
@ -18502,22 +18649,6 @@
|
||||
|
||||
function doSend(message, user_flo_id="") {
|
||||
|
||||
let wsConn = websocket;
|
||||
if (user_flo_id!=="") {
|
||||
try {
|
||||
wsConn = localbitcoinplusplus.backupWS[user_flo_id].ws_connection;
|
||||
} catch (error) {
|
||||
showMessage(`ERROR: Failed to determine WS connection with ${user_flo_id}.`);
|
||||
throw new Error(error);
|
||||
}
|
||||
}
|
||||
|
||||
if(wsConn.readyState !== 1) {
|
||||
let msg = "WARNING: Websocket not ready to broadcast messages.";
|
||||
showMessage(msg);
|
||||
console.warn(msg);
|
||||
return;
|
||||
}
|
||||
const request_array = ['send_back_shamirs_secret_supernode_pvtkey',
|
||||
'retrieve_shamirs_secret_supernode_pvtkey',
|
||||
'store_shamirs_secret_pvtkey_shares'];
|
||||
@ -18533,7 +18664,7 @@
|
||||
const message256hash = Crypto.SHA256(message);
|
||||
|
||||
if(typeof localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY !== "string")
|
||||
throw new Error(`Private key could not be found.`);
|
||||
throw new Error(`WARNING: Private key could not be found.`);
|
||||
|
||||
const nodeSignedMessage = RM_WALLET.sign(message256hash, localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY);
|
||||
|
||||
@ -18543,9 +18674,46 @@
|
||||
|
||||
finalMessage = JSON.stringify(msgObj);
|
||||
}
|
||||
|
||||
// The message is for a specific supernode only
|
||||
if (user_flo_id!=="" && user_flo_id.length>0) {
|
||||
try {
|
||||
wsConn = localbitcoinplusplus.backupWS[user_flo_id].ws_connection;
|
||||
if(wsConn.readyState !== 1) {
|
||||
let msg = "WARNING: Websocket not ready to broadcast messages.";
|
||||
showMessage(msg);
|
||||
console.warn(msg);
|
||||
return;
|
||||
}
|
||||
wsConn.send(finalMessage);
|
||||
} catch (error) {
|
||||
showMessage(`ERROR: Failed to determine WS connection with ${user_flo_id}.`);
|
||||
throw new Error(error);
|
||||
}
|
||||
|
||||
} else {
|
||||
// The message is for usernodes and all backup supernodes
|
||||
try {
|
||||
websocket.send(finalMessage);
|
||||
|
||||
localbitcoinplusplus.backupWS.map(ws_conn=>{
|
||||
if(ws_conn.readyState !== 1) {
|
||||
let msg = "WARNING: Websocket not ready to broadcast messages.";
|
||||
showMessage(msg);
|
||||
console.warn(msg);
|
||||
return;
|
||||
}
|
||||
ws_conn.send(finalMessage);
|
||||
});
|
||||
|
||||
} catch(error) {
|
||||
showMessage(`ERROR: Failed to determine WS connection with ${user_flo_id}.`);
|
||||
throw new Error(error);
|
||||
}
|
||||
}
|
||||
|
||||
writeToScreen("SENT: " + finalMessage);
|
||||
wsConn.send(finalMessage);
|
||||
|
||||
}
|
||||
|
||||
function validateIncomingMessage(message) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user