Пишем блокчейн игру на Solidity

Напишем смарт-контракт всем известной игры «Камень, ножницы, бумага». Контракт будет иметь свой нативный токен, которым будут вестись все расчеты между участниками, игра будет на внутренние токены, смарт-контракт напишем для сети Polygon исключительно из соображений экономии комиссии за деплой контракта, это обойдется нам меньше 1$, в то время как в Ethereum комса встать может нам в 200$.
Тут мы напишем сам смарт-контракт без его последующей интеграции в какой-то UI, то-есть взаимодействовать с ним можно будет только по средствам вызова нужных функций. Часть где мы будем использовать данный смарт контракт вместе с например телеграм ботом или какой-то вебкой я опишу отдельно.
Вкратце о контракте
Будем наследоваться от смарт-конракта токена ERC20 предоставленным командой OpenZeppelin. Будет функции установки стоимости игры, просмотр истории игр, с каждого купленного взноса будет удерживаться 10% на джекпот или комсу) по итоку победитель возвращает ticket price * 2 player * 0.8.
Сам контракт можно писать в разных IDE, например в VSCode, но лично я предпочитаю remix, это online IDE в которой можно сразу деплоить наш контракт как в тестнет так и мэиннет, дебажить и использовать разные версии компилятора.
Создадим новый файл RSP.sol, и пропишем версию solidity, импортируем контракт ERC20 для нашего нативного токена и создадим контракт унаследовав ERC20
Объявим наши переменные для дальнейшей работы
Создадим конструктор, по сути это функция которая выполняется один раз при деплое смарт-контракта и полезна нам тем, что в ней мы задами стартовые дефолтные настройки для игры, так же там кажем нашего владельца контракта, который в дальнейшем сможет, например изменить стоимость входа в игру.
И заминтим от общего кол-ва токенов, а это у нас 1000 RSP токенов, на два адреса. Первый адрес контракта на него мы выпустим 20% от общего кол-ва, а второй адрес, это адрес владельца контракта, на него мы отправим 80% всех токенов RSP.
Данный контракт можно уже задеплоить в сеть, и обнаружить что на наш адрес кошелька уже упали наши токены, но наша ведь задача не в этом, поэтому продолжаем накидывать г*вно на вентилятор и расширять наш функционал.
Создадим простые геттеры, чтобы можно было получить из нашего будущего приложения какие-то данные, например стоимость игры или историю игр, да на крайний случай проверить себя в списке игроков в случае участия по идентификатору игры. Все функции имеют public модификатор, что дает возможность делать запросы из вне.
Возможно нам потребуется изменить стоимость игры, не создавать же нам новый смарт-контракт для этого. Напишем сеттер для стоимости входного билета
Теперь напишем функцию приема платежа за игру и передачи в нее, собственно, действия, а действий у нас 3: это камень, ножницы или бумага.
В данную функцию будут передаваться 2 параметра, это сумма и действие. Из проверок после вызова это то, что передаваемая сумма соответствует стоимости билета, нам лишнего не надо, но и если денег нет — простите). Так же проверка на передаваемое действие, ограничимся условными 1, 2 или 3. После на адрес контракта от игрока мы переводим стоимость игры заданную ранее, и проверяем на количество игроков на данный момент в принимающих участие. Наша игра подразумевает 2 игрока, поэтому когда игрок только 1, то необходимо просто выйти из функции зарегистрировав игрока. В случае, если вы уже второй игрок, то логично было бы сразу инициализировать процесс выбора победителя и расчета ревардов.
Реализуем функцию calculateWinner(), которая будет рассчитывать кто же все таки победил в этом раунде. Передаем в нее действие первого игрока и действие второго игрока, а дальше все просто:
— камень бьет ножницы
— ножницы бьют бумагу
— бумага бьет камень
и возвращаем число 0 в случае победы игрока под номером 1, число 1 в случае победы игрока под номером 2, ну а когда будет ничья мы будем возвращать -1
После того как определили победителя у нас идет вызов функции распределения ревардов setWinner(). Если в данной игре есть победитель, то на его счет упадут токены рассчитанные по формуле (gameCost() * 2) / 100 * 90, это 90% от стоимости двух входных билетов, оставшиеся 10% летят в наш банк, можно реализовать супер лотерею на которой будет один или несколько счастливчиков, либо оставить в виде комиссии. Реализации в данном контексте нет, остаток просто оседает на адресе контракта. В случае когда победителей нет, мы честно возвращаем стоимости билетов без издержек.
Напоследок создадим модификатор. Модификатор хорош тем что мы в нем можем прописать кучу различных условий и применить к функции не засоряя код и делая его более френдли. Данный модификатор как пример мы используем на функции установки стоимости за участие в игре, к функции после модификатора public мы добавим название своего модификатора onlyContractOwner. По сути при вызове функции установки стоимости будет проверяться является ли адрес владельцем контракта, но вы можете прописать любые правила.
Как написать игру в блокчейне на смарт-контрактах Solidity. Создание персонажа
Можно предположить, что в относительно недалеком будущем человечество сможет увидеть, как цифровые монеты полностью заменят бумажные купюры, а договоры и сделки вместо нотариального заверения будут проходить через смарт-контракты. О последнем и зайдет речь в этой публикации. Но сначала предлагаю немного углубиться в теорию о смарт-контрактах, о блокчейне, а также коротко о фундаменте, на котором контракты программируются. И уже после небольшой лекции можно перейти к практике и создать свой контракт.
Что такое смарт-контракт и как он работает?

