May 30, 2022

Новый 2 Earn формат 💩

Предисловие

Очень-очень много лет назад у меня родилась одна идея, которую я так и не реализовал, хотя совершал целых 3 попытки.

Суть идеи в том, чтобы создать сайт/площадку, где игроки могут создавать свои истории (рассказы, повествования), а другие игроки могут их дополнять. Тем самым получается (в теории) какой-то интересный и необычный рассказ. Планировалось продвигать этот сайт в кругу заинтересованных людей, по типу литературных форумов.

Самая первая версия писалась на движке-конструкторе ucoz и называлась «Пишем историю вместе». Вторая версия писалась на React и называлась Worlds Tale. А третья и последняя версия писалась уже на solid-js (🤔) и называлась Fairy Tales.

Базовая версия которая была написана

В версии которая была написала по сути не было дизайна, но был базовый функционал, можно было создавать отдельные истории и дополнять их. Каждый дополненный кусок текста становился новым абзацем и фиксировался за игроком который его добавил. Из фич которые еще планировались, это возможность ставить лайки/дизлайки на каждый абзац. В целом это вся суть проекта

Токен и NFT 🤑🪝

Внезапно спустя много лет я понял что сюда хорошо ложиться концепция 2 Earn игр/проектов. Люди что-то делаю и получают за это токены. В данном случае они будут получать их за то, что дополняют истории других игроков. Смысла вообще в этом мало, зато можно заработать. Есть несколько версий экономической модели проекта (я их почти не продумывал, всё это то, что первое пришло в голову)

Экономика и игровые механики

✅ [Beta] Экономическая модель #1

  1. Игрок 1 начинает новую историю, за это ему нужно заплатить N токенов проекта
  2. Игрок 2 не хочет создавать свою историю (просто не хочет или не хочет платить за это N токенов проекта), поэтому он находит уже кем-то созданную и дополняет её. За это он возможно тоже платит токеном N, но намного меньше
  3. Аналогично поступает и Игрок 3, 4, 5…
  4. За это время которое игроки дополняли истории, они и другие игроки оценивали дополнения других игроков, ставили лайки или дизлайки
  5. Спустя какое-то время, Игрок 1 (создатель этой истории), решает что история уже завершена и отмечает её как завершенная. В этот момент все игроки, которые вносили дополнения в эту историю получают прибыль в виде токена проекта, сумма этой прибыли расчитывается по формуле, но чем больше суммарно лайков получили дополнения этого игрока, тем больше токенов он получит
  6. А Игрок 1 (создатель этой истории) вместо токенов, получает NFT представление всей этой истории (да, типа NFT текста)
  7. Что делать дальше с этим нфт надо уже думать. Можно например сделать вариант в котором Игрок 1 может пойти на маркетплейс и перепродать эту нфт. Или же он может пойти отправить его в стейкинг и получать какой-то пассивный доход.

❌ [Beta] Экономическая модель #2

Тут все намного проще

  1. Игроки не могут создавать новые истории, только дополнять
  2. Игрок 1 хочет дополнить какую-то историю, для этого ему нужно купить NFT ручку, которая позволит это делать. У неё будет редкость и какие-то характеристики, например кол-во чернил, удобность, хз еще что-то
  3. Он дополняет историю и получает за это N токенов проекта. Возможно должна быть какая-то энергия, типа 10 дополнений за день
  4. NFT ручку перепродает на маркетплейсе

Истории и дополнения

Истории не могут быть бесконечные, поэтому есть ограничение на количество дополнений в неё и деление на такие типы:

  1. Короткая
  2. Средняя
  3. Длинная

Тип истории по её длине определяет игрок создавший её.

На что будет влиять длина истории пока что не понятно

Также они делятся на жанры:

  1. Общая
  2. Детектив
  3. Фантастика
  4. Роман
  5. Юмор
  6. и т.д.

Прибыль игрока за его дополнения будет зависеть от его любимого жанра

Любимый жанр игрока - жанр, в который он больше всего вносил дополнений. К примеру если он внес 5 дополнений в жанр Детектив и 3 в Юмор, то его любимый жанр будет считаться Детектив

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

