В апреле 2018 года, внутри нашей компании пришла идея выпустить свою игру на cмарт контракте блокчейна Ethereum. Подумав несколько дней и перебрав несколько вариантов, мы остановились на хорошо известной всем нам с детства игре «Камень, ножницы, бумага».
Не буду раскрывать, какие ещё варианты мы рассматривали на обсуждении, но споров, дебатов и веселья было много. Одни были слишком абсурдные, другие довольно сложные, третьи вовсе не подходили под блокчейн технологию. На обсуждении была парочка вполне серьезных вариантов, которые, вполне возможно, увидят свет в ближайшее время.

Идея создать игру «камень, ножницы, бумага» в начале подверглась жесткой критике со стороны наших специалистов по безопасности. Их главный аргумент заключался в том, что в блокчейне Ethereum невозможно ничего скрыть, вся информация находится в публичном доступе. То есть, опытный человек, может посмотреть, какой ход сделал его оппонент раньше, чем сделать свой ответных ход. Даже тот факт, что переменная, в которой хранится ход не находится в публичном доступе, не остается препятствием для её обнаружения. Очевидным решением стало использование sha3 шифрования данных с двухшаговым раскрытием ключей.

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

Схема логики в студию!




Через три дня после начала работы, прототип игры уже был готов. Воодушевлённые, мы все тестировали игру в офисе, ещё не осознавая с какими сложностями нам предстоит столкнутся в дальнейшем. Прототип позволял отправлять зашифрованные ходы, слушать поступление хода соперника и отправлять приватные ключи для определения победителя. Таким образом, мы на практике убедились, что идея жизнеспособна и может быть реализована в разумные сроки.

Как мы ошибались…



Следующие три недели прошли менее гладко. Выяснилось, что для осуществления каких-либо игровых действий, необходимо формировать подписанные транзакции в блокчен Ethereum. Для этого есть готовые решения, в виде браузерного плагина Metamask–ethereum кошелька. Поднимать собственный кошелек внутри игры не стали. Из-за этого сразу отвалился вариант мобильной версии игры, для мобильных браузеров. На них пока нет возможности устанавливать плагины. Большой проблемой было, и до сих пор частично остается, определение игрового состояния в отдельно взятый момент времени, при перезагрузках страницы или при переключении между столами. Не забывайте, что мы работаем не с сервером, на котором, такая проблема решается элементарно, а с блокчейном, получать информацию откуда приходится довольно экзотично.

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

Каждый запрос или получение информации происходит асинхронно. Задержки накладываются одна на другую и в результате, приложение работает ощутимо медленнее серверного варианта. Не дай Бог при этом какие-то неполадки со стабильным соединением. Если что-то упустить, состояние игры вообще не восстанавливается, и самое обидное, что в такой ситуации ничего нельзя сделать, чтобы помочь игроку, разъяснить ситуацию. Только повторная перезагрузка страницы, чаще всего, может решить подобные неувязки на клиенте. В какой-то момент судьба проекта в изначально запланированном виде оказалась под угрозой провала. Появились мысли урезать игру, отказавшись от более чем одного игрового раунда. Мы подумали, что если бы игра шла всегда до одной победы, было бы проще не запутаться и ничего не упустить. Другим возможным выходом могло бы быть закрытие возможности переключения между несколькими столами. Такая возможность была сделана для заполнения утомительного время ожидания хода соперника – можно играть на нескольких столах параллельно. Делай ход на одном, пока на другом идёт ожидание.

К счастью, удалось не идти на эти вынужденные меры – причину мы нашли, глючный wifi роутер в офисе, и ситуация более менее улучшилась.



В итоге проект состоялся практически в изначальном виде. Основной целью проекта является популяризация блокчейн технологии и развлечение. Для участия в ней, человеку предстоит освоить для себя азы мира криптовалюты – создание кошелька, получение тестового эфира, совершение транзакций, шифрование, адреса кошельков, типы сетей и прочее. Помимо этого, сам процесс игры на блокчейне, немного отличается по своему пользовательскому опыту больше в негативную сторону – время ожидания порой бывает утомительным. При большой комиссии тестового «газа» время хода занимает от 15 до 20секунд, в то время как при маленькой комиссии, время хода может занимать от 7 до 11 часов. Но мы относимся к этому с оптимизмом, т.к. верим в дальнейшее совершенствование этой технологии и расширение возможностей её повсеместного применения. Насколько своевременно появление данного проекта? Исходя из заявленной цели – вполне своевременно, исходя из уровня развития технологии – скорее преждевременно.

Комментарии (9)


  1. AkshinM
    14.05.2018 20:01
    +3

    данная статья вызвала у меня чувство недоумения и разочаровния. аргументирую:
    такое ощущение как будто у вас в офисе был такой диалог:

    -Давайте выложим статью на Хабр
    -Давайте. А на какую тему?
    -Да давайте напишем какую-то игру и выложим как мы ее делали, ведь эти статьи всегда интересно читать
    -Идея не плохая но что-то не так
    -А давайте напишем про «блокчейн», «майнинг» и вся херня, ведь это популярно и модно. сразу же хайпанём
    -А давайте объединим игра на блокчейне
    -Клево зачет. пошли пилить

    Не обижайтесь, труд каждого человека ценен, не смотря на то, что оно может быть потрачено не в совсем полезное дело, но тем не менее, извините, но данная статья слишком слаба для хабра, я даже скажу бесполезна. Нет никакой технической информации. Пару картинок — в всё? Такого типа рассказ можно говорить с другом айтишником сидя к примеру в баре или где-то еще. Но на статью это не годится. Вы же понимаете, что читатели данной статьи прежде всего должны получить пользу от ее прочтения? Прочитав данную статью мне показалось что я был «забайчен» и потерял драгоценное время…


    1. kozyabka
      14.05.2018 20:09
      +2

      Брался несколько раз писать комментарий, но удалял. А вы вот написали в такой очень мягкой форме!
      (пока писал из -4 стало +2, удивительно кому может нравиться такой пустой, рекламный контент)


      1. AkshinM
        14.05.2018 20:23

        мне кажется грубить никогда никому не надо. грубый ответ может задизморалить человека, он будет в обиде, что ли. можно просто спокойно дать понять, что такого рода статьи не есть хорошо, что даст мотивацию на написание качественного контента в будущем. кто знает может следующая статья автора будет шедевром..., но сие творение шедевр с обратной стороны)))


  1. Peter1010
    15.05.2018 08:50

    Шлак… :( Хоть бы подробностей накидали.
    Предыдущие статьи в вашем хабе (Solidity) были куда интереснее

    PS: Автор CEO ясно. А была ли игра вообще? или это просто плод больного воображения сеошника?


    1. AkshinM
      15.05.2018 10:15

      Автор CEO ясно

      и чего ясного?


  1. Dechjo
    15.05.2018 10:08

    К слову, метамаск на мобильный firefox ставится.


  1. mister_pibodi
    15.05.2018 10:09

    Плюс данной статьи (который я все ещё не поставил) в том, что можно по рабоче-крестьянски объяснить кому-нибудь, что за чудо-юдо блокчейн такой и что на нем можно сделать. Из всех возможных применений смарт контрактов самый лучший пример, который я знал, был тотализатор — получаешь свои деньги без обмана и лишних посредников. А тут выяснилось, что можно и игру сделать, только не зуефа, конечно же, а что-нибудь поинтереснее


  1. RISENT
    15.05.2018 11:13

    Не надо слов — покажите нам код.


  1. andi_89 Автор
    16.05.2018 22:12

    Всем спасибо за комментарии. Пишу вторую часть, где будет подробно расписана техническая составляющая.