Смарт-контракт – это цифровой договор, находящийся в блокчейне, который состоит из программного кода и выполняет заранее заданные условия. Контракты следят за тем, чтобы между некоторыми заинтересованными сторонами операция по сделке выполнялась корректно. Они созданы для уменьшения влияния на транзакцию третьими лицами и в теории для полного устранения человеческого фактора и посредников, то есть для увеличения безопасности и скорости в транзакциях.
Простой пример аналога смарт-контракта. Существует такой онлайн-маркет, где сам магазин является посредником между покупателем и продавцом. Чтобы покупатель был уверен в том, что его не обманут и что товар придет в целости и сохранности, магазин удерживает сумму, уплаченную клиентом, пока товар не попадет ему в руки. Только после получения товара, деньги уходят продавцу. Правда, с учетом процента, уплаченного за работу маркета.
А что будет, если посредником станет Смарт-контракт? Тогда будет существовать такой программный код, который полностью автоматизирует проверку всех условий выполнения обязательств двух сторон в онлайн магазине. Только при выполнении всех требований, данная операция считается успешной. Причем всю проверку исполняет сам контракт, от того, какую сумму внесли, и до того, где находится товар. По итогу к таким сделкам нет необходимости привлекать юристов и третьих лиц, это означает, что будет сэкономлено много времени и средств.
- Безопасность
Конечно всё зависит от сложности условий контракта, но если соблюдены все формальности и весь необходимый функционал, то такой смарт-контракт будет в разы безопаснее, чем даже договор на бумаге. Взлом смарт-контрактов практически невозможен. - Автономность
Что делать, если юрист или нотариус ночью не работает? Придется ждать до утра. Но если бы договор проходил по смарт-контракту, то ждать бы не пришлось. У умных контрактов нет обеда и нет необходимости во сне, он выполняет свою задачу, когда это необходимо. - Низкие комиссии или их отсутствие
Юристу придется заплатить гораздо большую сумму, чем если работать через смарт-контракт. Например, в приложениях Dapp взымается комиссия (Gas), и она зависит от объема обрабатываемого кода. То есть, чем сложнее код, тем больше будет Gas. Но, как бы то ни было, комиссия будет всё равно ниже, чем за услуги юриста или нотариуса. - Быстрое выполнение транзакций
К автономности стоит добавить и скорость обработки транзакций сторон. Понятно, что скорость вычислительных машин по сравнению с человеческими в разы выше, что и делает процессы выполнения контрактов быстрее.
Что такое блокчейн?

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

Виды цифровых данных могут быть как финансовыми, так и нефинансовыми (например, изображения, текст, музыка и т.д). В этой публикации данными будут являться смарт-контракты.
Каждый пользователь в блокчейн-сети имеет доступ к децентрализованной базе данных. При этом в блокчейне хранятся не сами данные, а записи о транзакциях в их временной последовательности. Каждая новая запись проверяется на подлинность. Для того, чтобы ее внесли, необходимо подтверждение участников сети. Записи группируются в блоки, которые объединяются в цепочки. Данные, попавшие в блокчейн, нельзя изменить или удалить, не нарушив целостность цепи блоков.
На каком IDE сде лать свой смарт-контракт?

Выбор сделан на один из самых популярных языков программирования для создания собственных смарт-контрактов – Solidity. Это объектно-ориентированный язык программирования, созданный в рамках проекта Ethereum.
Чтобы начать программировать, имеется достаточное количество IDE, в которых можно запускать и компилировать контракты Solidity:
-
(Выбран в примере); ; ; ; ; ; ; ; ; .
Мой выбор пал на IDE Remix. Удобен он тем, что его можно использовать не только как desktop-приложение, но и как приложение через браузер.
Запуск и отладка смарт-контрактов — самое важное для обеспечения оптимизации и безопасности в разработке, а такой базовый функционал в Remix имеется.