Примеры:

1. У игрока 100 дополнений в жанр Детектив и 0 дополнений в другие жанры - он получает максимальный коэффициент прибыли

2. У игрока 50 дополнений в жанр Детектив и 49 дополнений в жанр Роман - он получает минимальный коэффициент прибыли

3. У игрока 50 дополнений в жанр Детектив и 50 дополнений в жанр Роман - у него нет любимого жанра и он не получает дополнительную прибыль за жанр

Коэффициент прибыли за любимый жанр не рассчитывается для жанра Общая, также этот жанр не может быть указан как любимый у игрока

Игрок не может дополнять одну и ту же историю 2 или больше раза подряд, между его дополнениями должно быть хотя бы 1 чужое. Также процент его дополнений истории не должен превышать 33% от общего количества её дополнений

Ранги/титулы игроков

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

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

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

Идея: изначально все игроки будут иметь ранг «Читатель», но можно перед запуском проекта провести лотерею (или классическая система с балами и заданиями на репосты, лайки) между желающими игроками и 50 счастливчиков смогут получить сразу статус «Писатель»

Названия рангов тестовые

1. Читатель

Условия перехода:

  • Ранг выдается каждому новому игроку

Возможности:

  • Только просматривать истории, без возможности их дополнения или создания своих
  • Лайкать истории/дополнения, но не больше чем 15 раз за 24 часа

Ограничение на кол-во лайков в день и на отключение дизлайков для этого ранга решает проблему при которой игроки могут создавать много аккаунтов и, либо накручивать лайки, либо массово дизлайкать других игроков тем самым лишая их прибыли

Бонусы:

  • Никаких

2. Писатель

Условия перехода:

  • Поставить 10 и более лайков на истории/дополнения
  • Быть зарегистрированным больше 48 часов назад
  • Иметь рейтинг ≥ 0

Возможности:

  • Дополнять истории, но не больше чем в 3 разных активных историях

Активная история — та, которая еще не завершена её автором и не конвертирована в NFT

  • Возможность создавать свои собственные истории, но не больше чем 1 активная за раз и не больше чем 1 за 24 часа
  • Лайкать истории/дополнения, но не больше чем 20 раз за 24 часа
  • Дизлайкать истории/дополнения, но не больше чем 10 раз за 24 часа

Бонусы:

  • Никаких

3. Лайкальщик

Условия перехода:

  • Поставить 50 и более лайков на истории/дополнения
  • Иметь рейтинг ≥ 0

Возможности:

  • Дополнять истории, но не больше чем в 3 разных активных историях

Бонусы:

  • Получает x1.2 к токенам, которые он получает за лайки на своих дополнениях при завершении истории

4. Заядлый писатель

Условия перехода:

  • Хотя бы 1 раз дополнить 10 и более разных историй
  • Создать и завершить минимум 5 историй с количеством лайков минимум в 2 раза превышающим количество дизлайков
  • Иметь рейтинг ≥ 100

Возможности:

  • Возможности ранга «Писатель»
  • Одновременно можно дополнять до 6 активных историй
  • Одновременно можно создать до 2 историй

Бонусы:

  • Надо подумать

5. Книжный червь

Условия перехода:

  • Иметь ранг «Читатель»
  • Быть зарегистрированным больше 14 дней назад
  • Поставить 50 и более лайков на истории/дополнения
  • Иметь рейтинг ≥ 0

Возможности:

  • Получает возможность создавать приватные истории

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

Бонусы:

  • Надо подумать

6. Изгой

Условия перехода:

  • Иметь рейтинг ≤ -15

Возможности:

  • Те же, что и у «Читателя»

Бонусы:

  • Стоимость покупки рейтинговых баллов фиксируется на X в диапазоне от -20 до -2

Рейтинговая система

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

Хорошим примером рейтинговой системы является репутация на stackoverflow: https://ru.stackoverflow.com/help/whats-reputation. Она должна послужить примером при проектировании рейтинговой системы в игре

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

Рейтинг игрока может быть в пределах от -20 до +∞

За один день можно заработать максимум 200 баллов любым из ниже перечисленных способов

