Продолжаю придумывать всякое "гениальное" под игровые нужды нашего блокчейна. Пару дней назад оформил еще одну мысль о том, как можно майнить картон для коллекционно-карточных игр. Придумывал для стиммонстров, но для апробации таки думаю поюзать игрульку от Вано связанную с жуками.
Итак, некоторое время назад у меня была ветка мысли об использовании инвайт-кодов от блокчейна VIZ как одноразовые карты для игры. Мысль была интересной, но что-то до конца мне в ней не зашло. Как понимаете я немного против централизованной продажи карт на децентрализованном блокчейне. Да как бизнес-модель супер, но это малость не отвечает нашим основным принципам. Поэтому если я и смотрю в сторону ККИ на блокчейне голос, то со стороны, когда любой может себе смайнить необходимый картон просто используя мощности своего компутера. А так как мы повязаны на SHA-256, то собственно можно сформировать механизм заработка для тех у кого еще остались асики, но они не тянут майнить уже биткоины, а так можно намайнить картон и продать по рыночной цене лудоманам и не только.
Теперь сам принцип, понятное дело я все топчусь около хешей приватных и публичных ключей и в конечном итоге придумал следующее... и пока собираемся с мыслями напомню как у нас из пароля генерируется пара ключей.
- Берется логин вашего аккаунта... допустим ksantoprotein
- Берется тип доступа... допустим posting
- Берется пароль... допустим blablabla
- Строки складываются и получаем... ksantoproteinpostingblablabla
- Из полученного генерируется пара ключей.
Супер, а что если это использовать для ККИ? Вместо логина аккаунта берем название самой карты, вместо типа доступа берем сет (выпуск), а в качестве пароля используем seed. В нашем случае настаиваю на целом числе в пределах uint32 или uint64. То есть чтобы смайнить карту, надо перебрать все целочисленные значения в пределах от 0 до 4 294 967 296 и сгенерить хеши. С одной стороны каждый может нагенерировать, а с другой можно тупо перебрать все варианты через некоторое время и тогда придется выпускать новый сет с новыми картами и с новыми названиями.
А что значит майнинг??? Вот тут мне пришла следующая мысль, если взять 50 символов приватного ключа без 5, и 50 символов публичного ключа и сравнить, то картой ККИ будет такая пара в которых есть определенное совпадение.
Звездочкой закрашены там где совпадений нет. И как только вы для названия некой карты из определенного выпуска нашли определенное совпадение, то теперь ее надо как-то зарегистрировать в сайдчейне игры. Тут все просто, используется аналог моего смартконтракта со сжиганием 0.001 GBG. И вуаля, у вас есть карта на игровом аккаунте. При этом ее можно будет продать, обменять, сжечь... и прочее. И в смартконтратк вы просто указываете ее имя, сет и число seed. На той стороне сайдчейна происходит проверка, и генерируется пара ключей и сравнивается... верно ли вы указали или нет.
На деле такой подход открывает отличные двери для различных ККИ игр. Предлагаю примерно рассмотреть некий пример, но не на примере стиммонстров (там чуть сложнее и нужно больше статистики собрать), а на примере игры Жуки-Усачи. Некий примитивный аналог монстров, но с насекомыми.
Итак, там ооочень похоже на монстров, только типа идет толпа насекомых по дорожке и на них другая толпа... ну и давай линейно махаться. Всего слотов 5 (без призывателя), игровая механика предполагает раунды. Начало раунда подготовительный... насекомые релизят свои спецособенности, потом идет атака, атака не пошаговая, а одномоментная, все валят всех как могут... потом идет фаза окончания боя и переход на след раунд кто остался стоять на ножках.
Так вот естьу нас такая карта как Бабочка. Понятное дело имя ей Butterfly, тааак... первый сет понятное дело у нас Alpha и в качестве seed будет uint32. Я же сказал, что надо оттестировать, так что народ быстро сгенерит кучу картона ))) надеюсь.
Итак пишем следующий код, аля питон
name = 'Butterfly'
set = 'Alpha'
b = bytes(name + set + seed, 'utf8')
secret = hashlib.sha256(b).digest() # bytes(b58)
k = hexlify(secret).decode('ascii')
private_key = str(base58CheckEncode(0x80, k))[1:]
order = ecdsa.SigningKey.from_string(secret, curve = ecdsa.SECP256k1).curve.generator.order()
point = ecdsa.SigningKey.from_string(secret, curve = ecdsa.SECP256k1).verifying_key.pubkey.point
x_str = ecdsa.util.number_to_string(point.x(), order)
compressed = hexlify(chr(2 + (point.y() & 1)).encode("ascii") + x_str).decode("ascii")
public_key = str(gphBase58CheckEncode(compressed))
И начинаем перебирать варианты
Так вот, бабочка это защитник, она прикрывает себя и соседние карты своими крыльями как щитом. Если ее поставить на 3 позицию и у нее щит будет 5, то она суммарно выдержит 5 дамага по себе и по соседям на второй и четвертой позиции. Так как у каждой карты есть свой 1 хит жизни, то ее способность "защитник" как раз будет определена в зависимости от того, что мы найдем в совпадениях, а в совпадениях мы ищем только числа от 1 до 9. И как раз это число будет определять уровень щита нашей бабочки.
Итак смотрим на результаты майнинга, как мы видим есть бабочка с 5 уровнем щитов, ее seed = 115 и есть еще такие же бабочки, но только с seed = 148 и 171. Чудно, мы берем и смартконтрактом сжигаем 0.001 GBG и указываем, что для бабочки из альфа сета есть сиды 115, 148, 171. И о чудо, сайдчейн понял что это ваши карты и теперь у себя в базе отметил, что Васе принадлежат 3 бабочки. При этом беря аналогию с монстров у них будут уникальные id, а именно
Butterfly-Alpha-5-115
Butterfly-Alpha-5-148
Butterfly-Alpha-5-171
Но как уже ранее сказал, у каждой карты всего один нательный хит и надо же как-то девать кучу этого хлама... а девать мы его будем в прокачку, так что просто берем игровую механику монстров и просто склеиваем карты... Да, снова смартконтракт... И когда мы склеем 3 карты у нас получится одна... при этом мы удалим из базы 148 и 171 (а точнее укажем что они теперь принадлежат 115 карте) и у игрока появится следующая запись в сайдчейне.
Butterfly-Alpha-5-115-3
Что нам говорит о том, что у нас есть карта под названием Бабочка из первого сета игры, с id = 115, с тремя хитами и уровнем щитов = 5. Другими словами, чтобы уничтожить такого монстра надо сначала удолбать 5 раз щит, а потом еще 3 раза саму бабочку.
Но в любой игре есть свои лиги... так и здесь, понятное дело, что если кто-то прокачает до почти бесконечность свою бабочку и у нее будет 100 хитов, это как-то будет нечестно по отношению к тому у кого всего 1 хит. Поэтому как обычно есть рамки набора колоды на игру. И уровень игры будет определяться совокупной "маной", которая будет складываться не только от уровня самой способности карты, но и от уровня ее хитов. Итого, полученная бабочка имеет 5 на щит и 3 на хиты, итого, когда ее берешь в игру то тратишь 8 маны. А уровни можно условно сделать типа таких... 10 маны новички, 50 маны новички+1, 100 маны бронза итд итд. Это уже не так важно на данном этапе. Главное, что придется качать карты по разному и придумывать свои "стратегии" развития своей колоды ))).
Наиболее внимательные разглядели бабочку 227
Butterfly-Alpha-2F-227
Помимо выражения базовой способности карты через числа 1-9, есть еще и способности карт, и у этой бабочки появился еще полет (F)ly. А еще может быть (P)oison итд итд, как фантазия наша разгуляется.
Безусловно, если вы раз зарегали карту, то следующий ушлый игрок НЕ сможет зарегать ту же самую карту с тем же самым seed. Поэтому с майнингом может быть определенные казусы, когда народ будет перебирать те варианты, которые уже перебрали ))) но увы... в децентрализованном мире никто не будет указывать достоверно какие именно номера он уже перебрал, чтобы другие не мучались. С другой стороны всегда можно начать майнинг с любого seed-а.
Еще одно замечание, так как в описанном формате можно намайнить слииишком много картона, то немного надо усложнить математическую задачу, если числа 1-9 зарезервированы для идентификации уровней способностей, заглавные буквы типа F и P зарезервированы для самих спецспособностей, то маленькие буквы будут зарезервированы под совпадения по сетам, то есть если у нас Alpha сет, то мало нам сгенерить в свопадении число, необходимо, чтобы еще там была буква 'a'. Безусловно это просто замедлит скорость майнинга карт. В принципе я на своем компе за сутки перебираю 1 лям хешей. Если брать uint32, то мне потребуетс еще примерно 4300 компов, чтобы за сутки перебрать все варианты связанные с одной картой... а если карт будет несколько ))) Кароч вы поняли.
Далее... мы тут на голосе творческие народ, так что если прочитали пост, то подумайте над новыми картами-насекомыми с их способностями, предлагайте в комментариях, возможно это даст мне так же творческий подрыв и очередную траву из Норвегии.
@ksantoprotein, интересненько...
@ksantoprotein "возможно это даст мне так же творческий подрыв и очередную траву из Норвегии."
бери лучше из Голландии!)))
@erikkartmen у меня лаба же под рукой ) трава это так, для отвода глаз
@ksantoprotein ты теперь Хайзенбергом будешь)))