В апреле 2018 года внутри нашей компании возникла идея выпустить нашу игру на смарт-контракте блокчейна Ethereum. Подумав несколько дней и перебрав несколько вариантов, мы остановились на хорошо знакомой всем нам с детства игре «Камень, ножницы, бумага».
Не буду раскрывать, какие еще варианты мы рассматривали в ходе обсуждения, но споров, дискуссий и веселья было много.
Некоторые из них были слишком абсурдными, другие — довольно сложными, а третьи вообще не подходили для технологии блокчейн.
Обсуждалась пара очень серьезных вариантов, которые, вполне возможно, увидят свет в ближайшем будущем.
Идея создания игры «камень-ножницы-бумага» изначально подверглась резкой критике со стороны наших экспертов по безопасности.
Их главным аргументом было то, что в блокчейне Ethereum невозможно ничего скрыть; вся информация общедоступна.
То есть опытный человек может посмотреть, какой ход сделал его противник, прежде чем сделать свой ход. Даже тот факт, что переменная, в которой хранится ход, не является общедоступной, не остается препятствием для ее обнаружения.
Очевидным решением было использовать шифрование данных sha3 с двухэтапным раскрытием ключа.
На первом этапе клиент отправляет свой ход, зашифрованный случайно сгенерированным ключом.
Затем он ожидает подтверждения от смарт-контракта о том, что противник также сделал и отправил свой ход. На втором этапе оппоненты отправляют свои ключи в смарт-контракт для расшифровки своих ходов.
После этого результат игры можно расшифровать по смарт-контракту и определить победителя.
Логическая схема в студию!
Через три дня после начала работы прототип игры был готов.
Воодушевленные, мы все тестировали игру в офисе, еще не представляя, с какими трудностями нам предстоит столкнуться в будущем.
Прототип позволял отправлять зашифрованные ходы, прослушивать ход противника и отправлять закрытые ключи для определения победителя.
Таким образом, мы на практике убедились, что идея жизнеспособна и может быть реализована в разумные сроки.
Как мы ошибались.
Следующие три недели прошли менее гладко.
Оказалось, что для осуществления любых игровых действий необходимо генерировать подписанные транзакции в блокчейне Ethereum. Для этого есть готовые решения в виде плагина для браузера Metamask–ethereum Wallet. Свой кошелек внутри игры они не поднимали.
Из-за этого сразу отвалилась версия мобильной версии игры для мобильных браузеров.
На них пока нет возможности установить плагины.
Большой проблемой было и частично остаётся до сих пор определение состояния игры в отдельный момент времени, при перезагрузке страницы или при переключении между столами.
Не забывайте, что мы работаем не с сервером, на котором элементарно можно решить такую задачу, а с блокчейном, получить информацию из которого достаточно экзотично.
Мы постоянно прослушиваем ряд игровых событий, таких как присоединение соперника, начало ходов, окончание ходов и другие.
Также мы постоянно отправляем запросы на некоторую игровую информацию, например, текущий счет, время начала раунда и другие.
При этом большинство состояний игры определяются не одним событием и не одной переменной, а суперпозицией сразу нескольких событий с некоторыми переменными — результатами прямого поступления данных из блокчейна.
Например, ситуация, когда игра идет до двух и более побед, и когда в третьем раунде пришло время отправить приватные ключи.
Нам предстоит отследить, что игра началась, соперник подключился, прошло три раунда и с обеих сторон отправлены зашифрованные ходы.
Попробуйте в этот момент перезагрузить страницу и вам придется заново восстанавливать все связи с блокчейном.
Каждый запрос или получение информации происходит асинхронно.
Задержки накладываются друг на друга и в результате приложение работает заметно медленнее серверной версии.
Не дай бог будут проблемы со стабильным соединением.
Если что-то пропустить, состояние игры вообще не восстанавливается, и самое обидное, что в такой ситуации ничем нельзя помочь игроку, прояснить ситуацию.
Только перезагрузка страницы, чаще всего, может решить подобные проблемы на клиенте.
В какой-то момент судьба проекта в его первоначально запланированном виде оказалась под угрозой провала.
Были мысли сократить игру, отказавшись от более чем одного игрового раунда.
Мы подумали, что если бы игра всегда шла до одной победы, было бы легче не запутаться и ничего не упустить.
Другим возможным решением было бы закрыть возможность переключения между несколькими таблицами.
Эта функция создана, чтобы заполнить утомительное время ожидания хода оппонента – вы можете играть на нескольких столах параллельно.
Сделайте ход на одном, ожидая другого.
К счастью, нам удалось не пойти на эти вынужденные меры — мы нашли причину, глючный Wi-Fi роутер в офисе, и ситуация более-менее улучшилась.
В результате проект состоялся практически в первозданном виде.
Основная цель проекта — популяризация технологии блокчейн и развлечений.
Чтобы принять в нем участие, человеку придется освоить основы мира криптовалют – создание кошелька, получение тестового эфира, совершение транзакций, шифрование, адреса кошельков, типы сетей и т. д. Кроме того, процесс игры на Сам блокчейн немного отличается по пользовательскому опыту, скорее в отрицательную сторону — время ожидания иногда может быть утомительным.
При большой комиссии проверки «газа» время хода занимает от 15 до 20 секунд, а при малой комиссии время хода может занимать от 7 до 11 часов.
Но мы настроены оптимистично, потому что.
Мы верим в дальнейшее совершенствование этой технологии и расширение возможностей ее широкого использования.
Насколько своевременно появление этого проекта? Исходя из заявленной цели - вполне своевременно, исходя из уровня развития технологий - довольно преждевременно.
Ссылка на вторую часть Теги: #блокчейн #Ethereum #solidit #смарт-контракты #смарт-контракты #разработка игр #Разработка игр #Solidity #Solidity
-
Мне Нравятся Картонные Человечки
19 Oct, 24 -
Css Github
19 Oct, 24