Программирование на Solidity. Создание персонажа для игры
Теперь уйду от базовой теории. Представьте себе фантастический средневековый мир, где среди ужасных монстров существуют сильные и смелые герои, которые созданы для борьбы со злом.
В этой вводной теме будет реализован контракт, генерирующий героев по имени. Также разработаю функцию для работы с внешним приложением.
Первый контракт можно создать, начиная с самых азов:
Что-то похожее на объявление классов, contract – это основной блок для создания приложений и логики на Ethereum.
pragma solidity ^0.4.19; — это функция объявления версии компилятора Solidity.
Целочисленные переменные
Теперь добавлю целочисленную переменную, хотя здесь не всё так просто. Существуют несколько типов целочисленных типов:
- uint или uint256
- uint8
- uint16
- uint32
- И т.д
Но обычно используют обычный uint, лишь в особенных случаях используют другие.
Были объявлены две целочисленные переменные, которые равны числу и результату математической операции над числом и переменной. Что за операция «**»? Ответ прост: это возведение числа в степень, то есть 10 в степени 16 по примеру. О других типах переменных можно почитать в официальном руководстве.
В итоге были созданы две целочисленные переменные, где uint dnaDigits – ДНК героя, которая определяется числом из 16 цифр. Переменная uint dnaModulus будет использоваться для проверки размерности ДНК.
Структура
struct – структура, требуется для более сложных типов данных.
Создам заготовку персонажа с характеристиками: имя, уровень, сила, ловкость, интеллект.
Теперь, когда структура создана, ее можно вызывать как тип переменной и устанавливать ей необходимые значения.
Массивы
С массивами в Solidity достаточно легко работать, отличий от других языков программирования немного.
Создам массив героев:
Если задать public , то Solidity автоматически создаст для переменной функцию геттер, что позволит другим контрактам читать данные этой переменной (но не записывать в неё).
Public — это модификатор для функций, он может быть вызван откуда угодно.
Подробнее о видах модификаторов видимости можно прочитать здесь.
Функции
Инициализирую функцию, которая будет создавать и добавлять в массив новых героев:
Первая особенность, которую советуют соблюдать разработчики Solidity, добавлять нижнее подчеркивание перед переменными в параметрах функций, чтобы отличать их от глобальных.
Вторая особенность — перед названием функции ставить нижнее подчеркивание, как и в параметрах функции. Название тоже стоит прописывать с нижним подчеркиванием, но только если функция является закрытой, то есть private.
Третья особенность — в отличие от других языков программирования, ключевые слова ставятся после объявления параметров функции.
Keccak256 и преобразование типов данных
Теперь, чтобы создать уникального героя, ему необходимо присвоить случайный ДНК типа uint. В Ethereum есть встроенная хэш-функция keccak256, по-русски произносится как «кечак». Такая функция преобразовывает строку в случайное 256-битное шестнадцатиричное число, в моем случае строкой будет имя персонажа. И если изменится хотя бы буква в имени, то хэш будет полностью изменен.
Создам функцию для генерации ДНК:
returns (uint) – ключевое слово с параметром типа вывода.
Во второй строке было произведено преобразование типов данных функцией uint().
Теперь соберу всё вместе. Чтобы создать случайно сгенерированного персонажа, осталось собрать написанное ранее в одну функцию. Она будет принимать всего лишь имя героя типа string.
События
Вроде собрал свой контракт, теперь как его запустить? Для этого существуют ивенты (события), которые используются как способ сообщить внешнему интерфейсу приложения о том, что в блокчейне произошло какое-то действие.
Теперь внешнее приложение сможет услышать наше событие и выполнить действие. Но в дальнейшем, для развития проекта, нужно иметь индивидуальный идентификатор (id) созданного героя. Для этого была создана такая переменная, которая будет брать номер последнего созданного героя, находящегося в массиве heroes.
Как выглядит функция на JavaScript, которая реагирует на событие:
Заключение
Первый контракт Solidity готов! Теперь предстоит написать внешний интерфейс приложения на Javascript, который будет взаимодействовать с нашим смарт-контрактом. В Ethereum есть библиотека Javascript под названием Web3.js.
В следующей публикации подробно продемонстрирую, как развернуть контракт и настроить Web3.js.
Пишем за выходные блокчейн-игру на смарт-контрактах Rust