Репутация игрока повышается в следующих случаях:

  • за успешно законченную историю: +50 (но только за первые 2 истории)
  • за каждый лайк на его истории: +10
  • за каждый лайк на его дополнении: +5
  • за каждое дополнение к истории в момент её завершения, при условии, что количество лайков на нем в 2 раза больше чем дизлайков: +1 за каждый 10 лайков, но не больше 50

Репутация игрока понижается в следующих случаях:

  • за каждый дизлайк на его истории: -2
  • за каждый дизлайк на его дополнении: -1
  • за каждый поставленный дизлайк на чью-то историю: -1
  • за каждый поставленный дизлайк на чье-то дополнение: -1

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

Примеры:

1. Рейтинг игрока равен 0, цена покупки 1 рейтингового балла будет, стоит Х, 2 баллов - 2X, 3 - 3Х и т.д.

2. Рейтинг игрока равен -20, цена покупки 1 рейтингового балла будет, стоит 10Х, 2 баллов - 8X, 3 - 6Х и т.д.

Систему покупки рейтинговых баллов нужно тщательно обдумать

Лайки/дизлайки

Игроки в зависимости от своих рангов могут ставить лайки или дизлайки как на сами истории в целом, так и на дополнения. При этом нельзя оценивать свои же истории и дополнения.

Истории можно оценивать только в том случае, если она завершена хотя бы на 50%.

Положительная или отрицательная оценка истории влияет на ценность будущей NFT. А оценка дополнений влияет на прибыль, которую получит его автор в момент завершения истории. Если создатель по какой-то причине не завершил свою историю, то все её участники не получат прибыли, а сама нфт истории никогда не будет создана.

Каждый поставленный дизлайк отражается на рейтинге игрока. Это значит, что игроку нужно жертвовать своим рейтингом, если он действительно хочет поставить кому-то дизлайк. Если рейтинг игрока равен 0 то он не может ставить дизлайки на истории/дополнения.

Защита от ботов и спама

Полноценная регистрация

Сделать регистрацию не просто по кошельку, а по почте и паролю. Еще лучше через сторонний сервис по типу гугла

В целом идея не очень, т.к. не всем может понравиться подобное в web3 приложении, где авторизация может производиться через кошелек. Но с другой стороны большинство 2 Earn игр именно так и делает, к тому же так мы получаем базу почтовых адресов игроков и можно делать рассылки

Верификация данных через централизованный сервер

Перед отправкой данных в блокчейн, нужно их проверить и подписать доверенным лицом. Контракт будет пропускать только подписанные доверенным лицом данные. Алгоритм такой же как мы делали в MLC (https://github.com/MLC-Game/signer-server-test/blob/master/TestSign.sol)

Капча

Добавить капчу, чтобы нельзя было автоматизировать дополнение и создание историй. Идеально было бы взять google recaptcha v3 и капча будет проходить не заметно для пользователя

Проверка уникальности текста

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

Проверка осмысленности текста

Есть алгоритмы, которые различают набор букв от +- осмысленного текста со словами и предложениями. Они работаю на основе вычисления энтропии текста и учета частоты встречаемости комбинаций букв. Было бы круто внедрить что-то подобное

Проверка орфографии текста

Кроме этого было бы неплохо пропускать на добавление только качественно написанный текст с учетом правил языка

Блокчейн

При выборе блокчейна для игры в первую очередь нужно опираться на стоимость транзакций в нем. В данном случае операции могут быть довольно дорогие. Особенно при минте нфт истории: запись большого количества текста в контракт, множественное распределение токенов за раз.

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

Полезности

  1. https://www.npmjs.com/package/apos-to-lex-form
  2. https://www.npmjs.com/package/spelling-corrector
  3. https://www.npmjs.com/package/stopword
  4. https://www.npmjs.com/package/natural
  5. https://studwood.net/2596777/informatika/proverka_teksta_osmyslennost
  6. https://cyberleninka.ru/article/n/metodika-proverki-odnorodnosti-teksta-i-vyyavleniya-plagiata-na-osnove-metoda-opornyh-vektorov-i-filtra-bystroy-korrelyatsii/viewer