modified withdraw cash to update cash balance before tx
This commit is contained in:
parent
3a684568d8
commit
b58b7b37f5
@ -12027,18 +12027,24 @@
|
|||||||
|
|
||||||
|
|
||||||
text = `masterFLOPubKey=03EA5E2CAB18DA585400D6EC569438D415FAF200528E05D0E2B9BEAA2B5C3DCA90
|
text = `masterFLOPubKey=03EA5E2CAB18DA585400D6EC569438D415FAF200528E05D0E2B9BEAA2B5C3DCA90
|
||||||
#!#tradableAsset1=BTC,FLO,BTC_TEST,FLO_TEST#!#tradableAsset2=INR,USD,
|
#!#tradableAsset1=BTC,FLO,BTC_TEST,FLO_TEST#!#tradableAsset2=INR,USD,
|
||||||
#!#validTradingAmount=10,50,100,#!#btcTradeMargin=5000
|
#!#validTradingAmount=10,50,100,#!#btcTradeMargin=5000
|
||||||
#!#MaxBackups=1
|
#!#MaxBackups=1
|
||||||
#!#ordersLife={"trade":300000, "cryptoDeposit":900000, "cryptoWithdraw":300000, "cashDeposit":900000, "cashWithdraw":900000}
|
#!#waitTime={"normaldelay":180000, "exportdelay":300000, "syncdelay":600000, "hugedelay":1200000}
|
||||||
#!#miners_fee={"btc":0.0005, "flo":0.001}
|
#!#ordersLife={"trade":300000, "cryptoDeposit":900000, "cryptoWithdraw":300000, "cashDeposit":900000, "cashWithdraw":900000}
|
||||||
#!#supernodesPubKeys=0315C3A20FE7096CC2E0F81A80D5F1A687B8F9EFA65242A0B0881E1BA3EE7D7D53,
|
#!#miners_fee={"btc":0.0005, "flo":0.001}
|
||||||
026FCC6CFF6EB3A39E54BEB6E13FC2F02C3A93F4767AA80E49E7E876443F95AE5F,
|
#!#supernodesPubKeys=026FCC6CFF6EB3A39E54BEB6E13FC2F02C3A93F4767AA80E49E7E876443F95AE5F,0349B08AA1ABDCFFB6D78CD7C949665AD2FF065EA02B3C6C47A5E9592C9A1C6BCB,
|
||||||
#!#cashiers={"032871A74D2DDA9D0DE7135F58B5BD2D7F679D2CCA20EA7909466D1A6912DF4022":{"upi":"johnDoe@upi", "currencies":["INR"], "is_live":false},
|
039B4AA00DBFC0A6631DE6DA83526611A0E6B857D3579DF840BBDEAE8B6898E3B6,0315C3A20FE7096CC2E0F81A80D5F1A687B8F9EFA65242A0B0881E1BA3EE7D7D53
|
||||||
"03DB4A12EB543B293DDBB0CE314C46C36D6761294AFBB7264A6D78F710FFD97CF0":{"upi":"janeDoe@upi", "currencies":["INR", "USD"], "is_live":false}}
|
#!#specialNodes=02348523EB008BD37BF297AA360757062CB9D153C371EE727349A02F0B67910613,03C38E6523D6A2C45E00E60DC072E4D4340007F8A0026F134DCBBC670E4C44D31C
|
||||||
#!#ShamirsMaxShares=8#!#supernodeSeeds={"ranchimall1":{"ip":"127.0.0.1:9111","kbucketId":"oZxHcbSf1JC8t5GjutopWYXs7C6Fe9p7ps"},
|
#!#cashiers={"032871A74D2DDA9D0DE7135F58B5BD2D7F679D2CCA20EA7909466D1A6912DF4022":{"upi":"johnDoe@upi", "currencies":["INR"], "is_live":false},
|
||||||
"ranchimall6":{"ip":"127.0.0.1:9116","kbucketId":"oV1wCeWca3VawbBTfUGKA7Vd368PATnKAx"}}`;
|
"03DB4A12EB543B293DDBB0CE314C46C36D6761294AFBB7264A6D78F710FFD97CF0":{"upi":"janeDoe@upi", "currencies":["INR", "USD"], "is_live":false}}
|
||||||
return callback(text);
|
#!#ShamirsMaxShares=8#!#supernodeSeeds={
|
||||||
|
"ranchimall1":{"ip":"127.0.0.1:9111","kbucketId":"oZxHcbSf1JC8t5GjutopWYXs7C6Fe9p7ps"},
|
||||||
|
"ranchimall3":{"ip":"127.0.0.1:9113","kbucketId":"odYA6KagmbokSh9GY7yAfeTUZRtZLwecY1"},
|
||||||
|
"ranchimall5":{"ip":"127.0.0.1:9115","kbucketId":"oMhv5sAzqg77sYHxmUGZWKRrVo4P4JQduS"},
|
||||||
|
"ranchimall6":{"ip":"127.0.0.1:9116","kbucketId":"oV1wCeWca3VawbBTfUGKA7Vd368PATnKAx"}}`;
|
||||||
|
///return callback(localStorage.lppconf);
|
||||||
|
return callback(text);
|
||||||
|
|
||||||
if(ENVR==='LIVE') {
|
if(ENVR==='LIVE') {
|
||||||
master_data = await helper_functions
|
master_data = await helper_functions
|
||||||
|
|||||||
908
index.html
908
index.html
@ -16849,43 +16849,243 @@
|
|||||||
readDB("cash_balances", trader_cash_id).then(function (
|
readDB("cash_balances", trader_cash_id).then(function (
|
||||||
cash_balances_res
|
cash_balances_res
|
||||||
) {
|
) {
|
||||||
if (
|
try {
|
||||||
typeof cash_balances_res == "object" &&
|
|
||||||
typeof cash_balances_res.trader_flo_address ==
|
|
||||||
"string" &&
|
|
||||||
typeof cash_balances_res.cash_balance == "number" &&
|
|
||||||
cash_balances_res.cash_balance > 0
|
|
||||||
) {
|
|
||||||
let withdrawer_cash_balance = helper_functions.truncateDecimals(
|
|
||||||
cash_balances_res.cash_balance, 2
|
|
||||||
);
|
|
||||||
let withdrawing_cash_amount = helper_functions.truncateDecimals(
|
|
||||||
params.withdrawing_amount, 2
|
|
||||||
);
|
|
||||||
let bank_details = params.receivinAddress.trim(); // user UPI
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
withdrawer_cash_balance > 0 &&
|
typeof cash_balances_res == "object" &&
|
||||||
withdrawing_cash_amount > 0 &&
|
typeof cash_balances_res.trader_flo_address ==
|
||||||
withdrawer_cash_balance >= withdrawing_cash_amount
|
"string" &&
|
||||||
|
typeof cash_balances_res.cash_balance == "number" &&
|
||||||
|
cash_balances_res.cash_balance > 0
|
||||||
) {
|
) {
|
||||||
// Get a cashier
|
let old_cash_balances_res = JSON.parse(JSON.stringify(cash_balances_res));
|
||||||
const cashiersList = JSON.parse(
|
let withdrawer_cash_balance = helper_functions.truncateDecimals(
|
||||||
localbitcoinplusplus.master_configurations
|
cash_balances_res.cash_balance, 2
|
||||||
.cashiers
|
|
||||||
);
|
);
|
||||||
|
let withdrawing_cash_amount = helper_functions.truncateDecimals(
|
||||||
const cashiersPubKeysArray = Object.keys(cashiersList);
|
params.withdrawing_amount, 2
|
||||||
const getAPaymentHandler = randomNoRepeats(cashiersPubKeysArray)();
|
|
||||||
const cashierFloAddr = bitjs[localbitcoinplusplus.BASE_BLOCKCHAIN].pubkey2address(
|
|
||||||
getAPaymentHandler
|
|
||||||
);
|
);
|
||||||
|
let bank_details = params.receivinAddress.trim(); // user UPI
|
||||||
|
|
||||||
if (!cashiersPubKeysArray.includes(
|
if (
|
||||||
getAPaymentHandler
|
withdrawer_cash_balance > 0 &&
|
||||||
)
|
withdrawing_cash_amount > 0 &&
|
||||||
|
withdrawer_cash_balance >= withdrawing_cash_amount
|
||||||
) {
|
) {
|
||||||
err_msg = `ERROR: ${getAPaymentHandler} is not recognized as any Cashier's Public Key.`;
|
|
||||||
|
// Deduct balance of withdrawer
|
||||||
|
cash_balances_res.cash_balance -= helper_functions.truncateDecimals(
|
||||||
|
withdrawing_cash_amount, 2
|
||||||
|
);
|
||||||
|
const withdrawer_cash_data = await updateinDB(
|
||||||
|
"cash_balances",
|
||||||
|
cash_balances_res
|
||||||
|
);
|
||||||
|
|
||||||
|
// Get a cashier
|
||||||
|
const cashiersList = JSON.parse(
|
||||||
|
localbitcoinplusplus.master_configurations
|
||||||
|
.cashiers
|
||||||
|
);
|
||||||
|
|
||||||
|
const cashiersPubKeysArray = Object.keys(cashiersList);
|
||||||
|
const getAPaymentHandler = randomNoRepeats(cashiersPubKeysArray)();
|
||||||
|
const cashierFloAddr = bitjs[localbitcoinplusplus.BASE_BLOCKCHAIN].pubkey2address(
|
||||||
|
getAPaymentHandler
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!cashiersPubKeysArray.includes(
|
||||||
|
getAPaymentHandler
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
err_msg = `ERROR: ${getAPaymentHandler} is not recognized as any Cashier's Public Key.`;
|
||||||
|
err_response = {
|
||||||
|
user_flo_addr: params.trader_flo_address,
|
||||||
|
msg: err_msg
|
||||||
|
}
|
||||||
|
reactor.dispatchEvent('message_for_user', err_response);
|
||||||
|
throw new Error(err_msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
const encoded_bank_details = localbitcoinplusplus.encrypt.encryptMessage(
|
||||||
|
bank_details,
|
||||||
|
getAPaymentHandler
|
||||||
|
);
|
||||||
|
|
||||||
|
let token_transfer_currency = "";
|
||||||
|
if (params.currency == "INR") {
|
||||||
|
token_transfer_currency = "rupee";
|
||||||
|
}
|
||||||
|
|
||||||
|
//const flo_withdraw_comment = `transfer ${withdrawing_cash_amount} ${token_transfer_currency}# to ${params.trader_flo_address}.`;
|
||||||
|
const flo_withdraw_comment = `transfer ${withdrawing_cash_amount} ${token_transfer_currency}# to ${cashierFloAddr} for ${params.trader_flo_address}.`;
|
||||||
|
|
||||||
|
// Add it to cash withdrawal table
|
||||||
|
let withdraw_request_db_object = {
|
||||||
|
id: helper_functions.unique_id(),
|
||||||
|
trader_flo_address: params.trader_flo_address,
|
||||||
|
withdraw_amount: withdrawing_cash_amount,
|
||||||
|
currency: params.currency,
|
||||||
|
receivinAddress: encoded_bank_details,
|
||||||
|
cashier_pubKey: getAPaymentHandler,
|
||||||
|
status: 1 // withdraw request called
|
||||||
|
};
|
||||||
|
|
||||||
|
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 withdraw_request_db_object_hash = Crypto.SHA256(
|
||||||
|
JSON.stringify(withdraw_request_db_object)
|
||||||
|
);
|
||||||
|
withdraw_request_db_object[
|
||||||
|
"withdrawDataHash"
|
||||||
|
] = withdraw_request_db_object_hash;
|
||||||
|
withdraw_request_db_object[
|
||||||
|
"order_validator_sign"
|
||||||
|
] = RM_WALLET.sign(
|
||||||
|
withdraw_request_db_object_hash,
|
||||||
|
localbitcoinplusplus.wallets
|
||||||
|
.MY_SUPERNODE_PRIVATE_KEY
|
||||||
|
);
|
||||||
|
withdraw_request_db_object[
|
||||||
|
"order_validator_public_key"
|
||||||
|
] = su_data.myLocalFLOPublicKey;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Transfer Token
|
||||||
|
RM_TRADE.sendMultipleInputsTransaction(
|
||||||
|
localbitcoinplusplus.BASE_BLOCKCHAIN,
|
||||||
|
[localbitcoinplusplus.wallets
|
||||||
|
.MY_SUPERNODE_PRIVATE_KEY],
|
||||||
|
cashierFloAddr,
|
||||||
|
0.01,
|
||||||
|
localbitcoinplusplus.wallets
|
||||||
|
.my_local_flo_address,
|
||||||
|
async function (res) {
|
||||||
|
console.log(res);
|
||||||
|
if (typeof res == "object") {
|
||||||
|
try {
|
||||||
|
let msg = "";
|
||||||
|
let resp_txid = "";
|
||||||
|
if (
|
||||||
|
typeof res.txid == "string" &&
|
||||||
|
res.txid.length > 0
|
||||||
|
) {
|
||||||
|
resp_obj = JSON.parse(res.txid);
|
||||||
|
resp_txid = resp_obj.txid.result || resp_obj.txid;
|
||||||
|
msg = `Transaction Id for token transfer to ${params.trader_flo_address}: ${resp_txid}.`;
|
||||||
|
} else {
|
||||||
|
console.log(res);
|
||||||
|
err_response = {
|
||||||
|
user_flo_addr: cashierFloAddr,
|
||||||
|
msg: `Failed to transfer token for withdraw order ${withdraw_request_db_object.id}`
|
||||||
|
}
|
||||||
|
reactor.dispatchEvent('message_for_user', err_response);
|
||||||
|
throw new Errror(`ERROR: Failed to transfer token for withdraw order ${withdraw_request_db_object.id}.`);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msg.length > 0) {
|
||||||
|
|
||||||
|
const update_cash_balance_obj = {
|
||||||
|
withdrawer_cash_data: withdrawer_cash_data
|
||||||
|
};
|
||||||
|
const update_cash_balance_str = JSON.stringify(
|
||||||
|
update_cash_balance_obj
|
||||||
|
);
|
||||||
|
const update_cash_balance_hash = Crypto.SHA256(
|
||||||
|
update_cash_balance_str
|
||||||
|
);
|
||||||
|
const update_cash_balance_sign = RM_WALLET.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.trader_flo_address = cash_balances_res.trader_flo_address;
|
||||||
|
|
||||||
|
RM_RPC.send_rpc
|
||||||
|
.call(
|
||||||
|
this,
|
||||||
|
"update_all_new_cash_withdraw_recorded_in_db",
|
||||||
|
update_cash_balance_obj
|
||||||
|
)
|
||||||
|
.then(update_cash_balance_req =>
|
||||||
|
doSend(
|
||||||
|
update_cash_balance_req
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
//add the request to supernode db
|
||||||
|
withdraw_request_db_object.token_transfer_txid = resp_txid;
|
||||||
|
|
||||||
|
// Add record in Db
|
||||||
|
const withdraw_request_db_object_res = await addDB(
|
||||||
|
"withdraw_cash",
|
||||||
|
withdraw_request_db_object
|
||||||
|
);
|
||||||
|
|
||||||
|
// return back the response to client
|
||||||
|
withdraw_request_db_object_res.receiver_flo_address =
|
||||||
|
params.trader_flo_address;
|
||||||
|
withdraw_request_db_object_res.trader_flo_address =
|
||||||
|
params.trader_flo_address;
|
||||||
|
RM_RPC.send_rpc
|
||||||
|
.call(
|
||||||
|
this,
|
||||||
|
"withdrawal_request_response",
|
||||||
|
withdraw_request_db_object_res
|
||||||
|
)
|
||||||
|
.then(
|
||||||
|
withdrawal_request_response =>
|
||||||
|
doSend(
|
||||||
|
withdrawal_request_response
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
throw new Errror(
|
||||||
|
`ERROR: Failed to make transaction. Message length is 0: ${msg}`
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
updateinDB("cash_balances",
|
||||||
|
old_cash_balances_res,
|
||||||
|
old_cash_balances_res.id,
|
||||||
|
false, false
|
||||||
|
);
|
||||||
|
throw new Error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
flo_withdraw_comment
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
updateinDB("cash_balances",
|
||||||
|
old_cash_balances_res,
|
||||||
|
old_cash_balances_res.id,
|
||||||
|
false, false
|
||||||
|
);
|
||||||
|
throw new Error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Return error to the requester
|
||||||
|
err_msg =
|
||||||
|
"Withdrawal request failed: You are trying to withdraw more cash than you have in localbitcoinplusplus account.";
|
||||||
err_response = {
|
err_response = {
|
||||||
user_flo_addr: params.trader_flo_address,
|
user_flo_addr: params.trader_flo_address,
|
||||||
msg: err_msg
|
msg: err_msg
|
||||||
@ -16893,192 +17093,17 @@
|
|||||||
reactor.dispatchEvent('message_for_user', err_response);
|
reactor.dispatchEvent('message_for_user', err_response);
|
||||||
throw new Error(err_msg);
|
throw new Error(err_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
const encoded_bank_details = localbitcoinplusplus.encrypt.encryptMessage(
|
|
||||||
bank_details,
|
|
||||||
getAPaymentHandler
|
|
||||||
);
|
|
||||||
|
|
||||||
let token_transfer_currency = "";
|
|
||||||
if (params.currency == "INR") {
|
|
||||||
token_transfer_currency = "rupee";
|
|
||||||
}
|
|
||||||
|
|
||||||
//const flo_withdraw_comment = `transfer ${withdrawing_cash_amount} ${token_transfer_currency}# to ${params.trader_flo_address}.`;
|
|
||||||
const flo_withdraw_comment = `transfer ${withdrawing_cash_amount} ${token_transfer_currency}# to ${cashierFloAddr} for ${params.trader_flo_address}.`;
|
|
||||||
|
|
||||||
// Add it to cash withdrawal table
|
|
||||||
let withdraw_request_db_object = {
|
|
||||||
id: helper_functions.unique_id(),
|
|
||||||
trader_flo_address: params.trader_flo_address,
|
|
||||||
withdraw_amount: withdrawing_cash_amount,
|
|
||||||
currency: params.currency,
|
|
||||||
receivinAddress: encoded_bank_details,
|
|
||||||
cashier_pubKey: getAPaymentHandler,
|
|
||||||
status: 1 // withdraw request called
|
|
||||||
};
|
|
||||||
|
|
||||||
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 withdraw_request_db_object_hash = Crypto.SHA256(
|
|
||||||
JSON.stringify(withdraw_request_db_object)
|
|
||||||
);
|
|
||||||
withdraw_request_db_object[
|
|
||||||
"withdrawDataHash"
|
|
||||||
] = withdraw_request_db_object_hash;
|
|
||||||
withdraw_request_db_object[
|
|
||||||
"order_validator_sign"
|
|
||||||
] = RM_WALLET.sign(
|
|
||||||
withdraw_request_db_object_hash,
|
|
||||||
localbitcoinplusplus.wallets
|
|
||||||
.MY_SUPERNODE_PRIVATE_KEY
|
|
||||||
);
|
|
||||||
withdraw_request_db_object[
|
|
||||||
"order_validator_public_key"
|
|
||||||
] = su_data.myLocalFLOPublicKey;
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Transfer Token
|
|
||||||
RM_TRADE.sendMultipleInputsTransaction(
|
|
||||||
localbitcoinplusplus.BASE_BLOCKCHAIN,
|
|
||||||
[localbitcoinplusplus.wallets
|
|
||||||
.MY_SUPERNODE_PRIVATE_KEY],
|
|
||||||
cashierFloAddr,
|
|
||||||
0.01,
|
|
||||||
localbitcoinplusplus.wallets
|
|
||||||
.my_local_flo_address,
|
|
||||||
async function (res) {
|
|
||||||
console.log(res);
|
|
||||||
if (typeof res == "object") {
|
|
||||||
try {
|
|
||||||
let msg = "";
|
|
||||||
let resp_txid = "";
|
|
||||||
if (
|
|
||||||
typeof res.txid == "string" &&
|
|
||||||
res.txid.length > 0
|
|
||||||
) {
|
|
||||||
resp_obj = JSON.parse(res.txid);
|
|
||||||
resp_txid = resp_obj.txid.result || resp_obj.txid;
|
|
||||||
msg = `Transaction Id for token transfer to ${params.trader_flo_address}: ${resp_txid}.`;
|
|
||||||
} else {
|
|
||||||
console.log(res);
|
|
||||||
err_response = {
|
|
||||||
user_flo_addr: cashierFloAddr,
|
|
||||||
msg: `Failed to transfer token for withdraw order ${withdraw_request_db_object.id}`
|
|
||||||
}
|
|
||||||
reactor.dispatchEvent('message_for_user', err_response);
|
|
||||||
throw new Errror(`ERROR: Failed to transfer token for withdraw order ${withdraw_request_db_object.id}.`);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (msg.length > 0) {
|
|
||||||
// Deduct balance of withdrawer
|
|
||||||
cash_balances_res.cash_balance -= helper_functions.truncateDecimals(
|
|
||||||
withdrawing_cash_amount, 2
|
|
||||||
);
|
|
||||||
const withdrawer_cash_data = await updateinDB(
|
|
||||||
"cash_balances",
|
|
||||||
cash_balances_res
|
|
||||||
);
|
|
||||||
|
|
||||||
const update_cash_balance_obj = {
|
|
||||||
withdrawer_cash_data: withdrawer_cash_data
|
|
||||||
};
|
|
||||||
const update_cash_balance_str = JSON.stringify(
|
|
||||||
update_cash_balance_obj
|
|
||||||
);
|
|
||||||
const update_cash_balance_hash = Crypto.SHA256(
|
|
||||||
update_cash_balance_str
|
|
||||||
);
|
|
||||||
const update_cash_balance_sign = RM_WALLET.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.trader_flo_address = cash_balances_res.trader_flo_address;
|
|
||||||
|
|
||||||
RM_RPC.send_rpc
|
|
||||||
.call(
|
|
||||||
this,
|
|
||||||
"update_all_new_cash_withdraw_recorded_in_db",
|
|
||||||
update_cash_balance_obj
|
|
||||||
)
|
|
||||||
.then(update_cash_balance_req =>
|
|
||||||
doSend(
|
|
||||||
update_cash_balance_req
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
//add the request to supernode db
|
|
||||||
withdraw_request_db_object.token_transfer_txid = resp_txid;
|
|
||||||
|
|
||||||
// Add record in Db
|
|
||||||
const withdraw_request_db_object_res = await addDB(
|
|
||||||
"withdraw_cash",
|
|
||||||
withdraw_request_db_object
|
|
||||||
);
|
|
||||||
|
|
||||||
// return back the response to client
|
|
||||||
withdraw_request_db_object_res.receiver_flo_address =
|
|
||||||
params.trader_flo_address;
|
|
||||||
withdraw_request_db_object_res.trader_flo_address =
|
|
||||||
params.trader_flo_address;
|
|
||||||
RM_RPC.send_rpc
|
|
||||||
.call(
|
|
||||||
this,
|
|
||||||
"withdrawal_request_response",
|
|
||||||
withdraw_request_db_object_res
|
|
||||||
)
|
|
||||||
.then(
|
|
||||||
withdrawal_request_response =>
|
|
||||||
doSend(
|
|
||||||
withdrawal_request_response
|
|
||||||
)
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
throw new Errror(
|
|
||||||
`ERROR: Failed to make transaction. Message length is 0: ${msg}`
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
throw new Error(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
flo_withdraw_comment
|
|
||||||
);
|
|
||||||
} catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
// Return error to the requester
|
|
||||||
err_msg =
|
|
||||||
"Withdrawal request failed: You are trying to withdraw more cash than you have in localbitcoinplusplus account.";
|
|
||||||
err_response = {
|
|
||||||
user_flo_addr: params.trader_flo_address,
|
|
||||||
msg: err_msg
|
|
||||||
}
|
|
||||||
reactor.dispatchEvent('message_for_user', err_response);
|
|
||||||
throw new Error(err_msg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} catch(e) {
|
||||||
|
console.error(e);
|
||||||
|
updateinDB("cash_balances",
|
||||||
|
old_cash_balances_res,
|
||||||
|
old_cash_balances_res.id,
|
||||||
|
false, false
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
err_msg = "Unknown asset withdraw request error.";
|
err_msg = "Unknown asset withdraw request error.";
|
||||||
@ -18604,243 +18629,264 @@
|
|||||||
backup_server_db_instance
|
backup_server_db_instance
|
||||||
.backup_readDB("cash_balances", trader_cash_id)
|
.backup_readDB("cash_balances", trader_cash_id)
|
||||||
.then(function (cash_balances_res) {
|
.then(function (cash_balances_res) {
|
||||||
if (
|
try {
|
||||||
typeof cash_balances_res == "object" &&
|
|
||||||
typeof cash_balances_res.trader_flo_address ==
|
|
||||||
"string" &&
|
|
||||||
typeof cash_balances_res.cash_balance ==
|
|
||||||
"number" &&
|
|
||||||
cash_balances_res.cash_balance > 0
|
|
||||||
) {
|
|
||||||
let withdrawer_cash_balance = helper_functions.truncateDecimals(
|
|
||||||
cash_balances_res.cash_balance, 2
|
|
||||||
);
|
|
||||||
let withdrawing_cash_amount = helper_functions.truncateDecimals(
|
|
||||||
params.withdrawing_amount, 2
|
|
||||||
);
|
|
||||||
let bank_details = params.receivinAddress.trim(); // user UPI
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
withdrawer_cash_balance > 0 &&
|
typeof cash_balances_res == "object" &&
|
||||||
withdrawing_cash_amount > 0 &&
|
typeof cash_balances_res.trader_flo_address ==
|
||||||
withdrawer_cash_balance >=
|
"string" &&
|
||||||
withdrawing_cash_amount
|
typeof cash_balances_res.cash_balance ==
|
||||||
|
"number" &&
|
||||||
|
cash_balances_res.cash_balance > 0
|
||||||
) {
|
) {
|
||||||
// Get a cashier
|
let old_cash_balances_res = JSON.parse(JSON.stringify(cash_balances_res));
|
||||||
const cashiersList = JSON.parse(
|
let withdrawer_cash_balance = helper_functions.truncateDecimals(
|
||||||
localbitcoinplusplus.master_configurations
|
cash_balances_res.cash_balance, 2
|
||||||
.cashiers
|
|
||||||
);
|
);
|
||||||
const cashiersPubKeysArray = Object.keys(cashiersList);
|
let withdrawing_cash_amount = helper_functions.truncateDecimals(
|
||||||
const getAPaymentHandler = randomNoRepeats(cashiersPubKeysArray)();
|
params.withdrawing_amount, 2
|
||||||
const cashierFloAddr = bitjs[localbitcoinplusplus.BASE_BLOCKCHAIN].pubkey2address(
|
|
||||||
getAPaymentHandler
|
|
||||||
);
|
);
|
||||||
|
let bank_details = params.receivinAddress.trim(); // user UPI
|
||||||
|
|
||||||
if (!cashiersPubKeysArray.includes(
|
if (
|
||||||
getAPaymentHandler
|
withdrawer_cash_balance > 0 &&
|
||||||
)
|
withdrawing_cash_amount > 0 &&
|
||||||
|
withdrawer_cash_balance >=
|
||||||
|
withdrawing_cash_amount
|
||||||
) {
|
) {
|
||||||
throw new Error(
|
// Deduct balance of withdrawer
|
||||||
`ERROR: ${getAPaymentHandler} is not recognized as any Cashier's Public Key.`
|
cash_balances_res.cash_balance -= helper_functions.truncateDecimals(
|
||||||
|
withdrawing_cash_amount, 2
|
||||||
|
);
|
||||||
|
const withdrawer_cash_data = await backup_server_db_instance.backup_updateinDB(
|
||||||
|
"cash_balances",
|
||||||
|
cash_balances_res
|
||||||
|
);
|
||||||
|
// Get a cashier
|
||||||
|
const cashiersList = JSON.parse(
|
||||||
|
localbitcoinplusplus.master_configurations
|
||||||
|
.cashiers
|
||||||
|
);
|
||||||
|
const cashiersPubKeysArray = Object.keys(cashiersList);
|
||||||
|
const getAPaymentHandler = randomNoRepeats(cashiersPubKeysArray)();
|
||||||
|
const cashierFloAddr = bitjs[localbitcoinplusplus.BASE_BLOCKCHAIN].pubkey2address(
|
||||||
|
getAPaymentHandler
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
const encoded_bank_details = localbitcoinplusplus.encrypt.encryptMessage(
|
if (!cashiersPubKeysArray.includes(
|
||||||
bank_details,
|
getAPaymentHandler
|
||||||
getAPaymentHandler
|
)
|
||||||
);
|
) {
|
||||||
|
throw new Error(
|
||||||
|
`ERROR: ${getAPaymentHandler} is not recognized as any Cashier's Public Key.`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
let token_transfer_currency = "";
|
const encoded_bank_details = localbitcoinplusplus.encrypt.encryptMessage(
|
||||||
if (params.currency == "INR") {
|
bank_details,
|
||||||
token_transfer_currency = "rupee";
|
getAPaymentHandler
|
||||||
}
|
);
|
||||||
|
|
||||||
const flo_withdraw_comment = `transfer ${withdrawing_cash_amount} ${token_transfer_currency}# to ${params.trader_flo_address}.`;
|
let token_transfer_currency = "";
|
||||||
|
if (params.currency == "INR") {
|
||||||
|
token_transfer_currency = "rupee";
|
||||||
|
}
|
||||||
|
|
||||||
// Add it to cash withdrawal table
|
const flo_withdraw_comment = `transfer ${withdrawing_cash_amount} ${token_transfer_currency}# to ${params.trader_flo_address}.`;
|
||||||
let withdraw_request_db_object = {
|
|
||||||
id: helper_functions.unique_id(),
|
|
||||||
trader_flo_address: params.trader_flo_address,
|
|
||||||
withdraw_amount: withdrawing_cash_amount,
|
|
||||||
currency: params.currency,
|
|
||||||
receivinAddress: encoded_bank_details,
|
|
||||||
cashier_pubKey: getAPaymentHandler,
|
|
||||||
status: 1 // withdraw request called
|
|
||||||
};
|
|
||||||
|
|
||||||
readDB("localbitcoinUser", "00-01").then(
|
// Add it to cash withdrawal table
|
||||||
function (su_data) {
|
let withdraw_request_db_object = {
|
||||||
if (
|
id: helper_functions.unique_id(),
|
||||||
typeof su_data == "object" &&
|
trader_flo_address: params.trader_flo_address,
|
||||||
typeof su_data.myLocalFLOPublicKey ==
|
withdraw_amount: withdrawing_cash_amount,
|
||||||
"string" &&
|
currency: params.currency,
|
||||||
su_data.myLocalFLOPublicKey.length > 0 &&
|
receivinAddress: encoded_bank_details,
|
||||||
localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(
|
cashier_pubKey: getAPaymentHandler,
|
||||||
su_data.myLocalFLOPublicKey
|
status: 1 // withdraw request called
|
||||||
)
|
};
|
||||||
) {
|
|
||||||
let withdraw_request_db_object_hash = Crypto.SHA256(
|
readDB("localbitcoinUser", "00-01").then(
|
||||||
JSON.stringify(
|
function (su_data) {
|
||||||
withdraw_request_db_object
|
if (
|
||||||
|
typeof su_data == "object" &&
|
||||||
|
typeof su_data.myLocalFLOPublicKey ==
|
||||||
|
"string" &&
|
||||||
|
su_data.myLocalFLOPublicKey.length > 0 &&
|
||||||
|
localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(
|
||||||
|
su_data.myLocalFLOPublicKey
|
||||||
)
|
)
|
||||||
);
|
) {
|
||||||
withdraw_request_db_object[
|
let withdraw_request_db_object_hash = Crypto.SHA256(
|
||||||
"withdrawDataHash"
|
JSON.stringify(
|
||||||
] = withdraw_request_db_object_hash;
|
withdraw_request_db_object
|
||||||
withdraw_request_db_object[
|
)
|
||||||
"order_validator_sign"
|
|
||||||
] = RM_WALLET.sign(
|
|
||||||
withdraw_request_db_object_hash,
|
|
||||||
localbitcoinplusplus.wallets
|
|
||||||
.MY_SUPERNODE_PRIVATE_KEY
|
|
||||||
);
|
|
||||||
withdraw_request_db_object[
|
|
||||||
"order_validator_public_key"
|
|
||||||
] = su_data.myLocalFLOPublicKey;
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Transfer Token
|
|
||||||
RM_TRADE.sendMultipleInputsTransaction(
|
|
||||||
localbitcoinplusplus.BASE_BLOCKCHAIN,
|
|
||||||
[localbitcoinplusplus.wallets
|
|
||||||
.MY_SUPERNODE_PRIVATE_KEY],
|
|
||||||
cashierFloAddr,
|
|
||||||
0.01,
|
|
||||||
localbitcoinplusplus.wallets
|
|
||||||
.my_local_flo_address,
|
|
||||||
async function (res) {
|
|
||||||
console.log(res);
|
|
||||||
if (typeof res == "object") {
|
|
||||||
try {
|
|
||||||
let msg = "";
|
|
||||||
let resp_txid = "";
|
|
||||||
if (
|
|
||||||
typeof res.txid == "string" &&
|
|
||||||
res.txid.length > 0
|
|
||||||
) {
|
|
||||||
resp_obj = JSON.parse(
|
|
||||||
res.txid
|
|
||||||
);
|
|
||||||
resp_txid =
|
|
||||||
resp_obj.txid.result ||
|
|
||||||
resp_obj.txid;
|
|
||||||
msg = `Transaction Id for token transfer to ${params.trader_flo_address}: ${resp_txid}.`;
|
|
||||||
} else {
|
|
||||||
err_response = {
|
|
||||||
user_flo_addr: cashierFloAddr,
|
|
||||||
msg: `Failed to transfer token for withdraw id ${withdraw_request_db_object.id}`
|
|
||||||
}
|
|
||||||
reactor.dispatchEvent('message_for_user', err_response);
|
|
||||||
throw new Errror(
|
|
||||||
`ERROR: Failed to make transaction.`
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (msg.length > 0) {
|
|
||||||
// Deduct balance of withdrawer
|
|
||||||
cash_balances_res.cash_balance -= helper_functions.truncateDecimals(
|
|
||||||
withdrawing_cash_amount, 2
|
|
||||||
);
|
|
||||||
const withdrawer_cash_data = await backup_server_db_instance.backup_updateinDB(
|
|
||||||
"cash_balances",
|
|
||||||
cash_balances_res
|
|
||||||
);
|
|
||||||
|
|
||||||
const update_cash_balance_obj = {
|
|
||||||
withdrawer_cash_data: withdrawer_cash_data
|
|
||||||
};
|
|
||||||
const update_cash_balance_str = JSON.stringify(
|
|
||||||
update_cash_balance_obj
|
|
||||||
);
|
|
||||||
const update_cash_balance_hash = Crypto.SHA256(
|
|
||||||
update_cash_balance_str
|
|
||||||
);
|
|
||||||
const update_cash_balance_sign = RM_WALLET.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.trader_flo_address = cash_balances_res.trader_flo_address;
|
|
||||||
|
|
||||||
RM_RPC.send_rpc
|
|
||||||
.call(
|
|
||||||
this,
|
|
||||||
"update_all_new_cash_withdraw_recorded_in_db",
|
|
||||||
update_cash_balance_obj
|
|
||||||
)
|
|
||||||
.then(
|
|
||||||
update_cash_balance_req =>
|
|
||||||
doSend(
|
|
||||||
update_cash_balance_req
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
//add the request to supernode db
|
|
||||||
withdraw_request_db_object.token_transfer_txid =
|
|
||||||
resp_txid ||
|
|
||||||
res.signedTxHash;
|
|
||||||
|
|
||||||
// Add record in Db
|
|
||||||
const withdraw_request_db_object_res = await backup_server_db_instance.backup_addDB(
|
|
||||||
"withdraw_cash",
|
|
||||||
withdraw_request_db_object
|
|
||||||
);
|
|
||||||
|
|
||||||
// return back the response to client
|
|
||||||
withdraw_request_db_object_res.receiver_flo_address =
|
|
||||||
params.trader_flo_address;
|
|
||||||
withdraw_request_db_object_res.trader_flo_address =
|
|
||||||
params.trader_flo_address;
|
|
||||||
RM_RPC.send_rpc
|
|
||||||
.call(
|
|
||||||
this,
|
|
||||||
"withdrawal_request_response",
|
|
||||||
withdraw_request_db_object_res
|
|
||||||
)
|
|
||||||
.then(
|
|
||||||
withdrawal_request_response =>
|
|
||||||
doSend(
|
|
||||||
withdrawal_request_response
|
|
||||||
)
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
throw new Errror(
|
|
||||||
`ERROR: Failed to make transaction. Message length is 0: ${msg}`
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
throw new Error(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
flo_withdraw_comment
|
|
||||||
);
|
);
|
||||||
} catch (error) {
|
withdraw_request_db_object[
|
||||||
console.log(error);
|
"withdrawDataHash"
|
||||||
|
] = withdraw_request_db_object_hash;
|
||||||
|
withdraw_request_db_object[
|
||||||
|
"order_validator_sign"
|
||||||
|
] = RM_WALLET.sign(
|
||||||
|
withdraw_request_db_object_hash,
|
||||||
|
localbitcoinplusplus.wallets
|
||||||
|
.MY_SUPERNODE_PRIVATE_KEY
|
||||||
|
);
|
||||||
|
withdraw_request_db_object[
|
||||||
|
"order_validator_public_key"
|
||||||
|
] = su_data.myLocalFLOPublicKey;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Transfer Token
|
||||||
|
RM_TRADE.sendMultipleInputsTransaction(
|
||||||
|
localbitcoinplusplus.BASE_BLOCKCHAIN,
|
||||||
|
[localbitcoinplusplus.wallets
|
||||||
|
.MY_SUPERNODE_PRIVATE_KEY],
|
||||||
|
cashierFloAddr,
|
||||||
|
0.01,
|
||||||
|
localbitcoinplusplus.wallets
|
||||||
|
.my_local_flo_address,
|
||||||
|
async function (res) {
|
||||||
|
console.log(res);
|
||||||
|
if (typeof res == "object") {
|
||||||
|
try {
|
||||||
|
let msg = "";
|
||||||
|
let resp_txid = "";
|
||||||
|
if (
|
||||||
|
typeof res.txid == "string" &&
|
||||||
|
res.txid.length > 0
|
||||||
|
) {
|
||||||
|
resp_obj = JSON.parse(
|
||||||
|
res.txid
|
||||||
|
);
|
||||||
|
resp_txid =
|
||||||
|
resp_obj.txid.result ||
|
||||||
|
resp_obj.txid;
|
||||||
|
msg = `Transaction Id for token transfer to ${params.trader_flo_address}: ${resp_txid}.`;
|
||||||
|
} else {
|
||||||
|
err_response = {
|
||||||
|
user_flo_addr: cashierFloAddr,
|
||||||
|
msg: `Failed to transfer token for withdraw id ${withdraw_request_db_object.id}`
|
||||||
|
}
|
||||||
|
reactor.dispatchEvent('message_for_user', err_response);
|
||||||
|
throw new Errror(
|
||||||
|
`ERROR: Failed to make transaction.`
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msg.length > 0) {
|
||||||
|
|
||||||
|
const update_cash_balance_obj = {
|
||||||
|
withdrawer_cash_data: withdrawer_cash_data
|
||||||
|
};
|
||||||
|
const update_cash_balance_str = JSON.stringify(
|
||||||
|
update_cash_balance_obj
|
||||||
|
);
|
||||||
|
const update_cash_balance_hash = Crypto.SHA256(
|
||||||
|
update_cash_balance_str
|
||||||
|
);
|
||||||
|
const update_cash_balance_sign = RM_WALLET.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.trader_flo_address = cash_balances_res.trader_flo_address;
|
||||||
|
|
||||||
|
RM_RPC.send_rpc
|
||||||
|
.call(
|
||||||
|
this,
|
||||||
|
"update_all_new_cash_withdraw_recorded_in_db",
|
||||||
|
update_cash_balance_obj
|
||||||
|
)
|
||||||
|
.then(
|
||||||
|
update_cash_balance_req =>
|
||||||
|
doSend(
|
||||||
|
update_cash_balance_req
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
//add the request to supernode db
|
||||||
|
withdraw_request_db_object.token_transfer_txid =
|
||||||
|
resp_txid ||
|
||||||
|
res.signedTxHash;
|
||||||
|
|
||||||
|
// Add record in Db
|
||||||
|
const withdraw_request_db_object_res = await backup_server_db_instance.backup_addDB(
|
||||||
|
"withdraw_cash",
|
||||||
|
withdraw_request_db_object
|
||||||
|
);
|
||||||
|
|
||||||
|
// return back the response to client
|
||||||
|
withdraw_request_db_object_res.receiver_flo_address =
|
||||||
|
params.trader_flo_address;
|
||||||
|
withdraw_request_db_object_res.trader_flo_address =
|
||||||
|
params.trader_flo_address;
|
||||||
|
RM_RPC.send_rpc
|
||||||
|
.call(
|
||||||
|
this,
|
||||||
|
"withdrawal_request_response",
|
||||||
|
withdraw_request_db_object_res
|
||||||
|
)
|
||||||
|
.then(
|
||||||
|
withdrawal_request_response =>
|
||||||
|
doSend(
|
||||||
|
withdrawal_request_response
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
throw new Errror(
|
||||||
|
`ERROR: Failed to make transaction. Message length is 0: ${msg}`
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
backup_server_db_instance.backup_updateinDB("cash_balances",
|
||||||
|
old_cash_balances_res,
|
||||||
|
old_cash_balances_res.id,
|
||||||
|
false, false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
flo_withdraw_comment
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
backup_server_db_instance.backup_updateinDB("cash_balances",
|
||||||
|
old_cash_balances_res,
|
||||||
|
old_cash_balances_res.id,
|
||||||
|
false, false
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// Return error to the requester
|
||||||
|
err_msg =
|
||||||
|
"Withdrawal request failed: You are trying to withdraw more cash than you have in localbitcoinplusplus account.";
|
||||||
|
err_response = {
|
||||||
|
user_flo_addr: params.trader_flo_address,
|
||||||
|
msg: err_msg
|
||||||
}
|
}
|
||||||
);
|
reactor.dispatchEvent('message_for_user', err_response);
|
||||||
} else {
|
throw new Error(err_msg);
|
||||||
// Return error to the requester
|
|
||||||
err_msg =
|
|
||||||
"Withdrawal request failed: You are trying to withdraw more cash than you have in localbitcoinplusplus account.";
|
|
||||||
err_response = {
|
|
||||||
user_flo_addr: params.trader_flo_address,
|
|
||||||
msg: err_msg
|
|
||||||
}
|
}
|
||||||
reactor.dispatchEvent('message_for_user', err_response);
|
|
||||||
throw new Error(err_msg);
|
|
||||||
}
|
}
|
||||||
|
} catch(e) {
|
||||||
|
console.error(e);
|
||||||
|
backup_server_db_instance.backup_updateinDB("cash_balances",
|
||||||
|
old_cash_balances_res,
|
||||||
|
old_cash_balances_res.id,
|
||||||
|
false, false
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
err_msg = "withdraw request error";
|
err_msg = "withdraw request error";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user