Сейчас регулярно выходят анонсы про NFT-metaverse-блокчейн-игры, которые привлекали инвестиции в миллионы долларов по оценке в миллиарды, но при изучении проектов там оказываются либо плашки Coming Soon, либо продажа JPG-картинок на аукционах NFT-токенов, либо централизованные проекты с гомеопатическими дозами блокчейна. Перед тем, как окрестить это всё пузырем хайпа, я решил разобраться в технологическом стеке самостоятельно и сделать свою блокчейн-игру с NFT, потратив минимум ресурсов. Читайте под катом как у меня это получилось всего за 2 дня, а также покупайте мои NFT (нет).
Главные критерии создаваемый игры для меня были такие:
Победа определяется умением, а не рандомом
Возможность играть против живых людей на реальные деньги
Проблемы, которые надо было решить:
Доверие. Перед тем как поставить деньги на кон, игрок должен быть уверен, что он точно получит банк в случае победы, а правила игры не будут изменены.
Простота. Если сложно ввести/вывести деньги или разобраться в игре, это сужает круг игроков.
Нехватка личных ресурсов. Мне надо это сделать с минимальными временными затратами и, желательно, без юридических последствий.
Делать свой прием платежей не пришлось, ведь в блокчейне каждый аккаунт автоматически является кошельком. Если игру целиком засунуть в смарт-контракт, то она получится бездоверительной, так как не требует сервера/бекэнда и следовательно не подразумевает наличия центра доверия. Нужно лишь доверять коду. Игроки отправляют все свои действия в смарт-контракт, тот их обрабатывает и в конце принимает решение, кто выиграл, а потом автоматически выплачивает приз.
Смарт-контракт (или децентрализованное приложение, dApp) — это некая автономная неизменяемая сущность (микросервис), которая работает в распределенной сети (блокчейне) и запускается в контейнерах на серверах валидаторов. Валидаторы финансово заинтересованы вести себя правильно и оставаться доступными. Таким образом пользователи игры могут довериться, что код сработает предсказуемым образом, а его автор не сможет сбежать с деньгами, выключив сервера.
На блокчейнах «первой волны» выполнять транзакции было довольно дорого, но в последние годы появилось немало решений с крайне дешевыми транзакциями, что-то вроде $0.001 за “ход” с временем подтверждения в 1 секунду. RTS или шутеры тут конечно, не построишь, но как минимум настольные и логические игры уже выглядят пригодными. Также использование новыми блокчейнами Wasm в качестве виртуальной машины позволяет нам не изобретать велосипед свою собственную игровую механику, а использовать что-то написанное раньше и выложенное в Open Source.
Я решил начать с обычной игры в шашки, по максимуму используя чужой готовый код. Открыл git, запустил поиск и взял первые ссылки из выдачи: готовый код для логики игры (rusty-checkers) и JS UI для фронтенда (checkers).

Делаем смарт-контракт
Само децентрализованное приложение я сделал на блокчейне NEAR, развернув проект через create-near-app, в папку для контракта я скопировал весь код из rusty-checkers, добавил в главную библиотеку lib.rs импорт файлов игры, заменил функции вывода (долой println! ), убрал методы для stdin и stdout и по минимуму обновил код согласно велениям времени, например, принудительно дописал dyn для всех Trait объектов. В общем, смиренно подчинился всем требованиям великого и ужасного компилятора Rust и меньше чем через полчаса мой код уже компилировался. Пришло время обновить логику.
Как было
Старая функция main() работала примерно так:
Рисуется игровое поле
Запускается цикл, игрока просят сделать ход, читая его с клавиатуры и проверяя на валидность.
Ход обрабатывается, если всё ок, то меняется состояние игры
Производится проверка, если есть проигравший, то цикл прерывается
Как стало
Этот код я сократил до функции make_move, которой в качестве входного параметра передается game_id и line (строка с ходом, ведь клавиатуры в блокчейне у нас нет). Далее мы:
Считываем игру из состояния смарт-контракта
Проверяем, что у аккаунта, вызывающего данный метод, есть право хода
Дальнейший код оставляем без изменений. Проверяем на валидность сделанный ход
Сохраняем игру в состояние смарт-контракта (объект games)
Функция отличается вот так (было -> стало)

