diff --git a/supernode/index.html b/supernode/index.html
index 8a5abaf..50c821b 100644
--- a/supernode/index.html
+++ b/supernode/index.html
@@ -10326,6 +10326,7 @@
if (typeof userFLoID !== "string" || userFLoID.length<1) {
console.warn(`Invalid FLO Id`);
+ reject(`Invalid FLO Id`);
return;
}
@@ -11356,6 +11357,12 @@
request.response = {};
let err_msg;
+ let recvr_flo_id = params.receiver_flo_address || request.globalParams.receiverFloId;
+ if (typeof recvr_flo_id == "string"
+ && recvr_flo_id.length > 0
+ && recvr_flo_id !==
+ localbitcoinplusplus.wallets.my_local_flo_address) return;
+
if (method=="sync_with_supernode") {
RM_RPC.filter_legit_requests(params.trader_flo_address, function (is_valid_request) {
if (is_valid_request === true && params.job ==
@@ -12278,6 +12285,10 @@
if (typeof params.btc_private_key_array !== "string" || typeof params.retrieve_pvtkey_req_id !==
"string") return false;
+
+ let rec_flo_id = params.receiver_flo_address || request.globalParams.receiverFloId;
+ if (typeof rec_flo_id == "undefined" || rec_flo_id !==
+ localbitcoinplusplus.wallets.my_local_flo_address) return;
let btc_private_key_str = params.btc_private_key_array;
let retrieve_pvtkey_req_id = params.retrieve_pvtkey_req_id;
@@ -12574,6 +12585,12 @@
!== localbitcoinplusplus.wallets.my_local_flo_address) return;
}
+ let recvr_flo_id = params.receiver_flo_address || request.globalParams.receiverFloId;
+ if (typeof recvr_flo_id == "string"
+ && recvr_flo_id.length > 0
+ && recvr_flo_id !==
+ localbitcoinplusplus.wallets.my_local_flo_address) return;
+
const RM_WALLET = new localbitcoinplusplus.wallets;
const RM_TRADE = new localbitcoinplusplus.trade;
const RM_RPC = new localbitcoinplusplus.rpc;
@@ -12610,6 +12627,7 @@
});
}
});
+ return;
}
if (method=="sync_primary_supernode_from_backup_supernode") {
@@ -12618,7 +12636,8 @@
if (is_valid_request === true && params.job ==
"SYNC_PRIMARY_SUPERNODE_DB_WITH_BACKUP_SUPERNODE_DB" && params.trader_flo_address.length >
0) {
- const tableArray = ["deposit", "withdraw_cash", "withdraw_btc", "cash_balances", "crypto_balances"];
+ const tableArray = ["deposit", "withdraw_cash", "withdraw_btc", "cash_balances", "crypto_balances",
+ "system_btc_reserves_private_keys"];
localbitcoinplusplus.actions.get_sharable_db_data(tableArray, params.trader_flo_address).then(
function (su_db_data) {
@@ -12635,6 +12654,7 @@
});
}
});
+ return;
}
if (method=="sync_backup_supernode_from_backup_supernode") {
@@ -12653,15 +12673,16 @@
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.requester_flo_id));
+ .send_rpc
+ .call(this, "sync_backup_supernode_from_backup_supernode_response",
+ su_db_data)
+ .then(server_sync_response=>
+ doSend(server_sync_response, params.requester_flo_id));
}
});
}
});
+ return;
}
let backup_server_db_instance;
@@ -12674,74 +12695,75 @@
let backup_db_error_msg = `WARNING: Unknown DB instance. DB Backup failed.`;
showMessage(backup_db_error_msg);
throw new Error(backup_db_error_msg);
- };
- }
+ };
- RM_RPC.filter_legit_backup_requests(params.trader_flo_address, async function (is_valid_request) {
- if (is_valid_request !== true) return false;
+ RM_RPC.filter_legit_backup_requests(params.trader_flo_address, async function (is_valid_request) {
+ if (is_valid_request !== true) return false;
- try {
- // CHECK HERE IF USER IS INDULGED IN ANY MORE TRADE. IF TRUE RETURN ERROR
- await backup_server_db_instance.backup_readAllDB("deposit").then(function (res) {
- if (typeof res == "object" && res.length > 0) {
- let canUserTrade = res.filter(function (user) {
- return (respective_trader_id == user.trader_flo_address
- && user.status==1);
- });
- if (canUserTrade.includes(true)) {
- request.response =
- `Trader id ${respective_trader_id} is not clear for trade currently.
- You must finish your previous pending orders to qualify again to trade.`;
-
- const RM_RPC = new localbitcoinplusplus.rpc;
- RM_RPC
- .send_rpc
- .call(this, "supernode_message", {
- "trader_flo_address": respective_trader_id,
- "receiver_flo_address": respective_trader_id,
- "server_msg": request.response
- }).then(server_response=>
- doSend(server_response));
-
- showMessage(request.response);
- throw new Error(request.response);
- return false;
- }
- }
- });
-
- // Check if user id is in deposit or withdraw. If true prevent him from trading
- await backup_server_db_instance.backup_readAllDB('withdraw_cash').then(function (res) {
- if (typeof res == "object") {
- let check_deposit_withdraw_id_array = res.filter(f => f.status === 2)
- .map(m => {
- if (m.trader_flo_address == respective_trader_id || m.deposit_withdraw_id_array ==
- respective_trader_id) {
- let server_msg =
- `Trader id ${respective_trader_id} is not clear for trade currently.
- You must finish your previous pending deposit/withdraw action to qualify again to trade.`;
-
- const RM_RPC = new localbitcoinplusplus.rpc;
- RM_RPC
- .send_rpc
- .call(this, "supernode_message", {
- "trader_flo_address": respective_trader_id,
- "receiver_flo_address": respective_trader_id,
- "server_msg": server_msg
- }).then(server_response=>
- doSend(server_response));
- showMessage(server_msg);
- throw new Error(
- "User has not finished previous pending actions."
- );
- }
+ try {
+ // CHECK HERE IF USER IS INDULGED IN ANY MORE TRADE. IF TRUE RETURN ERROR
+ await backup_server_db_instance.backup_readAllDB("deposit").then(function (res) {
+ if (typeof res == "object" && res.length > 0) {
+ let canUserTrade = res.filter(function (user) {
+ return (respective_trader_id == user.trader_flo_address
+ && user.status==1);
});
- }
- });
- } catch (error) {
- throw new Error(error);
- }
- });
+ if (canUserTrade.includes(true)) {
+ request.response =
+ `Trader id ${respective_trader_id} is not clear for trade currently.
+ You must finish your previous pending orders to qualify again to trade.`;
+
+ const RM_RPC = new localbitcoinplusplus.rpc;
+ RM_RPC
+ .send_rpc
+ .call(this, "supernode_message", {
+ "trader_flo_address": respective_trader_id,
+ "receiver_flo_address": respective_trader_id,
+ "server_msg": request.response
+ }).then(server_response=>
+ doSend(server_response));
+
+ showMessage(request.response);
+ throw new Error(request.response);
+ return false;
+ }
+ }
+ });
+
+ // Check if user id is in deposit or withdraw. If true prevent him from trading
+ await backup_server_db_instance.backup_readAllDB('withdraw_cash').then(function (res) {
+ if (typeof res == "object") {
+ let check_deposit_withdraw_id_array = res.filter(f => f.status === 2)
+ .map(m => {
+ if (m.trader_flo_address == respective_trader_id || m.deposit_withdraw_id_array ==
+ respective_trader_id) {
+ let server_msg =
+ `Trader id ${respective_trader_id} is not clear for trade currently.
+ You must finish your previous pending deposit/withdraw action to qualify again to trade.`;
+
+ const RM_RPC = new localbitcoinplusplus.rpc;
+ RM_RPC
+ .send_rpc
+ .call(this, "supernode_message", {
+ "trader_flo_address": respective_trader_id,
+ "receiver_flo_address": respective_trader_id,
+ "server_msg": server_msg
+ }).then(server_response=>
+ doSend(server_response));
+ showMessage(server_msg);
+ throw new Error(
+ "User has not finished previous pending actions."
+ );
+ }
+ });
+ }
+ });
+ } catch (error) {
+ throw new Error(error);
+ }
+ });
+
+ }
switch (method) {
case "trade_buy":
@@ -13599,8 +13621,12 @@
RM_RPC.filter_legit_backup_requests(params.trader_flo_address, function (is_valid_request) {
if (is_valid_request !== true) return false;
- if (typeof params.btc_private_key_array !== "string" || typeof params.retrieve_pvtkey_req_id !==
- "string") return false;
+ if (typeof params.btc_private_key_array !== "string"
+ || typeof params.retrieve_pvtkey_req_id !== "string") return false;
+
+ let rec_flo_id = params.receiver_flo_address || request.globalParams.receiverFloId;
+ if (typeof rec_flo_id == "undefined" || rec_flo_id !==
+ localbitcoinplusplus.wallets.my_local_flo_address) return;
backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[params.db_inst];
@@ -13643,11 +13669,10 @@
let transaction_key =
btc_reserves.supernode_transaction_key;
if (transaction_key.length > 0) {
- let btc_private_key =
- RM_WALLET.rebuild_private_key(
- btc_pk_shares_array,
- transaction_key);
- //console.log(btc_private_key);
+ let btc_private_key = RM_WALLET.rebuild_private_key(
+ btc_pk_shares_array, transaction_key);
+ console.log(btc_pk_shares_array);
+ console.log(transaction_key);
RM_TRADE.sendTransaction(
withdraw_res.product,
@@ -13658,30 +13683,12 @@
withdraw_res.currency,
withdraw_res.change_adress,
async function (res) {
- console.log(
- res
- );
- if (typeof res ==
- "string" &&
- res.length >
- 0) {
+ console.log(res);
+ if (typeof res == "string" && res.length > 0) {
try {
- let
- resp_obj =
- JSON
- .parse(
- res
- );
- let
- resp_txid =
- resp_obj
- .txid
- .result ||
- resp_obj
- .txid;
- let
- msg =
- `Transaction Id for your withdrawn crypto asset: ${resp_txid}`;
+ let resp_obj = JSON.parse(res);
+ let resp_txid = resp_obj.txid.result || resp_obj.txid;
+ let msg=`Transaction Id for your withdrawn crypto asset: ${resp_txid}`;
let withdrawer_crypto_bal_id = `${withdraw_res.trader_flo_address}_${withdraw_res.product}`;
backup_server_db_instance.backup_readDB
@@ -13694,47 +13701,24 @@
if (typeof res_bal !== "object") {
throw new Error(`FATAL ERROR: Failed to subtract balance of id ${withdrawer_crypto_bal_id} by ${EqCryptoWd}. `);
}
- res_bal
- .crypto_balance -=
- EqCryptoWd;
- backup_server_db_instance.backup_updateinDB
- (
- 'crypto_balances',
+ res_bal.crypto_balance -= EqCryptoWd;
+ backup_server_db_instance.backup_updateinDB
+ ('crypto_balances',
res_bal,
- withdraw_res
- .id
- )
- .then(
- res_obj => {
- const
- res_obj_str =
- JSON
- .stringify(
- res_obj
- );
- const
- res_obj_hash =
- Crypto
- .SHA256(
- res_obj_str
- );
- const
- res_obj_sign =
- RM_WALLET
- .sign(
- res_obj_hash,
- localbitcoinplusplus
- .wallets
- .MY_SUPERNODE_PRIVATE_KEY
- );
+ withdraw_res.id
+ ).then(res_obj => {
+ const res_obj_str = JSON.stringify(res_obj);
+ const res_obj_hash = Crypto.SHA256(res_obj_str);
+ const res_obj_sign = RM_WALLET
+ .sign(res_obj_hash,
+ localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY);
- const
- updateUserCryptoBalanceObject = {
- updatedBTCBalanceObject: res_bal,
- updatedBTCBalanceObjectSign: res_obj_sign,
- trader_flo_address: withdraw_res.trader_flo_address,
- receiver_flo_address: withdraw_res.trader_flo_address,
- }
+ const updateUserCryptoBalanceObject = {
+ updatedBTCBalanceObject: res_bal,
+ updatedBTCBalanceObjectSign: res_obj_sign,
+ trader_flo_address: withdraw_res.trader_flo_address,
+ receiver_flo_address: withdraw_res.trader_flo_address,
+ }
RM_RPC
.send_rpc(
@@ -14424,7 +14408,7 @@
throw new Error(error);
}
}
- }).catch(e => console.error(`No balance found in ${utxo_addr}: ${e}`));
+ }).catch(e => console.error(`ERROR: Failed to send tx from utxo ${utxo_addr}: ${e}`));
},
/*Finds the best buy sell id match for a trade*/
createTradePipes(trading_currency = "USD", backup_db="") {
@@ -15366,7 +15350,8 @@
return;
}
if (res_obj.method==="sync_backup_supernode_from_backup_supernode"
- || res_obj.method==="sync_primary_supernode_from_backup_supernode_response") {
+ || res_obj.method==="sync_primary_supernode_from_backup_supernode_response"
+ ) {
onMessage(response);
return;
}
@@ -15398,6 +15383,13 @@
reactor.dispatchEvent('nodeIsAlive', res_obj);
return;
}
+
+ // If you want to send Shamir shares from here write the req code below
+ if (res_obj.method=="send_back_shamirs_secret_btc_pvtkey") {
+ console.log(res_obj);
+ return;
+ }
+
}
}.bind(this);
this.ws_connection.onerror = function (evt) {
@@ -15611,7 +15603,10 @@
} else if(typeof res_obj.globalParams.primarySupernode=="string"
&& res_obj.globalParams.primarySupernode !== localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS) {
if (typeof res_obj.globalParams.receiverFloId !== 'string' ||
- res_obj.globalParams.receiverFloId !== localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS) {
+
+ res_obj.globalParams.receiverFloId == localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS) {
+ // ** Changed it for "retrieve_shamirs_secret_btc_pvtkey" when backup su is requeter
+ //res_obj.globalParams.receiverFloId !== localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS) {
processBackupUserOnMesssageRequest(response);
return;
}
@@ -15943,7 +15938,8 @@
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object" &&
typeof res_obj.params[0].private_key_chunk == "object" &&
typeof res_obj.params[0].retrieve_pvtkey_req_id == "string" &&
- typeof res_obj.params[0].withdraw_id == "string") {
+ typeof res_obj.params[0].withdraw_id == "string" &&
+ res_obj.params[0].receiver_flo_address === localbitcoinplusplus.wallets.my_local_flo_address) {
let shamirs_shares_response = res_obj.params[0];
let retrieve_pvtkey_req_id = res_obj.params[0].retrieve_pvtkey_req_id;
let withdraw_id = res_obj.params[0].withdraw_id;
@@ -15958,7 +15954,10 @@
retrieve_pvtkey_req_id]);
res_obj.params[0].trader_flo_address = localbitcoinplusplus.wallets.my_local_flo_address;
RM_RPC.receive_rpc_response.call(this, JSON.stringify(res_obj));
- btc_pvt_arr[retrieve_pvtkey_req_id] = []; // Unset the object
+
+ localbitcoinplusplus.actions.delay(300000).then(()=>{
+ btc_pvt_arr[retrieve_pvtkey_req_id] = []; // Unset the object
+ });
}
}
break;
@@ -16293,8 +16292,9 @@
.includes(res_obj.nodePubKey)) {
let updateUserCryptoBalanceResponseObject = res_obj.params[0];
let updateUserCryptoBalanceResponseString = JSON.stringify(
- updateUserCryptoBalanceResponseObject.updatedBTCBalanceObject);
- let isBalanceLegit = RM_WALLET.verify(updateUserCryptoBalanceResponseString,
+ updateUserCryptoBalanceResponseObject.updatedBTCBalanceObject);
+ let updateUserCryptoBalanceResponseStringHash = Crypto.SHA256(updateUserCryptoBalanceResponseString);
+ let isBalanceLegit = RM_WALLET.verify(updateUserCryptoBalanceResponseStringHash,
updateUserCryptoBalanceResponseObject.updatedBTCBalanceObjectSign,
res_obj.nodePubKey
);
@@ -17273,7 +17273,8 @@
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object" &&
typeof res_obj.params[0].private_key_chunk == "object" &&
typeof res_obj.params[0].retrieve_pvtkey_req_id == "string" &&
- typeof res_obj.params[0].withdraw_id == "string") {
+ typeof res_obj.params[0].withdraw_id == "string" &&
+ res_obj.params[0].receiver_flo_address === localbitcoinplusplus.wallets.my_local_flo_address) {
let shamirs_shares_response = res_obj.params[0];
let retrieve_pvtkey_req_id = res_obj.params[0].retrieve_pvtkey_req_id;
let withdraw_id = res_obj.params[0].withdraw_id;
@@ -17288,7 +17289,10 @@
retrieve_pvtkey_req_id]);
res_obj.params[0].trader_flo_address = localbitcoinplusplus.wallets.my_local_flo_address;
RM_RPC.backup_receive_rpc_response.call(this, JSON.stringify(res_obj));
- btc_pvt_arr[retrieve_pvtkey_req_id] = []; // Unset the object
+
+ localbitcoinplusplus.actions.delay(300000).then(()=>{
+ btc_pvt_arr[retrieve_pvtkey_req_id] = []; // Unset the object
+ });
}
}
break;
@@ -17675,8 +17679,9 @@
.includes(res_obj.nodePubKey)) {
let updateUserCryptoBalanceResponseObject = res_obj.params[0];
let updateUserCryptoBalanceResponseString = JSON.stringify(
- updateUserCryptoBalanceResponseObject.updatedBTCBalanceObject);
- let isBalanceLegit = RM_WALLET.verify(updateUserCryptoBalanceResponseString,
+ updateUserCryptoBalanceResponseObject.updatedBTCBalanceObject);
+ let updateUserCryptoBalanceResponseStringHash = Crypto.SHA256(updateUserCryptoBalanceResponseString);
+ let isBalanceLegit = RM_WALLET.verify(updateUserCryptoBalanceResponseStringHash,
updateUserCryptoBalanceResponseObject.updatedBTCBalanceObjectSign,
res_obj.nodePubKey
);
@@ -18828,7 +18833,9 @@
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object" &&
typeof res_obj.params[0].private_key_chunk == "object" &&
typeof res_obj.params[0].retrieve_pvtkey_req_id == "string" &&
- typeof res_obj.params[0].withdraw_id == "string") {
+ typeof res_obj.params[0].withdraw_id == "string" &&
+ res_obj.params[0].receiver_flo_address === localbitcoinplusplus.wallets.my_local_flo_address) {
+
let shamirs_shares_response = res_obj.params[0];
let retrieve_pvtkey_req_id = res_obj.params[0].retrieve_pvtkey_req_id;
let withdraw_id = res_obj.params[0].withdraw_id;
@@ -18843,7 +18850,10 @@
retrieve_pvtkey_req_id]);
res_obj.params[0].trader_flo_address = localbitcoinplusplus.wallets.my_local_flo_address;
RM_RPC.backup_receive_rpc_response.call(this, JSON.stringify(res_obj));
- btc_pvt_arr[retrieve_pvtkey_req_id] = []; // Unset the object
+
+ localbitcoinplusplus.actions.delay(300000).then(()=>{
+ btc_pvt_arr[retrieve_pvtkey_req_id] = []; // Unset the object
+ });
}
}
break;
@@ -18854,7 +18864,6 @@
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
let updateUserCryptoBalanceResponseObject = res_obj.params[0];
- console.log(res_obj.params[0]);
if(typeof res_obj.params[0].trader_flo_address !="string") return;
localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj.params[0].trader_flo_address)
@@ -18869,8 +18878,9 @@
};
let updateUserCryptoBalanceResponseString = JSON.stringify(
- updateUserCryptoBalanceResponseObject.updatedBTCBalanceObject);
- let isBalanceLegit = RM_WALLET.verify(updateUserCryptoBalanceResponseString,
+ updateUserCryptoBalanceResponseObject.updatedBTCBalanceObject);
+ let updateUserCryptoBalanceResponseStringHash = Crypto.SHA256(updateUserCryptoBalanceResponseString);
+ let isBalanceLegit = RM_WALLET.verify(updateUserCryptoBalanceResponseStringHash,
updateUserCryptoBalanceResponseObject.updatedBTCBalanceObjectSign,
res_obj.nodePubKey
);
@@ -20165,6 +20175,20 @@
}
}
+ if (!localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(idbData.myLocalFLOAddress)) {
+
+ if (typeof localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS == "string") {
+ idbData.lastConnectedTime = + new Date();
+ idbData.lastConnectedSupernode = localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS;
+ updateinDB('localbitcoinUser', idbData);
+ } else {
+ mss = `WARNING: Failed to update current supernode connected status in localbitcoinUser.`;
+ showMessage(mss);
+ throw new Error(mss);
+ }
+ }
+
// Show balances
displayBalances(idbData.myLocalFLOAddress);
@@ -20889,6 +20913,16 @@
if(localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(evt.flo_public_key)) {
+
+ // ReadyState was 3 when this node disconnected. Re-initiate the
+ // WS connection to be able to send/receive messages
+ if (typeof localbitcoinplusplus.backupWS[getFLOId]=="object") {
+ const back_ws_url = localbitcoinplusplus.backupWS[getFLOId].ws_url;
+ localbitcoinplusplus.backupWS[getFLOId] = null;
+ localbitcoinplusplus.backupWS[getFLOId] = new backupSupernodesWebSocketObject(back_ws_url);
+ localbitcoinplusplus.backupWS[getFLOId].connectWS();
+ }
+
msg = `INFO: Supernode ${getFLOId} joined.`;
const switchMyWS = new backupSupernodesWebSocketObject();
@@ -20906,22 +20940,22 @@
showMessage(`INFO: Connected successfully to Supernode: ${evt.srcElement.url}`);
console.log("CONNECTED");
- let my_local_data = await readDB('localbitcoinUser', '00-01');
- if (typeof my_local_data == "object"
- && !localbitcoinplusplus.master_configurations.supernodesPubKeys
- .includes(my_local_data.myLocalFLOAddress)) {
- const conn_su_flo_id = await switchMyWS.getFloIdFromWSUrl(evt.srcElement.url);
+ // let my_local_data = await readDB('localbitcoinUser', '00-01');
+ // if (typeof my_local_data == "object"
+ // && !localbitcoinplusplus.master_configurations.supernodesPubKeys
+ // .includes(my_local_data.myLocalFLOAddress)) {
+ // const conn_su_flo_id = await switchMyWS.getFloIdFromWSUrl(evt.srcElement.url);
- if (typeof conn_su_flo_id == "string") {
- my_local_data.lastConnectedTime = + new Date();
- my_local_data.lastConnectedSupernode = conn_su_flo_id;
- updateinDB('localbitcoinUser', my_local_data);
- } else {
- mss = `WARNING: Failed to update current supernode connected status in localbitcoinUser.`;
- showMessage(mss);
- throw new Error(mss);
- }
- }
+ // if (typeof conn_su_flo_id == "string") {
+ // my_local_data.lastConnectedTime = + new Date();
+ // //my_local_data.lastConnectedSupernode = conn_su_flo_id;
+ // updateinDB('localbitcoinUser', my_local_data);
+ // } else {
+ // mss = `WARNING: Failed to update current supernode connected status in localbitcoinUser.`;
+ // showMessage(mss);
+ // throw new Error(mss);
+ // }
+ // }
});