Как я писал свою криптовалюту

3 года назад у меня появилась мысль создать свою криптовалюту. От биткоина решил взять идею с нодами и блокчеином.


Я решил сделать привязку каждой ноды к человеку. Каждый, кто хочет стать майнером, должен заснять на видео своё лицо и сделать фото. При проверке сранивается фото и видео, чтобы убедиться, что лицо одно и то же. Видео нужно только потому, что подделать его практически невозможно, в отличие от фото.
На фото нужно нанести точки в определенные части лица, чтобы при поиске по БД сравнивать пропорции.
Проверяют это всё майнеры, которые ранее уже прошли такую проверку. В итоге нужно набрать 10 положительных голосов и менее 10 отрицательных в течение суток.
Всё это происходит путем рассылки транзакций и блоков между нодами, никаких центральных серверов нет. Все фото/видео находятся в паблике.

Если подкупить 10 майнеров, чтобы они проголосовали за Вас, то это не будет гарантией, что Вы станете майнером, т.к. остается шанс поймать 10 минусов.

Также предусмотрен запасной вариант, когда клоны уже проникли в DC-сеть. В этом случае на них кто-то должен отправить транзакцию с жалобой (ParseData->abuses()). Тогда админ, т.е. я, получает право отправить транзакцию, которая переведет данного майнера в ряды простых пользователей.
Всего админу доступно 11 типов транзакций, все они обрабатываются методами из ParseData:
admin_1block — Обработка самого первого блока.
admin_add_currency — Добавление новой валюты. Сейчас там не все нац валюты, а только основные.
admin_answer — Ответ на баг-репорт.
admin_ban_miners — Перевод майнеров из майнеров в юзеры, если на него была жалоба. При этом всё, что успело найманиться остается в распоряжении пользователя.
admin_message — Короткое сообщение, которое показывается в интерфейсе.
admin_blog — На будущее, вдруг нужно будет сообщить что-то, что не влезет в короткое сообщение.
admin_new_version — Заливка новой версии.
admin_new_version_alert — Выдает алерт в интерфейсе, что нужно обновиться.
admin_spots — Всё для поиска клонов — наборы точек, совместимость версий точек, из каких точек составляем отрезки, допустимые расхождения.
admin_unban_miners — Перевод разжалованного майнера обратно в майнеры.
admin_variables — Переменные, в БД таблица variables. Потом планирую сделать константами.

Я сразу перечислил все возможности админа, чтобы ни у кого не возникало вопроса — а может ли админ заблокировать аккаунт с деньгами? Нет, не может, максимум, что разрешено админу, — это понижение привилегий у аккаунта без затрагивания находящихся на аккаунте средств (admin_ban_miners).

Обозначения


Само слово miner (в переводе шахтер) наверное не очень подходит для обозначения пользователя с повышенными привилегиями. Но исторически сложилось, что у меня везде используется miner.

Порядок генерации блоков


Все ноды делятся на уровни в зависимости от текущего хэша заголовка (node_id,block_id,prev_head_hash).
Нод, который находится на 0-м уровне, определяется методом testblock->get_block_generator_miner_id()
Если, например, сейчас на 0-м уровне нод ID 12689, то на 1-м уровне будут ноды 12690-12691, на 2-м — 12692-126995 и т.д.
Если нод на 0-м уровне не смог сгенерировать блок, то в работу включаются ноды 1-го уровня, если и они не смогли, то 2-го и т.д.
Т.е. злоумышленник не сможет сделать так, чтобы блок генерировали именно его ноды.

Генерация монет


Теперь у нас есть ноды, за каждой из которых закреплен один живой человек. Можно было бы просто раздать по X монет каждому майнеру. Но мне почему-то эта идея сразу не понравилась, как потом выяснилось, не зря. Вот пример того, что могло бы произойти — habrahabr.ru/post/217111 и далее — coinmarketcap.com/aur_90.html.
Еще у меня из головы не выходила мысль о том, что если Dcoin станет популярен, то с ним могут начать бороться власти путем введения санкций против бирж. Нужен был механизм, который позволял бы существовать Dcoin без бирж, банков и прочих посредников.
Да, кстати, Dcoin — это сокращенно от Democratic Coin, оно же — DC.

Решение оказалось довольно простым. Нужно совместить раздачу монет с функцией обмена Dcoin на наличные. Для этого мне понадобилось скопировать основные валюты в Dcoin. Я просто прибавил букву D к 3-х буквенному коду валюты. Получилось DUSD, DEUR, DRUB и т.д.
Если майнер хочет купить, например, 1000 DUSD, то он отправляет в DC-сеть транзакцию, в которой указано, что он хочет купить 1000 DUSD за 1000 USD. Но желающих продать DUSD может не быть. Майнер должен быть готов ждать неопределенный срок, пока найдется продавец DUSD.

Теперь, у нас есть, например, 100к записей в нашей распределенной БД о том, что майнеры готовы купить DUSD на 100 млн. $. Осталось создать DUSD. Все, наверное, подумали о премайне. Но я не верю, что кто-то захочет заплатить мне $ за какие-то там DUSD, поэтому сразу нет. Да и вместо премайна было бы логичнее просто раздать монеты.

Я решил начислять на счет майнера DUSD за то, что майнер ждет, пока кто-то захочет продать ему DUSD.
Начисляются DUSD по следующей формуле:
nDUSD = bDUSD*((1+K)^T)-bDUSD
где nDUSD — новосозданные DUSD, bDUSD — сумма DUSD, которую майнер готов купить, K — коэффициент, про который напишу ниже, T — время в секундах.
Т.е. чем больше DUSD готов купить майнер и чем дольше он ждет, пока ему их кто-то продаст, тем больше новых DUSD создается и начисляется ему на счет.
В исходниках эта формула находится в методе ParseData->calc_profit(). calc_profit включает еще несколько параметров, но если начну описывать и их, то будет слишком занудно и длинно. Но если кому-то интересно, то напишу.

Коэффициент К


Это очень важный коэффициент, т.к. от него зависит эмиссия. Я долго думал, каким его сделать, к каким параметрам привязать. Ведь он не должен поддаваться накрутке. Самым демократичным вариантом оказался тот, где этот коэффициент определяют сами майнеры данной валюты путем голосования. Для удобства, в интерфейсной части коэффициент К отображается как %/год. Допустимые значения от 0 до 1000%/год. В исходниках ParseData->votes_complex(). Майнер может голосовать только за те валюты, которые были добавлены у него более чем $variables['min_hold_time_promise_amount'] секунд назад. Для защиты от атак клонов, чтобы они не смогли дестабилизировать сеть своими голосами.
Пересчет голосов и обновление коэффициентов делается каждые $variables['new_pct_period'] секунд. Сейчас там 2 недели.

