Example #1
0
 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;
     }
 }
Example #2
0
            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;
Example #3
0
            $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;