array( 'class'=>'CCaptchaAction', 'backColor'=>0xeeeeee, ), ); } private function verifyparam() { $deposit = user()->getState('yaamp-deposit'); $address = getparam('address'); if(!$this->admin && $deposit != $address) return false; return true; } public function actionLogin() { $deposit = isset($_POST['deposit_address'])? substr($_POST['deposit_address'], 0, 34): ''; $password = isset($_POST['deposit_password'])? substr($_POST['deposit_password'], 0, 64): ''; $renter = getdbosql('db_renters', "address=:address", array(':address'=>$deposit)); if(!$renter) { $this->render('login'); return; } if(md5($password) != $renter->password && (!empty($renter->password) || !empty($password))) { user()->setFlash('error', "Login failed."); $this->render('login'); return; } // $recents = isset($_COOKIE['deposits'])? unserialize($_COOKIE['deposits']): array(); // $recents[$renter->address] = $renter->address; // setcookie('deposits', serialize($recents), time()+60*60*24*30); user()->setState('yaamp-deposit', $renter->address); $this->redirect("/renting"); } public function actionIndex() { $deposit = user()->getState('yaamp-deposit'); if(!$deposit && !$this->admin) { $this->render('login'); return; } $address = getparam('address'); if($this->admin && !empty($address)) { $deposit = $address; user()->setState('yaamp-deposit', $deposit); } $renter = getdbosql('db_renters', "address=:deposit", array(':deposit'=>$deposit)); if(!$renter) { $this->render('login'); return; } $changed = false; if(isset($_POST['deposit_email'])) { $renter->email = $_POST['deposit_email']; $changed = true; } if(isset($_POST['deposit_password']) && !empty($_POST['deposit_password'])) { if($_POST['deposit_password'] == $_POST['deposit_confirm']) { $renter->password = md5($_POST['deposit_password']); $changed = true; } else { user()->setFlash('error', "Confirm different from password."); $this->goback(); return; } } if($changed) { debuglog("saving renter {$_SERVER['REMOTE_ADDR']} $renter->address"); dborun("update renters set email=:email, password=:password where id=$renter->id", array(':email'=>$renter->email, ':password'=>$renter->password)); // $renter->save(); user()->setFlash('message', "Settings saved."); $this->redirect("/renting"); } $this->render('index', array('renter'=>$renter)); } public function actionSettings() { $this->render('settings'); } public function actionAdmin() { if(!$this->admin) return; $this->render('admin'); } public function actionCreate() { $this->render('create'); } public function actionLogout() { user()->setState('yaamp-deposit', ''); $this->redirect('/renting'); } public function actionTx() { $this->renderPartial('tx'); } //////////////////////////////////////////////////////////////////////////////////////////////////// public function actionJobs_stop() { $job = getdbo('db_jobs', getiparam('id')); $renter = getdbo('db_renters', $job->renterid); if(!$renter || $renter->address != user()->getState('yaamp-deposit')) $this->goback(); $job->active = false; $job->ready = false; $job->time = time(); // $job->difficulty = null; $job->save(); $this->goback(); } public function actionJobs_start() { $job = getdbo('db_jobs', getiparam('id')); // if($job->algo == 'sha256') $this->goback(); $renter = getdbo('db_renters', $job->renterid); if(!$renter || $renter->balance<=0.00001000 || $renter->address != user()->getState('yaamp-deposit')) $this->goback(); $rent = dboscalar("select rent from hashrate where algo=:algo order by time desc limit 1", array(':algo'=>$job->algo)); if($job->price > $rent) $job->active = true; $job->ready = true; $job->time = time(); // $job->difficulty = null; $job->save(); $this->goback(); } public function actionJobs_startall() { $deposit = user()->getState('yaamp-deposit'); $renter = getrenterparam($deposit); if(!$renter || $renter->balance<=0.00001000) $this->goback(); $list = getdbolist('db_jobs', "renterid=$renter->id"); foreach($list as $job) { $rent = dboscalar("select rent from hashrate where algo=:algo order by time desc limit 1", array(':algo'=>$job->algo)); if($job->price > $rent) $job->active = true; $job->ready = true; $job->time = time(); $job->save(); } $this->goback(); } public function actionJobs_stopall() { $deposit = user()->getState('yaamp-deposit'); $renter = getrenterparam($deposit); if(!$renter) $this->goback(); $list = getdbolist('db_jobs', "renterid=$renter->id"); foreach($list as $job) { $job->active = false; $job->ready = false; $job->time = time(); $job->save(); } $this->goback(); } ///////////////////////////////////////////////////////////////////////////////////////////// public function actionBalance_results() { if(!$this->verifyparam()) return; $this->renderPartial('balance_results'); } public function actionOrders_results() { if(!$this->verifyparam()) return; $this->renderPartial('orders_results'); } public function actionAll_orders_results() { $this->renderPartial('all_orders_results'); } public function actionGraph_job_results() { $this->renderPartial('graph_job_results'); } public function actionStatus_results() { $this->renderPartial('status_results'); } public function actionGraph_price_results() { $this->renderPartial('graph_price_results'); } ///////////////////////////////////////////////////////////////////////////////////////////// public function actionOrderDelete() { $job = getdbo('db_jobs', getiparam('id')); if(!$job) return; $renter = getdbo('db_renters', $job->renterid); if(!$renter || $renter->address != user()->getState('yaamp-deposit')) return; $job->delete(); $this->redirect("/renting?address=$renter->address"); } public function actionOrderSave() { $renter = getdbo('db_renters', XssFilter(''.getparam('order_renterid'))); if(!$renter || $renter->address != user()->getState('yaamp-deposit')) return; $job = getdbo('db_jobs', XssFilter(''.getparam('order_id'))); if(!$job) { $job = new db_jobs; $job->renterid = getparam('order_renterid'); } $job->algo = getparam('order_algo'); $job->username = getparam('order_username'); $job->password = getparam('order_password'); $job->percent = getparam('order_percent'); $job->price = getparam('order_price'); $job->speed = getparam('order_speed')*1000000; if( empty($job->algo) || empty($job->username) || empty($job->password) || empty($job->price) || empty($job->speed) || empty(''.getparam('order_address')) || empty(''.getparam('order_host'))) { $this->redirect('/renting'); return; } if($job->speed<100000) { $this->redirect('/renting'); return; } $a = explode(':', getparam('order_host')); if(!isset($a[0]) || !isset($a[1])) { $this->redirect('/renting'); return; } $job->host = $a[0]; $job->port = $a[1]; $rent = dboscalar("select rent from hashrate where algo=:algo order by time desc limit 1", array(':algo'=>$job->algo)); if($job->price > $rent && $job->ready) $job->active = true; else if($job->price < $rent) $job->active = false; $job->time = time(); // $job->difficulty = null; $job->save(); $this->redirect("/renting?address=".getparam('order_address')); } ///////////////////////////////////////////////////////////////////////////////////////////// public function actionOrderDialog() { $renter = getrenterparam(''.getparam('address')); if(!$renter) return; $a = 'x11'; $server = ''; $username = ''; $password = 'xx'; $percent = ''; $price = ''; $speed = ''; $id = 0; $job = getdbo('db_jobs', getiparam('id')); if($job) { $id = $job->id; $a = $job->algo; $server = "$job->host:$job->port"; $username = $job->username; $password = $job->password; $percent = $job->percent; $price = mbitcoinvaluetoa($job->price); $speed = $job->speed/1000000; } echo <<

Enter your job information below and click Submit when you are ready.

end; if(controller()->admin) echo ""; echo "
Algo:
Server:
Username:
Password:
Max Price
(mBTC/mh/day):
Max Hashrate
(Mh/s):
Percent:
"; } ////////////////////////////////////////////////////////////////////////////////////////////////////////// public function actionResetSpent() { $renter = getrenterparam(''.getparam('address')); if(!$renter) return; $renter->custom_start = 0; $renter->spent = $renter->custom_balance; $renter->save(); $this->goback(); } public function actionWithdraw() { $fees = 0.0001; $deposit = user()->getState('yaamp-deposit'); if(!$deposit) { $this->render('login'); return; } $renter = getrenterparam($deposit); if(!$renter) { $this->render('login'); return; } $amount = getparam('withdraw_amount'); $address = getparam('withdraw_address'); $amount = floatval(bitcoinvaluetoa(min($amount, $renter->balance-$fees))); if($amount < 0.001) { user()->setFlash('error', 'Minimum withdraw is 0.001'); $this->redirect("/renting"); return; } $coin = getdbosql('db_coins', "symbol='BTC'"); if(!$coin) return; $remote = new Bitcoin($coin->rpcuser, $coin->rpcpasswd, $coin->rpchost, $coin->rpcport); $res = $remote->validateaddress($address); if(!$res || !isset($res['isvalid']) || !$res['isvalid']) { user()->setFlash('error', 'Invalid address'); $this->redirect("/renting"); return; } $rentertx = new db_rentertxs; $rentertx->renterid = $renter->id; $rentertx->time = time(); $rentertx->amount = $amount; $rentertx->type = 'withdraw'; $rentertx->address = $address; $rentertx->tx = 'scheduled'; $rentertx->save(); debuglog("withdraw scheduled $renter->id $renter->address, $amount to $address"); user()->setFlash('message', "withdraw scheduled"); $this->redirect("/renting"); } }