Теперь у нас в распределенной БД есть не только обещания майнеров купить 100 млн. DUSD, но и их голоса за скорость эмиссии, т.е. за коэффициент К. И через какое-то время на счетах майнеров начнут появляться первые DUSD.

Получается, что обычный майнер должен просто указать, что он готов отдать 1000$ за 1000 DUSD, и если по результатам голосования будет выбрано, например, 900%/год, то через месяц у него будет +200 DUSD, а через год +9000 DUSD, которые эквивалентны 9000$.
Но я не рекомендую заигрываться с верхними пределами коэффициента. Про последствия будет написано ниже.

WOC


По аналогии с ru.wikipedia.org/wiki/Wocu я сделал WOC. Она начисляется каждому майнеру, её нельзя обменять на наличные у другого майнера. Её можно переводить с кошелька на кошелек. По идее, WOC должна заменить доллар на пьедестале мировой валюты.

Биржи


Если они будут — хорошо, но если их запретят — то не страшно. В крупных городах, я думаю, предпочтение майнеров будет отдаваться встроенному механизму обмена, ведь он переводит валюту Dcoin сразу в наличные деньги.

Географические и национальные ограничения


Возможно большинство майнеров будет против того, чтобы майнинг их национальной валюты происходил где-то за пределами их страны или валютного союза, либо захотят, чтобы майнеры находились только в крупных городах. По-этому при добавлении какой-либо валюты майнеру нужно будет записать видео, в котором он будет говорить на своем национальном языке, что-то вроде: «Я обещаю отдать 100 норвежских крон за 100 DNOK». Далее нужно будет указать страну и отметить точку на карте. И запрос должны будут утвердить 10 майнеров, у которых майнится Норвежская крона. Возможно майнеры DNOK введут правило, по которому новые майнеры DNOK должны будут снять видео на фоне какого-нибудь известного памятника в крупном городе Норвегии.

Инфляция


Я не знаю, как поведут себя майнеры и за какой коэффициент они будут голосовать. Но не исключен такой сценарий, когда, например, DUSD будет создано больше, чем нужно рынку. Если DUSD будет торговаться на биржах, то курс упадет ниже 1:1, т.е. за 1 DUSD будут давать, например, 0.9 USD. В этом случае майнеры должны проявить сознательность и уменьшить общую массу DUSD. Путем того же голосования. Например, >50% проголосуют за уменьшение на 10% и в БД вместо 100 млн. DUSD у всех станет 90 млн. DUSD (ParseData->reduction()), что, скорее всего, вернет курс на 1:1.
Также майнеры могут проголосовать за изменение максимальной обещанной суммы и за количество валют, которые могут майниться вместе (ParseData->votes_complex()).

upd. Если общий объем обещанных сумм станет меньше объема созданных монет какой-либо валюты, тогда запустится автоматическое сокращение объема монет проблемной валюты на 10%.

Простые пользователи


Кроме майнеров есть еще простые пользователи. Для них не нужно ни фото, ни видео, они полностью анонимны. Они могут только принимать и отправлять монеты Dcoin. Держать свою ноду пользователю не нужно. Он может просто отправлять свои транзакции на любую ноду в DC-Сети.
Майнеры могут проголосовать за то, чтобы монеты простых пользователей росли на их кошельках. Например, на 30%/год. Т.е. простой пользователь может купить на бирже какое-то кол-во DUSD, например 10к, и через год у него будет 13к DUSD. Я не знаю, нужна ли такая фича, если не нужна, то майнеры могут просто держать % для пользователей равным нулю, и ничего расти не будет.

Новые пользователи


С этим тоже пришлось помучиться. Ведь если дать возможность слать транзакции с регистрацией новых пользователей всем подряд, то кто-то возьмет да сгенерирует 1млрд транзакций и захламит всю DC-сеть. Вначале сделал с инвайтами, но выяснилась проблема — транзакцию с регистрацией, в которой указан инвайт, можно перехватить и использовать инвайт самому. Поэтому транзакцию с регистрацией нового пользователя может отправлять только майнер и не более $variables['limit_new_user'] за $variables['limit_new_user_period'] секунд. Сейчас там 2 за месяц.

Защита от хищения праймари ключа


К аккаунту можно прикрепить до 3-х праймари ключей. Это значит, что для принятия DC-сетью любой Вашей транзакции будет требоваться 3 подписи. Один ключ Вы можете хранить у себя, два других, например, на каких-нибудь сторонних сервисах, которые будут подписывать Ваши транзакции только если Вы введете смс-код.

Пара слов о процессе разработки


То, что уйдет 3 года, я не представлял даже в самом страшном сне. Я думал управиться за несколько месяцев. По этой же причине писал на том языке, который знал на более-менее приемлемом уровне. Если бы вернуться в прошлое на 3 года, то, наверное, использовал бы C++.
Первые 2 с половиной года работал по вечерам и выходным, что жутко раздражало, но полгода назад избавился от работы, которая мешала, и стал уделять всё время Dcoin. Последние 3 месяца по 10-16 часов в сутки искал и исправлял баги. Думал, максимум месяц — и багов не будет, а нет — 3 ушло.
Очень много тонкостей работы Dcoin я не описал, т.к. иначе получится слишком длинная статья, которую будет сложно читать. В Dcoin 41 тип транзакций, методы, которые их обрабатывают, находятся в классе ParseData. Пишите вопросы, всё поясню.
Комментарии в исходниках сожержат множество ошибок и опечаток, потом обязательно подчищу. Код написан, скорее всего, не очень грамотно, но главное, что всё работает.

Установка


При установке требуется приватный ключ. Его можно взять либо тут, либо у какого-нибудь майнера.
Установка простая и занимает около 2-3 минут. Чтобы акканут не занял кто-то другой, нужно сразу сменить ключ.
Можно использовать пока только на 32-х битных ОС. Нужно переписать пару функций, в частности pow, и будет совместимо и с 64-х битными.
На тестах использовал простые ВПС с 512 ОЗУ и 700Mhz CPU, на первое время таких мощностей будет вполне достаточно.
Нужен apache или nginx, PHP >5.2.4, Mysql >5.0.
Если будете ставить на win, то лучше используйте nginx, я тестировал с winginx.

upd
По просьбам в комментариях написал описание установки:
Для win
1. Устанавливаем winginx.com/ru/download
2. Создаем проект в Winginx Workbench
3. Скачиваем github.com/c-darwin/dcoin/archive/master.zip
4. Распаковываем в директорию сайта
5. Создаем БД в pma: localhost:81/
6. Заходим на localhost/dcoin-master/index.php
7. php_path, скорее всего, будет такой — C:\Winginx\php5\php.exe
8. Следуем инструкции по установке

