-
Notifications
You must be signed in to change notification settings - Fork 8
Описание таблиц
После установки Dcoin создается локальная база данных, которая наполняется данными, получаемыми из блоков, которые берутся из блок-чеина. В данной статье описаны все используемые таблицы.
Абузы на майнеров
- user_id bigint(20)
- from_user_id bigint(20)
- comment varchar(255)
- time int(11)
Блог админа
- id int(11)
- time int(10)
- lng varchar(5)
- title varchar(255)
- message text
Сообщения от админа, которые выводятся в интерфейсе софта
- id int(11)
- notification tinyint(1)
- close tinyint(1) - Юзер может закрыть сообщение, и оно больше не появится
- message text - json. Каждому языку свое сообщение и gen - для тех, на кого языков не хватило
- currency_list varchar(1024) - Для каких валют выводим сообщение. ALL - всем
- block_id int(10) - Для откатов
Главная таблица. Хранит цепочку блоков
- id int(11)
- hash binary(32) - Хэш от полного заголовка блока (new_block_id,prev_block_hash,merkle_root,time,user_id,level). Используется как PREV_BLOCK_HASH
- head_hash binary(32) - Хэш от заголовка блока (user_id,block_id,prev_head_hash). Используется для обновления head_hash в info_block при восстановлении после вилки в upd_block_info()
- data longblob
Запросы на обмен DC на наличные
- id bigint(20)
- time int(10) - Время создания запроса. От него отсчитываем 48 часов
- from_user_id bigint(20)
- to_user_id bigint(20)
- notification tinyint(1)
- currency_id tinyint(3)
- amount decimal(13,2) - На эту сумму должны быть выданы наличные
- hash_code binary(32) - Хэш от кода, а сам код передается при личной встрече.
- enum('approved','pending') DEFAULT 'pending' - Если в блоке указан верный код для хэша, то тут будет approved. Rejected нет, т.к. можно и без него понять, что запрос не выполнен, просто посмотрев время
- for_repaid_del_block_id int(11) - если больше нет for_repaid ни по одной валюте у данного юзера, то нужно проверить, нет ли у него просроченных cash_requests, которым нужно отметить for_repaid_del_block_id, чтобы cash_request_out не переводил более обещанные суммы данного юзера в for_repaid из-за просроченных cash_requests
- del_block_idint(11) - Во время reduction все текущие cash_requests, т.е. по которым не прошло 2 суток, удаляются
Список языков
- id` int(11) - ID языка
- name` varchar(200) - язык
Комментарии к проектам
- id int(11)
- user_id int(11)
- projectid int(11)
- lang_id` tinyint(4)
- comment varchar(255)
- time int(11) - Для того, чтобы можно было отсчитать время до размещения следующего коммента
- block_id int(11) - Для откатов
- id int(11)
- project_id int(11)
- user_id int(11)
- amount decimal(15,2)
- currency_id int(11)
- time int(11) - DC растут с юзерским %
- block_id int(11) - Для откатов
- del_block_id int(11) - Фундер передумал и до завершения проекта вернул деньги
- checked tinyint(1) - Для определения по крону cf_project.funding и cf_project.funding
- del_checked tinyint(1) - Для определения по крону cf_project.funding и cf_project.funding
Валюта, которая создается после успешного завершения проекта
- id bigint(20) - ID идет от 1000, чтобы id CF-валют не пересекались с DC-валютами
- name char(7)
- project_id bigint(20)
- id bigint(20)
- user_id int(11)
- currency_id tinyint(4)
- amount int(11)
- funding decimal(15,2) - Получаем в кроне. Сколько собрано средств. Нужно для вывода проектов в каталоге, чтобы не дергать cf_funding',
- funders int(11) - Получаем в кроне. Кол-во инвесторов. Нужно для вывода проектов в каталоге, чтобы не дергать cf_funding',
- project_currency_name char(7)
- start_time int(11)
- end_time int(11)
- latitude decimal(8,5)
- longitude decimal(8,5)
- country varchar(100)
- city varchar(100)
- category_id smallint(6)
- close_block_id int(11) - Чтобы знать, когда проект завершился и можно было бы удалить старые данные из cf_funding. Также используется для определения статус проекта - открыт/закрыт',
- del_block_id int(11) - Проект был закрыт автором, а средства возвращены инвесторам',
- block_id int(11) - Для откатов',
- log_id bigint(20)
- geo_checked tinyint(1) - По крону превращаем координаты в названия страны и города и отмечаем тут',
- id bigint(20)
- hide tinyint(1)
- project_id bigint(20)
- lang_id tinyint(4)
- blurb_img varchar(50)
- head_img varchar(50)
- description_img varchar(50)
- picture varchar(50) - Если нет видео, то выводится эта картинка',
- video_type varchar(10)
- video_url_id varchar(50)
- news_img varchar(50)
- links varchar(512)
- log_id bigint(20)
- id tinyint(3)
- name char(3)
- full_name varchar(50)
- max_other_currencies tinyint(3) - Со сколькими валютами данная валюта может майниться
- tmp_curs double
- log_id int(11)
- log_id int(11)
- max_other_currencies tinyint(3)
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id bigint(20)
Демоны
- name char(15) - Кодовое обозначение демона
- script char(40) - Название скрипта
- param char(5) - Параметры для запуска
- pid int(11) - Pid демона для детекта дублей
- time int(11) - Время последней активности демона
- first tinyint(1)
- memory int(11)
- restart tinyint(1) - Команда демону, что нужно выйти
Точки по каждому майнеру
- user_id bigint(20)
- race tinyint(1) - Раса. От 1 до 3
- country tinyint(3)
- version int(11) - Версия набора точек
- status enum('pending','used') DEFAULT 'pending' - При new_miner ставим pending, при отрицательном завершении юзерского голосования - pending. used ставится, только если юзерское голосование завершилось положительно' ,
- f1 float - Отрезок 1
- f2 float
- f3 float
- f4 float
- f5 float
- f6 float
- f7 float
- f8 float
- f9 float
- f10 float
- f11 float
- f12 float
- f13 float
- f14 float
- f15 float
- f16 float
- f17 float
- f18 float
- f19 float
- f20 float
- p1 float
- p2 float
- p3 float
- p4 float
- p5 float
- p6 float
- p7 float
- p8 float
- p9 float
- p10 float
- p11 float
- p12 float
- p13 float
- p14 float
- p15 float
- p16 float
- p17 float
- p18 float
- p19 float
- p20 float
- log_id bigint(20)
Местоположение майнера
- id bigint(20)
- user_id int(11)
- latitude decimal(8,5)
- longitude decimal(8,5)
- votes_start_time int(11) - Время начала сбора голосов, т.е. время попадания записи в блок
- votes_0 int(11) - Голоса за
- votes_1 int(11) - Голоса против
- enum('approved','rejected','pending') DEFAULT 'pending' - pending-идет сбор голосов
- block_id bigint(20) - Блок, в котором была добавлена запись. Для отката, чтобы точно знать, что удалять
Время, в которое майнер не получает %, т.к. отдыхает
- id bigint(20)
- user_id bigint(20)
- delete tinyint(1) - 1-удалено. нужно для отката
- start_time int(11)
- end_time int(11)
Текущий блок, данные из которого мы уже занесли к себе
- hash binary(32) - Хэш от полного заголовка блока (new_block_id,prev_block_hash,merkle_root,time,user_id,level). Используется как prev_hash
- head_hash binary(32) - Хэш от заголовка блока (user_id,block_id,prev_head_hash)
- block_id int(11)
- time int(10) - Время создания блока
- level tinyint(4) - На каком уровне был сгенерирован блок
- current_version varchar(50) DEFAULT '0.0.1' ,
- sent tinyint(4) - Был ли блок отправлен нодам, указанным в nodes_connections'
Чтобы после генерации нового юзера не потерять его приватный ключ, можно сохранить его тут
- user_id int(10)
- add_time int(11) - для удаления старых my_pending
- public_key varchar(3096) - Нужен, просто чтобы опознать в блоке зареганного юзера и отметить approved
- private_key varchar(3096)
- enum('my_pending','approved') DEFAULT 'my_pending'
- id bigint(20)
- del_block_id int(11)
- user_id bigint(16)
- amount decimal(13,2) - Обещанная сумма. На неё влияет reduction, и она будет урезаться при обновлении max_promised_amount (очень важно на случай деноминации фиата). Если же статус = repaid, то тут хранится кол-во денег, которые майнер отдал. Нужно хранить, только чтобы знать общую сумму и не превысить max_promised_amount. Для WOC amount не нужен, т.к. WOC полностью зависит от max_promised_amount
- amount_backup decimal(13,2) - Нужно для откатов при reduction
- currency_id tinyint(3)
- ps1 smallint (5) - ID платежной системы, в валюте которой он готов сделать перевод в случае входящего запроса
- ps2 smallint (5)
- ps3 smallint (5)
- ps4 smallint (5)
- ps5 smallint (5)
- start_time int(11) - Используется, когда нужно узнать, кто имеет право голосовать за данную валюту, т.е. прошло ли 60 дней с момента получения статуса miner или repaid(учитывая время со статусом miner). Изменяется при каждой смене статуса. Существует только со статусом mining и repaid. Это защита от атаки клонов, когда каким-то образом 100500 майнеров прошли проверку, добавили какую-то валюту и проголосовали за reduction 90%. 90 дней - это время админу, чтобы заметить и среагировать на такую атаку
- enum('pending','mining','rejected','repaid','change_geo','suspended') DEFAULT 'pending' - pending - при первом добавлении или при повторном запросе. change_geo ставится, когда идет смена местоположения, suspended - когда админ разжаловал майнера в юзеры. TDC набегают, только когда статус mining, repaid с майнерским или же юзерским % (если статус майнера = passive_miner)
- status_backup *enum('pending','mining','rejected','repaid','change_geo','suspended') DEFAULT - Когда админ банит майнера, то в status пишется suspended, а сюда - статус из *status
- tdc_amount decimal(13,2) - Набежавшая сумма за счет % роста. Пересчитывается при переводе TDC на кошелек
- tdc_amount_backup decimal(13,2) - Нужно для откатов при reduction
- tdc_amount_update int(11) - Время обновления tdc_amount
- video_type varchar(100)
- video_url_id varchar(255) - Если пусто, то видео берем по ID юзера.flv. На видео майнер говорит, что хочет майнить выбранную валюту
- votes_start_time int(11) - При каждой смене местоположения начинается новое голосование. Менять местоположение можно не чаще раза в сутки
- votes_0 int(11)
- votes_1 int(11)
- woc_block_id int(11) - Нужно для отката добавления woc
- cash_request_out_time int(11) - Любой cash_request_out приводит к появлению данной записи у получателя запроса. Убирается она только после того, как у юзера не остается непогашенных cash_request-ов. Нужно для reduction_generator, чтобы учитывать только те обещанные суммы, которые еще не заморожены невыполенными cash_request-ами
- cash_request_out_time_backup int(11) - Используется в new_reduction()
- cash_request_in_block_id int(11) - Нужно для отката cash_request_in
- del_mining_block_id int(11) - Нужно для отката del_promised_amount
- log_id bigint(20)
- log_id bigint(20)
- category_id tinyint(4)
- block_id int(11)
- prev_log_id bigint(20)
- log_id bigint(20)
- hide tinyint(1)
- lang_id tinyint(4)
- blurb_img varchar(50)
- head_img varchar(50)
- description_img varchar(50)
- picture varchar(50)
- video_type varchar(10)
- video_url_id varchar(50)
- news_img varchar(50)
- links varchar(512)
- block_id int(11)
- prev_log_id bigint(20)
- log_id bigint(20)
- del_block_id int(11)
- amount decimal(13,2)
- amount_backup decimal(13,2)
- start_time int(11)
- enum('pending','mining','rejected','repaid','change_geo','suspended')
- status_backup enum('pending','mining','rejected','repaid','change_geo','suspended',) DEFAULT '
- tdc_amount decimal(13,2)
- tdc_amount_update int(11)
- video_type varchar(100)
- video_url_id varchar(255) - Если пусто, то видео берем по ID юзера.flv. На видео майнер говорит, что хочет майнить выбранную валюту
- votes_start_time int(11) - При каждой смене местоположения начинается новое голосование
- votes_0 int(11)
- votes_1 int(11)
- cash_request_out_time int(11)
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id bigint(20)
Точки по каждому юзеру
- log_id bigint(20)
- user_id bigint(20)
- race tinyint(1)
- country tinyint(3)
- version int(11) - Версия набора точек
- enum('approved','rejected','pending')
- f1 float - Отрезок 1
- f2 float
- f3 float
- f4 float
- f5 float
- f6 float
- f7 float
- f8 float
- f9 float
- f10 float
- f11 float
- f12 float
- f13 float
- f14 float
- f15 float
- f16 float
- f17 float
- f18 float
- f19 float
- f20 float
- p1 float
- p2 float
- p3 float
- p4 float
- p5 float
- p6 float
- p7 float
- p8 float
- p9 float
- p10 float
- p11 float
- p12 float
- p13 float
- p14 float
- p15 float
- p16 float
- p17 float
- p18 float
- p19 float
- p20 float
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id bigint(20)
- log_id bigint(20)
- user_id int(11)
- miner_id int(11)
- reg_time int(11)
- enum('miner','user','passive_miner','suspended_miner')
- node_public_key varbinary(512)
- face_hash varchar(128)
- profile_hash varchar(128)
- photo_block_id int(11)
- photo_max_miner_id int(11)
- miners_keepers tinyint(3)
- face_coords varchar(1024)
- profile_coords varchar(1024)
- video_type varchar(100)
- video_url_id varchar(255)
- host varchar(255)
- latitude decimal(8,5)
- longitude decimal(8,5)
- country tinyint(3)
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id bigint(20)
- user_id bigint(20)
- count int(11) - Сколько новых транзакций сделал юзер за минуту
Не используется
- invite char(128)
- count int(11)
- log_id bigint(20)
- time int(10)
- currency_id tinyint(3)
- miner_pct int(10)
- user_pct int(10)
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id bigint(20)
- log_id bigint(20)
- user_id bigint(20)
- profile_file_name varchar(64)
- face_file_name varchar(64)
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id bigint(20)
- log_id int(11)
- version double
- example_spots text
- compatibility text
- segments text
- tolerances text
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id int(11)
- user_id bigint(20)
- time int(10)
можно создавать только 1 тр-ю с абузами за 24h
- user_id bigint(20)
- time int(10)
- user_id bigint(20)
- time int(10)
- user_id bigint(20)
- time int(10)
Для учета кол-ва запр. на доб. / удал. / изменение promised_amount. Чистим кроном
- user_id bigint(20)
- time int(10)
- user_id bigint(20)
- time int(10)
- user_id bigint(20)
- time int(10)
- user_id bigint(20)
- time int(10)
- user_id bigint(20)
- time int(10)
- user_id bigint(20)
- time int(11)
- user_id bigint(20)
- time int(11)
- user_id bigint(20)
- time int(10)
- user_id bigint(20)
- time int(10)
- user_id bigint(20)
- time int(10)
- user_id bigint(20)
- time int(10)
Храним данные за 1 сутки
- user_id bigint(20)
- time int(10)
Лимиты для повторых запросов, за которые голосуют ноды
- user_id bigint(20)
- time int(10)
Голоса от нодов
- user_id bigint(20)
- time int(10)
Набор голосов из miner_pct/user_pct/max_promised_amount/max_other_currencies/reduction. Валюты тут не учитываются. Важен сам факт комплексного голосования
- user_id bigint(20)
- time int(10)
- user_id bigint(20)
- time int(10)
- user_id bigint(20)
- time int(10)
- user_id bigint(20)
- time int(10)
- user_id bigint(20)
- time int(10)
- user_id bigint(20)
- time int(10)
Храним данные за сутки, чтобы избежать дублей.
- hash binary(16)
- time int(11)
- log_id bigint(20)
- public_key_0 varbinary(512)
- public_key_1 varbinary(512)
- public_key_2 varbinary(512)
- referral bigint(20)
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id bigint(20)
- log_id int(11)
- data text
Чтобы 1 юзер не смог проголосовать 2 раза за одно и то же
- user_id bigint(20) - Кто голосует
- voting_id bigint(20) - За что голосует. Тут может быть id geolocation и пр
- enum('votes_miners
'promised_amount') - Нужно для voting_id
- del_block_id int(11) - В каком блоке было удаление. Нужно для чистки по крону старых данных и для откатов.
Таблица, где будет браться инфа при откате блока
- log_id bigint(20)
- amount decimal(15,2)
- amount_backup decimal(15,2)
- last_update int(11)
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id bigint(20) - Id предыдщуего log_id, который запишем в wallet
Полная блокировка на поступление новых блоков/тр-ий
- lock_time int(10)
- script_name varchar(100)
- uniq tinyint(4)
- miner_id int(11) AUTO_INCREMENT - Если есть забаненные, то на их место становятся новички, т.о. все miner_id будут заняты без пробелов
- active tinyint(1) - 1 - активен, 0 - забанен
- log_id int(11) - Без log_id нельзя определить, был ли апдейт в табле miners или же инсерт, т.к. по AUTO_INCREMENT не понять, т.к. обновление может быть в самой последней строке
- log_id int(11)
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id int(11)
- user_id int(11)
- miner_id int(11) - Из таблицы miners
- reg_time int(11) - Время, когда майнер получил miner_id по итогам голосования. Определеяется один раз и не меняется. Нужно, чтобы не давать новым майнерам генерить тр-ии регистрации новых юзеров и исходящих запросов
- ban_block_id int(11) - В каком блоке майнер был разжалован в suspended_miner. Нужно для исключения пересечения тр-ий разжалованного майнера и самой тр-ии разжалования
- enum('miner','user','passive_miner','suspended_miner') DEFAULT 'user' - Изменения вызывают пересчет TDC в promised_amount
- node_public_key varbinary(512)
- face_hash varchar(128) - Хэш фото юзера
- profile_hash varchar(128)
- photo_block_id int(11) - Блок, в котором было добавлено фото
- photo_max_miner_id bigint(20) - Макс. майнер id в момент добавления фото. Это и photo_block_id *нужны для определения 10-и нодов, где лежат фото
- miners_keepers tinyint(3) - Скольким майнерам копируем фото юзера. По дефолту = 10
- face_coords varchar(1024)
- profile_coords varchar(1024)
- video_type varchar(100)
- video_url_id varchar(255) - Если пусто, то видео берем по ID юзера.flv
- host varchar(255) - адрес хоста или IP, где находится нод майнера
- latitude decimal(8,5) - Местоположение можно сменить без проблем, но это одновременно ведет запуск голосования у promised_amount по всем валютам, где статус mining или hold
- longitude decimal(8,5)
- country tinyint(3)
- log_id bigint(20)
Общение с админом, баг-репорты и пр.
- id int(11)
- add_time int(11) - для удаления старых my_pending
- parent_id int(11)
- subject varchar(255) - Появляется после расшифровки
- message text
- message_type tinyint(1) - 0-баг-репорты
- message_subtype tinyint(1)
- encrypted blob
- decrypted tinyint(1)
- enum('approved','my_pending') DEFAULT 'my_pending
- enum('from_admin','to_admin') DEFAULT 'to_admin
Просто показываем, какие данные еще не попали в блоки. Те, что уже попали, тут удалены
- id tinyint(3)
- add_time int(11) - для удаления старых my_pending
- amount decimal(13,2)
- currency_id tinyint(3)
- id bigint(20)
- add_time int(11) - для удаления старых my_pending
- time int(11) - Время попадания в блок
- notification tinyint(1)
- to_user_id bigint(20)
- currency_id tinyint(3)
- amount decimal(13,2)
- comment text
- comment_enum('encrypted
'decrypted') DEFAULT 'decrypted
- code varchar(64) - Секретный код, который нужно передать тому, кто отдает фиат
- hash_code varchar(64)
- enum('my_pending','pending','approved','rejected') DEFAULT 'my_pending
- cash_request_id bigint(20)
Чтобы автор проекта мог узнать, кому какие товары отправлять
- id` bigint(20)
- from_user_id` bigint(20)
- project_id` bigint(20)
- amount` decimal(15,2)
- del_block_id` int(11) - Блок, в котором данная транзакция была отменена
- time` int(10) - Время, когда транзакцию создал юзер
- block_id` int(10) - Блок, в котором данная транзакция была запечатана. При откате блока все транзакции с таким block_id будут удалены
- comment` text
- comment_status` enum('encrypted','decrypted')
Нужно только для отчетов, которые показываются юзеру
- id bigint(20)
- enum('pending','approved') DEFAULT 'approved' - pending - только при отправки DC с нашего кошелька, т.к. нужно показать юзеру, что запрос принят
- notification tinyint(1) - Уведомления по sms и email
- enum('cash_request
'from_mining_id
'from_repaid
'from_user','node_commission
'system_commission
'referral')
- type_id bigint(20)
- to_user_id bigint(20)
- amount decimal(15,2)
- commission decimal(15,2)
- del_block_id int(11) - Блок, в котором данная транзакция была отменена
- time int(10) - Время, когда транзакцию создал юзер
- block_id int(10) - Блок, в котором данная транзакция была запечатана. При откате блока все транзакции с таким block_id будут удалены
- currency_id tinyint(3)
- comment text - Если это перевод средств между юзерами или это комиссия, то тут будет расшифрованный комментарий
- comment_enum('encrypted
'decrypted') DEFAULT 'decrypted
- id int(11)
- latitude decimal(8,5)
- longitude decimal(8,5)
- current tinyint(1)
- current_enum('
'approved','my_pending') DEFAULT - Статус нашей заявки сделать данное местоположение текущим. Не путать со статусом всего geolocation
- enum('approved','rejected','my_pending','pending') DEFAULT 'my_pending
- geolocation_id bigint(20) - Нужно при смене текущего местоположения
- id smallint(6)
- add_time int(11) - для удаления старых my_pending
- start_time int(10)
- end_time int(10)
Ключи для авторизации юзера. Используем крайний
- id int(11)
- add_time int(11) - для удаления старых my_pending
- notification tinyint(1)
- public_key varbinary(512) - Нужно для поиска в users
- private_key varchar(3096) - Хранят те, кто не боятся
- password_hash varchar(64) - Хранят те, кто не боятся
- enum('my_pending','approved') DEFAULT 'my_pending
- my_time int(10) - Время создания записи
- time int(10) - Время из блока
- block_id int(11) - Для откатов и определения крайнего
Всё, что шлется на мыло, логируется тут
- id int(11)
- time int(11)
- data varchar(1024)
- id int(11)
- add_time int(11) - для удаления старых my_pending
- public_key varbinary(512)
- private_key varchar(3096)
- enum('my_pending','approved') DEFAULT 'my_pending
- my_time int(11) - Время создания записи
- time bigint(20)
- block_id int(11)
- name varchar(200)
- email tinyint(1)
- sms tinyint(1)
- sort tinyint(3)
- important tinyint(1)
Нужно только для отсылки уведомлений, что пора голосовать
- last_voting int(11) - Время последнего голосования
- notification tinyint(1) - Уведомление о том, что со времени последнего голоса прошло более 2 недель
Нужно только для отсылки уведомлений, что пора голосовать
- last_voting int(11) - Время последнего голосования
- notification tinyint(1) DEFAULT '0' - Уведомление о том, что со времени последнего голоса прошло более 2 недель
- user_id bigint(20)
- miner_id int(11)
- enum('bad_key
'my_pending','miner','user','passive_miner','suspended_miner') DEFAULT 'my_pending' - bad_key - это когда юзер зарегался по чужому ключу, который нашел в паблике, либо если указал старый ключ вместо нового
- race tinyint(1) - Раса. От 1 до 3
- country tinyint(3) - Используется только локально для проверки майнеров из нужной страны
- notification_status tinyint(1) - Уведомления. При смене статуса обнуляется
- mail_code varchar(100)
- login_code int(11) - Для подписания при авторизации
- email varchar(100)
- notification_email tinyint(1)
- host varchar(255) - Хост юзера, по которому он доступен извне
- host_enum('my_pending','approved') DEFAULT 'my_pending
- geolocation varchar(200) - Текущее местонахождение майнера
- geolocation_enum('my_pending','approved') DEFAULT 'my_pending
- location_country tinyint(3)
- invite char(128)
- face_coords varchar(1024) - Точки, которые юзер нанес на свое фото
- node_voting_send_request int(10) - Когда мы отправили запрос в DC-сеть на присвоение нам статуса \"майнер\"
- profile_coords varchar(1024) - Точки, которые юзер нанес на свое фото
- video_url_id varchar(255) - Видео, где показывается лицо юзера
- video_type varchar(100)
- lang char(2) - Запоминаем язык для юзера
- use_smtp tinyint(1)
- smtp_server varchar(100)
- smtp_port int(11)
- smtp_ssl tinyint(1)
- smtp_auth tinyint(1)
- smtp_username varchar(100)
- smtp_password varchar(100)
- miner_pct_id smallint(5)
- user_pct_id smallint(5)
- repaid_pct_id smallint(5)
- api_token_hash varchar(64)
- sms_http_get_request varchar(255)
- notification_sms_http_get_request int(11)
- show_sign_data tinyint(1) - Если 0, тогда не показываем данные для подписи, если у юзера только один праймари ключ
- uniq set('1') DEFAULT '1
Сюда пишется новая версия, которая загружена в public
- version varchar(50)
- alert tinyint(1)
- notification tinyint(1)
Баним на 1 час тех, кто дает нам данные с ошибками
- user_id int(11)
- ban_start int(10)
- info text
Ноды, которым шлем данные и от которых принимаем данные
- host varchar(100)
- user_id int(11) - Чтобы получать открытый ключ, которым шифруем блоки и тр-ии
- block_id int(11) - ID блока, который есть у данного нода. Чтобы слать ему только >=
% майнера, юзера. На основе pct_votes
- id int(11)
- time int(10) - Время блока, в котором были новые %
- notification tinyint(1)
- currency_id tinyint(3)
- miner decimal(13,13)
- user decimal(13,13)
- block_id int(10) - Нужно для откатов
На основе votes_max_promised_amount
- id int(11)
- time int(10) - Время блока, в котором были новые max_promised_amount
- notification tinyint(1)
- currency_id tinyint(3)
- amount int(11)
- block_id int(10) - Нужно для откатов
Время последнего обновления max_other_currencies_time в currency
- time int(10)
На основе votes_max_other_currencies
- id int(11)
- time int(10) - Время блока, в котором были новые max_other_currencies
- notification tinyint(1)
- currency_id tinyint(3)
- count int(11)
- block_id int(10) - Нужно для откатов
Когда была последняя процедура урезания для конкретной валюты. Чтобы отсчитывать 2 недели до следующей
- id int(11)
- time int(10) - Время блока, в котором было произведено уполовинивание
- notification tinyint(1)
- currency_id tinyint(3)
- pct tinyint(2)
- block_id int(10) - Нужно для откатов
Голосование за %. Каждые 14 дней пересчет
- user_id bigint(20)
- time int(11) - Нужно только для того, чтобы определять, голосовал юзер или нет. От этого зависит, будет он получать майнерский или юзерский %
- currency_id tinyint(3)
- pct decimal(13,13)
- log_id bigint(20)
- log_id bigint(20)
- currency_id tinyint(3)
- time int(11)
- pct decimal(13,13)
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id bigint(20)
Голосование за %. Каждые 14 дней пересчет
- user_id bigint(20)
- currency_id tinyint(3)
- pct decimal(13,13)
- log_id bigint(20)
- log_id bigint(20)
- currency_id tinyint(3)
- pct decimal(13,13)
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id bigint(20)
Голосование за сокращение объема монет. Каждые 14 дней пересчет
- user_id bigint(20)
- time int(11) - Учитываются только свежие голоса, т.е. один голос только за одно урезание
- currency_id tinyint(3)
- pct tinyint(2)
- log_id bigint(20)
- log_id bigint(20)
- time int(11)
- currency_id tinyint(3)
- pct tinyint(2)
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id bigint(20)
Раз в 2 недели на основе этих голосов обновляетя currency.max_promised_amount
- user_id bigint(20)
- currency_id tinyint(3)
- amount int(11) - Возможные варианты задаются в скрипте, иначе будут проблемы с поиском варианта-победителя
- log_id bigint(20)
- log_id bigint(20)
- currency_id tinyint(3)
- amount int(11)
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id bigint(20)
Раз в 2 недели на основе этих голосов обновляетя currency.max_other_currencies
- user_id bigint(20)
- currency_id tinyint(3)
- count int(11) - Возможные варианты задаются в скрипте, иначе будут проблемы с поиском варианта-победителя
- log_id bigint(20)
- log_id bigint(20)
- currency_id tinyint(3)
- count int(11)
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id bigint(20)
Баллы майнеров, по которым решается, получат они майнерские % или юзерские
- user_id bigint(20)
- time_start int(11) - От какого времени отсчитывается 1 месяц
- log_id bigint(20)
- log_id int(11)
- time_start int(11)
- points int(11)
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id int(11)
Статусы юзеров на основе подсчета points
- user_id bigint(20)
- time_start int(11) - Время начала действия статуса. До какого времени действует данный статус, определяем простым добавлением в массив времени, которое будет через 30 дней
- enum('user','miner') DEFAULT 'user',
- block_id int(11) - Нужно для удобного отката'
Блоки, которые мы должны забрать у указанных нодов
- head_hash binary(32)
- hash binary(32)
- user_id int(10)
- block_id int(11)
Очередь на фронтальную проверку соревнующихся блоков
- head_hash binary(32) - Хэш от заголовка блока (user_id,block_id,prev_head_hash)
- data longblob
Тр-ии, которые мы должны проверить
- hash binary(16) - md5 от тр-ии
- high_rate tinyint(1) DEFAULT '0' - Если 1, значит это админская тр-ия
- data longblob
- _tmp_node_user_id VARCHAR(255)
- user_id bigint(20)
- profile_file_name varchar(64)
- face_file_name varchar(64)
- log_id bigint(20)
Совместимость текущей версии точек с предыдущими
- version int(11)
- example_spots text - Точки, которые наносим на 2 фото-примера (анфас и профиль)
- compatibility text - С какими версиями совместимо
- segments text - Нужно для составления отрезков в new_miner()
- tolerances text - Допустимые расхождения между точками при поиске фото-дублей
- log_id int(11)
Нужно на этапе соревнования, у кого меньше хэш
- block_id int(11) - ID тестируемого блока
- time int(10) - Время, когда блок попал сюда
- level tinyint(4) - Пишем сюда для использования при формировании заголовка
- user_id int(11) - По id вычисляем хэш шапки
- header_hash binary(32) - Хэш шапки: им меряемся, у кого меньше - тот круче. Хэш генерим у себя при получении данных блока
- signature blob - Подпись блока юзером, чей минимальный хэш шапки мы приняли
- mrkl_root binary(32) - Хэш тр-ий. Чтобы каждый раз не проверять те же самые данные, просто сравниваем хэши
- enum('active
'pending') DEFAULT 'active' - Указание скрипту testblock_disseminator.php
- uniq tinyint(1)
- lock_time int(10)
- script_name varchar(30)
- uniq tinyint(4)
Все незанесенные в блок тр-ии, которые у нас есть
- hash binary(16) - Все хэши из этой таблы шлем тому, у кого хотим получить блок (т.е. недостающие тр-ии для составления блока)
- data longblob - Само тело тр-ии
- verified tinyint(1) DEFAULT '1' - Оставшиеся после прихода нового блока тр-ии отмечаются как \"непроверенные\", и их нужно проверять по новой
- used tinyint(1) - После того, как попадают в блок, ставим 1, а те, у которых уже стояло 1, - удаляем
- high_rate tinyint(1) - 1 - админские, 0 - другие
- for_self_use tinyint(1) - для new_pct(pct_generator.php), т.к. эта тр-ия валидна только вместе с блоком, который сгенерил тот, кто сгенерил эту тр-ию
- type tinyint(4) - Тип тр-ии. Нужно для недопущения попадания в блок 2-х тр-ий одного типа от одного юзера
- user_id tinyint(4) - Нужно для недопущения попадания в блок 2-х тр-ий одного типа от одного юзера
- third_var int(11) - Для исключения пересечения в одном блоке удаления обещанной суммы и запроса на её обмен на DC. И для исключения голосования за один и тот же объект одним и тем же юзеров в одном блоке
- counter tinyint(3) - Чтобы избежать зацикливания при проверке тр-ии: verified=1, новый блок, verified=0. При достижении 10-и удаляем тр-ию
- sent tinyint(1) - Была отправлена нодам, указанным в nodes_connections
Тр-ии, которые используются в текущем testblock
- id int(11) AUTO_INCREMENT - Порядок следования очень важен
- hash binary(16) - md5 для обмена только недостающими тр-ми
- data longblob
- type tinyint(4) - Тип тр-ии. Нужно для недопущения попадания в блок 2-х тр-ий одного типа от одного юзера
- user_id tinyint(4) - Нужно для недопущения попадания в блок 2-х тр-ий одного типа от одного юзера
- third_var int(11) - Для исключения пересечения в одном блоке удаления обещанной суммы и запроса на её обмен на DC. И для исключения голосования за один и тот же объект одним и тем же юзеров в одном блоке
Каждый майнер определяет, какая комиссия с тр-ий будет доставаться ему, если он будет генерить блок
- log_id bigint(20)
- commission text
- block_id int(11) - В каком блоке было занесено. Нужно для удаления старых данных
- prev_log_id int(11)
Каждый майнер определяет, какая комиссия с тр-ий будет доставаться ему, если он будет генерить блок
- user_id bigint(20)
- commission text - Комиссии по всем валютам в json. Если какой-то валюты нет в списке, то комиссия будет равна нулю. currency_id, %, мин., макс.
- log_id int(11)
Каждый майнер определяет, какая комиссия с тр-ий будет доставаться ему, если он будет генерить блок
- currency_id int(11)
- pct float
- min float
- max float
В этой таблице содержатся публичные ключи всех пользователей и майнеров.
- user_id bigint(20) AUTO_INCREMENT - На него будут слаться деньги
- public_key_0 varbinary(512) - Открытый ключ, которым проверяются все транзакции от юзера
- public_key_1 varbinary(512) - 2-й ключ, если есть
- public_key_2 varbinary(512) - 3-й ключ, если есть
- referral bigint(20) - Тот, кто зарегал данного юзера и теперь получает с него рефские
- log_id bigint(20)
- name varchar(35)
- value text
- comment varchar(255)
Отделено от miners_data, чтобы голоса шли точно за свежие данные
- id bigint(20)
- enum('node_voting
'user_voting')
- user_id bigint(20) - За кого голосуем
- votes_start_time int(10)
- votes_0 int(11)
- votes_1 int(11)
- votes_end tinyint(1)
- end_block_id bigint(20) - В каком блоке мы выставили принудительное end для node
- cron_checked_time int(11) - По крону проверили, не нужно ли нам скачать фотки юзера к себе на сервер
Голосование за рефские %. Каждые 14 дней пересчет
- user_id bigint(20)
- first tinyint(2)
- second tinyint(2)
- third tinyint(2)
- log_id bigint(20)
- log_id bigint(20)
- user_id bigint(20)
- first tinyint(2)
- second tinyint(2)
- third tinyint(2)
- block_id int(11)
- prev_log_id int(10)
- first tinyint(2)
- second tinyint(2)
- third tinyint(2)
- log_id int(11)
- log_id bigint(20)
- first tinyint(2)
- second tinyint(2)
- third tinyint(2)
- block_id int(11)
- prev_log_id int(10)
Используется только в момент установки
- progress varchar(10) - На каком шаге остановились
У кого сколько какой валюты
- user_id bigint(20)
- currency_id tinyint(3)
- amount decimal(15,2)
- amount_backup decimal(15,2) - Может неравномерно обнуляться из-за обработки, а затем - отката new_reduction()
- last_update int(11) - Время последнего пересчета суммы с учетом % из miner_pct
- log_id bigint(20) - ID log_wallets, откуда будем брать данные при откате на 1 блок. 0 - значит при откате нужно удалить строку
Суммируем все списания, которые еще не в блоке
- hash binary(32) - Хэш транзакции. Нужно для удаления данных из буфера после того, как транзакция была обработана в блоке либо аннулирована из-за ошибок при повторной проверке
- del_block_id bigint(20) - Т.к. удалять нельзя из-за возможного отката блока, приходится делать *delete=1, а через сутки - чистить
- user_id bigint(20)
- currency_id tinyint(3)
- amount decimal(15,2)
- block_id bigint(20) - Может быть = 0. Номер блока, в котором была занесена запись. Если блок в процессе фронт. проверки окажется невалидным, то просто удалим все данные по block_id
- id bigint(20)
- user_id bigint(20) - Чей ордер
- sell_currency_id tinyint(3) - Что продается
- sell_rate decimal(20,10) - По какому курсу к buy_currency_id
- amount decimal(15,2) - Сколько осталось на данном ордере
- buy_currency_id int(10) - Какая валюта нужна
- commission decimal(15,2) - Какую отдали комиссию ноду-генератору
- empty_block_id bigint(20) - Если ордер опустошили, то тут будет номер блока. Чтобы потом удалить старые записи
- del_block_id bigint(20) - Если юзер решил удалить ордер, то тут будет номер блока
Все ордеры, которые были затронуты в результате тр-ии
- id bigint(20)
- main_id bigint(20) - ID из log_forex_orders_main. Для откатов
- order_id bigint(20) - Какой ордер был задействован. Для откатов
- amount decimal(15,2) - Какая сумма была вычтена из ордера
- to_user_id bigint(20) - Какому юзеру было начислено amount
- new tinyint(3) - Если 1, то был создан новый ордер. При 1 amount не указывается, т.к. при откате будет просто удалена запись из forex_orders
- block_id bigint(20) - Для откатов
Каждый ордер пишется сюда. При откате любого ордера просто берем последнюю строку отсюда
- id bigint(20)
- block_id bigint(20) - Чтобы можно было понять, какие данные можно смело удалять из-за их давности
В один блок не должно попасть более чем 10 тр-ий перевода средств или создания forex-ордеров на суммы менее эквивалента 0.05-0.1$ по текущему курсу
- tx_hash binary(16) - По этому хэшу отмечается, что данная тр-ия попала в блок, и ставится *del_block_id
- user_id bigint(20)
- del_block_id bigint(20) - block_id сюда пишется в тот момент, когда тр-ия попала в блок и уже не используется для фронтальной проверки. Нужно, чтобы можно было понять, какие данные можно смело удалять из-за их давности
Эта табла видна только админу
- id bigint(20)
- add_time int(11) - для удаления старых my_pending
- user_int_message_id int(11) - ID сообщения, которое присылает юзер
- parent_user_int_message_id int(11) - Parent_id, который присылает юзер
- user_id bigint(20)
- enum('from_user','to_user')
- subject varchar(255)
- encrypted blob
- decrypted tinyint(1)
- message text
- message_type tinyint(1)
- message_subtype tinyint(1)
- enum('my_pending','approved') DEFAULT 'my_pending
- close tinyint(1) - Вопрос закрыли, чтобы больше не маячил
Чтобы было проще понять причину отказов
- enum('miner','promised_amount')
- vote_id int(11)
- comment varchar(255)
- hash binary(16)
- data varchar(20)
Если не пусто, то работаем в режиме пула
- user_id int(11)
- uniq enum('1') DEFAULT '1
- data text
Для тех, кто не хочет встречаться для обмена кода на наличные
- id bigint(20)
- name varchar(255)
- php_path varchar(255) - Нужно для запуска демонов
- my_block_id int(11) - Параллельно с info_block пишем и сюда. Нужно при обнулении рабочих таблиц, чтобы знать, до какого блока не трогаем таблы my_
- local_gate_ip varchar(255) - Если тут не пусто, то connector.php будет неактивным, а ip для disseminator.php будет браться тут. Нужно для защищенного режима
- static_node_user_id int(11) - Все исходящие тр-ии будут подписаны публичным ключом этой ноды. Нужно для защищенного режима
- in_connections_ip_limit int(11) - Кол-во запросов от 1 ip за минуту
- in_connections int(11) - Кол-во нодов и просто юзеров, от кого принимаем данные. Считаем кол-во ip за 1 минуту
- out_connections int(11) - Кол-во нодов, кому шлем данные
- bad_blocks text - Номера и sign плохих блоков. Нужно, чтобы не подцепить более длинную, но глючную цепочку блоков
- pool_max_users int(11) DEFAULT '100
- pool_admin_user_id int(11)