В апреле 2018 года, внутри нашей компании пришла идея выпустить свою игру на cмарт контракте блокчейна Ethereum. Подумав несколько дней и перебрав несколько вариантов, мы остановились на хорошо известной всем нам с детства игре «Камень, ножницы, бумага».
Не буду раскрывать, какие ещё варианты мы рассматривали на обсуждении, но споров, дебатов и веселья было много. Одни были слишком абсурдные, другие довольно сложные, третьи вовсе не подходили под блокчейн технологию. На обсуждении была парочка вполне серьезных вариантов, которые, вполне возможно, увидят свет в ближайшее время.
Идея создать игру «камень, ножницы, бумага» в начале подверглась жесткой критике со стороны наших специалистов по безопасности. Их главный аргумент заключался в том, что в блокчейне Ethereum невозможно ничего скрыть, вся информация находится в публичном доступе. То есть, опытный человек, может посмотреть, какой ход сделал его оппонент раньше, чем сделать свой ответных ход. Даже тот факт, что переменная, в которой хранится ход не находится в публичном доступе, не остается препятствием для её обнаружения. Очевидным решением стало использование sha3 шифрования данных с двухшаговым раскрытием ключей.
На первом этапе клиент отправляет свой ход, зашифрованный случайно сгенерированным им же ключом. Затем, дожидается подтверждения со стороны смарт контракта, о том, что соперник тоже сделал и отправил свой ход. На втором этапе, соперники отправляют свои ключи на смарт контракт для расшифровки своих ходов. После этого, результат игры может быть расшифрован смарт контрактом и определён победитель.
Схема логики в студию!
Через три дня после начала работы, прототип игры уже был готов. Воодушевлённые, мы все тестировали игру в офисе, ещё не осознавая с какими сложностями нам предстоит столкнутся в дальнейшем. Прототип позволял отправлять зашифрованные ходы, слушать поступление хода соперника и отправлять приватные ключи для определения победителя. Таким образом, мы на практике убедились, что идея жизнеспособна и может быть реализована в разумные сроки.
Как мы ошибались…
Следующие три недели прошли менее гладко. Выяснилось, что для осуществления каких-либо игровых действий, необходимо формировать подписанные транзакции в блокчен Ethereum. Для этого есть готовые решения, в виде браузерного плагина Metamask–ethereum кошелька. Поднимать собственный кошелек внутри игры не стали. Из-за этого сразу отвалился вариант мобильной версии игры, для мобильных браузеров. На них пока нет возможности устанавливать плагины. Большой проблемой было, и до сих пор частично остается, определение игрового состояния в отдельно взятый момент времени, при перезагрузках страницы или при переключении между столами. Не забывайте, что мы работаем не с сервером, на котором, такая проблема решается элементарно, а с блокчейном, получать информацию откуда приходится довольно экзотично.
Мы постоянно слушаем ряд игровых событий, таких как присоединение соперника, начало ходов, завершение ходов и прочие. Мы так же постоянно отправляем запросы на получение некоторой игровой информации, например, текущий счёт, время начала раунда и других. Причём большинство игровых состояний определяются не одним событием, и не одной переменной, а наложением сразу нескольких событий с некоторыми переменными – результатами прямого получения данных из блокчейна. Например, ситуация, когда игра идёт до двух и более побед, и когда на третьем раунде пришло время отправки приватных ключей. Приходится отслеживать, что игра началась, подключился соперник, прошло три раунда, и прошла отправка зашифрованных ходов с обоих сторон. Попробуйте перезагрузить страницу в этот момент и приходится восстанавливать заново все взаимосвязи с блокчейном.
Каждый запрос или получение информации происходит асинхронно. Задержки накладываются одна на другую и в результате, приложение работает ощутимо медленнее серверного варианта. Не дай Бог при этом какие-то неполадки со стабильным соединением. Если что-то упустить, состояние игры вообще не восстанавливается, и самое обидное, что в такой ситуации ничего нельзя сделать, чтобы помочь игроку, разъяснить ситуацию. Только повторная перезагрузка страницы, чаще всего, может решить подобные неувязки на клиенте. В какой-то момент судьба проекта в изначально запланированном виде оказалась под угрозой провала. Появились мысли урезать игру, отказавшись от более чем одного игрового раунда. Мы подумали, что если бы игра шла всегда до одной победы, было бы проще не запутаться и ничего не упустить. Другим возможным выходом могло бы быть закрытие возможности переключения между несколькими столами. Такая возможность была сделана для заполнения утомительного время ожидания хода соперника – можно играть на нескольких столах параллельно. Делай ход на одном, пока на другом идёт ожидание.
К счастью, удалось не идти на эти вынужденные меры – причину мы нашли, глючный wifi роутер в офисе, и ситуация более менее улучшилась.
В итоге проект состоялся практически в изначальном виде. Основной целью проекта является популяризация блокчейн технологии и развлечение. Для участия в ней, человеку предстоит освоить для себя азы мира криптовалюты – создание кошелька, получение тестового эфира, совершение транзакций, шифрование, адреса кошельков, типы сетей и прочее. Помимо этого, сам процесс игры на блокчейне, немного отличается по своему пользовательскому опыту больше в негативную сторону – время ожидания порой бывает утомительным. При большой комиссии тестового «газа» время хода занимает от 15 до 20секунд, в то время как при маленькой комиссии, время хода может занимать от 7 до 11 часов. Но мы относимся к этому с оптимизмом, т.к. верим в дальнейшее совершенствование этой технологии и расширение возможностей её повсеместного применения. Насколько своевременно появление данного проекта? Исходя из заявленной цели – вполне своевременно, исходя из уровня развития технологии – скорее преждевременно.
Не буду раскрывать, какие ещё варианты мы рассматривали на обсуждении, но споров, дебатов и веселья было много. Одни были слишком абсурдные, другие довольно сложные, третьи вовсе не подходили под блокчейн технологию. На обсуждении была парочка вполне серьезных вариантов, которые, вполне возможно, увидят свет в ближайшее время.
Идея создать игру «камень, ножницы, бумага» в начале подверглась жесткой критике со стороны наших специалистов по безопасности. Их главный аргумент заключался в том, что в блокчейне Ethereum невозможно ничего скрыть, вся информация находится в публичном доступе. То есть, опытный человек, может посмотреть, какой ход сделал его оппонент раньше, чем сделать свой ответных ход. Даже тот факт, что переменная, в которой хранится ход не находится в публичном доступе, не остается препятствием для её обнаружения. Очевидным решением стало использование sha3 шифрования данных с двухшаговым раскрытием ключей.
На первом этапе клиент отправляет свой ход, зашифрованный случайно сгенерированным им же ключом. Затем, дожидается подтверждения со стороны смарт контракта, о том, что соперник тоже сделал и отправил свой ход. На втором этапе, соперники отправляют свои ключи на смарт контракт для расшифровки своих ходов. После этого, результат игры может быть расшифрован смарт контрактом и определён победитель.
Схема логики в студию!
Через три дня после начала работы, прототип игры уже был готов. Воодушевлённые, мы все тестировали игру в офисе, ещё не осознавая с какими сложностями нам предстоит столкнутся в дальнейшем. Прототип позволял отправлять зашифрованные ходы, слушать поступление хода соперника и отправлять приватные ключи для определения победителя. Таким образом, мы на практике убедились, что идея жизнеспособна и может быть реализована в разумные сроки.
Как мы ошибались…
Следующие три недели прошли менее гладко. Выяснилось, что для осуществления каких-либо игровых действий, необходимо формировать подписанные транзакции в блокчен Ethereum. Для этого есть готовые решения, в виде браузерного плагина Metamask–ethereum кошелька. Поднимать собственный кошелек внутри игры не стали. Из-за этого сразу отвалился вариант мобильной версии игры, для мобильных браузеров. На них пока нет возможности устанавливать плагины. Большой проблемой было, и до сих пор частично остается, определение игрового состояния в отдельно взятый момент времени, при перезагрузках страницы или при переключении между столами. Не забывайте, что мы работаем не с сервером, на котором, такая проблема решается элементарно, а с блокчейном, получать информацию откуда приходится довольно экзотично.
Мы постоянно слушаем ряд игровых событий, таких как присоединение соперника, начало ходов, завершение ходов и прочие. Мы так же постоянно отправляем запросы на получение некоторой игровой информации, например, текущий счёт, время начала раунда и других. Причём большинство игровых состояний определяются не одним событием, и не одной переменной, а наложением сразу нескольких событий с некоторыми переменными – результатами прямого получения данных из блокчейна. Например, ситуация, когда игра идёт до двух и более побед, и когда на третьем раунде пришло время отправки приватных ключей. Приходится отслеживать, что игра началась, подключился соперник, прошло три раунда, и прошла отправка зашифрованных ходов с обоих сторон. Попробуйте перезагрузить страницу в этот момент и приходится восстанавливать заново все взаимосвязи с блокчейном.
Каждый запрос или получение информации происходит асинхронно. Задержки накладываются одна на другую и в результате, приложение работает ощутимо медленнее серверного варианта. Не дай Бог при этом какие-то неполадки со стабильным соединением. Если что-то упустить, состояние игры вообще не восстанавливается, и самое обидное, что в такой ситуации ничего нельзя сделать, чтобы помочь игроку, разъяснить ситуацию. Только повторная перезагрузка страницы, чаще всего, может решить подобные неувязки на клиенте. В какой-то момент судьба проекта в изначально запланированном виде оказалась под угрозой провала. Появились мысли урезать игру, отказавшись от более чем одного игрового раунда. Мы подумали, что если бы игра шла всегда до одной победы, было бы проще не запутаться и ничего не упустить. Другим возможным выходом могло бы быть закрытие возможности переключения между несколькими столами. Такая возможность была сделана для заполнения утомительного время ожидания хода соперника – можно играть на нескольких столах параллельно. Делай ход на одном, пока на другом идёт ожидание.
К счастью, удалось не идти на эти вынужденные меры – причину мы нашли, глючный wifi роутер в офисе, и ситуация более менее улучшилась.
В итоге проект состоялся практически в изначальном виде. Основной целью проекта является популяризация блокчейн технологии и развлечение. Для участия в ней, человеку предстоит освоить для себя азы мира криптовалюты – создание кошелька, получение тестового эфира, совершение транзакций, шифрование, адреса кошельков, типы сетей и прочее. Помимо этого, сам процесс игры на блокчейне, немного отличается по своему пользовательскому опыту больше в негативную сторону – время ожидания порой бывает утомительным. При большой комиссии тестового «газа» время хода занимает от 15 до 20секунд, в то время как при маленькой комиссии, время хода может занимать от 7 до 11 часов. Но мы относимся к этому с оптимизмом, т.к. верим в дальнейшее совершенствование этой технологии и расширение возможностей её повсеместного применения. Насколько своевременно появление данного проекта? Исходя из заявленной цели – вполне своевременно, исходя из уровня развития технологии – скорее преждевременно.
Комментарии (9)
mister_pibodi
15.05.2018 10:09Плюс данной статьи (который я все ещё не поставил) в том, что можно по рабоче-крестьянски объяснить кому-нибудь, что за чудо-юдо блокчейн такой и что на нем можно сделать. Из всех возможных применений смарт контрактов самый лучший пример, который я знал, был тотализатор — получаешь свои деньги без обмана и лишних посредников. А тут выяснилось, что можно и игру сделать, только не зуефа, конечно же, а что-нибудь поинтереснее
andi_89 Автор
16.05.2018 22:12Всем спасибо за комментарии. Пишу вторую часть, где будет подробно расписана техническая составляющая.
AkshinM
данная статья вызвала у меня чувство недоумения и разочаровния. аргументирую:
такое ощущение как будто у вас в офисе был такой диалог:
Не обижайтесь, труд каждого человека ценен, не смотря на то, что оно может быть потрачено не в совсем полезное дело, но тем не менее, извините, но данная статья слишком слаба для хабра, я даже скажу бесполезна. Нет никакой технической информации. Пару картинок — в всё? Такого типа рассказ можно говорить с другом айтишником сидя к примеру в баре или где-то еще. Но на статью это не годится. Вы же понимаете, что читатели данной статьи прежде всего должны получить пользу от ее прочтения? Прочитав данную статью мне показалось что я был «забайчен» и потерял драгоценное время…
kozyabka
Брался несколько раз писать комментарий, но удалял. А вы вот написали в такой очень мягкой форме!
(пока писал из -4 стало +2, удивительно кому может нравиться такой пустой, рекламный контент)
AkshinM
мне кажется грубить никогда никому не надо. грубый ответ может задизморалить человека, он будет в обиде, что ли. можно просто спокойно дать понять, что такого рода статьи не есть хорошо, что даст мотивацию на написание качественного контента в будущем. кто знает может следующая статья автора будет шедевром..., но сие творение шедевр с обратной стороны)))