diff --git a/supernode/index.html b/supernode/index.html
index d484eb1..d9cef87 100644
--- a/supernode/index.html
+++ b/supernode/index.html
@@ -10348,8 +10348,8 @@
}
Promise.all(promises).then(cs=>{
- let isPreviousSupernodesLive = cs.map((su_status, index)=>
- (typeof su_status[index] !== "object" || su_status[index].is_live == true )
+ let isPreviousSupernodesLive = cs.map((su_status)=>
+ (typeof su_status[0] !== "object" || su_status[0].is_live == true )
);
if (!isPreviousSupernodesLive.includes(true)) {
@@ -12833,7 +12833,7 @@
// already processed above
break;
case "deposit_asset_request":
- RM_RPC.filter_legit_backup_requests(params.trader_flo_address, function (is_valid_request) {
+ RM_RPC.filter_legit_backup_requests(params.trader_flo_address, async function (is_valid_request) {
if (is_valid_request !== true) return false;
@@ -12853,355 +12853,357 @@
typeof params.trader_flo_address == "string" &&
params.trader_flo_address.length > 0
) {
- RM_WALLET.getUserPublicKey(params.trader_flo_address,
- async function (requester_public_key) {
- if (requester_public_key == undefined ||
- requester_public_key == null) {
- err_msg = 'Failed to get public key of the user.';
+ const requester_public_req = await backup_server_db_instance
+ .backup_readDB('userPublicData', params.trader_flo_address);
+ if (typeof requester_public_req!=="object") return;
+ const requester_public_key = requester_public_req.trader_flo_pubKey;
+
+ if (typeof requester_public_key == "undefined" ||
+ requester_public_key == null) {
+ err_msg = 'Failed to get public key of the user.';
+ showMessage(err_msg);
+ throw new Error(err_msg);
+ }
+ params.depositor_public_key = requester_public_key;
+
+ await RM_TRADE.resolve_current_crypto_price_in_fiat(
+ params.product, params.currency);
+
+ if (localbitcoinplusplus.master_configurations.tradableAsset1
+ .includes(params.product)) {
+
+ let generate_btc_keys_for_requester = RM_WALLET
+ .generateFloKeys(null, params.product);
+
+ console.table(generate_btc_keys_for_requester);
+
+ params.id = helper_functions.unique_id();
+ params.status = 1;
+ params.btc_address =
+ generate_btc_keys_for_requester.address;
+
+ params.bitcoinToBePaid = RM_TRADE.calculateCryptoEquivalentOfCash(
+ params.depositing_amount, params.currency,
+ params.product);
+
+ let receivedTradeInfo = { ...params };
+
+ if (typeof localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY ==
+ "undefined") {
+ err_msg = 'Failed to determine Super node signing key.';
showMessage(err_msg);
throw new Error(err_msg);
}
- params.depositor_public_key = requester_public_key;
- await RM_TRADE.resolve_current_crypto_price_in_fiat(
- params.product, params.currency);
+ readDB("localbitcoinUser", "00-01").then(
+ function (su_data) {
+ if (typeof su_data == "object" &&
+ typeof su_data.myLocalFLOPublicKey ==
+ "string" &&
+ su_data.myLocalFLOPublicKey.length >
+ 0 &&
+ localbitcoinplusplus.master_configurations
+ .supernodesPubKeys
+ .includes(su_data.myLocalFLOPublicKey)
+ ) {
- if (localbitcoinplusplus.master_configurations.tradableAsset1
- .includes(params.product)) {
+ let receivedTradeInfoHash =
+ Crypto.SHA256(JSON.stringify(receivedTradeInfo));
- let generate_btc_keys_for_requester = RM_WALLET
- .generateFloKeys(null, params.product);
+ receivedTradeInfo["depositDataHash"] = receivedTradeInfoHash;
+ receivedTradeInfo["order_validator_sign"] =
+ RM_WALLET.sign(receivedTradeInfoHash,
+ localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY
+ );
+ receivedTradeInfo["order_validator_public_key"] = su_data.myLocalFLOPublicKey;
- console.table(generate_btc_keys_for_requester);
+ try {
+ const this_btc_pvt_key =
+ generate_btc_keys_for_requester.privateKeyWIF;
+ const this_btc_tx_key =
+ Crypto.util.randomBytes(64);
+ const
+ this_btc_pvt_key_shamirs_secret =
+ RM_WALLET.createShamirsSecretShares(this_btc_pvt_key, 10, 5);
+ if (typeof this_btc_pvt_key_shamirs_secret ==
+ "object" &&
+ this_btc_pvt_key_shamirs_secret
+ .length > 0) {
+ backup_server_db_instance.backup_addDB("deposit", receivedTradeInfo);
- params.id = helper_functions.unique_id();
- params.status = 1;
- params.btc_address =
- generate_btc_keys_for_requester.address;
-
- params.bitcoinToBePaid = RM_TRADE.calculateCryptoEquivalentOfCash(
- params.depositing_amount, params.currency,
- params.product);
-
- let receivedTradeInfo = { ...params };
-
- if (typeof localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY ==
- "undefined") {
- err_msg = 'Failed to determine Super node signing key.';
- showMessage(err_msg);
- throw new Error(err_msg);
- }
-
- readDB("localbitcoinUser", "00-01").then(
- function (su_data) {
- if (typeof su_data == "object" &&
- typeof su_data.myLocalFLOPublicKey ==
- "string" &&
- su_data.myLocalFLOPublicKey.length >
- 0 &&
- localbitcoinplusplus.master_configurations
- .supernodesPubKeys
- .includes(su_data.myLocalFLOPublicKey)
- ) {
-
- let receivedTradeInfoHash =
- Crypto.SHA256(JSON.stringify(receivedTradeInfo));
-
- receivedTradeInfo["depositDataHash"] = receivedTradeInfoHash;
- receivedTradeInfo["order_validator_sign"] =
- RM_WALLET.sign(receivedTradeInfoHash,
- localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY
- );
- receivedTradeInfo["order_validator_public_key"] = su_data.myLocalFLOPublicKey;
-
- try {
- const this_btc_pvt_key =
- generate_btc_keys_for_requester.privateKeyWIF;
- const this_btc_tx_key =
- Crypto.util.randomBytes(64);
- const
- this_btc_pvt_key_shamirs_secret =
- RM_WALLET.createShamirsSecretShares(this_btc_pvt_key, 10, 5);
- if (typeof this_btc_pvt_key_shamirs_secret ==
- "object" &&
+ // Send the address to the requester
+ let
+ deposit_response_object = {
+ error: false,
+ method: "deposit_asset_request_response",
+ msg: `Please send ${params.product} ${params.bitcoinToBePaid} to the following addres: ${generate_btc_keys_for_requester.address}.`,
+ data: receivedTradeInfo
+ };
+ deposit_response_object.receiver_flo_address = params.trader_flo_address;
+ deposit_response_object.trader_flo_address = params.trader_flo_address;
+
+ RM_RPC
+ .send_rpc
+ .call(this,
+ "deposit_asset_request_response",
+ deposit_response_object
+ ).then(deposit_request_response=>
+ doSend(deposit_request_response));
+
+ let
+ this_btc_pvt_key_shamirs_secret_array =
this_btc_pvt_key_shamirs_secret
- .length > 0) {
- backup_server_db_instance.backup_addDB("deposit", receivedTradeInfo);
+ .map(chunks => {
+ let
+ chunk_ids =
+ Crypto.util
+ .bytesToHex(Crypto.util.randomBytes(64));
+ let
+ chunk_array = {
+ "id": chunk_ids,
+ "privateKeyChunks": Crypto
+ .AES
+ .encrypt(
+ chunks,
+ this_btc_tx_key
+ ),
+ "trader_flo_address": params.trader_flo_address
+ };
+ return chunk_array;
+ });
- // Send the address to the requester
- let
- deposit_response_object = {
- error: false,
- method: "deposit_asset_request_response",
- msg: `Please send ${params.product} ${params.bitcoinToBePaid} to the following addres: ${generate_btc_keys_for_requester.address}.`,
- data: receivedTradeInfo
- };
- deposit_response_object.receiver_flo_address = params.trader_flo_address;
- deposit_response_object.trader_flo_address = params.trader_flo_address;
-
- RM_RPC
- .send_rpc
- .call(this,
- "deposit_asset_request_response",
- deposit_response_object
- ).then(deposit_request_response=>
- doSend(deposit_request_response));
-
- let
- this_btc_pvt_key_shamirs_secret_array =
- this_btc_pvt_key_shamirs_secret
- .map(chunks => {
+ // Send chunks of private keys to other supernodes
+ this_btc_pvt_key_shamirs_secret_array
+ .map(shares => {
+ RM_RPC
+ .send_rpc
+ .call(
+ this,
+ "store_shamirs_secret_pvtkey_shares",
+ shares
+ ).then(store_pvtkey_req=>
+ doSend(store_pvtkey_req));
+
+ });
+
+ if (typeof localbitcoinplusplus
+ .wallets.my_local_flo_address ==
+ "string" &&
+ typeof localbitcoinplusplus
+ .wallets.my_local_flo_public_key ==
+ "string" &&
+ typeof localbitcoinplusplus
+ .master_configurations
+ .supernodesPubKeys ==
+ "object" &&
+ localbitcoinplusplus
+ .master_configurations
+ .supernodesPubKeys.includes(
+ localbitcoinplusplus
+ .wallets.my_local_flo_public_key
+ )) {
+ try {
+ let
+ this_btc_pvt_key_shamirs_secret__id_array =
+ this_btc_pvt_key_shamirs_secret_array
+ .map(i => i.id);
+ let
+ btc_private_key_shamirs_id =
+ this_btc_pvt_key_shamirs_secret__id_array;
+ let
+ supernode_transaction_key =
+ this_btc_tx_key;
+ const
+ system_btc_reserves_private_keys_object = {
+ id: helper_functions
+ .unique_id(),
+ product: params
+ .product,
+ btc_address: params
+ .btc_address,
+ balance: null,
+ trader_flo_address: params
+ .trader_flo_address,
+ btc_private_key_shamirs_id: btc_private_key_shamirs_id,
+ supernode_transaction_key: supernode_transaction_key
+ }
+ backup_server_db_instance.backup_addDB(
+ "system_btc_reserves_private_keys",
+ system_btc_reserves_private_keys_object
+ );
+ } catch (error) {
+ throw new Error( error);
+ }
+ }
+ return true;
+ }
+ } catch (error) {
+ throw new Error(error);
+ }
+
+ // Send the address to the requester
+ let deposit_response_object = {
+ error: false,
+ method: "deposit_asset_request_response",
+ msg: `Please send the ${params.product} to ${generate_btc_keys_for_requester.address}.`,
+ data: receivedTradeInfo,
+ receiver_flo_address: params.trader_flo_address,
+ trader_flo_address: params.trader_flo_address,
+ };
+
+ RM_RPC.send_rpc
+ .call(this,
+ "deposit_asset_request_response",
+ deposit_response_object
+ ).then(deposit_request_response=>
+ doSend(deposit_request_response));
+ return true;
+ }
+ });
+
+ return false;
+
+ } else if (!localbitcoinplusplus.master_configurations
+ .tradableAsset1.includes(params.product)) {
+ params.id = helper_functions.unique_id();
+ params.status = 1;
+ // IMPORTANT - If deposit is a fiat make sure product and currency are both same
+ params.currency = params.product;
+ let receivedTradeInfo = { ...params };
+
+ backup_server_db_instance.backup_readDB("localbitcoinUser", "00-01").then(
+ function (su_data) {
+ if (typeof su_data == "object" &&
+ typeof su_data.myLocalFLOPublicKey ==
+ "string" &&
+ su_data.myLocalFLOPublicKey.length >
+ 0 &&
+ localbitcoinplusplus.master_configurations
+ .supernodesPubKeys
+ .includes(su_data.myLocalFLOPublicKey)
+ ) {
+ let receivedTradeInfoHash =
+ Crypto.SHA256(JSON.stringify(
+ receivedTradeInfo));
+
+ receivedTradeInfo[
+ "depositDataHash"] =
+ receivedTradeInfoHash;
+ receivedTradeInfo[
+ "order_validator_sign"] =
+ RM_WALLET.sign(
+ receivedTradeInfoHash,
+ localbitcoinplusplus.wallets
+ .MY_SUPERNODE_PRIVATE_KEY
+ );
+ receivedTradeInfo[
+ "order_validator_public_key"
+ ] = su_data.myLocalFLOPublicKey;
+
+ // YOU NEED TO DETERMINE A BANK ACCOUNT HERE IF NO ONE IS WITHDRAWING
+ try {
+ backup_server_db_instance.backup_addDB("deposit",
+ receivedTradeInfo);
+ backup_server_db_instance.backup_readDBbyIndex(
+ "withdraw_cash",
+ "status", 1).then(
+ function (
+ withdrawers_list
+ ) {
+ if (typeof withdrawers_list ==
+ "object") {
+ if (
+ withdrawers_list.length > 0) {
+ withdrawers_list.filter(
+ wd => wd.currency ==
+ params.currency).map(
+ function (withdrawer) {
+ if (
+ withdrawer.withdraw_amount ==
+ params.depositing_amount &&
+ withdrawer.currency ==
+ params.currency
+ ) {
+ withdrawer.status = 2; // A depositor has been asked to deposit money
+ withdrawer.depositor_found_at = + new Date();
+ withdrawer.depositor_flo_id = receivedTradeInfo.trader_flo_address;
+ backup_server_db_instance.backup_updateinDB ("withdraw_cash", withdrawer, withdrawer.trader_flo_address);
+
+ receivedTradeInfo.status = 2; // withdrawer found. Now deposit money to his account
+ backup_server_db_instance.backup_updateinDB(
+ "deposit",
+ receivedTradeInfo,
+ receivedTradeInfo.trader_flo_address
+ );
+
+ let withdrawer_bank_account = withdrawer.receivinAddress;
+
+ let deposit_response_object = {
+ error: false,
+ method: "deposit_asset_request_response",
+ msg: `Plese send the money to following bank address: "${withdrawer_bank_account}"`,
+ data: receivedTradeInfo,
+ withdrawer_data: withdrawer,
+ receiver_flo_address: receivedTradeInfo.trader_flo_address,
+ trader_flo_address: receivedTradeInfo.trader_flo_address,
+ };
+
+ RM_RPC.send_rpc.call(
+ this,
+ "deposit_asset_request_response",
+ deposit_response_object
+ ).then(deposit_request_response=>
+ doSend(deposit_request_response));
+ return true;
+ } else {
+ err_msg = "Deposit request failed: We could not find a withdrawer.";
+ showMessage(err_msg);
+ throw new Error(err_msg);
+ }
+ }
+ );
+ } else {
+ //No one is withdrawing so provide your bank details
let
- chunk_ids =
- Crypto.util
- .bytesToHex(Crypto.util.randomBytes(64));
- let
- chunk_array = {
- "id": chunk_ids,
- "privateKeyChunks": Crypto
- .AES
- .encrypt(
- chunks,
- this_btc_tx_key
- ),
- "trader_flo_address": params.trader_flo_address
+ deposit_response_object = {
+ error: false,
+ method: "deposit_asset_request_response",
+ msg: `Plese send the money to following bank address: "System determined bank".`,
+ data: receivedTradeInfo,
+ receiver_flo_address: receivedTradeInfo.trader_flo_address,
+ trader_flo_address: receivedTradeInfo.trader_flo_address,
};
- return chunk_array;
- });
- // Send chunks of private keys to other supernodes
- this_btc_pvt_key_shamirs_secret_array
- .map(shares => {
+ receivedTradeInfo.status = 2; // withdrawer found. Now deposit money to his account
+ updateinDB
+ (
+ "deposit",
+ receivedTradeInfo,
+ receivedTradeInfo
+ .trader_flo_address
+ );
+
RM_RPC
.send_rpc
.call(
this,
- "store_shamirs_secret_pvtkey_shares",
- shares
- ).then(store_pvtkey_req=>
- doSend(store_pvtkey_req));
-
- });
-
- if (typeof localbitcoinplusplus
- .wallets.my_local_flo_address ==
- "string" &&
- typeof localbitcoinplusplus
- .wallets.my_local_flo_public_key ==
- "string" &&
- typeof localbitcoinplusplus
- .master_configurations
- .supernodesPubKeys ==
- "object" &&
- localbitcoinplusplus
- .master_configurations
- .supernodesPubKeys.includes(
- localbitcoinplusplus
- .wallets.my_local_flo_public_key
- )) {
- try {
- let
- this_btc_pvt_key_shamirs_secret__id_array =
- this_btc_pvt_key_shamirs_secret_array
- .map(i => i.id);
- let
- btc_private_key_shamirs_id =
- this_btc_pvt_key_shamirs_secret__id_array;
- let
- supernode_transaction_key =
- this_btc_tx_key;
- const
- system_btc_reserves_private_keys_object = {
- id: helper_functions
- .unique_id(),
- product: params
- .product,
- btc_address: params
- .btc_address,
- balance: null,
- trader_flo_address: params
- .trader_flo_address,
- btc_private_key_shamirs_id: btc_private_key_shamirs_id,
- supernode_transaction_key: supernode_transaction_key
- }
- backup_server_db_instance.backup_addDB(
- "system_btc_reserves_private_keys",
- system_btc_reserves_private_keys_object
- );
- } catch (error) {
- throw new Error( error);
+ "deposit_asset_request_response",
+ deposit_response_object
+ ).then(deposit_request_response=>
+ doSend(deposit_request_response));
+ return true;
}
}
- return true;
- }
- } catch (error) {
- throw new Error(error);
- }
-
- // Send the address to the requester
- let deposit_response_object = {
- error: false,
- method: "deposit_asset_request_response",
- msg: `Please send the ${params.product} to ${generate_btc_keys_for_requester.address}.`,
- data: receivedTradeInfo,
- receiver_flo_address: params.trader_flo_address,
- trader_flo_address: params.trader_flo_address,
- };
-
- RM_RPC.send_rpc
- .call(this,
- "deposit_asset_request_response",
- deposit_response_object
- ).then(deposit_request_response=>
- doSend(deposit_request_response));
- return true;
+ });
+ } catch (error) {
+ err_msg = "Deposit request failed: We could not find a withdrawer. Come again later.";
+ showMessage(err_msg);
+ throw new Error(err_msg);
}
- });
- return false;
-
- } else if (!localbitcoinplusplus.master_configurations
- .tradableAsset1.includes(params.product)) {
- params.id = helper_functions.unique_id();
- params.status = 1;
- // IMPORTANT - If deposit is a fiat make sure product and currency are both same
- params.currency = params.product;
- let receivedTradeInfo = { ...params };
-
- backup_server_db_instance.backup_readDB("localbitcoinUser", "00-01").then(
- function (su_data) {
- if (typeof su_data == "object" &&
- typeof su_data.myLocalFLOPublicKey ==
- "string" &&
- su_data.myLocalFLOPublicKey.length >
- 0 &&
- localbitcoinplusplus.master_configurations
- .supernodesPubKeys
- .includes(su_data.myLocalFLOPublicKey)
- ) {
- let receivedTradeInfoHash =
- Crypto.SHA256(JSON.stringify(
- receivedTradeInfo));
-
- receivedTradeInfo[
- "depositDataHash"] =
- receivedTradeInfoHash;
- receivedTradeInfo[
- "order_validator_sign"] =
- RM_WALLET.sign(
- receivedTradeInfoHash,
- localbitcoinplusplus.wallets
- .MY_SUPERNODE_PRIVATE_KEY
- );
- receivedTradeInfo[
- "order_validator_public_key"
- ] = su_data.myLocalFLOPublicKey;
-
- // YOU NEED TO DETERMINE A BANK ACCOUNT HERE IF NO ONE IS WITHDRAWING
- try {
- backup_server_db_instance.backup_addDB("deposit",
- receivedTradeInfo);
- backup_server_db_instance.backup_readDBbyIndex(
- "withdraw_cash",
- "status", 1).then(
- function (
- withdrawers_list
- ) {
- if (typeof withdrawers_list ==
- "object") {
- if (
- withdrawers_list.length > 0) {
- withdrawers_list.filter(
- wd => wd.currency ==
- params.currency).map(
- function (withdrawer) {
- if (
- withdrawer.withdraw_amount ==
- params.depositing_amount &&
- withdrawer.currency ==
- params.currency
- ) {
- withdrawer.status = 2; // A depositor has been asked to deposit money
- withdrawer.depositor_found_at = + new Date();
- withdrawer.depositor_flo_id = receivedTradeInfo.trader_flo_address;
- backup_server_db_instance.backup_updateinDB ("withdraw_cash", withdrawer, withdrawer.trader_flo_address);
-
- receivedTradeInfo.status = 2; // withdrawer found. Now deposit money to his account
- backup_server_db_instance.backup_updateinDB(
- "deposit",
- receivedTradeInfo,
- receivedTradeInfo.trader_flo_address
- );
-
- let withdrawer_bank_account = withdrawer.receivinAddress;
-
- let deposit_response_object = {
- error: false,
- method: "deposit_asset_request_response",
- msg: `Plese send the money to following bank address: "${withdrawer_bank_account}"`,
- data: receivedTradeInfo,
- withdrawer_data: withdrawer,
- receiver_flo_address: receivedTradeInfo.trader_flo_address,
- trader_flo_address: receivedTradeInfo.trader_flo_address,
- };
-
- RM_RPC.send_rpc.call(
- this,
- "deposit_asset_request_response",
- deposit_response_object
- ).then(deposit_request_response=>
- doSend(deposit_request_response));
- return true;
- } else {
- err_msg = "Deposit request failed: We could not find a withdrawer.";
- showMessage(err_msg);
- throw new Error(err_msg);
- }
- }
- );
- } else {
- //No one is withdrawing so provide your bank details
- let
- deposit_response_object = {
- error: false,
- method: "deposit_asset_request_response",
- msg: `Plese send the money to following bank address: "System determined bank".`,
- data: receivedTradeInfo,
- receiver_flo_address: receivedTradeInfo.trader_flo_address,
- trader_flo_address: receivedTradeInfo.trader_flo_address,
- };
-
- receivedTradeInfo.status = 2; // withdrawer found. Now deposit money to his account
- updateinDB
- (
- "deposit",
- receivedTradeInfo,
- receivedTradeInfo
- .trader_flo_address
- );
-
- RM_RPC
- .send_rpc
- .call(
- this,
- "deposit_asset_request_response",
- deposit_response_object
- ).then(deposit_request_response=>
- doSend(deposit_request_response));
- return true;
- }
- }
- });
- } catch (error) {
- err_msg = "Deposit request failed: We could not find a withdrawer. Come again later.";
- showMessage(err_msg);
- throw new Error(err_msg);
- }
-
- }
- });
- }
- });
+ }
+ });
+ }
} else {
err_msg = "deposit asset request error";
@@ -15576,7 +15578,7 @@
if (typeof res_obj.globalParams !== "object"
|| (typeof res_obj.globalParams.receiversList == "object"
- && !request.globalParams.receiversList
+ && !res_obj.globalParams.receiversList
.includes(localbitcoinplusplus.wallets.my_local_flo_address)
)) return;
@@ -16634,7 +16636,8 @@
//"receiver_flo_address": "", // message for all
//"ws_url": websocket.url,
"server_msg": `Your primary/secondary Supernode is live and synced. You can start using the system.`,
- }).then(server_response=>doSend(server_response));
+ })
+ //.then(server_response=>doSend(server_response));
});
}
@@ -16827,7 +16830,7 @@
if (typeof res_obj.globalParams !== "object"
|| (typeof res_obj.globalParams.receiversList == "object"
- && !request.globalParams.receiversList
+ && !res_obj.globalParams.receiversList
.includes(localbitcoinplusplus.wallets.my_local_flo_address)
)) return;
@@ -20256,7 +20259,7 @@
wsUri = await localbitcoinplusplus.kademlia.getSupernodeSeed(idbData.myLocalFLOAddress);
if (localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(idbData.myLocalFLOPublicKey)) {
-
+ return;
showMessage(`INFO: Syncing of latest data starting. 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
@@ -20954,8 +20957,7 @@
if (typeof reserve_res == "object") {
reserve_res.map(reserves => {
reserves.balance = balance;
- _updateinDB('system_btc_reserves_private_keys', reserves,
- reserves.id);
+ _updateinDB('system_btc_reserves_private_keys', reserves, reserves.id);
});
}
});