Чтобы проапгрейдить аккаунт до майнерского нужно будет открыть 80-й порт для входящих соединений.

Для nix
1. Если не установлены, то устанавливаем nginx, PHP >5.2.4, Mysql >5.0, создаем БД
2. Скачиваем github.com/c-darwin/dcoin/archive/master.zip
3. Распаковываем в директорию сайта
4. Заходим по ip_сервер/dcoin-master/index.php
5. Следуем инструкции по установке

Чтобы проапгрейдить аккаунт до майнерского нужно будет открыть 80-й порт для входящих соединений.

upd1
Было крупное обновление исходников — теперь есть автоматическое уменьшение объема Dcoin.

upd2

Развернутые ответы на вопросы, заданные в комментариях


Подделка видео


А что если взять да сгенерировать в каком-нибудь софте видео-ролики, затем зарегать 100500 майнерких аккаунтов, уничтожив Dcoin на корню? Или нанять гримеров, которые будут создавать тысячи новых лиц в сутки?
За небольшие деньги такое возможно только в научной фантастике. Чтобы не быть голословным, я буду приводить пруф-линки.

Компьютерная подделка


Минимальная цена создания одного такого видео будет от 2000$, хотя некоторые специалисты утверждают, что для достижения более-менее приемлемого уровня реалистичности нужно от 1 млн$ за каждый ролик. Пруф

Профессиональный грим


Если взять, например, одного человека и 50 раз его загримировать и разгримировать?
Звучит довольно просто, но на деле такое удовольствие обойдется от 100k$ до 285k$ за 50 гримов. Пруф
В студии Петра Горшенина, где мне озвучили сумму в 285k$, процесс описали вот так:
«Нужно снять форму с человека, отлить модель его лица. Потом изготовить модели частей лица столько, сколько будет разных деталей, примерно 5(отдельно лоб, нос, подбородок и две скулы). Далее на них делаются скульптуры изменений из пластилина. Потом с этого опять снимаются формы, в которых будут отливаться сами детали из силикона. И все это 50 раз за исключением первого снятия формы с человека.»

Про возможность возникновения «ферм»



Скорее всего, рано или поздно, возникнут «Фермы», где ушлые дельцы будут платить по 10-20$ за полную регистрацию аккаунта с добавленной обещанной суммой и оффлайн проверкой. Но если такие хитрецы появятся, значит прибыль, которую они будут получать с каждого такого аккаунта, будет не менее нескольких сотен долларов. Если кто-то отправит на такой серый аккаунт запрос на обмен Dcoin на указанную там обещанную сумму, то владельцу такой фермы будет совершенно не выгодно получить заморозку роста монет по его обещанным суммам. Ведь полученные Dcoin можно без проблем продать на бирже. И ему придется отдать обещанную сумму в обмен на такое же кол-во Dcoin. Т.е. такая ферма, по сути не будет отличаться от группы простых майнеров, единственное, что все сливки будет получать один человек.
Но больших объемов у таких ферм не будет. Т.к. при выявлении первой такой схемы будет добавлено правило записи первого ролика, в котором будет говориться, что нужно на камеру показать лист бумаги, на котором написано «с правилами на сайте democratic-coin.com согласен». Большинство из любопытства зайдут на сайт, чтобы узнать, с чем таким они согласны. А на сайте будет написано, что продавать аккаунт за 10-20$ крайне не выгодно, гораздо выгоднее этот аккаунт использовать самому.

А что если поехать в глухую провинцию Индии, где у 85% населения нет интернета, и снимать там людей в студии?
Опять же, получится ферма, которая не будет оказывать серьезного негатива, т.к. владельцу фермы будет невыгодно игнорировать запросы на его обещанные суммы.
Но не спалить такую ферму будет гораздо сложнее, т.к. пройти оффлайн проверку и затеряться в крупном городе не получится, а значит придется притворяться жителем каких-то мелких городов, где еще не набралось 25 майнеров. А все такие города будут тщательно проверяться админом. Останется найти схожие элементы на видео и отправить запросы с просьбой снять новое видео.

Само существование ферм предполагает, что Dcoin уже развился и каждый майнерский аккаунт является источником постоянной прибыли. А владельцы таких ферм получают сверхприбыли, пользуясь неосведомленностью обывателей. Этот факт не сможет долго оставаться незамеченным и рано или поздно попадет в СМИ. И все эти неосведомленные очень быстро станут осведомлены, что выгоднее самому стать майнером, тем более, для этого к тому времени, возможно, не нужен будет даже компьютер, достаточно один раз зарегистрироваться в каком-нибудь интернет-кафе и дальше использовать мобильный телефон как у 37coins.

Песочница для новых майнеров


Просто так взять и заполонить DС-сеть ботами-майнерами невозможно, потому что новый майнер может зарегистрировать новых юзеров не раньше, чем через один месяц. И в месяц можно регистрировать не более 2-х юзеров. Голосование и обмен на наличные новым майнерам также становятся доступны только через месяц.

Сутки на проверку


А что если где-то достать 10 аккаунтов и ставить по 10 плюсиков своим ботам?
Из этого ничего не получится. Т.к. голосование не может быть завершено ранее, чем через 24 часа от появления транзакции в DC-сети. И если за это время претендент соберет 10 минусов, то майнером он не станет. А чтобы у всех майнеров была мотивация проверять других майнеров, существуют баллы, недобор которых приводит к снижению % роста обещанных сумм.

Офф-лайн проверка


(В процессе внедрения)
Если в радиусе 25км от пользователя, который хочет стать майнером, есть минимум 25 других майнеров, то из них будет выбран 1 псевдо-случайный.
Код
/**
 * @param int $user_id - user_id претендента на майнера.
 * @param int $size - кол-во элементов в массиве майнеров, которые находятся в пределах 25км.
 * @return int
 */
function get_checking_miner_id ($user_id, $size) {
  $hi = $user_id / 127773;
  $lo = $user_id % 127773;
  $x = 16807 * $lo - 2836 * $hi;
  if ($x <= 0)
     $x += 0x7fffffff;
  $key = ( ($user_id = $x) % ($size + 1));
  return $key;
}

Как видно из алгоритма, сделать так, чтобы проверку делал какой-то определенный майнер, невозможно. Выбранному майнеру отправляются контакты претендента на майнера, он должен ему позвонить и назначить место встречи. В течение 2-х суток они должны встретиться, выбранный майнер должен сделать их совместное фото, выложить на свою ноду и отправить транзакцию в DC-сеть.