Получается, что перед тем как сделать ход, контракт «читает» состояние игры, запускает написанную ранее в rusty-checkers механику проведения хода, а потом, если были изменения, записывает состояние доски назад в хранилище. Чтобы не хранить в блокчейне вычисляемые значения, создаем объект GameToSave, в котором находятся:
Player_1 , player_2 — имена аккаунтов игроков, reward — размер награды за игру и указание адреса контракта токена, в котором выплачивается награда, winner_index — индекс победителя (0/1), сам объект тут имеет тип Option , то есть может не иметь значения. Turns — количество сделанных в партии ходов, выводится на UI. Last_turn_timestamp — время сделанного последнего хода и total_time_spent — массив потраченного каждым игроком времени, для того, чтобы можно было принудительно остановить партию, если один из игроков потратил слишком много времени. Board — объект с игровой доской, current_player_index — индекс текущего игрока (0/1) оставлены из оригинального кода. BorshDeserialize , BorshSerialize — сериализации Borsh для Rust.
Что мы должны сохранять в состоянии контракта:
games — хешмап, где каждому GameId соответствует объект игры ( GameToSave ), рассмотренный выше.
available_players — хешмап игроков в листе ожидания, нужен для того, чтобы найти пару на игру. Для каждого аккаунта тут хранится объект VGameConfig.
Тут хранится deposit (сумма, которую игрок поставил на кон), first_move — настройки первого хода (выбранный заранее порядок или рандом) и opponent_id при необходимости сыграть лишь с конкретным оппонентом.
stats — хешмап со статистикой игроков, а также рефералла, пригласившего его.
available_games — массив с id игр, проходящих в данный момент
whitelisted_tokens — массив с адресами контрактов токенов, которые принимаются в качестве депозита,
next_game_id — id для следующей создаваемой игры
service_fee — процент, который сервис взимает в качестве комиссии с выигрыша.
Можно заметить, что в коде используется два разных хешмапа, один LookupMap и другой UnorderedMap , их отличие тут в том, что UnorderedMap поддерживает итерации и позволяет вывести, например, список всех активных игроков. Для LookupMap такой возможности нет, но у нас и нет необходимости «пробегать» в цикле все сыгранные игры, так как оппоненты будут запрашивать данные о своей игре по game_id , который они уже знают, а фронтэнды смогут считывать данные о текущих играх из небольшого объекта available_games . За счет отсутствия сериализации ключей, работа с объектом LookupMap обходится дешевле по потребляемому газу.
Также пришлось написать функцию для распределения награды, капитуляции, сохранения статистики, реферальную систему и другие вспомогательные методы. Но это уже больше «рюшечки» на будущее.
Делаем фронтэнд
С фронтендом получилось “разобраться” еще проще. Код на JS из взятой имплементации принимает игровое поле как объект 8 * 8, где 0 — пустая клетка, 1 и 2 — шашки игроков.
Чтобы сделать преемственность данных, я дописал свою функцию вывода игрового поля, которая переводит абстрактные классы шашек в такие же числа, а дамки (King) я закодировал отрицательными числами.
Пример кода для вывода поля
Далее потребовалось научиться считывать ходы, сделанные на моем форке UI в понятном для Rust-кода виде, разворачивать на 180 градусов доску для второго игрока, блокировать поле, пока к нужному игроку не перешел ход. Для интерактивности я обновляю игру по таймеру, благо вызовы чтения из блокчейна бесплатные. Это всё было сделано на максимально убогом JS-коде, ссылаться на него мне стыдно, хотя он и работает.
В качестве «клея» между смарт-контрактом и JS кодом фронтенда я использовал near-api-js, там можно инициализировать контракт, указать доступные методы и потом вызывать их с необходимыми параметрами в виде простых js-вызовов: осуществляющих чтение ( viewMethods ) и запись ( changeMethods ).
Потом запустить игру можно, например, вот так:
Где GAS_START_GAME — константа для прикладываемого к транзакции газа, а deposit — сумма ставки в токенах.
Итого процесс выглядит примерно так,
логинимся c помощью NEAR-аккаунта, автоматически регистрируем ключ, который способен взаимодействовать лишь с контрактом игры и не может переводить токены без подтверждения пользователя
Смотрим на игроков в листе ожидания и либо начинаем игру с одним из них, либо добавляемся в этот лист и ожидаем, пока выберут нас
Играем в шашки, делая по очереди ходы, UI отправляет наши действия в контракт через команду make_move , состояние фронтэнда синхронизируется с состоянием текущей игры, хранящимся в смарт-контракте. Таким образом получается, что любые «читы» на UI не имеют смысла.
Как только игра завершается, победитель получает все токены, поставленные на кон.
Добавляем NFT
Приправляем игру NFT-косметикой: если игрок купил NFT-токены со специального контракта то он и его соперники будут видеть графику из NFT на шашках этого игрока.
Имплементация NFT оказалась самой простой, тут я тоже задействовал чужой код, но на этот раз из core_contracts для блокчейна NEAR. Создал новый контракт и импортировал библиотеки:
Все базовые функции NFT сразу стали доступны в контракте, поэтому функция nft_mint для создания NFT всего лишь проверяет доступ текущего пользователя и вызывает стандартный метод, передавая туда данные для токена:
Чтобы уменьшить количество кода, я задействовал библиотеку web4 и добавил функцию генерирования css-файла для каждого отдельного токена, где задается название токена и аккаунт владельца токена.
Этот код выдает из NFT-контракта примерно такой css-стиль:
Осталось только добавить в интерфейс функцию, которая читает NFT-токены, хранящиеся на аккаунтах игроков и подгружает соответствующие им css-файлы.
Всё готово! Мы сделали игру, логика которой целиком хранится в смарт-контракте на блокчейне и где есть реальное использование NFT! Один ход в игре стоит
$0.006, что еще можно оптимизовать при желании.

