Pull to refresh

Как мы игру «Камень – ножницы – бумага» на блокчейне Ethereum делали

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

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

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

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




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

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



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

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

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

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



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

Ссылка на вторую часть
Tags:
Hubs:
Total votes 29: ↑9 and ↓20-11
Comments10

Articles