За это он получит 1000 баллов. Также он может отправить транзакцию, в которой отказывается делать проверку. Если прошло 2 суток или была отправлена транзакция с отказом, претендент получает право отправить новый запрос следующему случайному майнеру.
Если в радиусе 25км менее 25 майнеров, то проверка происходит без личной встречи. В радиусе 50,100,500,1000,10000,100000км ищется 25 майнеров, выбирается псевдо-случайный, ему шлется запрос. Он должен по скайпу позвонить претенденту, посмотреть на него через камеру, сделать фото, выложить на свою ноду, отправить транзакцию в DC-Сеть.
После того, как транзакция с фото отправлена, претендент получает право отправить в DC-сеть транзакцию, в которой укажет ссылку на свое видео, хэши своих фото, точки на фото. Далее идет проверка майнерами и голосование.

Таким образом «ферма» не сможет затеряться в толпе в крупном городе, а все майнеры, которые будут появляться в местах, где еще нет 25-и других майнеров, будут дополнительно проверяться админом.

Про баллы


Чтобы получать майнерский %, нужно каждый месяц набирать кол-во баллов, не менее, чем:
Сумма баллов всех майнеров за месяц / кол-во майнеров * Коэффициент.
Коэффициент в данный момент равен 0.3
Если баллов меньше, то в следующем месяце будет юзерский процент.

Отправка данных в DC-сеть и проверка нодами


После успешного прохождения оффлайн проверки, пользователь, который хочет стать майнером, заливает на свою ноду 2 фото, отмечает на них точки, указывает url к видео и отправляет в DC-сеть транзакцию. В этой же транзакции указаны хэши от фото.
Ноды получают эту транзакцию в одном из блоков и если находят себя среди тех, кто должен скачать эти фото к себе, то автоматически качают их.
Ноды, которые должны сохранить фото у себя, определяются вот таким алгоритмом:
Код
/**
 * @param int $block_id номер блока, в котором транзакция была принята.
 * @param int $max_miner_id - максимальный id майнера на момент, когда тр-я попала в блок.
 * @param int $miners_keepers - сколько нодов должны сохранить фото у себя. сейчас это 10.
 * @return array
 */
function get_miners_keepers ($block_id, $max_miner_id, $miners_keepers) {
  for ($i=0; $i < $miners_keepers; $i++) {
    $hi = $block_id / 127773;
    $lo = $block_id % 127773;
    $x = 16807 * $lo - 2836 * $hi;
    if ($x <= 0)
        $x += 0x7fffffff;
    $miner_id = ( ($block_id = $x) % ($max_miner_id + 1));
    $miner_id = ($miner_id==0)?1:$miner_id;
    $array[] = $miner_id;
  }
  return $array;
}

Т.е. сделать так, чтобы фото сохранили какие-то конкретные ноды, невозможно.
Каждая нода, которая сохранила фото у себя, сравнивает их хэши с хэшами, указанными в транзакции. Если они сходятся, то отправляет в DC-сеть транзакцию, в которой сообщает о том, что проверка пройдена. Если >=50% нодов подтвердили, что успешно скачали к себе фото, то начинается проверка майнерами. Проверка нодами происходит в автоматическом режиме, без участия майнера.

Проверка майнерами


На первом шаге нужно проверить, верно ли нанесены точки на фото.
Далее, нужно сравнить фото и видео, действительно ли там одно и то же лицо. А также фото, полученное от майнера, который делал проверку в оффлайн.
После этого выдается страница, где показаны фото похожих людей. Нужно визуально проверить, нет ли на них подозрительно похожих лиц. Предусмотрен выбор расы, т.к. для европейцев все азиаты на одно лицо, а для азиатов все европейцы одинаковые.

На данном примере видно, что у претендента был найден точный клон
Если фото не отображено, то нужно нажать на кнопку «перезагрузить», тогда это фото загрузится с другой ноды. Если ни с одной из 10-и нод фото невозможно загрузить, то есть вероятность, что наш претендент на майнера просто заддосил 10 нодов, где лежит фото от его предыдущего аккаунта. Поэтому нужно отказывать такому майнеру. За выполнение задания по проверке претендента в майнеры начисляется 50 баллов

Будут ли майнеры ответственно относиться к выполнению заданий?


Если у Вас прямо сейчас есть какое-то кол-во btc, то любой негатив в СМИ в сторону bitcoin будет Вам неприятен, т.к. этот негатив может повлиять на курс btc, а следовательно, и на кол-во благ, которые Вы могли бы купить на свои btc. При этом, когда у Вас не было btc, то отношение к новостям о bitcoin у Вас было более нейтральным. Верно?
Представьте, что у Вас куплено Dcoin на какую-то сумму или у Вас добавлена обещанная сумма, которая приносит постоянную прибыль. Только в этом случае судьба Dcoin будет Вам действительно небезразлична. И если от Вас будет зависеть, пройдут ли в DC-сеть чьи-то клоны, которые смогут получить незаслуженные монеты, то отнесетесь ли Вы ответственно к процедуре их проверки? При этом, запрещать всех подряд нельзя, ведь Dcoin должен проникать в широкие массы, чтобы Ваши монеты можно было без проблем обменять на фиат.

Поиск клонов изнутри



Нам понадобится один отрезок на каждой из 2-х фото, с которым будем сравнивать все остальные отрезки.
Сейчас это расстояние между глаз на фото анфас и расстояние от глаза до края уха на фото в профиль.

В таблице spots_compatibility хранится:
1. Текущая версия.
2. Точки, которые наносятся на 2 фото примера.
3. С какими версиями совместимо.
4. Какие точки с какими будем соединять для получения отрезков.
5. Допустимые расхождения при поиске клонов.

В таблице faces хранится:
1. f1,f2...f20 — соотношения отрезков на лице анфас к расстоянию между глаз.
2. p1,p2...p20 — соотношения отрезков на лице в профиль к расстоянию от глаза до края уха.
3. Версия spots_compatibility, которая была на тот момент.

Если будет найден более эффективный набор точек для поиска клонов, то данные в таблице spots_compatibility обновляются и в таблицу faces будут заносится отрезки на основе нового набора точек.

В первом шаге проверки претендента на майнера мы убедились, что точки на фото нанесены верно, а значит отрезки будут получены тоже верные. Остается просто сделать запрос в базу данных, где будет идти сравнение с f1,f2...f20 и с p1,p2...p20 с учетом допустимых расхождений из spots_compatibility. В итоге получаем id майнеров, которые похожи на претендента.
Тесты:
i7-2600k / centos i386 / стандартные настройки mysql и php
Записей Время в секундах
1 млн 0,12
3 млн 0,39
5 млн 0,8

Проверка админом


Возможно, из-за неидеальных значений в spots_compatibility, клоны смогут проскакивать. По-этому у админа есть возможность разжаловать уже прошедших проверку майнеров в пользователи (собственно для этого и нужен админ в Dcoin), но не более 1000 за день. В результате этого перевода, средства на аккаунте майнера никуда не денутся, просто будут расти с юзерским %, а обещанные суммы перестанут приносить новые монеты.