Fork me on Github
Если вы захотите встроить в созданный мой контракт другие игры, то для этого надо подключить файлы с новой логикой от новой игры, заменить функцию make_move и сохранение/вывод игрового поля, и вуаля — вот вам готовые крестики-нолики, шахматы, го или более сложные настольные игры. Кто будет делать, пишите мне в телеграм, вместе поиграем!
Как создать блокчейн-приложение в 2023 году: Пошаговое руководство
Блокчейн проникает в отрасли, которые ранее не были с ним связаны, от финтеха до образования и здравоохранения. Согласно журналу Harvard Business Review, блокчейн — это безопасная и эффективная технология для автоматизации бизнес-процессов, защиты активов и проверки транзакций.
Создание приложения на блокчейне может казаться непростой задачей. Чтобы помочь вам разобраться в теме, команда специалистов Purrweb составила руководство по созданию блокчейн-приложения и оценила стоимость разработки.
Время чтения: 8 минут

Что такое блокчейн-приложения
Для начала давайте посмотрим на саму технологию. Блокчейн — это сеть, которая хранит поступившие в неё данные в блоках, собранные в хронологическом порядке. Как только транзакции проходят по сети, они становятся видимыми для всех участников системы. Блоки данных хранятся в цепочке, и как только они в неё добавляются, их нельзя изменить. Благодаря этому блокчейн крайне трудно взломать или украсть из него данные.

Как работает блокчейн
Блокчейн-приложения часто называют децентрализованными. Они основаны на одноранговых децентрализованных сетях https://academy.binance.com/ru/articles/peer-to-peer-networks-explained
и имеют уникальные функции, отличные от традиционных приложений. В блокчейне нет центрального органа управления, который играл бы роль посредника между пользователями, обменивающимися данными или деньгами.
В процессе разработки обычного приложения нужно запускать бэкенд на централизованных серверах. А бэкенд децентрализованных приложений работает в одноранговой сети.

Обычные и децентрализованные приложения
Пользователь не видит различий между блокчейн- и централизованными приложениями, так как интерфейсы у них создаются по одним принципам. Поэтому блокчейн-приложения не пугают даже новичков, и люди используют их как обычные цифровые продукты.
Обзор рынка блокчейн-приложений
Давайте посмотрим на внедрение блокчейн-технологий в цифрах и статистике.
-
Согласно State of the DApps https://www.stateofthedapps.com/stats

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

Диаграмма с типами блокчейн-приложений
Финансовые блокчейн-приложения

Схема финансовых блокчейн-приложений
DeFi приложения, сокращенно от англ. decentralized finance (децентрализованные финансы) — это инструменты для совершения денежных транзакций. К ним относятся децентрализованные биржи, обменники и другие приложения и блокчейн-платформы, предназначенные для операций с криптовалютой. Самые известные типы DeFi приложений:
Аукционы. Прозрачность — важнейший фактор при проведении онлайн-аукционов. Децентрализованные приложения позволяют гарантировать неизменность ставок и строго фиксировать время их совершения, исключая возможность каких-либо манипуляций. Аукционы могут работать с невзаимозаменяемыми токенами NFT, а на платформах можно создавать свои аукционы и размещать ставки в режиме реального времени.
Рынки прогнозов — это биржи, где объектом торговли выступает не товар, а результат какого-либо события, например, спортивного матча, соревнования или даже президентских выборов. Проведем аналогию с фьючерсным контрактом: торгуя фьючерсами, вы делаете ставку на рост или падение цены актива, а на рынке прогнозов — на победу, поражение или счет. В децентрализованном приложении пользователи могут не только голосовать за результаты событий, предлагаемые блокчейн-платформой, но и делать свои прогнозы.
Гейминг и азартные игры. В построенных на блокчейне play-to-earn (p2e) https://learn.bybit.com/ru/crypto/top-nft-games/
играх пользователи могут получать токены с реальной стоимостью во время игры, поэтому гейминг и азартные игры можно классифицировать как часть DeFi.
Основные проблемы гейминга и ставок — непрозрачность системы, риски, связанные с покупкой внутриигровых активов, и отсутствие контроля пользователя над его ставками. Блокчейн-технологии в индустрии игр обеспечивают надежное хранение средств пользователей, а взаимодействие с активами становится более прозрачным и понятным.
Одна из первых игр, CryptoKitties, была выпущена на платформе Ethereum в конце 2017 года, а уже в июле 2019 года децентрализованные приложения из этой категорий занимали топ-5 мест в рейтинге самых популярных блокчейн-приложений.
Нефинансовые блокчейн-приложения
Нефинансовые приложения, как следует из названия, не работают с денежными транзакциями. Наиболее известные типы — приложения для идентификации пользователей и совместного пользования диском и вычислительной мощностью. Рассмотрим их подробнее.
Сервисы для идентификации пользователей становятся все более актуальными с развитием дистанционного оказания услуг, например, онлайн-банкинг. Децентрализованные приложения обеспечивают безопасное и надежное хранение пользовательских данных. Только сам пользователь имеет доступ к своим данным, личная информация надежно зашифровывается, а для анонимности предоставляется уникальный адрес или идентификационный номер. Для финансовых организаций это тоже выгодно, так как благодаря проверке личности повышается прозрачность и честность сделок. Один пользователь не может создать несколько профилей, верифицированных при помощи процесса проверки « Знай своего клиента https://advapay.eu/ru/chto-takoje-znaj-svojego-klienta-kyc/
» (англ. Know your customer, KYC).
Сервисы для совместного использование дисков или вычислительной мощности. Автономные хранилища данных и сети связи предоставляют пользователям токены, которые можно обменять или получить в обмен только на пространство на диске или вычислительную мощность для компьютера. Основные преимущества — анонимность, прозрачность и безопасность. SAFE Network была первым сервисом такого типа; она использует токены Safecoin, которые нигде не продаются.

