####################################################### /* Например, нод 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;
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; } }
<?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;
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");
} } $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 валют, которые мы можем проверять.
$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 { // получим открытый ключ юзера
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'); } }
/** * 将关联字段中一个字段删除 * @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); }
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']); }