public static function insert($is_btc = false, $bank_account_currency = false, $amount = false, $btc_address = false, $account_number = false) { global $CFG; $bank_account_currency = preg_replace("/[^0-9]/", "", $bank_account_currency); $amount = preg_replace("/[^0-9\\.]/", "", $amount); $account_number = preg_replace("/[^0-9]/", "", $account_number); $btc_address = preg_replace("/[^0-9a-zA-Z]/", '', $btc_address); if (!$CFG->session_active) { return false; } if ($CFG->withdrawals_status == 'suspended') { return false; } $available = User::getAvailable(); if ($is_btc) { if (round($amount, 8) > round($available['BTC'], 8)) { return false; } } else { $currency_info = $CFG->currencies[$bank_account_currency]; if ($amount > $available[$currency_info['currency']]) { return false; } } if ($is_btc) { if ((User::$info['verified_authy'] == 'Y' || User::$info['verified_google'] == 'Y') && User::$info['confirm_withdrawal_2fa_btc'] == 'Y' && !($CFG->token_verified || $CFG->session_api)) { return false; } if ((User::$info['verified_authy'] == 'Y' || User::$info['verified_google'] == 'Y') && User::$info['confirm_withdrawal_2fa_bank'] == 'Y' && !($CFG->token_verified || $CFG->session_api)) { return false; } $status = User::$info['confirm_withdrawal_email_btc'] == 'Y' && !($CFG->token_verified || $CFG->session_api) ? $CFG->request_awaiting_id : $CFG->request_pending_id; $request_id = db_insert('requests', array('date' => date('Y-m-d H:i:s'), 'site_user' => User::$info['id'], 'currency' => $CFG->btc_currency_id, 'amount' => $amount, 'description' => $CFG->withdraw_btc_desc, 'request_status' => $status, 'request_type' => $CFG->request_withdrawal_id, 'send_address' => $btc_address, 'fee' => $CFG->bitcoin_sending_fee, 'net_amount' => $amount - $CFG->bitcoin_sending_fee)); db_insert('history', array('date' => date('Y-m-d H:i:s'), 'ip' => $CFG->client_ip, 'history_action' => $CFG->history_withdraw_id, 'site_user' => User::$info['id'], 'request_id' => $request_id, 'bitcoin_address' => $btc_address, 'balance_before' => User::$info['btc'], 'balance_after' => User::$info['btc'] - $amount)); if (User::$info['confirm_withdrawal_email_btc'] == 'Y' && !($CFG->token_verified || $CFG->session_api) && $request_id > 0) { Status::sumFields(array('pending_withdrawals' => $amount)); $email_token = User::randomPassword(12); $vars = User::$info; $vars['authcode'] = urlencode(Encryption::encrypt($email_token)); $vars['baseurl'] = $CFG->frontend_baseurl; db_update('requests', $request_id, array('email_token' => $email_token)); $email = SiteEmail::getRecord('request-auth'); Email::send($CFG->form_email, User::$info['email'], $email['title'], $CFG->form_email_from, false, $email['content'], $vars); } elseif (User::$info['notify_withdraw_btc'] == 'Y') { $info['amount'] = $amount; $info['currency'] = 'BTC'; $info['first_name'] = User::$info['first_name']; $info['last_name'] = User::$info['last_name']; $info['id'] = $request_id; $email = SiteEmail::getRecord('new-withdrawal'); Email::send($CFG->form_email, User::$info['email'], str_replace('[amount]', $amount, str_replace('[currency]', 'BTC', $email['title'])), $CFG->form_email_from, false, $email['content'], $info); } } else { if ((User::$info['verified_authy'] == 'Y' || User::$info['verified_google'] == 'Y') && User::$info['confirm_withdrawal_2fa_bank'] == 'Y' && !($CFG->token_verified || $CFG->session_api)) { return false; } $amount = round($amount, 2, PHP_ROUND_HALF_UP); $status = User::$info['confirm_withdrawal_email_bank'] == 'Y' && !($CFG->token_verified || $CFG->session_api) ? $CFG->request_awaiting_id : $CFG->request_pending_id; $request_id = db_insert('requests', array('date' => date('Y-m-d H:i:s'), 'site_user' => User::$info['id'], 'currency' => $bank_account_currency, 'amount' => $amount, 'description' => $CFG->withdraw_fiat_desc, 'request_status' => $status, 'request_type' => $CFG->request_withdrawal_id, 'account' => $account_number, 'fee' => $CFG->fiat_withdraw_fee, 'net_amount' => $amount - $CFG->fiat_withdraw_fee)); db_insert('history', array('date' => date('Y-m-d H:i:s'), 'ip' => $CFG->client_ip, 'history_action' => $CFG->history_withdraw_id, 'site_user' => User::$info['id'], 'request_id' => $request_id, 'balance_before' => User::$info[strtolower($currency_info['currency'])], 'balance_after' => User::$info[strtolower($currency_info['currency'])] - $amount)); if (User::$info['confirm_withdrawal_email_bank'] == 'Y' && !($CFG->token_verified || $CFG->session_api) && $request_id > 0) { $vars = User::$info; $email_token = User::randomPassword(12); $vars['authcode'] = urlencode(Encryption::encrypt($email_token)); $vars['baseurl'] = $CFG->frontend_baseurl; db_update('requests', $request_id, array('email_token' => $email_token)); $email = SiteEmail::getRecord('request-auth'); Email::send($CFG->form_email, User::$info['email'], $email['title'], $CFG->form_email_from, false, $email['content'], $vars); } elseif (User::$info['notify_withdraw_bank'] == 'Y') { $info['amount'] = number_format($amount, 2); $info['currency'] = $currency_info['currency']; $info['first_name'] = User::$info['first_name']; $info['last_name'] = User::$info['last_name']; $info['id'] = $request_id; $email = SiteEmail::getRecord('new-withdrawal'); Email::send($CFG->form_email, User::$info['email'], str_replace('[amount]', number_format($amount, 2), str_replace('[currency]', $currency_info['currency'], $email['title'])), $CFG->form_email_from, false, $email['content'], $info); } } if ($request_id && $CFG->memcached) { $CFG->unset_cache['balances'][User::$info['id']] = 2; self::unsetCache(User::$info['id']); } if ($CFG->session_api && $request_id > 0) { $result = self::get(false, false, false, false, false, false, 1, $request_id); return $result[0]; } else { return $request_id; } }
Status::sumFields(array('hot_wallet_btc' => 0 - $transferred - $transfer_fees, 'warm_wallet_btc' => $transferred, 'total_btc' => 0 - $transfer_fees)); echo 'Transferred ' . $reserve_surplus . ' to warm wallet. TX: ' . $response . PHP_EOL; } } } elseif ($reserve['hot_wallet_btc'] > $CFG->bitcoin_reserve_min && $warm_wallet && $reserve_surplus > 0) { //$warm_wallet_a = BitcoinAddresses::getWarmWallet(); $warm_wallet_a['address'] = $warm_wallet; $hot_wallet_a = BitcoinAddresses::getHotWallet(); $bitcoin->walletpassphrase($CFG->bitcoin_passphrase, 3); $response = $bitcoin->sendfrom($CFG->bitcoin_accountname, $warm_wallet_a['address'], floatval($reserve_surplus)); $transferred = 0; echo $bitcoin->error; if ($response && !$bitcoin->error) { $transferred = $reserve_surplus; $transfer_fees = 0; $transaction = $bitcoin->gettransaction($response); foreach ($transaction['details'] as $detail) { if ($detail['category'] == 'send') { $detail['fee'] = abs($detail['fee']); if ($detail['fee'] > 0) { $transfer_fees += $detail['fee']; db_insert('fees', array('fee' => $detail['fee'], 'date' => date('Y-m-d H:i:s'))); } } } Status::sumFields(array('hot_wallet_btc' => 0 - $transferred - $transfer_fees, 'warm_wallet_btc' => $transferred, 'total_btc' => 0 - $transfer_fees)); echo 'Transferred ' . $reserve_surplus . ' to warm wallet. TX: ' . $response . PHP_EOL; } } db_update('status', 1, array('cron_receive_bitcoin' => date('Y-m-d H:i:s'), 'last_sweep' => date('Y-m-d H:i:s'))); echo 'done' . PHP_EOL;
$response = $bitcoin->sendfrom($CFG->bitcoin_accountname, $address, (double) bcsub($amount, $CFG->bitcoin_sending_fee, 8)); $fees_charged += $CFG->bitcoin_sending_fee; if (!empty($bitcoin->error)) { echo $bitcoin->error . PHP_EOL; } } } } if (!empty($response) && $users && !$bitcoin->error) { echo 'Transactions sent: ' . $response . PHP_EOL; $total = 0; $transaction = $bitcoin->gettransaction($response); $actual_fee_difference = $fees_charged - abs($transaction['fee']); foreach ($users as $site_user => $amount) { $total += $amount; User::updateBalances($site_user, array('btc' => -1 * $amount), true); } foreach ($requests as $request_id) { db_update('requests', $request_id, array('request_status' => $CFG->request_completed_id)); } if ($total > 0) { Status::sumFields(array('hot_wallet_btc' => 0 - $total + $actual_fee_difference, 'total_btc' => 0 - $total + $actual_fee_difference)); Status::updateEscrows(array($CFG->btc_currency_id => $actual_fee_difference)); db_update('status', 1, array('pending_withdrawals' => $pending - $total)); } } if (empty($pending)) { db_update('status', 1, array('deficit_btc' => '0')); } db_update('status', 1, array('cron_send_bitcoin' => date('Y-m-d H:i:s'))); echo 'done' . PHP_EOL;