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);
    }
}
Example #2
0
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)) {