function process() { do_query("SET div_precision_increment = 8"); // find and cancel any active orders from users with negative BTC or FIAT balances // this should never happen unless someone is trying to double-spend their balance $query = "\n SELECT orderid, orderbook.amount as amount, orderbook.type, orderbook.uid as uid\n FROM orderbook\n JOIN purses\n ON orderbook.uid = purses.uid\n WHERE\n status != 'CLOSED' AND\n status != 'CANCEL' AND\n purses.amount < 0\n GROUP BY orderid\n "; $result = b_query($query); while ($row = mysql_fetch_array($result)) { $orderid = $row['orderid']; $amount = $row['amount']; $type = $row['type']; $uid = $row['uid']; try { echo "cancelling order {$orderid} (spend ", internal_to_numstr($amount), " {$type} for user {$uid}) due to negative balance\n"; wait_for_lock($uid); $query = "\n UPDATE orderbook\n SET status = 'CANCEL'\n WHERE orderid = '{$orderid}'\n "; b_query($query); add_funds($uid, $amount, $type); // these records indicate returned funds. create_record($orderid, $amount, 0, 0, -1, 0); release_lock($uid); } catch (Error $e) { if ($e->getTitle() == 'Lock Error') { echo "can't get lock for {$uid}\n"; } else { throw $e; } } } $query = "\n SELECT orderid\n FROM orderbook\n WHERE processed=FALSE\n ORDER BY timest ASC\n "; $result = b_query($query); while ($row = mysql_fetch_array($result)) { $orderid = $row['orderid']; echo "Processing {$orderid}...\n"; fulfill_order($orderid); echo "Completed.\n\n"; $query = "\n UPDATE orderbook\n SET processed=TRUE\n WHERE orderid='{$orderid}'\n "; b_query($query); } }
function addlog($level, $text) { global $is_logged_in; $text = sprintf("%2s %4s %s %s\n", $level, $is_logged_in, date('H:i:s j-M'), $text); wait_for_lock('log'); if ($fp = @fopen(LOGFILE, 'a')) { fwrite($fp, $text); fclose($fp); } release_lock('log'); }
$query = "\n UPDATE requests\n SET status='{$status}'\n WHERE\n reqid='{$reqid}'\n AND curr_type='BTC'\n "; do_query($query); } try { check_frozen(); // find and cancel any active requests from users with negative BTC or FIAT balances // this should never happen unless someone is trying to double-spend their balance $query = "\n SELECT\n reqid, requests.amount as amount, requests.uid as uid\n FROM requests\n JOIN purses\n ON requests.uid = purses.uid\n WHERE\n req_type = 'WITHDR'\n AND curr_type = 'BTC'\n AND (status = 'VERIFY' OR status = 'PROCES')\n AND purses.amount < 0\n GROUP BY reqid\n"; $result = do_query($query); while ($row = mysql_fetch_array($result)) { $reqid = $row['reqid']; $amount = $row['amount']; $uid = $row['uid']; try { echo "cancelling reqid {$reqid} (withdraw ", internal_to_numstr($amount), " BTC for user {$uid}) due to negative balance\n"; wait_for_lock($uid); $query = "\n UPDATE requests\n SET status = 'CANCEL'\n WHERE reqid = '{$reqid}'\n "; do_query($query); add_funds($uid, $amount, 'BTC'); release_lock($uid); } catch (Error $e) { if ($e->getTitle() == 'Lock Error') { echo "can't get lock for {$uid}\n"; } else { throw $e; } } } $query = "\n SELECT\n requests.reqid AS reqid,\n users.uid AS uid,\n amount,\n addy\n FROM requests\n JOIN bitcoin_requests\n ON requests.reqid=bitcoin_requests.reqid\n JOIN users\n ON users.uid=requests.uid\n WHERE\n req_type='WITHDR'\n AND amount > 1000000\n AND status='VERIFY'\n AND curr_type='BTC'\n AND (users.uid < " . LOWEST_UNTRUSTED_USERID . " OR verified)\n "; $result = do_query($query); while ($row = mysql_fetch_assoc($result)) {