diff --git a/supernode/index.html b/supernode/index.html index 8dfb576..b8dc6e1 100644 --- a/supernode/index.html +++ b/supernode/index.html @@ -11130,9 +11130,8 @@ break; case "deposit_withdraw_user_claim": localbitcoinplusplus.rpc.prototype.filter_legit_requests(function (is_valid_request) { - if (is_valid_request !== true) { - return false; - } + if (is_valid_request !== true) return false; + if (typeof localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY=="undefined") throw new Error("Supernode Private Keys is undefind."); if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") { let user_claim_request = res_obj.params[0]; let user_claim_id = user_claim_request.claim_id.split('!!'); @@ -11150,7 +11149,6 @@ localbitcoinplusplus.wallets.prototype.verify(deposit_withdraw_user_claim_hash, user_claim_request.sign, user_claim_request.userPubKey)) { //If the request is valid, find out if the requester is depositor or withdrawer - console.log(withdraw_order_id); readDB("withdraw_cash", withdraw_order_id, function(withdraw_data) { if (typeof withdraw_data=="object") { @@ -11158,14 +11156,52 @@ // Depositor claimed to deposit the cash withdraw_data.status = 3; updateinDB('withdraw_cash', withdraw_data, withdraw_data.id); + let update_withdraw_cash_obj_data = { + depositor_claim:withdraw_data + }; + let update_withdraw_cash_obj_data_str = JSON.stringify(update_withdraw_cash_obj_data); + let update_withdraw_cash_obj_data_hash = Crypto.SHA256(update_withdraw_cash_obj_data_str); + let update_withdraw_cash_obj_data_sign = localbitcoinplusplus.wallets.prototype + .sign(update_withdraw_cash_obj_data_hash, localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY); + update_withdraw_cash_obj_data.hash = update_withdraw_cash_obj_data_hash; + update_withdraw_cash_obj_data.sign = update_withdraw_cash_obj_data_sign; + update_withdraw_cash_obj_data.publicKey = localbitcoinplusplus.wallets.my_local_flo_public_key; + let update_withdraw_cash_obj = localbitcoinplusplus.rpc.prototype + .send_rpc + .call(this, "update_all_withdraw_cash_depositor_claim", + update_withdraw_cash_obj_data); + doSend(update_withdraw_cash_obj); } else if (withdraw_data.trader_flo_address==user_id) { // Withdrawer confirmed the payment readDBbyIndex('cash_balances', 'trader_flo_address', withdraw_data.depositor_flo_id, function(depositor_cash_data) { if (typeof depositor_cash_data=="object") { + if (depositor_cash_data.length==0) { + depositor_cash_data = {cash_balance:0, trader_flo_address:withdraw_data.depositor_flo_id}; + addDB('cash_balances', depositor_cash_data); + } depositor_cash_data.cash_balance += parseFloat(withdraw_data.withdraw_amount); updateinDB('cash_balances', depositor_cash_data); - removeByIndex('deposit', withdraw_data.depositor_flo_id); + removeByIndex('deposit', 'trader_flo_address', depositor_cash_data.trader_flo_address, function() {}); removeinDB('withdraw_cash', withdraw_data.id); + + let update_cash_balance_obj = { + depositor_cash_data:depositor_cash_data + } + let update_cash_balance_str = JSON.stringify(update_cash_balance_obj); + let update_cash_balance_hash = Crypto.SHA256(update_cash_balance_str); + let update_cash_balance_sign = localbitcoinplusplus.wallets.prototype + .sign(update_cash_balance_hash, localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY); + + update_cash_balance_obj.publicKey = localbitcoinplusplus.wallets.my_local_flo_public_key; + update_cash_balance_obj.sign = update_cash_balance_sign; + update_cash_balance_obj.hash = update_cash_balance_hash; + update_cash_balance_obj.withdraw_id = withdraw_data.id; + + let update_cash_balance_req = localbitcoinplusplus.rpc.prototype + .send_rpc + .call(this, "update_all_deposit_withdraw_success", + update_cash_balance_obj); + doSend(update_cash_balance_req); } }); } @@ -11178,6 +11214,45 @@ }); break; + case "update_all_withdraw_cash_depositor_claim": + if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") { + let depositor_claim_response_object = res_obj.params[0]; + let update_withdraw_cash_obj_data_res = { + depositor_claim:depositor_claim_response_object.depositor_claim + }; + let update_withdraw_cash_obj_data_res_str = JSON.stringify(update_withdraw_cash_obj_data_res); + let depositor_claim_response_data_hash = Crypto.SHA256(update_withdraw_cash_obj_data_res_str); + let depositor_claim_response_object_verification = localbitcoinplusplus.wallets.prototype + .verify(depositor_claim_response_data_hash, depositor_claim_response_object.sign, depositor_claim_response_object.publicKey); + + if ((depositor_claim_response_data_hash==depositor_claim_response_object.hash) && (depositor_claim_response_object_verification==true)) { + updateinDB('withdraw_cash', depositor_claim_response_object.depositor_claim, depositor_claim_response_object.depositor_claim.id); + return true; + } + return false; + } + break; + case "update_all_deposit_withdraw_success": + if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") { + let withdraw_success_response = res_obj.params[0]; + let update_cash_balance_obj_res = { + depositor_cash_data:withdraw_success_response.depositor_cash_data + } + let update_cash_balance_obj_res_str = JSON.stringify(update_cash_balance_obj_res); + let update_cash_balance_obj_res_hash = Crypto.SHA256(update_cash_balance_obj_res_str); + let update_cash_balance_obj_res_verification = localbitcoinplusplus.wallets.prototype + .verify(update_cash_balance_obj_res_hash, withdraw_success_response.sign, withdraw_success_response.publicKey); + + if ((update_cash_balance_obj_res_hash==withdraw_success_response.hash) && update_cash_balance_obj_res_verification==true) { + updateinDB('cash_balances', withdraw_success_response.depositor_cash_data); + removeByIndex('deposit', 'trader_flo_address', withdraw_success_response.depositor_cash_data.trader_flo_address, function() {}); + removeinDB('withdraw_cash', withdraw_success_response.withdraw_id); + return true; + } + return false; + } + break; + default: break; }