Учимся готовить Криптокотиков. Часть 4. Генетический код кота.
Раздумывая об описании генетической системы КриптоКотиков, я понял, что нельзя обойтись без этой статьи. Сегодня я хочу рассказать о том, как выглядит котик с точки зрения блокчейн-технологии.
КриптоКотик – это запись в сети Ethereum, которая была сформирована хитрыми смарт-контрактами. Эта запись принадлежит не разработчикам игры, а владельцу кошелька, который меняется при дарении/покупке/продаже кота.
Структура записи котика выглядит так:
struct Kitty {
uint256 genes;
uint64 birthtime;
uint64 cooldownEndBlock;
uint32 matronID;
uint32 sireID;
uint32 siringWithID;
uint16 cooldownIndex;
uint16 generation;
}
где
- genes – 256-битное число, которое описывает гены котика. Этот параметр отвечает за его внешний вид и от него зависит код потомка.
- birthTime – дата рождения
- cooldownEndBlock – минимальное время или блок в котором можно будет снова размножаться
- matronId, sireID – #номер мамы и папы
- siringWithId – если котик беременный, то устанавливается ID папы, в другое время ноль
- cooldownIndex – текущий показатель времени восстановления
- generation – поколение котика
То есть, когда котик рождается, то ему присваиваются все эти параметры.
Важно отметить, что описание и гемы(jewels) котика формируются на веб-сервере CryptoKitties, также как и картинка, которая является интерпретацией генетического кода.
В рамках блокчейна, код genes – всего лишь 256-битное целое число. Но хранится в нём 240 бит, потом идут нули.
Выглядит это так:
в бинарном виде –
0000000000000000011000110001100010110010100100001010010100011010010001101001010010101000011010100010100111000000110000010001110000110000011100100101011101100010000101010100010000011000110001000011000100011100011001010110001010011110101001100011000111101111
в шестнадцатиричном виде –
00006318b290a51a4694a86a29c0c11c30725762154418c4311c65629ea631ef
- Каждые 5 бит – это ген.
- Каждые 20бит – это блок из 4х генов.
- Каждый блок – это отдельная трейт-группа
- Всего в генетическом коде 12 блоков.
Благодаря нашей табличке можно понять у какого гена какое кодовое значение. Если переводить в INT-систему, то генетический код котика будет выглядеть как-то так:
Именно в таком порядке и такой последовательности расположены группы и гены. Первый ген в каждой группе является первичным P0, остальные три скрытыми H1-3. Именно от первичных генов и зависит, как выглядит Ваш котик, а скрытые гены влияют на генетический код потомства.
В таблице трейтов некоторые гены отмечены звёздочкой *. Это означает, что данный ген может присутствовать только в скрытой позиции у Gen0 котов. Распространение катрибутов на 04.04.18. вы можете посмотреть в этой статье.
Все мяутации INT16+ могут быть только у котиков Gen1+ в результате бридинга, подробнее о механике передачи генов потомству я расскажу в отдельной статье.
Также в игре есть исчезнувшие катрибуты, которые больше не повятся у новых Gen0 котов, а могут быть получены только в результате бридинга, в табличке они отмечены зачёркнутым курсивом.
Если Вы хотите посмотреть на своего котика или котика, которого хотите купить, то есть несколько ресурсов, которые позволят вам сделать это. В основном все они завязаны на шанс передачи гена потомку, указываются проценты получения этого гена в первичной позиции у ребёнка.
Первый вариант (update устарел) – гуглдок от Джоди, создательницы сайта cryptokitties411.com Там вбиваете ID кота и Вам отображаются все его гены.
Второй вариант – KittyDex, где можно посмотреть код котика в бинарном виде, хексе и KAI-системе (недостаток KAI я опишу в отдельной статье, пользуйтесь INT-более удобным инструментом наименования гена). Чтобы увидеть нужного котика, вставьте его ID в url сайта. При наведении на ген, подсвечивается его шанс передачи потомку и средняя цена продаж.
Третий вариант (выбор редакции) – генридер от KittyCalc. Он более наглядный, картинкой отображается форма или цвет, за который отвечает первичный ген, диаграммой сзади – шанс передачи потомку, звёздочками – “вес” гена или сила присутствия в трейтгруппе при передаче потомку.
Четвёртый вариант – это наш генридер. На данный момент мы работаем над улучшением его интерфейса. ибо раньше использовали только для себя. Мы добавим котогенератор и полный профиль с INT, CODE, HEX значениями и подсветкой возможных катрибутов у потомства. Сейчас катрибуты рассортированы по группам и указан процент передачи генов потомку.