diff --git a/index.html b/index.html index 79b0824..fc4255e 100644 --- a/index.html +++ b/index.html @@ -519,7 +519,7 @@ .sidenav { position: fixed; - z-index: 2; + z-index: 1; top: 20px; left: 10px; background: #eee; @@ -15744,25 +15744,7 @@ if ( trade_margin.remaining_crypto_credit > 0 && trade_margin.remaining_crypto_credit >= eqCrypto - ) { - - // If margin is > 2% discontinue the trade - const diffPercent = Math.floor(((trade_margin.remaining_crypto_credit-eqCrypto) - /trade_margin.remaining_crypto_credit)*100); - console.log(trade_margin.remaining_crypto_credit, eqCrypto); - console.info(diffPercent); - - if(diffPercent<=2) { - eqCrypto = trade_margin.remaining_crypto_credit; - } else { - err_msg = `Info: Difference between Crypto balance and trading amount is too high: ${diffPercent}`; - err_response = { - user_flo_addr: params.trader_flo_address, - msg: err_msg - } - reactor.dispatchEvent('message_for_user', err_response); - return; - } + ) { request.response = RM_TRADE.trade_sell.call( this, @@ -16697,6 +16679,51 @@ reactor.dispatchEvent('message_for_user', err_response); return false; } + + let explorer; + let decimal = 100000000; + switch (withdraw_res.product) { + case "BTC": + explorer = + localbitcoinplusplus.server + .btc_mainnet; + break; + case "BTC_TEST": + explorer = + localbitcoinplusplus.server + .btc_testnet; + break; + case "FLO": + explorer = + localbitcoinplusplus.server + .flo_mainnet; + decimal = 1; + break; + case "FLO_TEST": + explorer = + localbitcoinplusplus.server + .flo_testnet; + decimal = 1; + break; + default: + break; + } + + if (typeof explorer !== "string") { + throw new Error( + `WARNING: Invalid product value: ${withdraw_res.product}.` + ); + return false; + } + + const bal_url = `${explorer}/api/addr/${withdraw_res.utxo_addr}/balance`; + console.log(bal_url); + + // Get the balance before sending the tx. It is important to get balance before + // tx than to after because fetching balance after can return older or newer balance + // on random events + let current_balance = await helper_functions.ajaxGet(bal_url); + const btc_reserves = await readDB("system_btc_reserves_private_keys", retrieve_pvtkey_req_id); if (typeof btc_reserves == "object") { // Ideally this line should never run. @@ -16764,6 +16791,8 @@ ); withdrawer_crypto_bal_response.crypto_balance -= EqCryptoWd; + withdrawer_crypto_bal_response.crypto_balance = + helper_functions.truncateDecimals(withdrawer_crypto_bal_response.crypto_balance); const updated_crypto_balance = await updateinDB( "crypto_balances", withdrawer_crypto_bal_response, @@ -16802,49 +16831,8 @@ "btc_address", withdraw_res.utxo_addr ); - if (typeof deposit_arr_resp == "object") { - deposit_arr_resp.map( - async deposit_arr => { - let explorer; - let decimal = 100000000; - switch (deposit_arr.product) { - case "BTC": - explorer = - localbitcoinplusplus.server - .btc_mainnet; - break; - case "BTC_TEST": - explorer = - localbitcoinplusplus.server - .btc_testnet; - break; - case "FLO": - explorer = - localbitcoinplusplus.server - .flo_mainnet; - decimal = 1; - break; - case "FLO_TEST": - explorer = - localbitcoinplusplus.server - .flo_testnet; - decimal = 1; - break; - default: - break; - } - - if (typeof explorer !== "string") { - throw new Error( - `WARNING: Invalid product value: ${deposit_arr.product}.` - ); - return false; - } - - const bal_url = `${explorer}/api/addr/${withdraw_res.utxo_addr}/balance`; - console.log(bal_url); - - let current_balance = await helper_functions.ajaxGet(bal_url); + if (typeof deposit_arr_resp[0] == "object") { + const deposit_arr = deposit_arr_resp[0]; if ( !isNaN(current_balance) && parseFloat(current_balance) > 0 @@ -16857,8 +16845,8 @@ if ( typeof current_balance == "number" ) { - deposit_arr.bitcoinToBePaid = current_balance; - btc_reserves.balance = current_balance; + deposit_arr.bitcoinToBePaid = current_balance-EqCryptoWd; + btc_reserves.balance = current_balance-EqCryptoWd; } else { deposit_arr.bitcoinToBePaid -= EqCryptoWd; btc_reserves.balance -= EqCryptoWd; @@ -16868,6 +16856,9 @@ ); } + deposit_arr.bitcoinToBePaid = helper_functions.truncateDecimals(deposit_arr.bitcoinToBePaid); + btc_reserves.balance = helper_functions.truncateDecimals(btc_reserves.balance); + if ( deposit_arr.bitcoinToBePaid > 0 ) { @@ -16944,8 +16935,7 @@ ); } - } - ); + return true; } @@ -16966,7 +16956,6 @@ // may be required by a follow-up withdraw request await localbitcoinplusplus.actions.delay(180000); - await removeinDB("withdraw_btc", withdraw_id); // update deposits status back to 2 in db const deposit_arr_resp = await readDBbyIndex( "deposit", @@ -16981,6 +16970,7 @@ deposit_arr_resp[0].id ); } + await removeinDB("withdraw_btc", withdraw_id); } } @@ -16992,6 +16982,23 @@ } } catch (error) { + + const withdraw_res = await readDB("withdraw_btc", withdraw_id); + // update deposits status back to 2 in db + const deposit_arr_resp = await readDBbyIndex( + "deposit", + "btc_address", + withdraw_res.utxo_addr + ) + if (typeof deposit_arr_resp[0] == "object") { + deposit_arr_resp[0].status = 2; // UTXO ready to be used again + await updateinDB( + "deposit", + deposit_arr_resp[0], + deposit_arr_resp[0].id + ); + } + await removeinDB("withdraw_btc", withdraw_id); throw new Error(error); } } @@ -17372,22 +17379,6 @@ trade_margin.remaining_crypto_credit > 0 && trade_margin.remaining_crypto_credit >= eqCrypto ) { - // If margin is > 2% discontinue the trade - const diffPercent = Math.floor(((trade_margin.remaining_crypto_credit-eqCrypto) - /trade_margin.remaining_crypto_credit)*100); - console.log(trade_margin.remaining_crypto_credit, eqCrypto); - console.info(diffPercent); - - if(diffPercent<=2) { - eqCrypto = trade_margin.remaining_crypto_credit; - } else { - err_response = { - user_flo_addr: params.trader_flo_address, - msg: `Info: Difference between Crypto balance and trading amount is too high: ${diffPercent}` - } - reactor.dispatchEvent('message_for_user', err_response); - return; - } request.response = RM_TRADE.trade_sell.call( this, ...request.params, @@ -18352,6 +18343,50 @@ return false; } + let explorer; + let decimal = 100000000; + switch (withdraw_res.product) { + case "BTC": + explorer = + localbitcoinplusplus.server + .btc_mainnet; + break; + case "BTC_TEST": + explorer = + localbitcoinplusplus.server + .btc_testnet; + break; + case "FLO": + explorer = + localbitcoinplusplus.server + .flo_mainnet; + decimal = 1; + break; + case "FLO_TEST": + explorer = + localbitcoinplusplus.server + .flo_testnet; + decimal = 1; + break; + default: + break; + } + + if (typeof explorer !== "string") { + throw new Error( + `WARNING: Invalid product value: ${withdraw_res.product}.` + ); + return false; + } + + const bal_url = `${explorer}/api/addr/${withdraw_res.utxo_addr}/balance`; + console.log(bal_url); + + // Get the balance before sending the tx. It is important to get balance before + // tx than to after because fetching balance after can return older or newer balance + // on random events + let current_balance = await helper_functions.ajaxGet(bal_url); + const btc_reserves = await backup_server_db_instance .backup_readDB("system_btc_reserves_private_keys", retrieve_pvtkey_req_id); @@ -18431,6 +18466,9 @@ let withdrawer_crypto_bal_id = `${withdraw_res.trader_flo_address}_${withdraw_res.product}`; withdrawer_crypto_bal_response.crypto_balance -= EqCryptoWd; + withdrawer_crypto_bal_response.crypto_balance = + helper_functions.truncateDecimals(withdrawer_crypto_bal_response.crypto_balance); + const updated_crypto_balance = await backup_server_db_instance .backup_updateinDB( "crypto_balances", @@ -18483,52 +18521,7 @@ typeof deposit_arr_resp == "object" ) { - deposit_arr_resp.map( - async deposit_arr => { - let explorer; - let decimal = 100000000; - switch (deposit_arr.product) { - case "BTC": - explorer = - localbitcoinplusplus - .server.btc_mainnet; - break; - case "BTC_TEST": - explorer = - localbitcoinplusplus - .server.btc_testnet; - break; - case "FLO": - explorer = - localbitcoinplusplus - .server.flo_mainnet; - decimal = 1; - break; - case "FLO_TEST": - explorer = - localbitcoinplusplus - .server.flo_testnet; - decimal = 1; - break; - default: - break; - } - - if ( - typeof explorer !== "string" - ) { - throw new Error( - `WARNING: Invalid product value: ${deposit_arr.product}.` - ); - return false; - } - - const bal_url = `${explorer}/api/addr/${withdraw_res.utxo_addr}/balance`; - console.log(bal_url); - - let current_balance = await helper_functions.ajaxGet( - bal_url - ); + const deposit_arr = deposit_arr_resp[0]; if ( !isNaN(current_balance) && parseFloat( @@ -18544,8 +18537,8 @@ typeof current_balance == "number" ) { - deposit_arr.bitcoinToBePaid = current_balance; - btc_reserves.balance = current_balance; + deposit_arr.bitcoinToBePaid = current_balance-EqCryptoWd; + btc_reserves.balance = current_balance-EqCryptoWd; } else { deposit_arr.bitcoinToBePaid -= EqCryptoWd; btc_reserves.balance -= EqCryptoWd; @@ -18555,6 +18548,9 @@ ); } + deposit_arr.bitcoinToBePaid = helper_functions.truncateDecimals(deposit_arr.bitcoinToBePaid); + btc_reserves.balance = helper_functions.truncateDecimals(btc_reserves.balance); + if ( deposit_arr.bitcoinToBePaid > 0 @@ -18652,8 +18648,8 @@ ); } - } - ); + + return true; } @@ -18706,10 +18702,32 @@ } } catch (error) { + + const withdraw_res = await backup_server_db_instance + .backup_readDB("withdraw_btc", withdraw_id); + // update deposits status back to 2 in db + const deposit_arr_resp = await backup_server_db_instance + .backup_readDBbyIndex( + "deposit", + "btc_address", + withdraw_res.utxo_addr + ) + if (typeof deposit_arr_resp[0] == "object") { + deposit_arr_resp[0].status = 2; // UTXO ready to be used again + await backup_server_db_instance + .backup_updateinDB( + "deposit", + deposit_arr_resp[0], + deposit_arr_resp[0].id + ); + } + await backup_server_db_instance + .backup_removeinDB("withdraw_btc", withdraw_id); throw new Error(error); } } - ); + ) + break; case "superNodeSignedAddUserPublicData": @@ -22131,21 +22149,19 @@ removeinDB(tradeDB, cancel_request.trade_id).then( id => { msg_response = { - user_flo_addr: params.trader_flo_address, - msg: `Failed to verify order for order id ${cancel_request.trade_id}` + user_flo_addr: cancel_request.trader_flo_address, + msg: `Order id ${cancel_request.trade_id} is deleted.` } reactor.dispatchEvent('message_for_user', msg_response); } ); } else { err_response = { - user_flo_addr: params.trader_flo_address, + user_flo_addr: cancel_request.trader_flo_address, msg: `Failed to verify order for order id ${cancel_request.trade_id}` } reactor.dispatchEvent('message_for_user', err_response); } - } else { - showMessage("Failed to cancel order."); } } break; @@ -24094,24 +24110,6 @@ showMessage(backup_db_error_msg); throw new Error(backup_db_error_msg); } - - backup_server_db_instance - .backup_readDB( - "userPublicData", - cancel_request.trader_flo_address - ) - .then(trader_data => { - if ( - typeof trader_data.trader_flo_address !== - "string" || - typeof trader_data.trader_flo_pubKey !== - "string" - ) { - err_msg = - "ERROR: Failed to cancel the order. User is unknown."; - showMessage(err_msg); - throw new Error(err_msg); - } tradeDB = cancel_request.trade_type == "buy" ? "buyOrders" @@ -24120,7 +24118,7 @@ RM_WALLET.verify( cancel_request.trade_id, cancel_request.signed_trade_id, - trader_data.trader_flo_pubKey + nodePubKey.trader_flo_pubKey ) ) { backup_server_db_instance @@ -24131,7 +24129,7 @@ .then(id => { err_response = { - user_flo_addr: params.trader_flo_address, + user_flo_addr: cancel_request.trader_flo_address, msg: `Order Id ${id} deleted.` } reactor.dispatchEvent('message_for_user', err_response); @@ -24140,12 +24138,12 @@ ); } else { err_response = { - user_flo_addr: params.trader_flo_address, + user_flo_addr: cancel_request.trader_flo_address, msg: `Failed to verify order for order id ${cancel_request.trade_id}` } reactor.dispatchEvent('message_for_user', err_response); } - }); + }); } else { err_response = { @@ -26134,24 +26132,6 @@ showMessage(backup_db_error_msg); throw new Error(backup_db_error_msg); } - - backup_server_db_instance - .backup_readDB( - "userPublicData", - cancel_request.trader_flo_address - ) - .then(trader_data => { - if ( - typeof trader_data.trader_flo_address !== - "string" || - typeof trader_data.trader_flo_pubKey !== - "string" - ) { - err_msg = - "ERROR: Failed to cancel the order. User is unknown."; - showMessage(err_msg); - throw new Error(err_msg); - } tradeDB = cancel_request.trade_type == "buy" ? "buyOrders" @@ -26160,7 +26140,7 @@ RM_WALLET.verify( cancel_request.trade_id, cancel_request.signed_trade_id, - trader_data.trader_flo_pubKey + nodePubKey.trader_flo_pubKey ) ) { backup_server_db_instance @@ -26169,16 +26149,22 @@ cancel_request.trade_id ) .then(id => - showMessage(`Order Id ${id} deleted.`) + { + err_response = { + user_flo_addr: cancel_request.trader_flo_address, + msg: `Order Id ${id} is deleted.` + } + reactor.dispatchEvent('message_for_user', err_response); + } ); } else { - showMessage( - `Failed to verify order for order id ${cancel_request.trade_id}` - ); - } - }); - } else { - showMessage("Failed to cancel order."); + err_response = { + user_flo_addr: cancel_request.trader_flo_address, + msg: `Failed to verify order for order id ${cancel_request.trade_id}` + } + reactor.dispatchEvent('message_for_user', err_response); + } + } } }