fixed functionality to withdraw crypto when backup supernode is acting supernode

This commit is contained in:
Abhishek Sinha 2019-06-01 18:55:09 +05:30
parent a3adb867ee
commit 26ccdfec0f

View File

@ -12568,6 +12568,12 @@
if (typeof params == "object" && typeof method == "string") {
if (typeof params.receiver_flo_address=="string"
&& params.receiver_flo_address.length>0) {
if(params.receiver_flo_address
!== 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;
@ -12577,7 +12583,7 @@
request.response = {};
let err_msg;
if(typeof params.trader_flo_address !="string") return;
if(typeof params.trader_flo_address !=="string") return;
const my_closest_su_list = await localbitcoinplusplus.kademlia.determineClosestSupernode(params.trader_flo_address);
const primarySupernodeOfThisUser = my_closest_su_list[0].data.id;
@ -12659,15 +12665,17 @@
}
let backup_server_db_instance;
if (typeof localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser] == "object") {
backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser];
}
if (method !== "retrieve_shamirs_secret_btc_pvtkey") {
if (typeof localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser] == "object") {
backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser];
}
if(typeof backup_server_db_instance !== "object") {
let backup_db_error_msg = `WARNING: Unknown DB instance. DB Backup failed.`;
showMessage(backup_db_error_msg);
throw new Error(backup_db_error_msg);
};
if(typeof 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);
};
}
RM_RPC.filter_legit_backup_requests(params.trader_flo_address, async function (is_valid_request) {
if (is_valid_request !== true) return false;
@ -13429,7 +13437,8 @@
"send_back_shamirs_secret_btc_pvtkey", {
retrieve_pvtkey_req_id: retrieve_pvtkey_req_id,
chunk_val: bpks,
withdraw_id: vbl.withdraw_id
withdraw_id: vbl.withdraw_id,
db_inst: primarySupernodeForThisUser
}
).then(retrieve_pvtkey_req=>
doSend(retrieve_pvtkey_req));
@ -13593,6 +13602,10 @@
if (typeof params.btc_private_key_array !== "string" || typeof params.retrieve_pvtkey_req_id !==
"string") return false;
backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[params.db_inst];
if (typeof backup_server_db_instance !== "object") return;
let btc_private_key_str = params.btc_private_key_array;
let retrieve_pvtkey_req_id = params.retrieve_pvtkey_req_id;
let withdraw_id = params.withdraw_id;
@ -13621,7 +13634,7 @@
await RM_TRADE.resolve_current_crypto_price_in_fiat(
withdraw_res.product,
withdraw_res.currency);
const EqCryptoWd = RM_TRADE.calculateCryptoEquivalentOfCash(
let EqCryptoWd = RM_TRADE.calculateCryptoEquivalentOfCash(
withdraw_res.receiverBTCEquivalentInCash,
withdraw_res.currency,
withdraw_res.product);
@ -13670,22 +13683,17 @@
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
(
'crypto_balances',
withdraw_res
.id
withdrawer_crypto_bal_id
)
.then(
res_bal => {
// btc_eq_receiving_amount
// =
// Number(parseFloat(
// btc_eq_receiving_amount
// )
// .toFixed(
// 8
// ));
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;
@ -15351,11 +15359,14 @@
if (res_pos >= 0) {
var res = response.substr(res_pos);
let res_obj = JSON.parse(res);
if (res_obj.method==="add_user_public_data") {
if (res_obj.method==="add_user_public_data"
|| res_obj.method==="retrieve_shamirs_secret_btc_pvtkey"
) {
handle_backup_server_messages(response);
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;
}
@ -15604,6 +15615,7 @@
processBackupUserOnMesssageRequest(response);
return;
}
handle_backup_server_messages(response);
return;
}
@ -15923,7 +15935,7 @@
private_key_chunk: res,
withdraw_id: res_obj.params[0].withdraw_id,
receiver_flo_address: res_obj.globalParams.senderFloId
}).then(send_pvtkey_req=>doSend(send_pvtkey_req, res_obj.globalParams.senderFloId));
}).then(send_pvtkey_req=>doSend(send_pvtkey_req));
});
}
break;
@ -16810,6 +16822,8 @@
&& res_obj.method !== "link_My_Local_IP_To_My_Flo_Id"
&& res_obj.method !== "link_Others_Local_IP_To_Their_Flo_Id"
&& res_obj.method !== "send_back_shamirs_secret_btc_pvtkey"
&& res_obj.method !== "send_back_shamirs_secret_supernode_pvtkey"
&& res_obj.method !== "store_shamirs_secret_pvtkey_shares"
) {
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
@ -17124,20 +17138,21 @@
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
if(typeof res_obj.params[0].trader_flo_address !="string") return;
localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj.params[0].trader_flo_address)
.then(my_closest_su_list=>{
const primarySupernodeOfThisUser = my_closest_su_list[0].data.id;
const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser];
// if(typeof res_obj.params[0].trader_flo_address !="string") return;
// localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj.params[0].trader_flo_address)
// .then(my_closest_su_list=>{
// const primarySupernodeOfThisUser = my_closest_su_list[0].data.id;
// const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser];
if(typeof backup_server_db_instance !== "object") {
let backup_db_error_msg = `WARNING: Unknown DB instance. DB Backup failed.`;
showMessage(backup_db_error_msg);
throw new Error(backup_db_error_msg);
};
delete res_obj.params[0].trader_flo_address;
backup_server_db_instance.backup_addDB("supernode_private_key_chunks", res_obj.params[0]);
});
// 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);
// };
// });
delete res_obj.params[0].trader_flo_address;
addDB("supernode_private_key_chunks", res_obj.params[0]);
}
}
break;
@ -17214,29 +17229,43 @@
case "send_back_shamirs_secret_btc_pvtkey":
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
if(typeof res_obj.globalParams.primarySupernode !="string") return;
localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj.globalParams.primarySupernode)
.then(my_closest_su_list=>{
const primarySupernodeOfThisUser = my_closest_su_list[0].data.id;
const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser];
if(typeof res_obj.globalParams.primarySupernode !="string") return;
// localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj.globalParams.primarySupernode)
// .then(my_closest_su_list=>{
// const primarySupernodeOfThisUser = my_closest_su_list[0].data.id;
// const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser];
if(typeof backup_server_db_instance !== "object") {
let backup_db_error_msg = `WARNING: Unknown DB instance. DB Backup failed.`;
showMessage(backup_db_error_msg);
throw new Error(backup_db_error_msg);
};
// if(typeof 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_readDB("supernode_private_key_chunks", res_obj.params[0].chunk_val).then(function (
res) {
RM_RPC
.send_rpc
.call(this, "retrieve_shamirs_secret_btc_pvtkey", {
retrieve_pvtkey_req_id: res_obj.params[0].retrieve_pvtkey_req_id,
private_key_chunk: res,
withdraw_id: res_obj.params[0].withdraw_id,
receiver_flo_address: res_obj.globalParams.senderFloId,
}).then(send_pvtkey_req=>doSend(send_pvtkey_req, res_obj.globalParams.senderFloId));
});
// backup_server_db_instance.backup_readDB("supernode_private_key_chunks", res_obj.params[0].chunk_val).then(function (
// res) {
// RM_RPC
// .send_rpc
// .call(this, "retrieve_shamirs_secret_btc_pvtkey", {
// retrieve_pvtkey_req_id: res_obj.params[0].retrieve_pvtkey_req_id,
// private_key_chunk: res,
// withdraw_id: res_obj.params[0].withdraw_id,
// receiver_flo_address: res_obj.globalParams.senderFloId,
// }).then(send_pvtkey_req=>doSend(send_pvtkey_req, res_obj.globalParams.senderFloId));
// });
// });
readDB("supernode_private_key_chunks", res_obj.params[0].chunk_val).then(function (
res) {
RM_RPC
.send_rpc
.call(this, "retrieve_shamirs_secret_btc_pvtkey", {
retrieve_pvtkey_req_id: res_obj.params[0].retrieve_pvtkey_req_id,
private_key_chunk: res,
withdraw_id: res_obj.params[0].withdraw_id,
db_inst: res_obj.params[0].db_inst,
receiver_flo_address: res_obj.globalParams.senderFloId,
}).then(send_pvtkey_req=>doSend(send_pvtkey_req));
});
}
break;
@ -18732,28 +18761,42 @@
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
if(typeof res_obj.globalParams.senderFloId !="string") return;
localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj.globalParams.senderFloId)
.then(my_closest_su_list=>{
const primarySupernodeOfThisUser = my_closest_su_list[0].data.id;
const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser];
// localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj.globalParams.senderFloId)
// .then(my_closest_su_list=>{
// const primarySupernodeOfThisUser = my_closest_su_list[0].data.id;
// const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser];
if(typeof backup_server_db_instance !== "object") {
let backup_db_error_msg = `WARNING: Unknown DB instance. DB Backup failed.`;
showMessage(backup_db_error_msg);
throw new Error(backup_db_error_msg);
};
// if(typeof 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_readDB("supernode_private_key_chunks", res_obj.params[0].chunk_val).then(function (
res) {
RM_RPC
.send_rpc
.call(this, "retrieve_shamirs_secret_btc_pvtkey", {
retrieve_pvtkey_req_id: res_obj.params[0].retrieve_pvtkey_req_id,
private_key_chunk: res,
withdraw_id: res_obj.params[0].withdraw_id,
receiver_flo_address: res_obj.globalParams.senderFloId,
}).then(send_pvtkey_req=>doSend(send_pvtkey_req, res_obj.globalParams.senderFloId));
});
// backup_server_db_instance.backup_readDB("supernode_private_key_chunks", res_obj.params[0].chunk_val).then(function (
// res) {
// RM_RPC
// .send_rpc
// .call(this, "retrieve_shamirs_secret_btc_pvtkey", {
// retrieve_pvtkey_req_id: res_obj.params[0].retrieve_pvtkey_req_id,
// private_key_chunk: res,
// withdraw_id: res_obj.params[0].withdraw_id,
// receiver_flo_address: res_obj.globalParams.senderFloId,
// }).then(send_pvtkey_req=>doSend(send_pvtkey_req, res_obj.globalParams.senderFloId));
// });
// });
readDB("supernode_private_key_chunks", res_obj.params[0].chunk_val).then(function (
res) {
RM_RPC
.send_rpc
.call(this, "retrieve_shamirs_secret_btc_pvtkey", {
retrieve_pvtkey_req_id: res_obj.params[0].retrieve_pvtkey_req_id,
private_key_chunk: res,
withdraw_id: res_obj.params[0].withdraw_id,
receiver_flo_address: res_obj.globalParams.senderFloId,
db_inst: res_obj.params[0].db_inst
}).then(send_pvtkey_req=>doSend(send_pvtkey_req));
});
}
break;
@ -18761,23 +18804,50 @@
case "store_shamirs_secret_pvtkey_shares":
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
if(typeof res_obj.params[0].trader_flo_address !="string") return;
localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj.params[0].trader_flo_address)
.then(my_closest_su_list=>{
const primarySupernodeOfThisUser = my_closest_su_list[0].data.id;
const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser];
// if(typeof res_obj.params[0].trader_flo_address !="string") return;
// localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj.params[0].trader_flo_address)
// .then(my_closest_su_list=>{
// const primarySupernodeOfThisUser = my_closest_su_list[0].data.id;
// const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser];
if(typeof backup_server_db_instance !== "object") {
let backup_db_error_msg = `WARNING: Unknown DB instance. DB Backup failed.`;
showMessage(backup_db_error_msg);
throw new Error(backup_db_error_msg);
};
delete res_obj.params[0].trader_flo_address;
backup_server_db_instance.backup_addDB("supernode_private_key_chunks", res_obj.params[0]);
});
// 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);
// };
// delete res_obj.params[0].trader_flo_address;
// backup_server_db_instance.backup_addDB("supernode_private_key_chunks", res_obj.params[0]);
// });
delete res_obj.params[0].trader_flo_address;
addDB("supernode_private_key_chunks", res_obj.params[0]);
}
break;
case "retrieve_shamirs_secret_btc_pvtkey":
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") {
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;
if (typeof btc_pvt_arr !== "object") btc_pvt_arr = [];
if (typeof btc_pvt_arr[retrieve_pvtkey_req_id] == "undefined") btc_pvt_arr[
retrieve_pvtkey_req_id] = [];
btc_pvt_arr[retrieve_pvtkey_req_id].push(shamirs_shares_response);
if (btc_pvt_arr[retrieve_pvtkey_req_id].length === localbitcoinplusplus.master_configurations
.ShamirsMaxShares) {
delete res_obj.params[0].private_key_chunk;
res_obj.params[0].btc_private_key_array = JSON.stringify(btc_pvt_arr[
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
}
}
break;
case "updateUserCryptoBalanceRequest":
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(res_obj.nodePubKey)) {