Криптовалюта и CryptoKitties: собственные котики на Ethereum

3
4992
Добавить в избранное

Пока криптовалюта, блокчейн и другие новинки взрывают сеть, давайте создавать крипто-котиков на виртуальной платформе Ethereum.

Разбираемся, что же это за криптовалюта такая.

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

CryptoKitties – это игра по созданию криптовалюты, в основании которой лежит технология блокчейн со всеми вытекающими.

Исходный код котиков

Эта игрушка имеет открытый исходный код, что позволит разобраться, как она работает. Будем рассматривать только важные блоки кода, а кто хочет самостоятельно поковыряться – вот ссылка на ethFiddle.

Углубленный обзор

Итак, суть котиков в том, чтобы их покупать, продавать и размножать эту «криптовалюту». У каждого кота есть свои параметры, которые передаются на генном уровне при скрещивании. Чтобы получить большую сумму от продажи животного – нужно заполучить редкую породу и заняться скрещиванием двух котов.

Криптовалюта и крипто-котики

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

Таким образом, KittyCore – это основной контракт, который наследует все методы и субконтракты всего приложения. Переходим к рассмотрению всех наследуемых субконтрактов.

KittyAccessControl: криптовалюта контролирует контракт

Этот контракт предназначен для управления и вообще не связан с игровой механикой. В основном это методы “сеттера” для CEO, COO и CFO, которые являются адресами Ethereum, которые имеют особое владение и контроль над конкретными функциями контракта. KittyAccessControl имеет модификаторы функций по ролям, и позволяет выполнять такие действия, как пауза, отказ от договора или вывод средств.

pause() – это фича для разработчиков, которая позволяет остановить всякие операции с котами по любым причинам.

KittyBase: кто эти котята?

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

Блокчейн и крипто-котики-3

Сначала описывается котенок как структура:

Рассмотрим отдельно каждый параметр.

  • genes  – 256-битное целое, которое описывает гены котенка. Этот ключевой параметр отвечает за то, как будет выглядеть животное.
  • birthTime – timestamp для ДР кошечки.
  • cooldownEndBlock – минимальное время, через которое можно снова размножаться.
  • matronId & sireId – ID отца и матери.
  • siringWithId – установлен ID отца, если мать беременна, а так обычно 0.
  • cooldownIndex – как долго кошка должна ждать следующей возможности забеременеть.
  • generation – коты от первого окота имеют поколение 0, а все последующие будут +1.

После этого объявляется массив всех кошек:

Этот массив хранит информацию о всех кошечках. Если создается новое животное, то сюда записывается вся нужная информация.

Этот контракт имеет еще одну особенность – mapping, что помогает контролировать, кто хозяин котика:

Если кошка перемещается к другому хозяину, mapping обновляется:

Теперь, рассмотрим, что происходит, когда котик создается:

Эта функция передает идентификаторы матери и отца, номер поколения котенка, 256-битный генетический код и адрес владельца. Затем информация о котенке заносится в массив Kitty[], и вызывается transfer (), чтобы назначить его новому владельцу.

KittyOwnership: Котята как токены

CryptoKitties соответствует спецификации ERC721, который отлично зарекомендовал себя для отслеживания владения цифровыми коллекционными предметами, такими как цифровые игровые карты, криптовалюта или редкие предметы в MMORPG.

Блокчейн и крипто-котики-1

Вот так в контракте реализовано наследование спецификации ERC721:

Все токены ERC721 соответствуют определенному стандарту, поэтому в контракте KittyOwnership реализованы следующие функции:

Поскольку эти методы являются общедоступными, это обеспечивает стандартный способ взаимодействия пользователей с токенами CryptoKitties таким же образом, как они взаимодействуют с любым другим токеном ERC721. Вы можете передать свои токены кому-то другому, напрямую взаимодействуя с контрактом CryptoKitties на блокчейне Ethereum без использования веб-интерфейса.

KittyBreeding: разведение котят

KittyBreeding содержит метод для CEO, который устанавливает адрес этого внешнего контракта:

Это было сделано для того, чтобы игра не была слишком легкой – если бы вы могли заранее узнать ДНК котенка, было бы намного легче понять, какие кошки размножаются, чтобы получить «причудливую породу».

Блокчейн и крипто-котики-2

Этот внешний контракт geneScience позже используется в функции giveBirth(), чтобы определить ДНК новой кошки.

Теперь посмотрим на процесс размножения:

Таким образом, эта функция принимает идентификатор матери и отца, просматривает их в массиве kitties и устанавливает идентификатор отца siringWithId на мать. (Когда siringWithId отличен от нуля, это указывает на то, что мать беременна).

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

Затем у нас есть функция giveBirth(), которая создает новую кошку:

Сначала выполняются некоторые проверки, чтобы узнать, готова ли мать рожать. Затем определяются гены ребенка, используя geneScience.mixGenes(), котенок назначается владельцу матери, затем вызывается функция _createKitty(), которую мы рассмотрели в KittyBase.

KittyAuctions: покупка и продажа

Функциональность блока аукциона также разделена на мелкие контракты. Таким образом, KittyAuctions содержит функции setSaleAuctionAddress() и setSaleAuctionAddress(), которые, как и setGeneScienceAddress(), могут быть вызваны только CEO, и которые задают адрес внешнего контракта, обрабатывающего эти функции.

Это означает, что даже если контракт CryptoKitties сам по себе является неизменным, CEO может изменить адрес этого контракта, что изменит правила аукциона.

KittyMinting: криптовалюта и кошачья фабрика

Есть возможность сделать до 5000 “промо-кошек”, которые можно отдать (особенно важно, когда сообщество новое), а все остальные могут быть созданы, а затем немедленно выставлены на аукцион с помощью алгоритмически определенной стартовой цены. Независимо от того, как они созданы, существует жесткий предел 50k gen0 кошек. После этого все сообщество должно размножаться.

Количество “промо-кошек” и кошек gen0, которые может создать контракт, жестко закодировано здесь:

А тут COO может создавать “промо-кошек” и кошек gen0:

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

Но это также означает, что ваша кошка может быть не такой уникальной, как вы думаете, так как COO может напечатать 5000 одинаковых копий!

KittyCore: Мастер-контракт

Это основной контракт CryptoKitty, который скомпилирован и запущен в Ethereum. Такой контракт связывает все вместе.

Этот общедоступный метод возвращает все данные для конкретного котенка из блокчейна. Данные передаются на веб-сервер разработчиков, для отрисовки кошек на сайте. Как видно из приведенного выше кода, «котенок» в основном сводится к 256-битному беззнаковому целому, представляющему его генетический код.

В коде контракта Solidity нет ничего, что бы содержало изображение кошки или его описание или определяло то, что на самом деле означает это 256-битное целое. Интерпретация этого генетического кода происходит на веб-сервере CryptoKitty.

Заключение

Данная демонстрация создания «фабрики криптовалюты» на базе блокчейна, на самом деле, не на 100% основана на блокчейне. Если веб-сайт CryptoKitty внезапно упадет, и резервное копирование выполнено не будет, вам останется только бесполезное 256-битное целое число. Можно накодить отличный продукт, который будет походить на любую криптовалюту, но популярности и долговечности достичь не получится. Перевод на русский осуществлен Библиотекой Программиста.

Оригинал

Другие материалы по теме:

Интересуетесь алгоритмами?

Подпишитесь на нашу рассылку, чтобы получать больше интересных материалов:

И не беспокойтесь, мы тоже не любим спам. Отписаться можно в любое время.




Добавить комментарий