public function getBalance()
 {
     $api_url = 'https://blockchain.info/merchant/' . Config::get('bitcoin.guid') . '/balance';
     $api_url .= '?password='******'bitcoin.password'));
     $api_url .= '&address=' . urlencode(Config::get('bitcoin.wallet_address'));
     $api_url .= '&confirmations=0';
     $response = file_get_contents($api_url);
     $object = json_decode($response);
     return array('usd' => Bitcoin::toUSD($object->balance), 'btc' => Bitcoin::toBTC($object->balance), 'satoshi' => $object->balance);
 }
 public function postCreate()
 {
     if (!Auth::check()) {
         return array('success' => false, 'errors' => 'You must be logged in to place any bets.');
     }
     $bet_amount = Bitcoin::toSatoshi(floatval(Input::get('bet_amount')));
     $cross_bet_amount = Bitcoin::toSatoshi(floatval(Input::get('cross_bet_amount')));
     if ($bet_amount > Auth::user()->getBalance()) {
         return array('success' => false, 'errors' => array('bet_amount' => 'You don\'t have enough funds to place that bet.'));
     }
     if ($bet_amount < Config::get('bitcoin.minimum_bet')) {
         return array('success' => false, 'errors' => array('bet_amount' => 'Minimum bet amount is ' . Bitcoin::toBTC(Config::get('bitcoin.minimum_bet')) . ' BTC'));
     }
     if ($cross_bet_amount < Config::get('bitcoin.minimum_bet')) {
         return array('success' => false, 'errors' => array('cross_bet_amount' => 'Minimum bet amount is ' . Bitcoin::toBTC(Config::get('bitcoin.minimum_bet')) . ' BTC'));
     }
     $type = Input::get('type');
     if (!in_array($type, $this->valid_types)) {
         return array('success' => false, 'errors' => array('type' => 'Invalid.'));
     }
     $expiration = intval(Input::get('expiration'));
     if ($expiration < Config::get('bitcoin.minimum_bet_expiration') || $expiration > Config::get('bitcoin.maximum_bet_expiration')) {
         return array('success' => false, 'errors' => array('expiration' => 'Invalid.'));
     }
     $bet = new Bet();
     $bet->type = $type;
     $bet->created_by_user_id = Auth::user()->id;
     $bet->bet_amount = $bet_amount;
     $bet->cross_bet_amount = $cross_bet_amount;
     $bet->target_price = floatval(Input::get('target_price'));
     $bet->price_when_created = Bitcoin::toUSD();
     $expiresAt = Carbon::now()->addSeconds($expiration);
     $bet->expires_at = $expiresAt;
     if ($bet->save()) {
         Auth::user()->subtractFromBalance($bet_amount);
         return array('success' => true);
     } else {
         return array('success' => false, 'errors' => 'Bet couldn\'t be created.');
     }
 }
Exemple #3
0
 public function handleWinner()
 {
     if ($this->winner_paid) {
         return false;
     }
     $btc_price = Bitcoin::toUSD();
     if ($this->type == 'above') {
         $winner = $btc_price > $this->target_price ? $this->created_by_user_id : $this->accepted_by_user_id;
     } else {
         if ($this->type == 'under') {
             $winner = $btc_price < $this->target_price ? $this->created_by_user_id : $this->accepted_by_user_id;
         }
     }
     $this->winner_user_id = $winner;
     $winnings = (1 - Config::get('bitcoin.winnings_fee')) * (intval($this->bet_amount) + intval($this->cross_bet_amount));
     $winner_model = User::where('id', $winner)->first();
     $winner_model->addToBalance($winnings);
     Notify::alert("User {$winner} paid " . Bitcoin::toBTC($winnings) . " BTC");
     $this->winner_paid = 1;
     $this->save();
     return true;
 }
Exemple #4
0
 public static function toUSD($amount = 100000000, $satoshi = true)
 {
     $USDPerBTC = Cache::get('bitcoin_price');
     return $satoshi ? $USDPerBTC * Bitcoin::toBTC($amount) : $USDPerBTC * $amount;
 }
Exemple #5
0
 public function getBalance($satoshi = true)
 {
     $balance = $this->balances()->orderBy('id', 'desc')->pluck('balance');
     return is_null($balance) ? 0 : $satoshi ? $balance : Bitcoin::toBTC($balance);
 }