Глобальная децентрализованная сеть для обеспечения безопасности облачного хранилища
Децентрализованные автономные организации (ДАО)
Децентрализованные автономные организации (ДАО) — весьма амбициозные приложения в криптомире. Их цель — создать компании без лидеров. На этапе разработки создается регламент, устанавливающий, как участники могут присоединяться, голосовать или выпускать токены и распределять средства компании. В криптоиндустрии работа ДАО основана на смарт-контрактах, поэтому основная инфраструктура появилась благодаря сети Ethereum.
Важно обратить внимание на то, что ДАО — это не платформа, а система управления. Например, неправильно было бы назвать криптобиржу Uniswap ДАО, но ее децентрализованная система управления — это ДАО. Автоматизация управления помогает избавиться от штата сотрудников, юристов и бухгалтеров, а также свести к минимуму человеческий фактор и коррупцию.

Uniswap Governance — это ДАО
Если вас заинтересовал какой-либо тип приложений, мы можем поделится экспертным мнением о его разработке. Команда Purrweb может создавать децентрализованные приложения, включая приложения для передачи данных, облачные хранилища, торговые площадки и многое другое. Мы умеем работать с децентрализованными системами и писать смарт-контракты, а еще у нас есть опыт работы с криптокошельками, о котором вы можете узнать здесь .
Топ-3 блокчейн-приложения
Согласно данным DappRadar https://dappradar.com/rankings
, самые популярные по количеству пользователей приложения относятся к игровому сектору, но ещё есть DeFi приложения и маркетплейсы, которые вошли в топ в 2022 году. Давайте рассмотрим их особенности.
Alien Worlds
Alien Worlds https://alienworlds.io/
— это метавселенная NFT, построенная на блокчейне WAX. Пользователи могут взаимодействовать с невзаимозаменяемыми коллекционными предметами и торговать внутриигровыми картами. Платформа предлагает стейкинг — получение вознаграждений за размещение средств на блокчейн-кошельке в течение определенного времени. Также у Alien Worlds есть уникальные децентрализованные автономные организации, в которые пользователи могут вступить.
Скриншот NFT метавселенной Alien Worlds с графиками активности пользователей
PancakeSwap
— децентрализованная биржа, основанная на Binance Smart Chain (BSC). Она была запущена блокчейн-системой Binance в сентябре 2020 года. На платформе пользователи могут торговать, зарабатывать и выигрывать криптовалюту. Средства биржи составляют более 4,1 миллиарда долларов, и она регулярно упоминается в новостях.

Безопасная, быстрая и удобная конвертация токенов
Splinterlands
Карточная игра Splinterlands https://splinterlands.com/
была запущена 25 марта 2021 года и быстро набрала более 185 тысяч пользователей. В игре можно получить реальную прибыль, используя уникальные внутриигровые активы, которыми можно торговать и обмениваться. Пользователи собирают колоды карт и участвуют в сражениях или конвертируют карты в криптовалюту.

Карточная игра, основанная на NFT токенах
Больше последних новостей отрасли вы можете найти в отчете DappRadar Blockchain Industry Report https://dappradar.com/blog/dappradar-blockchain-industry-report-august-2022
за август 2022 года.

Cамые популярные приложения Dappradar
Преимущества блокчейн-приложений

