Example #1
0
#######################################################
/* Например, нод 99 генерит блок 1000 на уровне 1 в 00:00
 * Уже известно, что на уровне 1 для генарции 1001 блока будет нод 55.
 * Нод 55 в 00:35 получил блок 1000, он узнает, что должен генерить блок 1001.
 * Ждет 25 сек и генерит блок 1001.
 * Если нод 55 мертв, то на уровне 2 есть нод 56 и 57, которые получили 1000-й блок
 * в 00:20, значит им нужно ждать 120-20=100 сек.
 * В 02:02 56 и 57 закончат генерить блок 1001, у них будет +5 секунд чтобы определить, чей блок лучше
 * В 02:07 testblock_is_ready.php на 56 и 57 начнет отправлять нодам на других уровнях блок 1001
 * */
// работаем в бесконечном цикле со слипом 0,1 сек
do {
    debug_print("=================================>>> START", __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
    main_lock();
    //main_lock();
    $block_id = get_block_id($db);
    $new_block_id = $block_id + 1;
    // если в testblock уже есть такой блок, то пропускаем
    $testblock_id = get_testblock_id($db);
    debug_print("new_block_id={$new_block_id} // testblock_id={$testblock_id}", __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
    // отметимся в БД, что мы живы.
    upd_deamon_time($db);
    // проверим, не нужно ли нам выйти, т.к. обновилась версия скрипта
    if (check_deamon_restart($db)) {
        main_unlock();
        exit;
    }
    if (get_my_local_gate_ip($db)) {
        main_unlock();
        sleep(5);
        continue;
Example #2
0
 function xpress_block_render($mydirname, $block_function_name, $options)
 {
     global $wpdb, $xoops_config, $xoopsUserIsAdmin;
     $func_file = $block_function_name;
     $call_theme_function_name = str_replace(".php", "", $block_function_name);
     $inc_theme_file_name = $call_theme_function_name . '_theme.php';
     $cache_title = str_replace(".php", "", $block_function_name);
     $blockID = get_block_id($mydirname, $func_file, $options);
     $this_block_url = '/' . $mydirname . '/';
     $call_url = $_SERVER['REQUEST_URI'];
     $block['err_message'] = '';
     if (strstr($call_url, $this_block_url) !== false && strstr($call_url, $this_block_url . 'admin/') === false) {
         $block_theme_file = get_block_file_path($mydirname, $inc_theme_file_name);
         require_once $block_theme_file['file_path'];
         $block = $call_theme_function_name($options);
         //The block name and the called function name should be assumed to be the same name.
         if (!empty($block_theme_file['error'])) {
             $block['err_message'] .= $block_theme_file['error'];
         }
     } else {
         if (xpress_block_cache_found($mydirname, $cache_title . $blockID)) {
             $xml = xpress_block_cache_read($mydirname, $cache_title . $blockID);
             $block = $xml['block'];
         } else {
             $block['err_message'] .= sprintf(_MB_XP2_BLOCK_CACHE_ERR, '<a href="' . XOOPS_URL . '/modules/' . $mydirname . '">' . $mydirname . '</a>');
         }
     }
     if (!cache_is_writable()) {
         $block['err_message'] = '<span style="color:#ff0000">';
         $block['err_message'] .= _MB_XP2_CACHE_NOT_WRITABLE;
         if ($xoopsUserIsAdmin) {
             $block['err_message'] .= " ({$cache_dir})";
             $block['err_message'] .= '</span>';
         }
     }
     xpress_block_header_set($mydirname);
     $block['request_uri'] = $_SERVER['REQUEST_URI'];
     $temp_option = @explode(':', $options[1]);
     if (isset($temp_option[1])) {
         $templates_file = $options[1];
     } else {
         $templates_file = 'db:' . $mydirname . '_' . str_replace(".php", ".html", $block_function_name);
     }
     $tpl = new XoopsTpl();
     $tpl->template_dir = $xoops_config->module_path . '/templates';
     if (!$tpl->template_exists($templates_file)) {
         $src_file_path = $xoops_config->module_path . '/templates/' . $mydirname . '_' . str_replace(".php", ".html", $block_function_name);
         $templates_file = add_xpress_tpl($mydirname, $templates_file, $src_file_path);
     }
     $tpl->assign('block', $block);
     $ret['content'] = $tpl->fetch($templates_file);
     if (preg_match('/\\S/', $ret['content'])) {
         return $ret;
     } else {
         return null;
     }
 }
Example #3
0
<?php

if (!$argv) {
    die('browser');
}
/*
 * Важно! отключать в кроне при обнулении данных в БД
*/
define('DC', TRUE);
set_time_limit(0);
define('ABSPATH', dirname(dirname(__FILE__)) . '/');
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);
if (get_my_block_id($db) > get_block_id($db)) {
    die('get_my_block_id > get_block_id');
}
$currency_list = get_currency_list($db);
// нужно знать текущий блок, который есть у большинства нодов
$block_id = get_confirmed_block_id($db);
// сколько должно быть подтверждений, т.е. кол-во блоков сверху
$confirmations = 5;
// берем всех юзеров по порядку
$community = get_community_users($db);
for ($k = 0; $k < sizeof($community); $k++) {
    $private_key = '';
    $MY_PREFIX = $community[$k] . '_';
    //print $MY_PREFIX."\n";
    $table_exists = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSHOW TABLES LIKE '" . DB_PREFIX . "{$MY_PREFIX}my_keys'\n\t\t\t", 'num_rows');
    if (!$table_exists) {
                $class_year_level = chop($course_year[1]);
            } elseif (strcasecmp($reg_no, "major & section:") == 0) {
                $block = $reg_date;
                //block name
            } elseif (strcasecmp($reg_no, "units:") == 0) {
                $units = $reg_date;
            } elseif (strcasecmp($reg_no, "time:") == 0) {
                $time = $reg_date;
            } elseif (strcasecmp($reg_no, "days:") == 0) {
                $days = $reg_date;
            } elseif (strcasecmp($reg_no, "regid") == 0) {
                break;
            }
        }
        $block_name = $block;
        $block_id = get_block_id($temp_db_con, $course_code, $class_year_level, $block, $sem_id);
        $faculty_id = get_faculty_id($temp_db_con, $faculty);
        $query_class = mysqli_query($temp_db_con, "SELECT class_id FROM class_t WHERE block_id='{$block_id}'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tAND faculty_id='{$faculty_id}'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tAND subject_code='{$subject_code}'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t") or die("Error at upload_student_lis_class.php : line 97 :: " . mysqli_error($temp_db_con));
        if (mysqli_num_rows($query_class) > 0) {
            $row_class = mysqli_fetch_array($query_class);
            $class_id = $row_class['class_id'];
        } else {
            $query_class_add = 'INSERT INTO class_t VALUES("' . '' . '",
														"' . $faculty_id . '",
														"' . $sem_id . '",
														"' . $subject_code . '",
														"' . $course_code . '",
														"' . $class_year_level . '",
														"' . $block_name . '",
														"' . $block_id . '")';
            echo $query_class_add;
Example #5
0
if (!$argv) {
    die('browser');
}
define('DC', true);
// ****************************************************************************
// Чистим таблы
// ****************************************************************************
define('ABSPATH', dirname(dirname(__FILE__)) . '/');
set_time_limit(0);
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);
main_lock();
$variables = ParseData::get_all_variables($db);
$current_block_id = get_block_id($db);
if (!$current_block_id) {
    main_unlock();
    exit;
}
// чистим log_transactions каждые 15 минут. Удаляем данные, которые старше 36 часов.
// Можно удалять и те, что старше rollback_blocks_2 + погрешность для времени транзакции (5-15 мин),
// но пусть будет 36 ч. - с хорошим запасом.
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tDELETE FROM `" . DB_PREFIX . "log_transactions`\n\t\tWHERE `time` < " . (time() - 86400 * 3) . "\n\t\t");
// через rollback_blocks_2 с запасом 1440 блоков чистим таблу log_votes где есть del_block_id
// при этом, если проверяющих будет мало, то табла может захламиться незаконченными голосованиями
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tDELETE FROM `" . DB_PREFIX . "log_votes`\n\t\tWHERE `del_block_id` < " . ($current_block_id - $variables['rollback_blocks_2'] - 1440) . " AND\n\t\t\t\t\t `del_block_id` > 0\n\t\t");
// через 1440 блоков чистим таблу wallets_buffer где есть del_block_id
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tDELETE FROM `" . DB_PREFIX . "wallets_buffer`\n\t\tWHERE `del_block_id` < " . ($current_block_id - $variables['rollback_blocks_2'] - 1440) . " AND\n\t\t\t\t\t `del_block_id` > 0\n\t\t");
// чистим все _log_time_
$db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tDELETE FROM `" . DB_PREFIX . "log_time_votes_complex`\n\t\tWHERE `time` < " . (time() - $variables['limit_votes_complex_period'] - 86400) . "\n\t\t");
Example #6
0
    }
}
$res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT *\n\t\tFROM `" . DB_PREFIX . "credits`\n\t\tWHERE (`from_user_id` = {$user_id} OR `to_user_id` = {$user_id}) AND\n\t\t\t\t\t `del_block_id` = 0 AND\n\t\t\t\t\t `amount` > 0\n\t\t");
while ($row = $db->fetchArray($res)) {
    if ($user_id == $row['from_user_id']) {
        $tpl['I_debtor'][] = $row;
    } else {
        $tpl['I_creditor'][] = $row;
    }
}
// балансы
$wallets = get_balances($user_id);
foreach ($wallets as $id => $data) {
    $tpl['wallets'][$data['currency_id']] = $data;
}
$tpl['block_id'] = get_block_id($db);
$tpl['confirmed_block_id'] = get_confirmed_block_id($db);
$tpl['currency_list'] = get_currency_list($db, 'full');
// входящие запросы
$tpl['cash_requests'] = 0;
if (empty($_SESSION['restricted'])) {
    $my_user_id = get_my_user_id($db);
    $tpl['cash_requests'] = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT count(`id`)\n\t\t\t\tFROM `" . DB_PREFIX . "cash_requests`\n\t\t\t\tWHERE `to_user_id` = {$my_user_id} AND\n\t\t\t\t\t\t\t `status` = 'pending' AND\n\t\t\t\t\t\t\t `for_repaid_del_block_id` = 0 AND\n\t\t\t\t\t\t\t `del_block_id` = 0\n\t\t\t\t", 'fetch_one');
    $tpl['cash_requests'] = $tpl['cash_requests'] ? 1 : 0;
}
/*
 *  Задания
*/
$tpl['tasks_count'] = 0;
$tpl['tasks_count'] += $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT count(`id`)\n\t\tFROM `" . DB_PREFIX . "votes_miners`\n\t\tWHERE  `votes_end` = 0 AND\n\t\t\t\t\t `type` = 'user_voting'\n\t\t", 'fetch_one');
// вначале получим ID валют, которые мы можем проверять.
Example #7
0
    $rsa->setPublicKey($key, CRYPT_RSA_PUBLIC_FORMAT_RAW);
    $PublicKey = clear_public_key($rsa->getPublicKey());
    $PublicKey_bin = hextobin($PublicKey);
    debug_print('>$PublicKey=' . $PublicKey, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
    $user_id = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT `user_id`\n\t\t\t\tFROM `" . DB_PREFIX . "users`\n\t\t\t\tWHERE `public_key_0` = 0x{$PublicKey}\n\t\t\t\t", 'fetch_one');
    if ($user_id) {
        $for_sign = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT `data`\n\t\t\t\tFROM `" . DB_PREFIX . "authorization`\n\t\t\t\tWHERE `hash` = 0x{$hash}\n\t\t\t\t", 'fetch_one');
        $error = ParseData::checkSign($PublicKey_bin, $for_sign, $sign, true);
        if (!$error) {
            // если юзер смог подписать наш хэш, значит у него актуальный праймари ключ
            session_start();
            $_SESSION['user_id'] = $user_id;
            $_SESSION['public_key'] = get_user_public_key2($user_id);
            // возможно в табле my_keys старые данные, но если эта табла есть, то нужно добавить туда ключ
            if (in_array("{$user_id}_my_keys", $tables_array)) {
                $cur_block_id = get_block_id($db);
                $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tINSERT INTO `" . DB_PREFIX . $user_id . "_my_keys` (\n\t\t\t\t\t`public_key`,\n\t\t\t\t\t`status`,\n\t\t\t\t\t`block_id`\n\t\t\t\t)\n\t\t\t\tVALUES (\n\t\t\t\t\t0x{$PublicKey},\n\t\t\t\t\t'approved',\n\t\t\t\t\t{$cur_block_id}\n\t\t\t\t)");
                unset($_SESSION['restricted']);
            } else {
                $_SESSION['restricted'] = 1;
            }
            /*if (check_change_key($user_id) > 0)
            			$_SESSION['key_changed'] = 1;
            		else
            			$_SESSION['key_changed'] = 0;*/
            print json_encode(array('result' => 1));
            exit;
        }
    }
} else {
    // получим открытый ключ юзера
Example #8
0
function get_confirmed_block_id($db)
{
    // в защищенном режиме нет прямого выхода в интернет, поэтому просто берем get_block_id
    $config['local_gate_ip'] = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\tSELECT `local_gate_ip`\n\t\t\tFROM `" . DB_PREFIX . "config`\n\t\t\t", 'fetch_one');
    if ($config['local_gate_ip']) {
        return get_block_id($db);
    } else {
        return $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT max(`block_id`)\n\t\t\t\tFROM `" . DB_PREFIX . "confirmations`\n\t\t\t\tWHERE `good` >= " . MIN_CONFIRMED_NODES . "\n\t\t\t\t", 'fetch_one');
    }
}
Example #9
0
/**
 * 将关联字段中一个字段删除
 * @param $tableName 要删除的表名
 * @param $add_filelds 要删除的字段名
 * @param $modues 表相关模块名
 * @param $uitype 字段显示格式
 * @param $labelName 字段描述
 */
function insertIntoField($tableName, $add_filelds, $modues, $uitype, $labelName)
{
    global $adb;
    $tabid = getTabid($modues);
    $blockid = get_block_id($tabid);
    $fieldid = $adb->getUniqueID("ec_field");
    $query = "insert into ec_field values (" . $tabid . "," . $fieldid . ",'" . $add_filelds . "','" . $tableName . "',1,'" . $uitype . "','" . $add_filelds . "','" . $labelName . "',1,0,0,100,5," . $blockid . ",1,'V~O',1,'','BAS')";
    $adb->query($query);
    insertModuleProfile2field2($tabid, $fieldid);
}
Example #10
0
    if (empty($_SESSION['restricted'])) {
        // получаем последние транзакции по кошелькам
        $res = $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\t\t\tSELECT *\n\t\t\t\tFROM `" . DB_PREFIX . MY_PREFIX . "my_dc_transactions`\n\t\t\t\tORDER BY `id` DESC\n\t\t\t\tLIMIT 0, 100\n\t\t\t\t");
        while ($row = $db->fetchArray($res)) {
            $tpl['my_dc_transactions'][] = $row;
        }
    }
}
//$tpl['variables'] = ParseData::get_variables ($db,  array('node_commission') );
$tpl['data']['user_type'] = 'send_dc';
$tpl['data']['project_type'] = 'cf_send_dc';
$tpl['data']['user_type_id'] = ParseData::findType($tpl['data']['user_type']);
$tpl['data']['project_type_id'] = ParseData::findType($tpl['data']['project_type']);
$tpl['data']['time'] = time();
$tpl['data']['user_id'] = $user_id;
$tpl['data']['current_block_id'] = get_block_id($db);
$tpl['data']['confirmed_block_id'] = get_confirmed_block_id($db);
$names = array('cash_request' => $lng['cash'], 'from_mining_id' => $lng['from_mining'], 'from_repaid' => $lng['from_repaid_mining'], 'from_user' => $lng['from_user'], 'node_commission' => $lng['node_commission'], 'system_commission' => 'system_commission', 'referral' => 'referral', 'cf_project' => 'Crowd funding', 'cf_project_refund' => 'Crowd funding refund');
$tpl['miner_id'] = (int) $db->query(__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, "\n\t\tSELECT `miner_id`\n\t\tFROM `" . DB_PREFIX . "miners_data`\n\t\tWHERE `user_id` = {$user_id}\n\t\tLIMIT 1\n\t\t", 'fetch_one');
// если юзер кликнул по кнопку "профинансировать" со страницы проекта
if (!empty($_REQUEST['parameters']['project_id'])) {
    $tpl['cf_project_id'] = intval($_REQUEST['parameters']['project_id']);
}
// нужна мин. комиссия на пуле для перевода монет
$tpl['config'] = get_node_config();
$tpl['config']['commission'] = json_decode($tpl['config']['commission'], true);
//print_R($tpl['config']['commission']);
$tpl['last_tx'] = get_last_tx($user_id, $tpl['data']['user_type_id']);
if (!empty($tpl['last_tx'])) {
    $tpl['last_tx_formatted'] = make_last_tx($tpl['last_tx']);
}