Example #1
0
session_start();
if (empty($_SESSION['user_id'])) {
    die('!user_id');
}
define('DC', TRUE);
define('ABSPATH', dirname(dirname(__FILE__)) . '/');
//require_once( ABSPATH . 'includes/errors.php' );
require_once ABSPATH . 'db_config.php';
require_once ABSPATH . 'includes/autoload.php';
if (!empty($_SESSION['restricted'])) {
    die('Permission denied');
}
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
if (!check_input_data($_REQUEST['parent_id'], 'int')) {
    die('error parent_id');
}
if (!check_input_data($_REQUEST['message_type'], 'int')) {
    die('error type');
}
if (!check_input_data($_REQUEST['message_subtype'], 'int')) {
    die('error subtype');
}
$parent_id = intval($_REQUEST['parent_id']);
$message_type = intval($_REQUEST['message_type']);
$message_subtype = intval($_REQUEST['message_subtype']);
$subject = $db->escape($_REQUEST['subject']);
$message = $db->escape($_REQUEST['message']);
define('MY_PREFIX', get_my_prefix($db));
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "SET NAMES UTF8");
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tINSERT INTO `" . DB_PREFIX . MY_PREFIX . "my_admin_messages` (\n\t\t\t\t`parent_id`,\n\t\t\t\t`subject`,\n\t\t\t\t`message`,\n\t\t\t\t`message_type`,\n\t\t\t\t`message_subtype`,\n\t\t\t\t`decrypted`\n\t\t\t)\n\t\t\tVALUES (\n\t\t\t\t{$parent_id},\n\t\t\t\t'{$subject}',\n\t\t\t\t'{$message}',\n\t\t\t\t{$message_type},\n\t\t\t\t'{$message_subtype}',\n\t\t\t\t1\n\t\t\t)");
print $db->getInsertId();
Example #2
0
    $first_load_blockchain = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, '
			SELECT `first_load_blockchain`
			FROM `' . DB_PREFIX . 'config`
			', 'fetch_one');
    // нужно узнать время последнего блока
    $confirmed_block_id = get_confirmed_block_id($db);
    $confirmed_block_id = $confirmed_block_id ? $confirmed_block_id : 1;
    // получим время из последнего подвержденного блока
    $last_block_bin = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT `data`\n\t\t\tFROM `" . DB_PREFIX . "block_chain`\n\t\t\tWHERE `id` = {$confirmed_block_id}\n\t\t\tLIMIT 1\n\t\t\t", 'fetch_one');
    ParseData::string_shift($last_block_bin, 5);
    // уберем тип и id блока
    $block_time = ParseData::binary_dec_string_shift($last_block_bin, 4);
} else {
    require_once ABSPATH . 'includes/fns-main.php';
}
if (isset($_REQUEST['tpl_name']) && check_input_data($_REQUEST['tpl_name'], 'tpl_name') && (!empty($_SESSION['user_id']) || preg_match("/^install_step_[0-9_]+\$/D", $_REQUEST['tpl_name']))) {
    $tpl_name = filter_var($_REQUEST['tpl_name'], FILTER_SANITIZE_STRING);
} else {
    if (isset($db) && isset($install_progress) && $install_progress === 'complete' && empty($first_load_blockchain)) {
        // первый запуск, еще не загружен блокчейн
        $tpl_name = 'after_install';
    } else {
        if (isset($db) && isset($install_progress) && $install_progress === 'complete') {
            $tpl_name = 'login';
        } else {
            $tpl_name = 'install_step_0';
        }
    }
}
// идет загрузка блокчейна
if (isset($db) && $tpl_name != 'install_step_0' && time() - $block_time > 3600 * 2 && !empty($first_load_blockchain)) {
Example #3
0
<?php

define('DC', TRUE);
define('ABSPATH', dirname(dirname(__FILE__)) . '/');
//require_once( ABSPATH . 'includes/errors.php' );
require_once ABSPATH . 'db_config.php';
require_once ABSPATH . 'includes/autoload.php';
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
// Если в community не пусто, значит работаем в режиме пула. Авторизация по паролю запрещена.
$community = get_community_users($db);
if (!$community) {
    $hash_pass = filter_var($_POST['hash_pass'], FILTER_SANITIZE_STRING);
    if (check_input_data($hash_pass, 'hash_code')) {
        $private_key = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT `private_key`\n\t\t\tFROM `" . DB_PREFIX . "my_keys`\n\t\t\tWHERE `block_id` = (SELECT max(`block_id`) FROM `" . DB_PREFIX . "my_keys` ) AND\n\t\t\t\t\t\t `password_hash` = '{$hash_pass}'\n\t\t\t", 'fetch_one');
        if ($private_key) {
            session_start();
            $my_user_id = get_my_user_id($db);
            $_SESSION['user_id'] = $my_user_id;
            if (!$_SESSION['user_id']) {
                $_SESSION['user_id'] = 'wait';
            }
            if ($my_user_id == 1) {
                $_SESSION['ADMIN'] = 1;
            }
            print json_encode(array('result' => 1, 'key' => $private_key));
        } else {
            print json_encode(array('result' => 0));
        }
    }
} else {
    print json_encode(array('result' => 0));
Example #4
0
<?php

define('DC', TRUE);
define('ABSPATH', dirname(dirname(__FILE__)) . '/');
//require_once( ABSPATH . 'includes/errors.php' );
require_once ABSPATH . 'db_config.php';
require_once ABSPATH . 'includes/autoload.php';
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
if (!check_input_data($_POST['sign'], 'hex_sign')) {
    json_encode(array('result' => 'bad hex_sign'));
}
if (!preg_match("/^[0-9a-z]{1,2048}\$/D", $_POST['e'])) {
    json_encode(array('result' => 'bad e'));
}
if (!preg_match("/^[0-9a-z]{1,2048}\$/D", $_POST['n'])) {
    json_encode(array('result' => 'bad n'));
}
$sign = hextobin($_POST['sign']);
$tables_array = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSHOW TABLES\n\t\t\t", 'array');
$community = get_community_users($db);
$result = 0;
if ($community) {
    // в цикле проверяем, кому подойдет присланная подпись
    for ($i = 0; $i < sizeof($community); $i++) {
        $my_prefix = $community[$i] . '_';
        if (!in_array("{$my_prefix}my_keys", $tables_array)) {
            continue;
        }
        // получим открытый ключ юзера
        $public_key = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT `public_key`\n\t\t\t\tFROM `" . DB_PREFIX . "{$my_prefix}my_keys`\n\t\t\t\tWHERE `block_id` = (SELECT max(`block_id`) FROM `" . DB_PREFIX . "{$my_prefix}my_keys` )\n\t\t\t\t", 'fetch_one');
        $ini_array = parse_ini_file(ABSPATH . "config.ini", true);
Example #5
0
<?php

session_start();
if (empty($_SESSION['user_id'])) {
    die('!user_id');
}
define('DC', TRUE);
define('ABSPATH', dirname(dirname(__FILE__)) . '/');
//require_once( ABSPATH . 'includes/errors.php' );
require_once ABSPATH . 'db_config.php';
require_once ABSPATH . 'includes/autoload.php';
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
$user_id = intval($_REQUEST['user_id']);
if (!check_input_data($user_id, 'int')) {
    die('error user_id');
}
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "SET NAMES UTF8");
$res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT *\n\t\tFROM `" . DB_PREFIX . "abuses`\n\t\tWHERE `user_id` = {$user_id}\n\t\t");
$abuses = '';
while ($row = $db->fetchArray($res)) {
    $abuses .= 'from_user_id: ' . $row['from_user_id'] . '; time: ' . date('d-m-Y H:i:s', $row['time']) . '; comment: ' . $row['comment'] . "<br>";
}
if (!$abuses) {
    $abuses = 'No';
}
$reg_time = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `reg_time`\n\t\tFROM `" . DB_PREFIX . "miners_data`\n\t\tWHERE `user_id` = {$user_id}\n\t\t", 'fetch_one');
$reg_time = date('d-m-Y H:i:s', $reg_time);
echo json_encode(array('abuses' => $abuses, 'reg_time' => $reg_time));
Example #6
0
// удаление юзера с пула
$del_id = intval(@$_REQUEST['parameters']['del_id']);
if ($del_id) {
    $tables_array = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSHOW TABLES\n\t\t\t", 'array');
    foreach ($my_tables as $table) {
        if (in_array(DB_PREFIX . "{$del_id}_{$table}", $tables_array)) {
            $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\tDROP TABLE `" . DB_PREFIX . "{$del_id}_{$table}`\n\t\t\t\t\t");
        }
    }
    $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tDELETE FROM `" . DB_PREFIX . "community`\n\t\t\tWHERE `user_id` = {$del_id}\n\t\t\t");
}
if (isset($_REQUEST['parameters']['pool_tech_works'])) {
    $pool_tech_works = intval($_REQUEST['parameters']['pool_tech_works']);
    $pool_max_users = intval($_REQUEST['parameters']['pool_max_users']);
    $commission = $_REQUEST['parameters']['commission'];
    if (!check_input_data($commission, 'commission')) {
        die('bad commission');
    }
    $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tUPDATE `" . DB_PREFIX . "config`\n\t\t\tSET `pool_tech_works` = {$pool_tech_works},\n\t\t\t\t   `pool_max_users` = {$pool_max_users},\n\t\t\t\t   `commission` = '{$commission}'\n\t\t\t");
}
$tables_array = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSHOW TABLES\n\t\t\t", 'array');
$tpl['users'] = array();
$community = get_community_users($db);
for ($i = 0; $i < sizeof($community); $i++) {
    if ($community[$i] != $user_id) {
        if (in_array("{$community[$i]}_my_table", $tables_array)) {
            $tpl['users'][$community[$i]] = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\tSELECT `miner_id`,\n\t\t\t\t\t\t\t\t `email`\n\t\t\t\t\tFROM `" . DB_PREFIX . "{$community[$i]}_my_table`\n\t\t\t\t\tLIMIT 1\n\t\t\t\t\t", 'fetch_array');
        }
    }
}
$tpl['config'] = get_node_config();
Example #7
0
<?php

session_start();
if (empty($_SESSION['user_id'])) {
    die('!user_id');
}
define('DC', TRUE);
define('ABSPATH', dirname(dirname(__FILE__)) . '/');
//require_once( ABSPATH . 'includes/errors.php' );
require_once ABSPATH . 'db_config.php';
require_once ABSPATH . 'includes/autoload.php';
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
if (!empty($_SESSION['restricted'])) {
    die('Permission denied');
}
define('MY_PREFIX', get_my_prefix($db));
if (!check_input_data($_REQUEST['race'], 'int')) {
    die('error race');
}
$race = intval($_REQUEST['race']);
if (!check_input_data($_REQUEST['country'], 'int')) {
    die('error country');
}
$country = intval($_REQUEST['country']);
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tUPDATE `" . DB_PREFIX . MY_PREFIX . "my_table`\n\t\tSET  `race` = {$race},\n\t\t\t\t`country` = {$country}\n\t\t");
Example #8
0
require_once ABSPATH . 'includes/autoload.php';
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
if (!empty($_SESSION['restricted'])) {
    die('Permission denied');
}
$my_user_id = $_SESSION['user_id'];
$min_amount = $db->escape($_REQUEST['min_amount']);
$currency_id = $db->escape($_REQUEST['currency_id']);
$ps_id = $db->escape($_REQUEST['payment_system_id']);
if (!check_input_data($min_amount, 'amount')) {
    die('error min_amount');
}
if (!check_input_data($currency_id, 'int')) {
    die('error currency_id');
}
if (!check_input_data($ps_id, 'int')) {
    die('error payment_system_id');
}
$max_promised_amounts = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `amount`\n\t\tFROM `" . DB_PREFIX . "max_promised_amounts`\n\t\tWHERE `currency_id` = {$currency_id}\n\t\tORDER BY `time` DESC\n\t\tLIMIT 1\n\t\t", 'fetch_one');
if ($ps_id) {
    $add_sql = " (`ps1` = {$ps_id} OR `ps2` = {$ps_id} OR `ps3` = {$ps_id} OR `ps4` = {$ps_id} OR `ps5` = {$ps_id}) AND";
} else {
    $add_sql = "";
}
$print = '';
$res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `amount`,\n\t\t\t\t\t `latitude`,\n\t\t\t\t\t `longitude`,\n\t\t\t\t\t `" . DB_PREFIX . "promised_amount`.`user_id`\n\t\tFROM `" . DB_PREFIX . "promised_amount`\n\t\tLEFT JOIN `" . DB_PREFIX . "miners_data` ON `" . DB_PREFIX . "miners_data`.`user_id` = `" . DB_PREFIX . "promised_amount`.`user_id`\n\t\tWHERE `" . DB_PREFIX . "promised_amount`.`status` = 'mining' AND\n\t\t\t\t\t `currency_id` = {$currency_id} AND\n\t\t\t\t\t   {$add_sql}\n\t\t\t\t\t  `" . DB_PREFIX . "promised_amount`.`user_id`!={$my_user_id} AND\n\t\t\t\t\t  `del_block_id` = 0\n\t\t");
while ($row = $db->fetchArray($res)) {
    //print_R($row);
    $repaid = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT `amount`\n\t\t\t\tFROM `" . DB_PREFIX . "promised_amount`\n\t\t\t\tWHERE `status` = 'repaid' AND\n\t\t\t\t\t\t\t `currency_id` = {$currency_id} AND\n\t\t\t\t\t\t\t `user_id` = {$row['user_id']} AND\n\t\t\t\t\t\t\t `del_block_id` = 0\n\t\t\t\t", 'fetch_one');
    //print $max_promised_amounts."\n";
    //print $repaid."\n";
define('ABSPATH', dirname(dirname(__FILE__)) . '/');
set_time_limit(0);
//require_once( ABSPATH . 'includes/errors.php' );
require_once ABSPATH . 'db_config.php';
require_once ABSPATH . 'includes/autoload.php';
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
if (!empty($_SESSION['restricted'])) {
    die('Permission denied');
}
$_REQUEST['data'] = str_ireplace("\n", "<br>", $_REQUEST['data']);
$data = json_decode($_REQUEST['data'], true);
$id = intval($_REQUEST['id']);
if (!check_input_data($data['parent_id'], 'int')) {
    die('error parent_id');
}
if (!check_input_data($data['type'], 'int')) {
    die('error type');
}
if (!check_input_data($data['subtype'], 'int')) {
    die('error subtype');
}
$data['subject'] = filter_var($data['subject'], FILTER_SANITIZE_STRING);
$data['subject'] = str_ireplace(array('\'', '"'), '', $data['subject']);
$data['subject'] = $db->escape($data['subject']);
$data['message'] = filter_var($data['message'], FILTER_SANITIZE_STRING);
$data['message'] = str_ireplace(array('\'', '"'), '', $data['message']);
$data['message'] = $db->escape($data['message']);
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "SET NAMES UTF8");
$sql = "\n\t\tUPDATE `" . DB_PREFIX . MY_PREFIX . "my_admin_messages`\n\t\tSET `parent_id` = " . intval($data['parent_id']) . ",\n\t\t\t   `subject` = '{$data['subject']}',\n\t\t\t   `message` = '{$data['message']}',\n\t\t\t   `message_type` = '{$data['type']}',\n\t\t\t   `message_subtype` = '{$data['subtype']}',\n\t\t\t   `decrypted` = 1\n\t\tWHERE `id` = {$id}\n\t\t";
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, $sql);
print json_encode(array('parent_id' => $data['parent_id']));
Example #10
0
<?php

session_start();
if (empty($_SESSION['user_id'])) {
    die('!user_id');
}
define('DC', TRUE);
define('ABSPATH', dirname(dirname(__FILE__)) . '/');
//require_once( ABSPATH . 'includes/errors.php' );
require_once ABSPATH . 'db_config.php';
require_once ABSPATH . 'includes/autoload.php';
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
if (!empty($_SESSION['restricted'])) {
    die('Permission denied');
}
define('MY_PREFIX', get_my_prefix($db));
$host = filter_var($_REQUEST['host'], FILTER_SANITIZE_URL);
if (substr($host, strlen($host) - 1, strlen($host)) != '/') {
    $host .= '/';
}
// если плохой возращаем error
if (!check_input_data($_REQUEST['host'], 'host')) {
    print json_encode(array('error' => 1));
} else {
    $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, '
			UPDATE `' . DB_PREFIX . MY_PREFIX . 'my_table`
			SET `host` = "' . $host . '"
			');
    print json_encode(array('error' => 0));
}
Example #11
0
if (@$_REQUEST['parameters'] == 'lang=42' || $_REQUEST['parameters']['lang_id'] == '42') {
    $lang = 42;
    setlang($lang);
} else {
    if (@$_REQUEST['parameters'] == 'lang=1' || $_REQUEST['parameters']['lang_id'] == '1') {
        $lang = 1;
        setlang($lang);
    }
}
$lang = get_lang();
require_once ABSPATH . 'lang/' . $lang . '.php';
$tpl['cf_url'] = get_cf_url();
if (!$tpl['cf_url']) {
    die('content access denied');
}
// проверим, не идут ли тех. работы на пуле
$config = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, '
		SELECT `pool_admin_user_id`,
					  `pool_tech_works`
		FROM `' . DB_PREFIX . 'config`
		', 'fetch_array');
if ($config['pool_admin_user_id'] && $config['pool_admin_user_id'] != $_SESSION['user_id'] && $config['pool_tech_works'] == 1) {
    require_once ABSPATH . 'content/pool_tech_works.php';
} else {
    if (isset($_REQUEST['tpl_name']) && check_input_data($_REQUEST['tpl_name'], 'tpl_name')) {
        $tpl_name = filter_var($_REQUEST['tpl_name'], FILTER_SANITIZE_STRING);
        require_once ABSPATH . 'content/' . $tpl_name . '.php';
    } else {
        require_once ABSPATH . 'content/cf_catalog.php';
    }
}
Example #12
0
if (empty($_SESSION['user_id'])) {
    die('!user_id');
}
define('DC', TRUE);
define('ABSPATH', dirname(dirname(__FILE__)) . '/');
//require_once( ABSPATH . 'includes/errors.php' );
require_once ABSPATH . 'db_config.php';
require_once ABSPATH . 'includes/autoload.php';
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
if (!empty($_SESSION['restricted'])) {
    die('Permission denied');
}
if (!check_input_data($_REQUEST['id'], 'int')) {
    die('error id');
}
if (!empty($data['parent_id']) && !check_input_data($data['parent_id'], 'int')) {
    die('error parent_id');
}
if ($_REQUEST['type'] !== 'dc_transactions' && $_REQUEST['type'] !== 'arbitrator' && $_REQUEST['type'] !== 'seller' && $_REQUEST['type'] !== 'cash_requests' && $_REQUEST['type'] !== 'comments') {
    die('error type');
}
define('MY_PREFIX', get_my_prefix($db));
// == если мы майнер и это dc_transactions, то сюда прислан зашифрованный коммент, который можно расшифровать только нод-кдючем
$miner_id = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `miner_id`\n\t\tFROM `" . DB_PREFIX . "miners_data`\n\t\tWHERE `user_id` = {$_SESSION['user_id']}\n\t\tLIMIT 1\n\t\t", 'fetch_one');
if ($miner_id > 0 && ($_REQUEST['type'] == 'dc_transactions' || $_REQUEST['type'] == 'arbitrator' || $_REQUEST['type'] == 'seller')) {
    $node_private_key = get_node_private_key($db, MY_PREFIX);
    // расшифруем коммент
    $rsa = new Crypt_RSA();
    $rsa->loadKey($node_private_key, CRYPT_RSA_PRIVATE_FORMAT_PKCS1);
    $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
    $_REQUEST['comment'] = $rsa->decrypt(hextobin($_REQUEST['comment']));
Example #13
0
 /**
 	Обработка данных (блоков или транзакций), пришедших с гейта. Только проверка.
 */
 public function ParseData_gate($only_tx = false)
 {
     $count_transactions = 0;
     $this->DataPre();
     $this->global_variables = self::get_variables($this->db, array('max_tx_size', 'max_tx_count', 'error_time', 'max_block_user_transactions', 'max_user_transactions'));
     $transaction_binary_data = $this->binary_data;
     // если это транзакции (type>0), а не блок (type==0)
     if ($this->type > 0) {
         // проверим, есть ли такой тип тр-ий
         $error = $this->checkTxType($this->type);
         if ($error) {
             return $error;
         }
         debug_print('TX', __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
         $transaction_binary_data = dec_binary($this->type, 1) . $transaction_binary_data;
         $transaction_binary_data_full = $transaction_binary_data;
         // нет ли хэша этой тр-ии у нас в БД?
         $error = $this->checkLogTx($transaction_binary_data_full);
         if ($error) {
             return $error;
         }
         $this->tx_hash = md5($transaction_binary_data);
         // преобразуем бинарные данные транзакции в массив
         $this->transaction_array = $this->parse_transaction($transaction_binary_data);
         if (!is_array($this->transaction_array)) {
             return $this->transaction_array;
         }
         debug_print($this->transaction_array, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
         // время транзакции может быть немного больше, чем время на ноде.
         // у нода может быть просто не настроено время.
         // время транзакции используется только для борьбы с атаками вчерашними транзакциями.
         // А т.к. мы храним хэши в log_transaction за 36 часов, то боятся нечего.
         $my_time = time();
         if ($this->transaction_array[2] - MAX_TX_FORW > $my_time || $this->transaction_array[2] < $my_time - MAX_TX_BACK) {
             debug_print("tr_time={$this->transaction_array[2]}\nmy_time={$my_time}\nMAX_TX_FORW=" . MAX_TX_FORW . "\nMAX_TX_BACK=" . MAX_TX_BACK . "", __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
             return "error tx time ({$this->transaction_array[2]})";
         }
         // $this->transaction_array[3] могут подсунуть пустой
         $user_id = @$this->transaction_array[3];
         if (!check_input_data($user_id, 'bigint')) {
             return 'bad user_id';
         }
         /*// от 1 юзера не может быть более X запросов за 1 минуту. Для борьбы с досами.
         			$count = $this->db->query( __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__, "
         					SELECT `count`
         					FROM `".DB_PREFIX."log_minute`
         					WHERE `user_id` = {$user_id}
         					", 'fetch_one');
         			if (!$count)
         				$this->db->query( __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__, "
         						INSERT INTO `".DB_PREFIX."log_minute` (
         								`user_id`, `count`
         							)
         							VALUES (
         								{$user_id}, 1)
         							");
         			else
         				$this->db->query( __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__, "
         						UPDATE `".DB_PREFIX."log_minute`
         						SET `count` = count+1
         						WHERE `user_id` = {$user_id}
         						");
         
         			if ( $count > $this->global_variables['max_user_transactions'] )
         				return 'max_user_transactions';
         			*/
     }
     // если это блок
     if ($this->type == 0) {
         $count_transactions = array();
         debug_print('BLOCK', __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
         $rate = 1;
         // если есть $only_tx=true, то значит идет восстановление уже проверенного блока и заголовок не требуется
         if (!$only_tx) {
             $error = $this->ParseBlock();
             if ($error) {
                 debug_print("[error] " . $error, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
                 return $error;
             }
             // проверим данные, указанные в заголовке блока
             debug_print("CheckBlockHeader", __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
             $error = $this->CheckBlockHeader();
             if ($error) {
                 return $error;
             }
         } else {
             debug_print('<$only_tx>', __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
         }
         // если в ходе проверки тр-ий возникает ошибка, то вызываем откатчик всех занесенных тр-ий. Эта переменная для него
         $this->full_tx_binary_data = $this->binary_data;
         $i = 0;
         $tx_for_RollbackTo = '';
         if ($this->binary_data) {
             do {
                 // обработка тр-ий может занять много времени, нужно отметиться
                 upd_deamon_time($this->db);
                 $transaction_size = $this->decode_length($this->binary_data);
                 if (!$this->binary_data) {
                     debug_print("transaction_size = {$transaction_size}\nthis->full_tx_binary_data = {$this->full_tx_binary_data}", __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
                     return 'null $this->binary_data TX';
                 }
                 // отчекрыжим одну транзакцию от списка транзакций
                 $transaction_binary_data = $this->string_shift($this->binary_data, $transaction_size);
                 $transaction_binary_data_full = $transaction_binary_data;
                 // добавляем взятую тр-ию в набор тр-ий для RollbackTo, в котором пойдем в обратном порядке
                 $tx_for_RollbackTo .= $this->encode_length_plus_data($transaction_binary_data);
                 // нет ли хэша этой тр-ии у нас в БД?
                 $error = $this->checkLogTx($transaction_binary_data);
                 if ($error) {
                     debug_print('[error]' . $error, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
                     $this->RollbackTo($tx_for_RollbackTo, true, true);
                     return $error;
                 }
                 $this->tx_hash = md5($transaction_binary_data);
                 $this->transaction_array = $this->parse_transaction($transaction_binary_data);
                 if (!is_array($this->transaction_array)) {
                     return $this->transaction_array;
                 }
                 // $this->transaction_array[3] могут подсунуть пустой
                 $user_id = @$this->transaction_array[3];
                 if (!check_input_data($user_id, 'bigint')) {
                     return 'bad user_id';
                 }
                 // считаем по каждому юзеру, сколько в блоке от него транзакций
                 $count_transactions[$user_id]++;
                 // чтобы 1 юзер не смог прислать дос-блок размером в 10гб, который заполнит своими же транзакциями
                 if ($count_transactions[$user_id] > $this->global_variables['max_block_user_transactions']) {
                     debug_print($count_transactions, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
                     debug_print($user_id, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
                     debug_print($this->global_variables, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
                     $this->RollbackTo($tx_for_RollbackTo, true, true);
                     return 'max_block_user_transactions';
                 }
                 // проверим, есть ли такой тип тр-ий
                 $error = $this->checkTxType($this->transaction_array[1]);
                 if ($error) {
                     return $error;
                 }
                 $fns_name = self::$MainArray[$this->transaction_array[1]];
                 //print '$fns_name='.$fns_name;
                 $fns_name_init = $fns_name . '_init';
                 $fns_name_front = $fns_name . '_front';
                 debug_print('>>>>>>>>>>>>parsedatagate = ' . $fns_name_front, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
                 unset($this->tx_data);
                 $error = $this->{$fns_name_init}();
                 if ($error) {
                     return $error;
                 }
                 debug_print($this->tx_data, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
                 $error = $this->{$fns_name_front}();
                 if ($error) {
                     debug_print('[error]=>' . $error, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
                     //if (substr_count($error, '[limit_requests]')>0)
                     //	$this->RollbackTo ($tx_for_RollbackTo, false, true);
                     //else
                     $this->RollbackTo($tx_for_RollbackTo, true, true);
                     return $error;
                 }
                 // пишем хэш тр-ии в лог
                 $this->insert_in_log_tx($transaction_binary_data_full, $this->tx_data['time']);
                 // ===================>ради эксперимента
                 /*
                 $this->db->query( __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__, "
                 		UPDATE `".DB_PREFIX."transactions`
                 		SET `verified` = 1
                 		WHERE `hash` = 0x".md5($transaction_binary_data_full)."
                 		");
                 */
                 // ====================================
                 $i++;
             } while ($this->binary_data);
         }
     } else {
         debug_print('memory', __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
         // / $rate = 10;
         // Оперативные транзакции
         $fns_name = self::$MainArray[$this->type];
         $fns_name_init = $fns_name . '_init';
         $fns_name_front = $fns_name . '_front';
         unset($this->tx_data);
         $error = $this->{$fns_name_init}();
         if ($error) {
             return $error;
         }
         debug_print($this->tx_data, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
         $error = $this->{$fns_name_front}();
         if ($error) {
             return $error;
         }
         $this->insert_in_log_tx($transaction_binary_data_full, $this->tx_data['time']);
     }
 }
Example #14
0
 } else {
     if (isset($_REQUEST['col'], $_REQUEST['row'], $_REQUEST['table'])) {
         $table = filter_var($_REQUEST['table'], FILTER_SANITIZE_STRING);
         $row = filter_var($_REQUEST['row'], FILTER_SANITIZE_STRING);
         $col = filter_var($_REQUEST['col'], FILTER_SANITIZE_STRING);
         $all_tables = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSHOW TABLES\n\t\t\t", 'array');
         if (!in_array($table, $all_tables)) {
             die('error table');
         }
         if (preg_match('/(my_|_my|config|_refs)/i', $table)) {
             die('error table');
         }
         if (!preg_match('/^\\-?[0-9]{1,10}$/D', $row)) {
             die('error row');
         }
         if (!check_input_data($col, 'bigint')) {
             die('error col');
         }
         if ($row == -1) {
             $data = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSHOW TABLE STATUS LIKE '{$table}'\n\t\t\t\t", 'fetch_array');
             $row = $data['Rows'] - 1;
         }
         $res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT *\n\t\t\tFROM `" . DB_PREFIX . "{$table}`\n\t\t\tLIMIT {$row}, 1\n\t\t\t");
         $data = $db->fetchArrayNum($res);
         print $data[$col];
     } else {
         $all_counts = array();
         $data = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT `current_version`,\n\t\t\t\t\t\t `block_id`\n\t\t\tFROM `" . DB_PREFIX . "info_block`\n\t\t\t", 'fetch_array');
         $all_counts['time'] = time();
         $all_counts['block_id'] = $data['block_id'];
         $all_counts['db_version'] = $data['current_version'];
Example #15
0
function clear_incompatible_tx($binary_tx, $db, $my_tx)
{
    $LOG_MARKER = md5($binary_tx);
    $fatal_error = '';
    $wait_error = '';
    $to_user_id = '';
    // получим тип тр-ии и юзера
    list($type, $user_id, $third_var) = get_tx_type_and_user_id($binary_tx);
    if (!check_input_data($type, 'int')) {
        $fatal_error = 'error type';
    }
    if (!check_input_data($user_id, 'int')) {
        $fatal_error = 'error user_id';
    }
    if (!check_input_data($third_var, 'int')) {
        $fatal_error = 'error $third_var';
    }
    if ($type == ParseData::findType('cash_request_out')) {
        $to_user_id = $third_var;
    }
    if ($type == ParseData::findType('new_pct') || $type == ParseData::findType('new_reduction') || $type == ParseData::findType('new_max_promised_amounts') || $type == ParseData::findType('new_max_other_currencies')) {
        //  чтобы никому не слать эту тр-ю
        $for_self_use = 1;
        // $my_tx == true - это значит функция вызвана из pct_generator.php/reduction_generator.php
        // если же false, то она была спаршена query_tx или tesblock_generator и имела verified=0
        // а т.к. new_pct/new_reduction актуальны только 1 блок, то нужно её удалять
        if (!$my_tx) {
            $fatal_error = 'old new_pct/new_reduction/new_max_promised_amounts/new_max_other_currencies';
            $return = array($fatal_error, $wait_error, $for_self_use, $type, $user_id, $to_user_id);
            debug_print($return, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
            return $return;
        }
    } else {
        $for_self_use = 0;
    }
    // две тр-ии одного типа от одного юзера не должны попасть в один блок
    // исключение - перевод DC между юзерами
    if (!$fatal_error) {
        clear_incompatible_tx_sql($db, $type, $user_id, $wait_error);
        // если новая тр-ия - это запрос на удаление или изменение обещанной суммы, то нужно проверить
        // нет ли запросов на получение обещанных сумм к данному юзеру
        // а также, нужно проверить, нет ли от данного юзера тр-ии cash_request_in
        if ($type == ParseData::findType('del_promised_amount') || $type == ParseData::findType('change_promised_amount')) {
            debug_print('если новая тр-ия - это запрос на удаление банкноты, то нужно проверить, нет ли запросов на получение банкнот к данному юзеру, а также, нужно проверить, нет от данного юзера тр-ии cash_request_in', __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
            $num = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\t\tSELECT count(*)\n\t\t\t            FROM (\n\t\t\t\t            SELECT `user_id`\n\t\t\t\t            FROM `" . DB_PREFIX . "transactions`\n\t\t\t\t            WHERE (\n\t\t\t\t                             `third_var` = {$user_id} AND\n\t\t\t\t\t                         `verified`=1 AND\n\t\t\t\t\t                         `used` = 0\n\t\t\t\t\t                      )\n\t\t\t\t                          OR (\n\t\t\t\t\t                          `type` = " . ParseData::findType('cash_request_in') . " AND\n\t\t\t\t\t                          `user_id` = {$user_id}\n\t\t\t\t                         )\n\t\t\t\t\t\t\tUNION\n\t\t\t\t\t\t\tSELECT `user_id`\n\t\t\t\t\t\t\tFROM `" . DB_PREFIX . "transactions_testblock`\n\t\t\t\t\t\t\tWHERE (\n\t\t\t\t\t\t\t\t\t\t\t `third_var` = {$user_id}\n\t\t\t\t\t\t\t\t\t\t) OR (\n\t\t\t\t\t                         `type` = " . ParseData::findType('cash_request_in') . " AND\n\t\t\t\t\t                         `user_id` = {$user_id}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)  AS `x`\n\t\t\t\t\t\t", 'fetch_one');
            debug_print('$num =' . $num, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
            if ($num) {
                $fatal_error = "`third_var` = {$user_id}";
            }
        }
        // если новая тр-ия - это запрос на получение наличных, то нужно проверить
        // нет ли у получающего юзера запросов на удаление или изменение обещанных сумм
        if ($type == ParseData::findType('cash_request_out')) {
            debug_print('если новая тр-ия - это запрос на получение банкнот, то нужно проверить, нет ли у получающего юзера запросов на удаление банкнот', __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
            $tx_data = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\t\tSELECT *\n\t\t\t            FROM (\n\t\t\t\t            SELECT `data`\n\t\t\t\t            FROM `" . DB_PREFIX . "transactions`\n\t\t\t\t            WHERE `type` IN (" . ParseData::findType('del_promised_amount') . ", " . ParseData::findType('change_promised_amount') . ") AND\n\t\t\t\t                         `user_id` = {$to_user_id} AND\n\t\t\t\t                         `verified`=1 AND\n\t\t\t\t                         `used` = 0\n\t\t\t\t\t\t\tUNION\n\t\t\t\t\t\t\tSELECT `data`\n\t\t\t\t\t\t\tFROM `" . DB_PREFIX . "transactions_testblock`\n\t\t\t\t\t\t\tWHERE `type` IN (" . ParseData::findType('del_promised_amount') . ", " . ParseData::findType('change_promised_amount') . ") AND\n\t\t\t\t\t\t\t\t\t\t `user_id` = {$to_user_id}\n\t\t\t\t\t\t)  AS `x`\n\t\t\t\t\t\t", 'fetch_one');
            debug_print('$tx_data =' . $tx_data, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
            if ($tx_data) {
                // откатим фронтальные записи
                $parsedata = new ParseData(ParseData::encode_length_plus_data($tx_data), $db);
                $parsedata->ParseDataRollbackFront();
                unset($parsedata);
                // Удаляем именно уже записанную тр-ию. При этом новая (cash_request_out) тр-ия успешно обработается
                $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\t\t\tDELETE\n\t\t\t                FROM `" . DB_PREFIX . "transactions`\n\t\t\t                WHERE `hash` = 0x" . md5($tx_data) . "\n\t\t\t\t\t\t\t");
                /*
                				 * создает проблемы для tesblock_is_ready
                				 *
                				 * $db->query( __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__, "
                							DELETE
                			                FROM `".DB_PREFIX."transactions_testblock`
                			                WHERE `hash` = 0x".md5($tx_data)."
                							");*/
            }
        }
        // если новая тр-ия - это запрос на получение банкнот, то нужно проверить
        // нет ли у отправителя запроса на отправку DC, т.к. после списания может не остаться средств
        if ($type == ParseData::findType('cash_request_out')) {
            clear_incompatible_tx_sql_set($db, array('send_dc', 'new_forex_order', 'cf_send_dc'), $user_id, $wait_error);
        }
        // и наоборот
        if (in_array($type, array(ParseData::findType('send_dc'), ParseData::findType('new_forex_order'), ParseData::findType('cf_send_dc')))) {
            clear_incompatible_tx_sql($db, 'cash_request_out', $user_id, $wait_error);
        }
        // на всякий случай не даем попасть в один блок holidays и тр-им, где holidays используются
        if ($type == ParseData::findType('new_holidays')) {
            clear_incompatible_tx_sql($db, 'mining', $user_id, $wait_error);
        }
        if ($type == ParseData::findType('mining')) {
            clear_incompatible_tx_sql($db, 'new_holidays', $user_id, $wait_error);
        }
        if ($type == ParseData::findType('new_holidays')) {
            clear_incompatible_tx_sql($db, 'cash_request_in', $user_id, $wait_error);
        }
        if ($type == ParseData::findType('cash_request_in')) {
            clear_incompatible_tx_sql($db, 'new_holidays', $user_id, $wait_error);
        }
        if ($type == ParseData::findType('cash_request_out')) {
            clear_incompatible_tx_sql($db, 'new_holidays', $to_user_id, $wait_error);
        }
        // не должно попадать в одни блок new_miner_update и new_miner
        if ($type == ParseData::findType('new_miner')) {
            clear_incompatible_tx_sql($db, 'new_miner_update', $user_id, $wait_error);
        }
        if ($type == ParseData::findType('new_miner_update')) {
            clear_incompatible_tx_sql($db, 'new_miner', $user_id, $wait_error);
        }
        // не должно попадать в один блок смена нодовского ключа и тр-ии которые этим ключем подписываются
        if ($type == ParseData::findType('change_node_key') || $type == ParseData::findType('new_miner')) {
            clear_incompatible_tx_sql($db, 'new_miner_update', $user_id, $wait_error);
        }
        if ($type == ParseData::findType('change_node_key') || $type == ParseData::findType('new_miner')) {
            clear_incompatible_tx_sql($db, 'new_pct', $user_id, $wait_error);
        }
        if ($type == ParseData::findType('new_miner_update')) {
            clear_incompatible_tx_sql_set($db, array('change_node_key', 'new_miner'), $user_id, $wait_error);
        }
        if ($type == ParseData::findType('new_pct')) {
            clear_incompatible_tx_sql_set($db, array('change_node_key', 'new_miner'), $user_id, $wait_error);
        }
        if ($type == ParseData::findType('change_node_key') || $type == ParseData::findType('new_miner')) {
            clear_incompatible_tx_sql($db, 'new_reduction', $user_id, $wait_error);
        }
        // восстановление ключа
        if ($type == ParseData::findType('change_key_request')) {
            clear_incompatible_tx_sql_set($db, array('change_key_active'), $third_var, $wait_error);
        }
        if ($type == ParseData::findType('change_key_active')) {
            clear_incompatible_tx_sql_set($db, array('change_key_request'), 0, $wait_error, $user_id);
        }
        // нельзя удалить/изменить обещанную сумму и затем создать запрос на её майнинг
        if ($type == ParseData::findType('mining')) {
            clear_incompatible_tx_sql_set($db, array('del_promised_amount', 'change_promised_amount'), $user_id, $wait_error);
        }
        if (in_array($type, array(ParseData::findType('del_promised_amount'), ParseData::findType('change_promised_amount')))) {
            clear_incompatible_tx_sql($db, 'mining', $user_id, $wait_error);
        }
        // в 1 блоке только 1 майнинг от юзера
        if ($type == ParseData::findType('mining')) {
            clear_incompatible_tx_sql($db, 'mining', $user_id, $wait_error);
        }
        if ($type == ParseData::findType('mining')) {
            clear_incompatible_tx_sql($db, 'admin_ban_miners', 0, $wait_error);
        }
        if ($type == ParseData::findType('cash_request_out')) {
            clear_incompatible_tx_sql($db, 'admin_ban_miners', 0, $wait_error);
        }
        if ($type == ParseData::findType('new_promised_amount')) {
            clear_incompatible_tx_sql($db, 'admin_ban_miners', 0, $wait_error);
        }
        if ($type == ParseData::findType('admin_ban_miners')) {
            rollback_incompatible_tx(array('cash_request_out', 'change_host', 'new_promised_amount', 'change_node_key', 'new_pct', 'mining', 'votes_miner', 'votes_node_new_miner', 'votes_promised_amount', 'abuses', 'new_promised_amount', 'votes_complex'), 0, $wait_error);
        }
        if ($type == ParseData::findType('votes_miner')) {
            clear_incompatible_tx_sql_set($db, array('admin_ban_miners'), 0, $wait_error);
        }
        if ($type == ParseData::findType('votes_complex')) {
            clear_incompatible_tx_sql_set($db, array('admin_ban_miners'), 0, $wait_error);
        }
        if ($type == ParseData::findType('abuses')) {
            // admin_ban_miners преоритетнее, abuses надо вытеснять
            clear_incompatible_tx_sql_set($db, array('admin_ban_miners'), 0, $wait_error);
        }
        // дополнить
        if ($type == ParseData::findType('votes_node_new_miner')) {
            clear_incompatible_tx_sql_set($db, array('admin_ban_miners'), 0, $wait_error);
        }
        if ($type == ParseData::findType('votes_promised_amount')) {
            clear_incompatible_tx_sql_set($db, array('admin_ban_miners'), 0, $wait_error);
        }
        // нельзя голосовать за обещанную сумму юзера $promised_amount_user_id, если он меняет свое местоположение, т.к. сменится статус
        if ($type == ParseData::findType('votes_promised_amount')) {
            $promised_amount_user_id = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\tSELECT `user_id`\n\t\t\t\t\tFROM `" . DB_PREFIX . "promised_amount`\n\t\t\t\t\tWHERE  `id` = {$third_var}\n\t\t\t\t\tLIMIT 1\n\t\t\t\t\t", 'fetch_one');
            if ($promised_amount_user_id) {
                clear_incompatible_tx_sql_set($db, array('change_geolocation'), $promised_amount_user_id, $wait_error);
            }
        }
        // нельзя менять местоположение, если кто-то отдал голос за мою обещанную сумму
        if ($type == ParseData::findType('change_geolocation')) {
            $promised_amount_ids = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\tSELECT `id`\n\t\t\t\t\tFROM `" . DB_PREFIX . "promised_amount`\n\t\t\t\t\tWHERE  `user_id` = {$user_id}\n\t\t\t\t\t", 'array');
            $promised_amount_ids = implode(',', $promised_amount_ids);
            if ($promised_amount_ids) {
                $num = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\t\tSELECT count(*)\n\t\t\t\t\t\t    FROM (\n\t\t\t\t\t\t        SELECT `user_id`\n\t\t\t\t\t\t        FROM `" . DB_PREFIX . "transactions`\n\t\t\t\t\t\t        WHERE  (\n\t\t\t\t\t\t                        `type` = " . ParseData::findType('votes_promised_amount') . " AND `third_var` IN ({$promised_amount_ids})\n\t\t\t\t\t\t                      ) AND\n\t\t\t\t\t\t                     `verified`=1 AND\n\t\t\t\t\t\t                     `used` = 0\n\t\t\t\t\t\t\t\tUNION\n\t\t\t\t\t\t\t\tSELECT `user_id`\n\t\t\t\t\t\t\t\tFROM `" . DB_PREFIX . "transactions_testblock`\n\t\t\t\t\t\t\t\tWHERE  (\n\t\t\t\t\t\t                        `type` = " . ParseData::findType('votes_promised_amount') . " AND `third_var` IN ({$promised_amount_ids})\n\t\t\t\t\t\t                      )\n\t\t\t\t\t\t\t)  AS `x`\n\t\t\t\t\t\t", 'fetch_one');
                if ($num) {
                    $wait_error = 'votes_promised_amount change_geolocation';
                }
            }
        }
        // нельзя удалять CF-проект и в этом же блоке изменить его описание/профинансировать
        if ($type == ParseData::findType('del_cf_project')) {
            clear_incompatible_tx_sql_set($db, array('cf_comment', 'cf_send_dc', 'cf_project_change_category', 'cf_project_data'), 0, $wait_error, $third_var);
        }
        if (in_array($type, array(ParseData::findType('cf_comment'), ParseData::findType('cf_send_dc'), ParseData::findType('cf_project_change_category'), ParseData::findType('cf_project_data')))) {
            clear_incompatible_tx_sql_set($db, array('del_cf_project'), 0, $wait_error, $third_var);
        }
        // потом нужно сделать более тонко. но пока так. Если есть удаление проекта, тогда откатываем все тр-ии del_cf_funding
        if ($type == ParseData::findType('del_cf_project')) {
            rollback_incompatible_tx(array('del_cf_funding'));
        }
        // потом нужно сделать более тонко. но пока так. Если есть del_cf_funding, тогда откатываем все тр-ии удаления проектов
        if ($type == ParseData::findType('del_cf_funding')) {
            rollback_incompatible_tx(array('del_cf_project'));
        }
        // потом нужно сделать более тонко. но пока так. Если есть смена комиссии, то нельзя отправлять тр-ии, где указана комиссия
        if (in_array($type, array(ParseData::findType('cf_send_dc'), ParseData::findType('send_dc'), ParseData::findType('new_forex_order')))) {
            rollback_incompatible_tx(array('change_commission'));
        }
        if ($type == ParseData::findType('change_commission')) {
            clear_incompatible_tx_sql_set($db, array('cf_send_dc', 'send_dc', 'new_forex_order'), 0, $wait_error);
        }
        // Если есть смена коммиссий арбитров, то нельзя делать перевод монет, т.к. там может быть указана комиссия арбитра
        if (in_array($type, array(ParseData::findType('send_dc')))) {
            rollback_incompatible_tx(array('change_arbitrator_conditions'));
        }
        if ($type == ParseData::findType('change_arbitrator_conditions')) {
            clear_incompatible_tx_sql_set($db, array('send_dc'), 0, $wait_error);
        }
        // если идет смена списка арбитров, то у отправителя и у получателя может получиться нестыковка
        if (in_array($type, array(ParseData::findType('send_dc')))) {
            rollback_incompatible_tx(array('change_arbitrator_list'));
        }
        if ($type == ParseData::findType('change_arbitrator_list')) {
            clear_incompatible_tx_sql_set($db, array('send_dc'), 0, $wait_error);
        }
        // на всякий случай не даем попасть в один блок тр-ии отправки в CF-проект монет и другим тр-ям связанным с этим CF-проектом. Т.к. проект может завершиться и 2-я тр-я вызовет ошибку
        if ($type == ParseData::findType('cf_send_dc')) {
            clear_incompatible_tx_sql_set($db, array('cf_send_dc', 'cf_comment', 'del_cf_project', 'cf_project_change_category', 'cf_project_data'), 0, $wait_error, $third_var);
        }
        if (in_array($type, array(ParseData::findType('cf_send_dc'), ParseData::findType('cf_comment'), ParseData::findType('del_cf_project'), ParseData::findType('cf_project_change_category'), ParseData::findType('cf_project_data')))) {
            clear_incompatible_tx_sql_set($db, array('cf_send_dc'), 0, $wait_error, $third_var);
        }
        // нельзя удалять promised_amount и голосовать за него
        if ($type == ParseData::findType('del_promised_amount')) {
            clear_incompatible_tx_sql_set($db, array('votes_promised_amount'), 0, $wait_error, $third_var);
        }
        if ($type == ParseData::findType('votes_promised_amount')) {
            clear_incompatible_tx_sql_set($db, array('del_promised_amount'), 0, $wait_error, $third_var);
        }
        if ($type == ParseData::findType('new_max_promised_amounts')) {
            clear_incompatible_tx_sql_set($db, array('new_max_promised_amounts'), 0, $wait_error, $third_var);
        }
        if ($type == ParseData::findType('new_max_other_currencies')) {
            clear_incompatible_tx_sql_set($db, array('new_max_other_currencies'), 0, $wait_error, $third_var);
        }
        if ($type == ParseData::findType('new_pct')) {
            clear_incompatible_tx_sql_set($db, array('new_pct'), 0, $wait_error, $third_var);
        }
        if ($type == ParseData::findType('new_reductions')) {
            clear_incompatible_tx_sql_set($db, array('new_reductions'), 0, $wait_error, $third_var);
        }
        // в один блок должен попасть только один голос за один объект голосования. $third_var - объект голосования
        if (in_array($type, array(ParseData::findType('votes_promised_amount'), ParseData::findType('votes_miner'), ParseData::findType('votes_node_new_miner'), ParseData::findType('votes_complex')))) {
            $num = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\t\tSELECT count(*)\n\t\t\t\t            FROM (\n\t\t\t\t\t            SELECT `user_id`\n\t\t\t\t\t            FROM `" . DB_PREFIX . "transactions`\n\t\t\t\t\t            WHERE  `type` IN (" . ParseData::findType('votes_promised_amount') . ", " . ParseData::findType('votes_miner') . ", " . ParseData::findType('votes_node_new_miner') . ", " . ParseData::findType('votes_complex') . ") AND\n\t\t\t\t\t                          `third_var` = {$third_var} AND\n\t\t\t\t\t                          `verified`=1 AND\n\t\t\t\t\t                          `used` = 0\n\t\t\t\t\t\t\t\tUNION\n\t\t\t\t\t\t\t\tSELECT `user_id`\n\t\t\t\t\t\t\t\tFROM `" . DB_PREFIX . "transactions_testblock`\n\t\t\t\t\t\t\t\tWHERE `type` IN (" . ParseData::findType('votes_promised_amount') . ", " . ParseData::findType('votes_miner') . ", " . ParseData::findType('votes_node_new_miner') . ", " . ParseData::findType('votes_complex') . ") AND\n\t\t\t\t\t                          `third_var` = {$third_var}\n\t\t\t\t\t\t\t)  AS `x`\n\t\t\t\t\t\t", 'fetch_one');
            debug_print('$num =' . $num, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
            if ($num) {
                $wait_error = 'only 1 vote';
            }
        }
        // если новая тр-ия - это запрос, в котором юзер отдает наличные (cash_request_in)
        // то нужно проверить, не хочет ли юзер удалить или изменить одну из обещанных сумм
        if ($type == ParseData::findType('cash_request_in')) {
            debug_print('если новая тр-ия - это запрос, в котором юзер отдает банкноты (cash_request_in), то нужно проверить, не хочет ли юзер удалить одну из передаваемых банкнот', __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
            $tx_data = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\t\tSELECT *\n\t\t\t            FROM (\n\t\t\t\t            SELECT `data`\n\t\t\t\t            FROM `" . DB_PREFIX . "transactions`\n\t\t\t\t            WHERE `type` IN (" . ParseData::findType('del_promised_amount') . ", " . ParseData::findType('change_promised_amount') . ") AND\n\t\t\t\t                         `user_id` = {$user_id} AND\n\t\t\t\t                         `verified`=1 AND\n\t\t\t\t                         `used` = 0\n\t\t\t\t\t\t\tUNION\n\t\t\t\t\t\t\tSELECT `data`\n\t\t\t\t\t\t\tFROM `" . DB_PREFIX . "transactions_testblock`\n\t\t\t\t\t\t\tWHERE `type` IN (" . ParseData::findType('del_promised_amount') . ", " . ParseData::findType('change_promised_amount') . ") AND\n\t\t\t\t\t\t\t\t\t\t `user_id` = {$user_id}\n\t\t\t\t\t\t)  AS `x`\n\t\t\t\t\t\t", 'fetch_one');
            debug_print('$tx_data =' . $tx_data, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
            if ($tx_data) {
                // откатим фронтальные записи
                $parsedata = new ParseData(ParseData::encode_length_plus_data($tx_data), $db);
                $parsedata->ParseDataRollbackFront();
                unset($parsedata);
                // Удаляем именно уже записанную тр-ию. При этом новая (cash_request_in) тр-ия успешно обработается
                $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\t\t\tDELETE\n\t\t\t                FROM `" . DB_PREFIX . "transactions`\n\t\t\t                WHERE `hash` = 0x" . md5($tx_data) . "\n\t\t\t\t\t\t\t");
                /*
                 * создает проблемы для tesblock_is_ready
                 *
                $db->query( __FILE__, __LINE__,  __FUNCTION__,  __CLASS__, __METHOD__, "
                			DELETE
                			                FROM `".DB_PREFIX."transactions_testblock`
                			                WHERE `hash` = 0x".md5($tx_data)."
                			");
                */
            }
        }
        if ($type == ParseData::findType('change_primary_key')) {
            debug_print('если новая тр-я - это смена праймари ключа, то не должно быть никаких других тр-ий от этого юзера', __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
            $num = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\t\tSELECT count(*)\n\t\t\t\t            FROM (\n\t\t\t\t\t            SELECT `user_id`\n\t\t\t\t\t            FROM `" . DB_PREFIX . "transactions`\n\t\t\t\t\t            WHERE  `user_id` = {$user_id} AND\n\t\t\t\t\t                         `verified`=1 AND\n\t\t\t\t\t                         `used` = 0\n\t\t\t\t\t\t\t\tUNION\n\t\t\t\t\t\t\t\tSELECT `user_id`\n\t\t\t\t\t\t\t\tFROM `" . DB_PREFIX . "transactions_testblock`\n\t\t\t\t\t\t\t\tWHERE `user_id` = {$user_id}\n\t\t\t\t\t\t\t)  AS `x`\n\t\t\t\t\t\t", 'fetch_one');
            debug_print('$num =' . $num, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
            if ($num) {
                $wait_error = 'there are other tr-s';
            }
        }
        if ($type == ParseData::findType('admin_change_primary_key')) {
            debug_print('если новая тр-я - это смена праймари ключа, то не должно быть никаких других тр-ий от юзера, которому меняем ключ', __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
            $num = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\t\tSELECT count(*)\n\t\t\t\t            FROM (\n\t\t\t\t\t            SELECT `user_id`\n\t\t\t\t\t            FROM `" . DB_PREFIX . "transactions`\n\t\t\t\t\t            WHERE  `user_id` = {$third_var} AND\n\t\t\t\t\t                         `verified`=1 AND\n\t\t\t\t\t                         `used` = 0\n\t\t\t\t\t\t\t\tUNION\n\t\t\t\t\t\t\t\tSELECT `user_id`\n\t\t\t\t\t\t\t\tFROM `" . DB_PREFIX . "transactions_testblock`\n\t\t\t\t\t\t\t\tWHERE `user_id` = {$third_var}\n\t\t\t\t\t\t\t)  AS `x`\n\t\t\t\t\t\t", 'fetch_one');
            debug_print('$num =' . $num, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
            if ($num) {
                $wait_error = 'there are other tr-s';
            }
        }
        // любая тр-я от юзера не должна проходить, если уже есть тр-я со сменой праймари ключа или new_pct или new_reduction
        $num = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\t\t\tSELECT count(*)\n\t\t\t\t            FROM (\n\t\t\t\t\t            SELECT `user_id`\n\t\t\t\t\t            FROM `" . DB_PREFIX . "transactions`\n\t\t\t\t\t            WHERE  (\n\t\t\t\t\t\t                            (`type` = " . ParseData::findType('change_primary_key') . " AND `user_id` = {$user_id})\n\t\t\t\t\t\t                            OR\n\t\t\t\t\t\t                            (type IN (" . ParseData::findType('new_pct') . ", " . ParseData::findType('new_reduction') . ") )\n\t\t\t\t\t                          ) AND\n\t\t\t\t\t                         `verified`=1 AND\n\t\t\t\t\t                         `used` = 0\n\t\t\t\t\t\t\t\tUNION\n\t\t\t\t\t\t\t\tSELECT `user_id`\n\t\t\t\t\t\t\t\tFROM `" . DB_PREFIX . "transactions_testblock`\n\t\t\t\t\t\t\t\tWHERE  (\n\t\t\t\t\t\t                            (`type` = " . ParseData::findType('change_primary_key') . " AND `user_id` = {$user_id})\n\t\t\t\t\t\t                            OR\n\t\t\t\t\t\t                            (type IN (" . ParseData::findType('new_pct') . ", " . ParseData::findType('new_reduction') . ") )\n\t\t\t\t\t                          )\n\t\t\t\t\t\t\t)  AS `x`\n\t\t\t\t\t\t", 'fetch_one');
        debug_print('$num =' . $num, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
        if ($num) {
            $wait_error = 'have change_primary_key tx';
        }
        // если пришло new_pct, то нужно откатить следующие тр-ии
        if ($type == ParseData::findType('new_pct')) {
            rollback_incompatible_tx(array('new_reduction', 'change_node_key', 'new_miner', 'votes_promised_amount', 'send_dc', 'cash_request_in', 'mining', 'cf_send_dc', 'del_cf_project', 'new_forex_order', 'del_forex_order', 'for_repaid_fix', 'actualization_promised_amounts', 'del_cf_funding', 'admin_unban_miners', 'admin_ban_miners'));
        }
        // если пришло new_reduction, то нужно откатить следующие тр-ии
        if ($type == ParseData::findType('new_reduction')) {
            rollback_incompatible_tx(array('new_pct', 'change_node_key', 'new_miner', 'votes_promised_amount', 'send_dc', 'cash_request_in', 'mining', 'cf_send_dc', 'del_cf_project', 'new_forex_order', 'del_forex_order', 'for_repaid_fix', 'actualization_promised_amounts', 'del_cf_funding', 'admin_unban_miners', 'admin_ban_miners'));
        }
        // временно запрещаем 2 тр-ии любого типа от одного юзера, а то затрахался уже.
        $num = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT count(*)\n\t\t\t\t    FROM (\n\t\t\t\t\t\t\tSELECT `user_id`\n\t\t\t\t\t\t\tFROM `" . DB_PREFIX . "transactions`\n\t\t\t\t\t\t\tWHERE  `user_id` = {$user_id} AND\n\t\t\t\t                      `verified`=1 AND\n\t\t\t\t                      `used` = 0\n\t\t\t\t\t\t\tUNION\n\t\t\t\t\t\t\tSELECT `user_id`\n\t\t\t\t\t\t\tFROM `" . DB_PREFIX . "transactions_testblock`\n\t\t\t\t\t\t\tWHERE `user_id` = {$user_id}\n\t\t\t\t\t)  AS `x`\n\t\t\t\t", 'fetch_one');
        debug_print('$num =' . $num, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
        if ($num) {
            $wait_error = 'only 1 tx';
        }
    }
    if ($fatal_error) {
        debug_print('fatal[error] ==' . $fatal_error, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
    }
    if ($wait_error) {
        debug_print('wait[error] ==' . $wait_error, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
    }
    $return = array($fatal_error, $wait_error, $for_self_use, $type, $user_id, $third_var);
    debug_print($return, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
    return $return;
}
require_once ABSPATH . 'db_config.php';
require_once ABSPATH . 'includes/autoload.php';
require_once ABSPATH . 'includes/errors.php';
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
$data = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT *\n\t\t\tFROM `" . DB_PREFIX . "testblock`\n\t\t\tLIMIT 1\n\t\t\t", 'fetch_array');
$response_binary_data = dec_binary($data['block_id'], 4) . dec_binary($data['time'], 4) . dec_binary($data['user_id'], 5) . encode_length(strlen($data['signature'])) . $data['signature'];
// разбираем присланные данные
$binary_data = $_POST['data'];
$add_sql = '';
if ($binary_data) {
    $tr_array = array();
    // получим хэши тр-ий, которые надо исключить
    do {
        list(, $tr) = unpack("H*", ParseData::string_shift($binary_data, 16));
        // проверим
        if (!check_input_data($tr, 'md5')) {
            die('error md5 (' . $tr . ')');
        }
        $add_sql .= $tr . ',';
    } while ($binary_data);
    $add_sql = substr($add_sql, 0, -1);
    $add_sql = "WHERE `id` NOT IN ({$add_sql})";
}
// сами тр-ии
$transactions = '';
$res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `data`\n\t\tFROM `" . DB_PREFIX . "transactions_testblock`\n\t\t{$add_sql}\n\t\t");
while ($row = $db->fetchArray($res)) {
    $length = encode_length(strlen($row['data']));
    $transactions .= $length . $row['data'];
}
$response_binary_data .= encode_length(strlen($transactions)) . $transactions;
Example #17
0
$new_testblock['user_id'] = ParseData::binary_dec_string_shift($new_testblock_binary, 5);
list(, $new_testblock['mrkl_root']) = unpack("H*", string_shift($new_testblock_binary, 32));
$sign_size = ParseData::decode_length($new_testblock_binary);
$new_testblock['signature'] = ParseData::string_shift($new_testblock_binary, $sign_size);
$new_testblock['signature_hex'] = bin2hex($new_testblock['signature']);
debug_print("new_testblock: " . print_r_hex($new_testblock), __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
if (!check_input_data($new_testblock['block_id'], 'int')) {
    die('[error] gate_tetblock.php 1 block_id');
}
if (!check_input_data($new_testblock['user_id'], 'int')) {
    die('[error] gate_tetblock.php user_id');
}
if (!check_input_data($new_testblock['time'], 'int')) {
    die('[error] gate_tetblock.php time');
}
if (!check_input_data($new_testblock['mrkl_root'], 'sha256')) {
    die('[error] gate_tetblock.php mrkl_root');
}
//if ( !check_input_data ($new_testblock['signature'] , 'sha256') )
//	die('error signature');
main_lock();
$testBlock = new testblock($db, true);
if (!isset($testBlock->block_info)) {
    main_unlock();
    die('block_info error');
}
// получим id майнеров, которые на нашем уровне
$nodes_ids = $testBlock->getOurLevelNodes();
// временно для теста выключим
// проверим, верный ли ID блока
if ($new_testblock['block_id'] != $testBlock->block_info['block_id'] + 1) {
Example #18
0
<?php

session_start();
if (empty($_SESSION['user_id'])) {
    die('!user_id');
}
define('DC', TRUE);
define('ABSPATH', dirname(dirname(__FILE__)) . '/');
set_time_limit(0);
//require_once( ABSPATH . 'includes/errors.php' );
require_once ABSPATH . 'db_config.php';
require_once ABSPATH . 'includes/autoload.php';
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
require_once ABSPATH . 'lang/' . get_lang() . '.php';
$project_currency_name = $db->escape($_REQUEST['project_currency_name']);
if (!check_input_data($project_currency_name, 'cf_currency_name')) {
    die(json_encode(array('error' => $lng['incorrect_currency_name'])));
}
// проверим, не занято ли имя валюты
$currency = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT `id`\n\t\t\t\tFROM `" . DB_PREFIX . "cf_projects`\n\t\t\t\tWHERE `project_currency_name` = '{$project_currency_name}' AND\n\t\t\t\t\t\t\t `close_block_id` = 0 AND\n\t\t\t\t\t\t\t `del_block_id` = 0\n\t\t\t\tLIMIT 1\n\t\t\t\t", 'fetch_one');
if ($currency) {
    die(json_encode(array('error' => $lng['currency_name_busy'])));
}
// проверим, не занято ли имя валюты
$currency = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT `id`\n\t\t\t\tFROM `" . DB_PREFIX . "cf_currency`\n\t\t\t\tWHERE `name` = '{$project_currency_name}'\n\t\t\t\tLIMIT 1\n\t\t\t\t", 'fetch_one');
if ($currency) {
    die(json_encode(array('error' => $lng['currency_name_busy'])));
}
print json_encode(array('success' => $lng['name_is_not_occupied']));
Example #19
0
     $pool_commission = json_decode($pool_commission, true);
 }
 foreach ($commission_decode as $currency_id => $data) {
     if (!check_input_data($currency_id, 'bigint')) {
         die('bad $currency_id');
     }
     // % от 0 до 10
     if (!check_input_data($data[0], 'currency_commission') || $data[0] > 10) {
         die('bad pct');
     }
     // минимальная комиссия от 0. При 0% будет = 0
     if (!check_input_data($data[1], 'currency_commission')) {
         die('bad currency_min_commission');
     }
     // макс. комиссия. 0 - значит, считается по %
     if (!check_input_data($data[2], 'currency_commission')) {
         die('bad currency_max_commission');
     }
     if ($data[1] > $data[2] && $data[2]) {
         die('bad currency_max_commission');
     }
     // и если в пуле, то
     if ($pool_commission) {
         // нельзя допустить, чтобы блок подписал майнер, у которого комиссия больше той, что разрешана в пуле,
         // т.к. это приведет к попаднию в блок некорректной тр-ии, что приведет к сбою пула
         if ($data[0] > @$pool_commission[$currency_id][0]) {
             die($data[0] . ' > ' . @$pool_commission[$currency_id][0]);
         }
         if ($data[1] > @$pool_commission[$currency_id][1]) {
             die($data[1] . ' > ' . @$pool_commission[$currency_id][1]);
         }
Example #20
0
}
if (!check_input_data($_REQUEST['in_connections_ip_limit'], 'int')) {
    die('error in_connections_ip_limit');
}
$in_connections_ip_limit = intval($_REQUEST['in_connections_ip_limit']);
if (!check_input_data($_REQUEST['in_connections'], 'int')) {
    die('error in_connections');
}
$in_connections = intval($_REQUEST['in_connections']);
if (!check_input_data($_REQUEST['out_connections'], 'int')) {
    die('error out_connections');
}
$out_connections = intval($_REQUEST['out_connections']);
if (!check_input_data($_REQUEST['auto_reload'], 'int')) {
    die('error auto_reload');
}
$auto_reload = intval($_REQUEST['auto_reload']);
if (!check_input_data($_REQUEST['pool_admin_user_id'], 'int')) {
    die('error pool_admin_user_id');
}
$pool_admin_user_id = intval($_REQUEST['pool_admin_user_id']);
$cf_url = $db->escape($_REQUEST['cf_url']);
$pool_url = $db->escape($_REQUEST['pool_url']);
$exchange_api_url = $db->escape($_REQUEST['exchange_api_url']);
define('MY_PREFIX', get_my_prefix($db));
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tUPDATE `" . DB_PREFIX . "config`\n\t\tSET  `in_connections_ip_limit` = {$in_connections_ip_limit},\n\t\t\t\t`in_connections` = {$in_connections},\n\t\t\t\t`out_connections` = {$out_connections},\n\t\t\t\t`cf_url` = '{$cf_url}',\n\t\t\t\t`pool_url` = '{$pool_url}',\n\t\t\t\t`pool_admin_user_id` = {$pool_admin_user_id},\n\t\t\t\t`exchange_api_url` = '{$exchange_api_url}',\n\t\t\t\t`auto_reload` = {$auto_reload}\n\t\t");
$config_ini = $_POST['config_ini'];
if (!parse_ini_string($config_ini)) {
    die('error config_ini');
}
@file_put_contents(ABSPATH . 'config.ini', $config_ini);
Example #21
0
<?php

if (!defined('DC')) {
    die("!defined('DC')");
}
if (isset($_REQUEST['first_load_blockchain']) && !isset($_REQUEST['parameters']['lang'])) {
    if ($_REQUEST['first_load_blockchain'] == 'nodes') {
        $type = 'nodes';
    } else {
        $type = 'file';
    }
    $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tUPDATE `" . DB_PREFIX . "config`\n\t\t\tSET`first_load_blockchain` = '{$type}'\n\t\t\t");
}
if (isset($_REQUEST['public_key']) && !isset($_REQUEST['parameters']['lang'])) {
    $public_key = $_REQUEST['public_key'];
    if (!check_input_data($public_key, 'hex')) {
        die('public_key not hex');
    }
    $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tINSERT INTO `" . DB_PREFIX . "my_keys`(\n\t\t\t`public_key`,\n\t\t\t`status`\n\t\t)\n\t\tVALUES (\n\t\t\t0x{$public_key},\n\t\t\t'approved'\n\t\t)");
}
require_once ABSPATH . 'templates/after_install.tpl';
Example #22
0
<?php

define('DC', TRUE);
define('ABSPATH', dirname(dirname(__FILE__)) . '/');
set_time_limit(30);
require_once ABSPATH . 'db_config.php';
require_once ABSPATH . 'includes/autoload.php';
$db = new MySQLidb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);
$start = intval(@$_REQUEST['start']);
$block_id = intval(@$_REQUEST['block_id']);
if (!empty($start) && !check_input_data($start, 'bigint')) {
    die('bad input data');
}
if (!empty($block_id) && !check_input_data($block_id, 'bigint')) {
    die('bad input data');
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
	<title>Block explorer</title>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<link href="../css/bootstrap.min.css" rel="stylesheet">
	<link href="../css/sb-admin.css" rel="stylesheet">
<style type="text/css">
	body {
		padding: 10px 10px 10px 10px;
	}
</style>
</head>
<body>
Example #23
0
if (!check_input_data($tpl['head_img'], 'img_url')) {
    $tpl['head_img'] = $img_blank;
}
if (!check_input_data($tpl['description_img'], 'img_url')) {
    $tpl['description_img'] = $img_blank;
}
if (!check_input_data($tpl['picture'], 'img_url')) {
    $tpl['picture'] = $img_blank;
}
if (!check_input_data($tpl['news_img'], 'img_url')) {
    $tpl['news_img'] = $img_blank;
}
if (!check_input_data($tpl['video_type'], 'video_type')) {
    $tpl['video_type'] = '';
}
if (!check_input_data($tpl['video_url_id'], 'video_url_id')) {
    $tpl['video_url_id'] = '';
}
$tpl['project'] = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT *\n\t\tFROM `" . DB_PREFIX . "cf_projects`\n\t\tWHERE `id` = {$tpl['project_id']}\n\t\t", 'fetch_array');
// сколько дней осталось
$tpl['project']['days'] = round(($tpl['project']['end_time'] - time()) / (3600 * 24));
if ($tpl['project']['days'] <= 0) {
    $tpl['project']['days'] = 0;
}
if ($tpl['project']['close_block_id'] || $tpl['project']['del_block_id']) {
    $tpl['project']['ended'] = 1;
}
// дата старта
$tpl['project']['start_date'] = date('d-m-Y H:i', $tpl['project']['start_time']);
// в какой валюте идет сбор
$currency_list = get_currency_list($db);