Преимущества блокчейн-приложений
Блокчейн-приложения приносят ощутимую пользу — снижают операционные расходы бизнеса и повышают безопасность и автономию пользователей. Приложения дают больше контроля над финансами и обеспечивают надежное хранение и защиту данных, так как пользователям не нужно доверять посторонним личную информацию. Давайте рассмотрим основные преимущества блокчейн-приложений, которые привлекают пользователей.
Прозрачность
В любой момент пользователи могут узнать, как работает блокчейн-приложение, благодаря прозрачности системы — все операции сохраняются в открытом журнале учета. Прозрачность часто становится причиной выбора таких приложений. Например, разработка блокчейн-приложения может помочь двум компаниям, заинтересованным в доверительном и открытом сотрудничестве, выйти на новый уровень без дополнительных расходов.
Безопасность
Децентрализованные приложения по умолчанию более безопасны, чем традиционные, благодаря принципам работы блокчейна. Блокчейн-технологии служат основой для надежного шифрования и современных механизмов безопасности, что предотвращает изменение, удаление и подделывание данных. В такой системе любое обновление приложения требует согласия всех пользователей приложения.
Снижение затрат
Приложение на блокчейне помогает упростить бизнес-процессы за счет устранения посредников. Отличным примером являются одноранговые (P2P) транзакции — переводы, которые пользователи совершают непосредственно друг другу через платежные сервисы. В итоге, стоимость предоставления услуг снижается, так как бизнес использует меньше ресурсов и не привлекает сторонние компании.
Отсутствие цензуры
В блокчейне нет единого органа управления, поэтому государству или влиятельным лицам сложно контролировать сеть. Децентрализованные приложения построены на заранее запрограммированных механизмах и смарт-контрактах, на которые также нельзя повлиять извне. Вследствие этого цензура в приложении невозможна.
Что нужно учитывать при разработке блокчейн-приложений
При разработке приложения нужно учитывать, что результат во многом зависит от выбранных вами инструментов, методов и технологий. Но как создать блокчейн-приложение наилучшим образом?
Лучше начать с выбора блокчейн-сети, которая поддерживает децентрализованные приложения, и сравнить преимущества и недостатки сетей. Есть 4 основных фактора, выбор которых нужно тщательно продумать:
- Блокчейн. Проанализируйте популярность и уровень доверия к интересующим блокчейн-сетям. Например, Ethereum — самый известный блокчейн, а GoChain и OST практически не изучены.
- Операционная система. Выберите тип приложения — веб-, мобильное или десктопное — и операционную систему, с которой вы хотите работать, например, iOS или Android, Mac или Windows, или все вместе.
- Модель монетизации. С продуманной моделью монетизации ваше приложение будет приносить прибыль. Она может включать продажу активов, изначально введенных в систему, комиссии за транзакции или рекламу.
- Разработчики. ИТ-специалисты отвечают за то, как ваше блокчейн-приложение работает, поэтому вам нужно найти профессионалов, которые могут написать код для смарт-контрактов на высокоуровневом языке программирования.
Технологии для разработки блокчейн-приложений
Перед тем, как разработать приложение на блокчейне, вам нужно будет выбрать его тип: десктопное, мобильное или веб-приложение. Давайте рассмотрим некоторые передовые технологии и языки программирования, которые можно использовать для различных типов приложений.

Как создать блокчейн-приложение за 5 шагов
Разработка блокчейн-приложения состоит из нескольких обязательных этапов:
Шаг 1: Проанализируйте проект. Проанализируйте рынок и оцените проект, затем определите основную функциональность и зафиксируйте бюджет и сроки.
Шаг 2: Создайте дизайн. Найдите референсы, определите личные визуальные предпочтения и разработайте дизайн вместе с командой UI/UX дизайнеров.
Шаг 3: Разработайте приложение. Продумайте основные функции вашего приложения, логику работы, взаимодействие с пользователями и внутренние сервисы. Согласуйте все свои идеи с командой разработчиков и создайте продукт.
Шаг 4: Протестируйте приложение. Тестовый запуск помогает проверить все функции приложения и избежать ошибок в его дальнейшей работе.
Шаг 5: Запустите приложение и получите обратную связь. Запустите приложение и соберите отзывы от первых пользователей. Это поможет вам найти новые идеи о том, как улучшить ваше блокчейн-приложения.
Сколько стоит создание блокчейн-приложение
Если вы хотите узнать среднюю стоимость создания блокчейн-приложения, мы будем рады поделиться оценкой экспертов. Мы не утверждаем, что все агентства предлагают одинаковую цену, и говорим только за себя.
Давайте рассмотрим сроки и стоимость создания крипто блокчейн-приложения на примере рынка прогнозов . Наша оценка подскажет вам приблизительную стоимость разработки такого приложения.
Итого, разработка блокчейн-приложений обойдется примерно в 5 733 500 рублей.
Для получения дополнительной информации и индивидуального предложения — свяжитесь с нами .
Резюмируем
Мы надеемся, что это руководство ответило на все ваши вопросы о разработке блокчейн-приложений. Децентрализованные приложения пользуются спросом, потому что они построены на технологии с весомыми преимуществами — прозрачностью, безопасностью, автономностью и низкими затратами.
Если у вас возникнут вопросы, можете обратиться за консультацией к экспертам Purrweb. Мы будем рады помочь вашей идее воплотиться в жизнь. Заполните форму , и мы свяжемся с вами.