Выборы админа


Если действия админа будут не устраивать большинство, то майнеры могут проголосовать за передачу функций админа любому пользователю. Если наберется более 50% голосов, то все функции админа полностью перейдут к выбранному пользователю.
Dсoin
55,00
Компания
Поделиться публикацией

Комментарии 74

    0
    Это, конечно, не «простейшая игра на JS», но проглядывается какая-то тенденция. В песочнице весна, снег тает, обнажая скрытые под ним жемчужины?
      +3
      1) Как обналичить DRUB или DUSD?
      2) Какая ваша личная выгода от этого проекта? Неужели писали 3 года на голом энтузиазме?
        0
        Чтобы получить $ за DUSD нужно отправить запрос майнеру, который хочет купить DUSD. В меню — «Майнинг» -> «Исходящие».

        Про мою выгоду. Это 5% системная комиссия, которая взимается в тот момент, когда майнер кладет намайненные DC в кошелек (В меню — «Майнинг» -> «Обещанные суммы» -> «Положить в кошелек»). Т.е. например, у Вас обещанная сумма 1000 DUSD, через месяц у Вас набежало 10 DUSD, Вы их переводите на свой кошелек, а получаете 9.5 DUSD.
        При внутренних переводах с кошелька на кошелек и обналичивании DC системной комиссии нет.
          0
          А не много 5%? Лично меня это сразу покоробило. Такие «системные» комиссии разве что в хайпах и ЭПС с ними связанных.
            0
            Не знаю, может и много, и нужно будет уменьшить. Я по аналогии с kickstarter сделал 5%.
        +10
        Топик в минусах. Подскажите, пожалуйста, что я сделал не так? Честно, не могу понять.
          +9
          Не расстраивайтесь, просто тут есть ряд людей которые сразу агрятся на буквы PHP.

          Но от себя бы добавил — многим сходу может быть не очень понятно как установить и попробовать, лучше написать более подробную инструкцию.
            +5
            Хоть пользоваться и не буду, но поставил плюсы везде, из-за уважения за проделанную, сложную, работу.
              +4
              Спасибо!
              +6
              Минус не ставил, но сильно смущает требование снять видео и сделать фото.
                +1
                Поставил плюс, а сам подумал -следующая криптовалюта начнётся со слов "… и я решил посчитать хэш от ДНК сетчатки глаза..." < / irony mode >
              0
              А PHP-то где?
                0
                Исходники проекта? Тут — github.com/c-darwin/dcoin/
                  +18
                  Отличная история коммитов. Прям сразу все стало понятно.
                    +2
                    Виноват, исправлюсь.
                      0
                      всё сам понял — delete
                  0
                  1. ParseData
                  2. ???
                  3. profit()
                    +1
                    Видео нужно только потому, что подделать его практически невозможно, в отличие от фото

                    Идея проекта отличная! Это очень интересно, но вы уверены, что видео все же «подделать практически невозможно»? Голливуд часто убеждает нас в обратном…
                      +1
                      Спасибо за теплые слова, очень приятно.

                      Голливуд подделать сможет, но в единичных экземплярах и очень за дорого.
                      В основе Dcoin лежит утверждение о невозможности создания 3d видео рендеринга человека и мира вокруг него с соблюдением всех 5-и условий:
                      1. Затраты на создание должны окупиться прибылью от майнинга
                      2. Строгое соблюдение условий сюжета. Например, может потребоваться снять видео, где Вы находитесь на улице
                      3. Абсолютная реалистичность
                      4. Уникальность
                      5. Масштабируемость, т.е. размножить предыдущие 4 пункта до промышленных масштабов
                        0
                        Кто будет проверять «сюжет»? Беру 1000 фильмов, нахожу сцены, вырезаю случайную, нахожу лица, выбираю случайное, нахожу его в другой сцене, делаю «фото», из предыдущей сцены делаю «видео». Получаю 1000 аккаунтов. Совпадение между фото и видео Ваш алгоритм найдёт, но кто будет вручную смотреть все тонны видео, чтобы определить, из фильма это, или реально кто-то снял на телефон с 0.3Мп камерой?
                          –1
                          На 1-м шаге апгрейда аккаунта до майнерского указаны следующие требования к фото:

                          — Фото должно быть обрезано по краям, как на примерах
                          — Голова должна помещаться полностью, как на примерах
                          — Нельзя улыбаться или как-то еще менять выражение лица
                          — Волосы должны быть убраны, очки сняты
                          — Размер от 350x500px
                          — Качество — четкое, как на примерах

                          Примеры: 173.44.34.106/dcoin/img/face.jpg и 173.44.34.106/dcoin/img/profile.jpg

                          И требования к видео:

                          — Продолжительность ролика должна быть от 10 до 15 секунд
                          — Пропорции лица на фото должны быть идентичны пропорциям лица на видео
                          — Голова должна помещаться полностью, как на примерах выше
                          — Нельзя улыбаться или как-то еще менять выражение лица
                          — Волосы должны быть убраны, очки сняты
                          — Качество — четкое, как на примерах выше

                          На видео должно быть (сюжет):
                          — Вид лица спереди
                          — Поворот головы в сторону левой руки
                          — Поворот головы в сторону правой руки

                          Из какого фильма Вы такое сможете вырезать?
                            +1
                            По-моему именно такие фото и видео встречаются в каждом фильме, где кого-нибудь сажают в тюрьму и делают фото для дела. Опять таки, free-lance рынок очень велик, если люди готовы «колотить бабло» и получать по 0.0005$-0.001$ за одну разгаданную капчу, то почему бы им не начать записывать видео на заказ? 15 секунд видео + пара фото, одна минута на обработку одного человека, в некоторых странах найдётся очень много людей, готовых меньше, чем за минуту своего времени получить 1$. В общем мне не кажется, что обход такого метода аунтификации слишком затратен.
                              0
                              Попробуйте сделать вырезку из фильма с соблюдением описанных выше требований. Вы сможете в лучшем случае сделать 1-2 клона из всех фильмов, что найдете.

                              Про покупку видео у других людей я очень много думал и прикидывал разные варианты.
                              1. Если проект станет популярным, то фрилансеры за 1$ не захотят терять возможность стать майнерами и получать гораздо больше от обещания обменять 1000 USD на 1000 DUSD.
                              2. Если кто-то решит поехать в страну 3-го мира и снять там 1000 видео дав туземцу по 1$. Тогда вводим требование к сюжету — снять видео своей комнаты + вид из окна.
                              В этом случае на большинстве роликов будет одна и та же комната и один и тот же вид из окна.
                                0
                                Ладно, допустим с фильмами вариант не прокатил. Но говоря о фрилансерах, я говорил о той их части, кто готов получать 0.0005$-0.001$ за 10 секунд времени (а это почти 3$ за 8 часов непрерывной работы без ошибок), я очень сомневаюсь, что они будут вникать в принципы вашей системы и пытаться получить в ней прибыль, ибо это довольно таки не очевидно. Зато они с радостью зарегистрируются на сайте, который будет обещать им 1$ всего лишь за то, что они сделают видео и фото, причём 1$ за каждое такое задание. И вот представьте себе, человек получал за день всего 3 бакса и сидел без остановки пялился в монитор, а новая «колотилка бабла» позволяет ему заработать те же деньги за 3 минуты, начав со своей семьи (а если у них 10 человек? сферическая страна в вакууме), потом он может пойти к друзьям, которые могут быть ещё менее грамотны, чем он, и им не покажется странным его занятие. И он будет не один, их будет миллион.

                                Но вернёмся к «нашей раше», где толпы школоты пытаются заработать на тысячах «bux» сайтов, регистрируются в различных «платных» социальных сетях, вступают в миллион различных пирамид, до сих пор продолжают рассылать спам вида «вот 10 кошельков, положи по 10руб на каждый, поменяй первый на свой и разошли всем кому только сможешь», и всё ради того, чтобы заработать каких-нибудь 10$ за месяц работы. Они ни разу не слышали про вашу валюту, но нашли биржу, которую я описал выше, и она позволяет получить 1$ прямо сейчас, и без минимальной выплаты, почему нет? Конечно да. О, а ведь родители наверняка тоже не знают ничего ни о каком майнинге… а друзья? майнинг? да, вчера в лоле майнил… И он найдёт, как объяснить им, для чего ему нужно заснять их на видео и сделать пару фото, ведь за это он получит целый 1$.

                                И 1$ это просто в качестве примера, может один аккаунт будет стоить больше, или меньше, время покажет.
                                  0
                                  Всё это решается путем изменения требований к сюжету.
                                  Например, нужно будет сказать: «Я регистрируюсь в Dcoin, чтобы стать майнером и майнить по 100$/месяц»
                                  Далее, при добавлении обещанной суммы, нужно снять новое видео, где нужно сказать «Я обещаю отдать 1000$ за 1000 DUSD»
                                  Если у человека есть интернет и он смог попасть на описанную Вами биржу, то он будет в состоянии вбить в гугл Dcoin и почитать про него.
                                  Про школьников. Я думаю, не стоит им заниматься майнингом вообще. Можно просто попросить майнеров, чтобы не одобряли лиц, которым на вид меньше 18 лет.
                                    +3
                                    У вас по тексту статьи и в комментариях часто проскакивают фразы вроде:
                                    Можно просто попросить майнеров, чтобы ...
                                    … этот коэффициент определяют сами майнеры данной валюты путём голосования.
                                    Майнеры могут проголосовать за то, чтобы монеты простых пользователей росли на их кошельках.
                                    Возможно майнеры DNOK введут правило ...

                                    Вы слишком доверяете голосованию, демократическим инструментам и ответственности майнеров. Вы уверены, что накрутки невозможны?
                                    Во вторых, насколько Я понял из статьи, в вашей системе есть три роли: администратор, майнер и обычный пользователь. Сравните это с Bitcoin, где все участники равноправны. То есть ваша сеть распределённая но у неё есть центры, от которых зависит работа сети. То есть, если достаточное количество майнеров сговорятся и будут минусовать всех подряд, то никто не сможет зарегистрироваться. Как вы будете защищаться от этого?
                                    Не очень понятно из описания, как планируется обменивать вашу криптовалюту на наличные деньги. Должна состоятся передача денег, которая потом фиксируется в транзакции? Как происходит связь между наличными деньгами и вашими денежными единицами? (напоминает обмен Мавро <=> Наличные в МММ)
                                    Также обязательное требование выслать фото и видео немного смущает деанонимизацией. Вряд ли много людей захотят демонстрировать своё лицо, чтобы зарегистрироваться в системе.
                                      0
                                      Если майнеры договорятся, то много минусов они не смогут поставить, т.к.есть дневной лимит на кол-во голосов, отправленных одним майнером.

                                      Про обмен на наличные. cash_request_out() — отправка запроса с хэшем кода, cash_request_in() — ответ на запрос, в котором указан код. В меню — «Майнинг» — > «Исходящие» и «Входящие».
                                      Личная встреча и передача наличных в обмен на код — самый надежный способ. Те, кто не боятся, могут договориться об удаленной передаче денег/кода, но я бы не рекомендовал.
                                      В cash_request_out() указываются зашифрованные контактные данные.

                                      Про анонимность. Вы можете завести юзерский аккаунт и быть полностью анонимным и пользоваться Dcoin.
                                      Если бы я смотрел на биткоин и делал как все, то получился бы очередной форк.
                                      0
                                      У них есть и интернет, и гугл, но они продолжают вбивать капчу, вместо того, чтобы самостоятельно регистрировать аккаунты и продавать их, или рассылать с них спам. И есть подозрение, что они это делают не от большого ума. И тут вы со своей dcoin, что они нагуглять, что это криптовалюта и её нужно майнить? А если эти два слова добавят им ассоциативную связь dcoin == bitcion? Посмотрят они на чём сейчас майнят, на свой комп, и им проще будет заснять видео. Да и я вот прочитал вашу статью, и не понял, а где деньги то?

                                      Или вот такой пример. Некоторые покер-румы при регистрации дают стартовый бонусный капитал, допустим 40$, который нельзя вывести. Но можно сделать ставку, и если выиграл, то можно их вывести. Ну чем не халявные деньги, если написать бота, который регнет 100500 аккаов и где-нибудь алгоритм да обыграет людей, особенно если в комнате будет сидеть 4 своих бота и 1 человек. Для защиты от подобного ввели подтверждение бонуса — нужно сделать фото себя с разворотом паспорта. И есть люди, которые продают подобные фотографии по цене значительно ниже той, которую можно получить, регистрируясь и играя самостоятельно.

                                      Ограничение по возрасту… а кто будет проверять возраст? Я вот по внешнему виду человека могу определить возраст с точностью лет эдак до 10. Если смотреть одно только лицо, то погрешность ещё выше будет. Тогда на фото ещё нужно будет с разворотом паспорта стоять? Столько подходящих для описанного выше варианта фотографий в паблике — вам скажут огромное спасибо :)
                                        0
                                        Вы сейчас пытаетесь спрогнозировать будущую цену майнерского аккаунта? Вы же понимаете, что это невозможно?

                                        Разумеется у всего есть своя цена и скорее всего по какой-то адекватной цене можно будет купить готовый майнерский аккаунт или обманным путем заставить неосведомленных пользователей снять видео, где они скажут «Я хочу быть майнером dcoin и обещаю отдать 1000$ за 1000 DUSD».

                                        В любом случае будет соблюдаться условие — 1 майнер = 1 человек. Спрогнозировать, сколько людей, имея возможность вбить в гугл dcoin, всё равно продадут свои видео/фото невозможно. О bitcoin говорят по телевизору, если о dcoin будут говорить по ТВ, то неосведомленных будет с каждым нем всё меньше и меньше.

                                        Но если вдруг огромное число пользователей станут утверждать, что они аккаунт себе не заводили, а видео у них заполучили обманным путем, то можно будет сделать процедуру перехода статуса «майнер» на другой аккаунт. Т.е. подозрительный майнер получает уведомление с просьбой снять повторное видео своего лица, если в течение месяца он этого не делает, то лишается статуса «майнер». Как-то так.

                                        Про возраст. Тут только на глаз, больше никак. Как минимум, малолетних детей распознать можно будет.
                        +5
                        Не обижайтесь, но код оставляет желать лучшего. Класс ParseData на 11607 строк, веселые куски кода вроде этого. И ни единого теста.
                        В общем, я бы пока не доверял свои деньги такой системе.
                          0
                          Да, код ужасный, согласен. Про тесты не понял, поясните, пожалуйста.
                          Сейчас деньги доверять и не нужно, пока только бета-тестирование. Стабильной версии еще нет. Хотя баги вычистил все, какие нашел.
                          В коде по ссылке идет запуск авто-тестов, которые должны лежать в cron/_tx/, чуть позже закину их в отдельный репозиторий.
                            0
                            deamons.php
                            Разве не daemons.php должно быть?)
                              0
                              Да, верно, daemons. Опечатка.
                            +2
                            В дополнение к своему предыдущему комментарию — github.com/c-darwin/dcoin_tests
                              0
                              Имелись ввиду юнит-тесты, которые бы позволили протестировать критические участки кода.
                              dcoin_tests — это уже что-то, но, на первый взгляд, не совсем то.

                              Что еще сразу приходит в голову насчет кода:
                              1. Использовать composer для автозагрузки. С каждого файла уберется с десяток строк с require_once (да, я видел, что вы начали проект три года назад);
                              2. Использовать один из фреймворков для фронтенда;
                              3. Выделить с ParseData какие-то логические сущности: Block, Transaction, Node — или что там еще есть.
                                0
                                Юнит-тест только 1 нашел у себя — для calc_profit, чуть позже выложу.
                                То, что юнит-тесты нужны, полностью согласен.
                                Про composer погуглил, штука полезная, возможно внедрю.
                                Про фреймворки для фронтенда не понял, можно поподробнее, куда, какой и для чего?
                                Про логические сущности пока тоже не могу сообразить, куда и для чего.
                                  0
                                  Фреймворки используют чтобы свои велосипеды заменить более безопасными и быстрыми велосипедами, которые поддерживается третьими командами. Например Yii.

                                  Логические сущности позволят разделить, упростить класс, сделать больше реиспользуемого кода. Вместо класса «автомобиль» с описыванием всех его функций (глубоких в том числе, вроде зарядки аккумулятора рекуперативным способом) сделать несколько классов, разделить его на двигатель, система электропитания, салон, и тд. (Может пример неудачный.) Где каждый объект будет отвечать за свой функционал, инкапсулировать функции, предоставляя единые интерфейсы и тд. Это ООП стиль мышления.
                                    0
                                    Про фреймворки я не понял именно в своем случае — что на что заменять и какие от этого будут плюсы.
                                    Про то, чтобы разделить ParseData на несколько классов я думал, но постоянно откладывал на потом и в итоге всё получилось в одном классе. Подумаю, как можно поделить.
                                      +1
                                      У вас повсюду в коде присутствуют куски SQL скриптов. Фреймворки используют ORM для абстрагирования от базы данных. Если вам придётся переименовать какую-нибудь таблицу в коде, то придётся искать все SQL запросы, где эта таблица упоминается. Так же ORM помогает бороться с SQL инъекциями.
                                      Ещё в коде очень часто встречается конструкция:
                                      $error = ...;
                                      if ($error) return $error;
                                      

                                      Почему вы не используете исключения для обработки ошибок?
                                      Очень много строк вида:
                                      case 'alert_error_time' :
                                      case 'error_time' :
                                      case 'promised_amount_points' :
                                      case 'promised_amount_votes_0' :
                                      case 'promised_amount_votes_1' :
                                      case 'promised_amount_votes_period' :
                                      case 'holidays_max' :
                                      case 'limit_abuses' :
                                      case 'limit_abuses_period' :
                                      case 'limit_promised_amount' :
                                      case 'limit_promised_amount_period' :
                                      case 'limit_cash_requests_out' :
                                      case 'limit_cash_requests_out_period' :
                                      ...
                                      

                                      Почему бы не вынести их в константные переменные в отдельном классе?
                                      Вы не думайте, что Я придираюсь. Просто ваш стиль написания кода далёк от идеального. Сейчас класс ParseData очень сложно анализировать, чтобы понять, как он работает. Может быть стоит выделить отдельно класс для административных функций (admin_ban_miners_*), отдельно классы для обработки голосований (votes_node_*), классы для запросов наличных (function cash_request_*) и т.д…
                                        –1
                                        Названия таблиц в запросах можно заменить переменными или константами — проблема решается без ORM. ORM это просто удобный вспомогательный инструмент, острой необходимости в нем никогда нет. Исключения в php работают медленно, и по моей информации их нужно применять с осторожностью.
                                          +1
                                          Сама суть исключений в возможности создания наследников Exception, и таким образом из глубины можно вылавливать определенные ошибки, и какие должны вести к фатальному результату, а какие-то можно молча обработать. return $error это одноуровневый код, плоский, как и класс автора. Кроме этого в исключении можно задать «код ошибки» и получить удобоваривый trace, чтобы понять почему именно возникла ошибка.
                                            0
                                            Суть исключений — не в возможности создания наследников Exception
                                          0
                                          Если именно заменить название таблицы, то тут проблем нет. Поиск и замена в PhpStorm очень удобные и формат у меня везде один и тот же — `".DB_PREFIX.«table_name`.

                                          Насчет исключенй, так получилось, что с самого начала стал делать с return $error;

                                          case 'alert_error_time' и пр только в методе admin_variables_front(), и там в будущем будут добавлены данные между case.

                                          Я пишу код в PhpStorm, там слева очень удобно показываются все методы класса ParseData. Но разделить на части его безусловно надо, займусь этим.
                                +1
                                Веселый кусок кода поднял настроение, посмеялся :)
                                  0
                                  За что минус? Там же ясно массив вариантов поиска и цикл напрашивается. Автор же не с Индии, чтобы такое пропустить?
                                    0
                                    Уже убрал корявый кусок.
                                  +3
                                  майнеры должны проявить сознательность и уменьшить общую массу DUSD

                                  Как это должно произойти? Причем обе части от И спорные — сознательность слабоконтактирующего сообщества?
                                  И как может уменьшится масса единиц? Их могут продать-купить, но меньше их стать ведь не может никак.
                                    0
                                    В меню: Майнинг -> Голосование -> Урезание всей денежной массы.
                                    Скрин

                                    Например, >50% майнеров проголосуют за уменьшение на 10% и в БД вместо 100 млн. DUSD у всех станет 90 млн. DUSD
                                  0
                                  Ещё, у вас в статье нету картинок и даже логотипа вашей проги. А картинки очень важны — мы все их очень любим!
                                    0
                                    Я думал, что картинки — это не главное.
                                      +1
                                      Конечно, не главное, но с ними — лучше!
                                    +2
                                    класс на 11 607 строк, Вы издеваетесь?
                                      –2
                                      Хотел разделить, но так и не решил, где делить и оставил всё в одном.
                                      0
                                      А по каким критериям происходит детект лица?
                                      Что если я навояю какой-то плагин для 3д-максоподобного зверька, мой рендер будет удовлетворять ваш детектор мордочек. На основе такой технологии видео можно 100500штук сгенерировать. Как-то не то =(
                                      Уж если это как-то выстрелит и станет популярным, такую схему провернут аж бегом…
                                      0
                                      Взяли бы хоть CodeIgniter, 3 года назад был в тренде. На это полотно невозможно смотреть — github.com/c-darwin/dcoin/blob/master/content/promised_amount_list.php
                                        +2
                                        Как я писал свою криптовалюту с нуля на PHP

                                        Улыбнуло :)
                                        Каждый, кто хочет стать майнером, должен заснять на видео своё лицо и сделать фото.


                                        А я то думал, что одна из главных «фич» криптовалют — стремление к анонимности :)
                                          0
                                          Если Вы хотите анонимно отправить средства, то Вы сможете это сделать в Dcoin. Нужно просто не апгрейдить аккаунт до майнерского.
                                            0
                                            Тем не менее лица, а значит и другие персональные данные (у фейсбука например неплохое разпознавание лиц, а подобные штуки ессно не только у него одного) могут быть скомпрометированы. Повесить метку на таких майнеров и отслеживать уходящие средства. Когда ждый может намайнить анонимно и слить деньги — это одно. А когда коины начинают уходить с зарание известных точек, то отследить подобное на порядок легче.

                                            Поправте если ошибаюсь.
                                              0
                                              Если Вы вывели свои btc на биржу, то анонимность пропадает.
                                              И какой смысл майнеру анонимно майнить btc?
                                              Анонимность нужна для того, чтобы никто не знал, какой товар или услугу Вы оплатили.
                                              Например, Вы хотите сыграть в онлайн-казино, но кредиткой оплатить не получается, т.к. казино запрещено в Вашей стране. Вы покупаете на бирже btc и спокойно играете. Через биржу Вас можно вычислить, но оно никому не надо.
                                              Аналогично покупаете DC и с анонимного юзерского аккаунта оплачиваете счет в казино.
                                                +1
                                                Зачем анонимно майнить?
                                                Ну как минимум потому что btc хотят (или уже?) приравнять к недвижимосте, соответственно нужно платить налог:
                                                "Пользователям придется отслеживать свои операции и определять сумму своего налогооблагаемого дохода каждый раз", — сообщил эксперт во время электронной переписки с Filegiver .

                                                И да на бирже Вы говорите — мол хочу продать бтс, я Пупкин. Но вот от кого пришли деньги на кошелек Пупкина — прийдется отслеживать, что конечно возможно — но требует ресурсов.
                                                Другое дело знать список ВСЕХ майнеров изначально — тогда отследить будет на порядок легче.

                                                Контраргументы приветствуются.
                                                  0
                                                  Это только в США. И если там возьмутся за это дело серьезно, то все биржи будут обязаны отчитываться, кто сколько ввел, кто сколько вывел. И большинству майнеров btc в США придется платить налог, т.к. иначе можно получить реальный срок.
                                                  Вопрос в том, какие законы примут. А если исходить из того, что есть сейчас, то платить налоги с майнинга Dcoin не нужно.
                                          +1
                                          Эксперимент интересный, но хорошие гримеры и визажисты клонов настрогать могут довольно много. И тут даже не столько технический момент, сколько психологический. Люди не будут чувствовать надежность финансовой системы, которая опирается на фото и 10-и секундное видео. Нет пользователей — система мертва.

                                          Вот если предложили по ДНК идентифицировать, это больше бы доверия вызвало, но и пошли бы очередные разговоры в стиле теории заговоров о том, что всех хотят клеймить, разделить и управлять.
                                            0
                                            На видео не только лицо может потребоваться, но и окружающая обстановка, вид из окна. Требования к сюжету могут меняться.
                                              0
                                              Да хоть сплясать заданный танец на фоне подоженной квартиры, обнимаясь с коленвалом, на который надет валенок.
                                              Я говорил больше про особенности человеческого восприятия.
                                                0
                                                Вы хотите сказать, что биткоину люди доверяют?
                                                coinspot.ru/news/britanskie-polzovateli-ne-ponimayut-i-ne-doveryayut-bitkojnu-issledovanie/
                                                43% пользователей указывают в качестве причины нежелания использовать биткойн недоверие к виртуальной валюте.
                                                И это в апреле 2014 года.

                                                Спрогнозировать, сколько % будут доверять Dcoin невозможно. Кому-то будет проще понять, что за каждым нодом стоит живой человек, на фото которого можно в любой момент посмотреть, кто-то станет доверять, когда узнает, что есть админ, который следит за тем, чтобы на сеть не совершались атаки клонов.

                                                Если нормально описать работу Dcoin, то может получиться, что его понять гораздо проще, чем bitcoin. К сожалению, нормально описать у меня пока не получилось и у большинства возникает множество вопросов.
                                            –2
                                            Мдя, чего только не пишут на PHP. Взять бы это все да в мирное русло…
                                              0
                                              Никак не пойму, почему женщина без маски в ночнушке. Какую идею призвано выражать это фото?
                                                0
                                                Она — майнер (: где-то ещё видео с ней должно быть.
                                                  0
                                                  Просто картинка для привлечения внимания.
                                                  0
                                                  Сохранение координат на шаге 4 не производится
                                                  если перейти на шаг 5 и нажать Отправить получаю ошибку error Статус: Запрос не отправлялся
                                                    0
                                                    Странно, у меня всё нормально сохраняется. Надо снифером посмотреть. Отписал в личку.

                                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                  Самое читаемое