Co to są Cryptokitties? Crash Course W ciągu ostatniego roku DAPP, czyli zdecentralizowane aplikacje, powoli zyskiwały na popularności.

Jak zapewne wiesz, DAPP nie jest własnością żadnej centralnej organizacji i stanowi bardzo potrzebną zmianę paradygmatu w coraz bardziej scentralizowanym świecie.

Jednak aby DAPP uzyskać odpowiednią ekspozycję głównego nurtu, na jaką zasługują, jeden z nich musiał się przebić i osiągnąć sukces. (Tak, technicznie rzecz biorąc, bitcoin jest również DAPP, ale nie mówimy tutaj o wartości przechowywania). Jasne, było już kilka DAPPów, które były nieco eksponowane, ale coś musiało sprawić, że będzie duży i pobudzić wyobraźnię publiczności.

Wprowadź Cryptokitties.

Co to są Cryptokitties? Szybki kurs

Źródło zdjęcia: Cryptokitties

Co to są Cryptokitties?

Cryptokitties to wirtualna gra oparta na blockchain, która pozwala graczom na adopcję, wychowywanie i handel wirtualnymi kotami. Gra została stworzona przez firmę Axiom Zen z Vancouver. Jednak naprawdę ważne jest, aby pamiętać, że jest to pierwsze znane zastosowanie DAPP do wypoczynku i rekreacji.

Sprzedaż Cryptokitties osiągnęła szczyt. Ludzie wydali ponad dwanaście milionów dolarów na zakup tych kryptowalut. Istnieją nawet doniesienia o ludziach, którzy mają zarobił więcej pieniędzy na cyptokitties niż inwestowanie w IRA!

Spójrzmy, ile sprzedaży zostało dokonanych dziennie:

Co to są Cryptokitties? Szybki kurs

Źródło zdjęcia: KittyExplorer

Napisano kilka artykułów na temat „zjawisk kotków”, które również zyskały znaczną popularność. W rzeczywistości nawet Vitalik wkroczył do akcji!

Co to są Cryptokitties? Szybki kurs

Źródło zdjęcia: Vitalik Buterin na Twitterze

Każdy kot ma swój własny, unikalny 256-bitowy, unikalny kod genomu. Który jest przenoszony na wszystkie jego potomne kocięta za pomocą algorytmu genetycznego.

Co to jest algorytm genetyczny?

Algorytm genetyczny to technika optymalizacji wykorzystywana do rozwiązywania nieliniowych problemów optymalizacji. Działa prawie tak, jak działa genetyka biologiczna. Zaczyna się od wstępnej generacji rozwiązań kandydatów, które zostały przetestowane pod kątem funkcji celu. Algorytm następnie generuje kolejne rozwiązania z tych rozwiązań macierzystych przy użyciu operatorów inspirowanych biologicznie, takich jak selekcja, krzyżowanie i mutacja.

Podczas gdy geny w naszym ciele składają się z białek i różnych innych elementów, w AH są reprezentowane przez liczby. Przyjrzyjmy się więc, jak działa ewolucja przy użyciu algorytmu genetycznego. Będziemy używać tylko przypadków binarnych, tj. Przypadków, w których geny można przedstawić jako jedynki i 0.

  • Wybór: Selekcja w zasadzie oznacza zatrzymywanie najlepszych rodziców z pokolenia na pokolenie. Ci rodzice są preferowani do reprodukcji. Więc np. dwoje rodziców wybranych w drodze selekcji to: Rodzic 1: 1010011000 Rodzic 2: 1001001010.

  • Krzyżowanie: Dalej mamy crossover. Dzieje się tutaj tak, że wybieramy wspólne zmienne dwojga rodziców i zachowujemy je w rozwiązaniu dziecka. Korzystając z naszego przykładu: Rodzic 1: 1010011000 Rodzic 2: 1001001010 Dziecko: 1000011010 To działa prawie tak samo w prawdziwym życiu. W ten sposób dziecko zachowuje pewne cechy ojca i matki.

  • Mutacja: Mutacja ma miejsce, gdy bierzemy rodzica i losowo mutujemy niektóre z jego zmiennych, aby stworzyć dziecko. Ma to na celu upewnienie się, że system może zbadać inne możliwości optymalnych rozwiązań. Rodzic: 1010011000 Dziecko: 0101010001

Cryptokitties używa algorytmu genetycznego do stworzenia nowego kotka. Wykorzystuje mechanizm krzyżowania do „spłodzenia” genomu dziecka przy użyciu dwóch kociąt rodzicielskich. Ten genom dziecka jest używany do generowania nowego kotka.

Teraz, gdy przyjrzeliśmy się, jak działa algorytm genetyczny, przejdźmy jeszcze głębiej i przyjrzyjmy się ich inteligentnej umowie.

Trenuj, aby zostać programistą Blockchain

Rozpocznij bezpłatny okres próbny już dziś!

Inteligentny kontrakt CryptoKitty.

Możesz przeczytać główny kod źródłowy tutaj.

Zanim zaczniemy, wielkie okrzyki do Artykuł Jamesa Martina Duffy’ego za wyjaśnienie.

Cały kod jest podzielony na kilka mniejszych umów. Dzieje się tak, ponieważ w przeciwnym razie ogromna treść kodu uniemożliwiłaby zarządzanie kodem.

Drzewo dziedziczenia kontraktów wygląda następująco:

kontrakt KittyAccessControl

umowa KittyBase to KittyAccessControl

kontrakt KittyOwnership to KittyBase, ERC721

kontrakt KittyBreeding to KittyOwnership

kontrakt KittyAuction to KittyBreeding

kontrakt KittyMinting to KittyAuction

kontrakt KittyCore to KittyMinting

Ponieważ przewodnik solidności stwierdza: „Kiedy kontrakt dziedziczy po wielu kontraktach, tylko jeden kontrakt jest tworzony w łańcuchu bloków, a kod ze wszystkich kontraktów bazowych jest kopiowany do tworzonego kontraktu”.

W tym przypadku KittyCore jest kontraktem, który dziedziczy wszystkie kody z kontraktów bazowych. Zdefiniujmy, co robi każda z tych umów.

# 1 Kontrola dostępu Cryptokitty

Możesz sprawdzić Umowa KittyAccessControl tutaj.

Kontrakt przypisuje twórcom specjalne role.

Umowa ta określa system zarządzania całym kontraktem i nie ma nic wspólnego ze sposobem działania gry. Specjalne role przypisane w tej umowie to:

  • CEO: CEO może ponownie przypisać inne role i zmienić adresy zależnych inteligentnych kontraktów. Potrafią też odblokować kontrakt (więcej o tym za chwilę).
  • CFO: może wypłacić środki z KittyCore i kontraktów aukcyjnych.
  • COO: Może wypuszczać kotki gen0 na aukcje i koty promocyjne miętowe. (omówimy to później w KittyAuction)

Ta umowa ma również funkcję „pauzy”:

Ta umowa ma również funkcję „pauzy”:

function pause () public onlyCLevel whenNotPaused {

paused = true;

}

Daje to deweloperom możliwość wstrzymania całego kontraktu, jeśli mają do czynienia z błędem, włamaniem lub aktualizacją całego systemu..

# 2 CryptokittyBase

KittyBase to najważniejszy kontrakt z punktu widzenia „definicji kotka”. Tutaj ustaliliśmy podstawowe zasady tworzenia kotków.

Więc te kotki są w rzeczywistości strukturą z wieloma zmiennymi.

struct Kitty

{

geny uint256;

uint64 birthTime;

uint64 cooldownEndBlock;

uint32 matronId;

uint32 sireId;

uint32 siringWithId;

uint16 cooldownIndex;

generacja uint16;

}

Zobaczmy, czym są te zmienne.

Co to są Cryptokitties? Szybki kurs

Ta część umowy zawiera również informacje o właścicielu kotka. Odbywa się to za pomocą następującego wiersza kodu:

mapowanie (uint256 => address) public kittyIndexToOwner;

# 3 Cryptokitty OwnerShip

Oto jak definiują KittyOwnerShip w swojej umowie:

„Zapewnia to metody wymagane dla podstawowych niezamiennych transakcji tokenami, zgodnie z roboczą specyfikacją ERC-721 (https://github.com/ethereum/EIPs/issues/721).”

Co to jest zamienność? Investopedia definiuje zamienność w następujący sposób:

„Zamienność to wymienność towaru lub składnika aktywów z innymi indywidualnymi dobrami lub aktywami tego samego typu”.

A więc co jest zamienne, a co niezamienne.

Załóżmy, że pożyczyłeś 20 dolarów od znajomego. Jeśli zwrócisz mu pieniądze z KOLEJNYM rachunkiem za 20 dolarów, wszystko będzie w porządku. W rzeczywistości możesz nawet zwrócić im pieniądze w postaci 1 rachunku 10 $ i 2 banknotów 5 $. Nadal jest w porządku. Dolar ma właściwości zamienne (choć nie zawsze).

Jeśli jednak pożyczysz komuś samochód na weekend, a wrócisz i oddasz mu w zamian inny samochód, ta osoba prawdopodobnie uderzy w twarz. W rzeczywistości, jeśli wyjechałeś z czerwoną Impalą i wróciłeś z inną czerwoną Impalą, nawet to nie jest skończone. W tym przykładzie samochody są aktywami niewymienialnymi.

Kotki w CryptoKitties są niezamienialne, ponieważ każdy kotek nie jest tworzony jednakowo. Nie możesz po prostu zamienić jednego kotka na inny. Tokeny CryptoKitties są zgodne z formułą ERC721, co możesz Sprawdź tutaj.

# 4 Hodowla CryptoKitty

Jest to umowa, w której ustalamy funkcje potrzebne dwóm kotkom do wyhodowania i wyprodukowania nowego kotka.

Jest proces rozmnażania, a potem rodzenia.

Zobaczmy, jak obaj działają.

function _breedWith (uint256 _matronId, uint256 _sireId) wewnętrzna

{

Ojciec przechowujący Kitty = kociaki [_sireId];

Matrona do przechowywania kotów = kotki [_matronId];

matron.siringWithId = uint32 (_sireId);

_triggerCooldown (ojciec);

_triggerCooldown (matron);

usuń sireAllowedToAddress [_matronId];

usuń sireAllowedToAddress [_sireId];

ciężarne kotki ++;

W ciąży (kittyIndexToOwner [_matronId], _matronId, _sireId, matron.cooldownEndBlock);

}

Ok, więc co się dzieje w tym fragmencie kodu?

Po pierwsze, identyfikatory zarówno kociąt matki, jak i ojca są brane za matronId i sireId, a „spłodzenie z id” matki jest zmieniane na identyfikator ojca. (Pamiętaj: ojciec nieciężarnej matki z Id wynosi 0, podczas gdy ojca w ciąży, ojcem z Id jest Id ojca).

Wraz z tym zwiększa się liczba ciężarnych kociąt w systemie 1.

Zobaczmy teraz, jak działa proces narodzin.

funkcja giveBirth (uint256 _matronId)

zewnętrzny

whenNotPaused

zwraca (uint256)

{

Matrona do przechowywania kotów = kotki [_matronId];

require (matron.birthTime! = 0);

require (_isReadyToGiveBirth (matron));

uint256 sireId = matron.siringWithId

Ojciec przechowujący Kitty = kitties [sireId];

uint16 parentGen = matron.generation;

if (sire.generation > matron.generation) {

parentGen = sire.generation;

}

uint256 childGenes = geneScience.mixGenes (matron.genes, sire.genes, matron.cooldownEndBlock – 1);

właściciel adresu = kittyIndexToOwner [_matronId];

uint256 kittenId = _createKitty (_matronId, matron.siringWithId, parentGen + 1, childGenes, owner);

delete matron.siringWithId;

w ciążyKitties–;

msg.sender.send (autoBirthFee);

return kittenId;

}

Po pierwsze, funkcja sprawdza, czy matka jest gotowa do porodu. Jeśli matka jest gotowa do porodu, wówczas rodzicielski gen, czyli pokolenie rodzica, jest ustawione na pokolenie matki lub pokolenie ojca, w zależności od tego, kto jest młodszy.

Następnie geny dziecka są tworzone przez wywołanie funkcji geneScience.mixGenes (). Algorytm hodowlany to „sooper-sekret” i jest obsługiwany przez kontrakt, który implementuje GeneScienceInterface. Algorytm ma zamknięte źródło i nie jest otwarty dla publiczności.

Kiedy matka rodzi, dzieją się trzy rzeczy:

  • Liczba ciężarnych kotek spada o 1 (w ciąży -).
  • Własność nowego kotka dziecięcego przechodzi na właściciela kotki matki.
  • Następnie funkcja wywołuje funkcję „createKitty ()”, która została opracowana w KittyBase.

# 5 Aukcje CryptoKitty

Mamy tutaj publiczne metody licytacji lub licytacji kotów lub usług wypożyczania. Faktyczna funkcjonalność aukcji jest obsługiwana w dwóch umowach siostrzanych (jedna na sprzedaż, a druga na sprzedaż), podczas gdy tworzenie aukcji i licytowanie są w większości przypadków pośredniczone w tym aspekcie umowy podstawowej.

W tej umowie twórcy ustalili różne publiczne metody licytowania kotów lub wypożyczania usług. Główna funkcjonalność aukcji została podzielona na dwie siostrzane umowy:

Te funkcje może wywołać tylko dyrektor generalny.

Powodem, dla którego deweloperzy zawarli umowy z dwoma rodzeństwem, jest to, że według nich:

„Ich logika jest dość złożona i zawsze istnieje ryzyko subtelnych błędów. Trzymając je w swoich własnych umowach, możemy je ulepszyć bez zakłócania głównego kontraktu, który śledzi posiadanie kotka ”.

# 6 Bicie CryptoKitty

Pamiętaj, jak powiedzieliśmy wcześniej, że dyrektor operacyjny może tworzyć koty promocyjne i koty gen. 0?

To jest umowa, która im to umożliwia.

Istnieje ograniczenie liczby kotów promocyjnych i Gen 0, które można utworzyć. Było już obecne w samym kodzie:

  • uint256 publiczna stała PROMO_CREATION_LIMIT = 5000;
  • uint256 stała publiczna GEN0_CREATION_LIMIT = 45000;

Przyjrzyjmy się tej umowie:

function createPromoKitty (uint256 _genes, address _owner) external onlyCOO {

adres kittyOwner = _owner;

if (kittyOwner == address (0)) {

kittyOwner = cooAddress;

}

wymagają (promoCreatedCount < PROMO_CREATION_LIMIT);

promoCreatedCount ++;

_createKitty (0, 0, 0, _genes, kittyOwner);

}

function createGen0Auction (uint256 _genes) external onlyCOO {

wymagają (gen0CreatedCount < GEN0_CREATION_LIMIT);

uint256 kittyId = _createKitty (0, 0, 0, _genes, address (this));

_approve (kittyId, saleAuction);

saleAuction.createAuction (

kittyId,

_computeNextGen0Price (),

0,

GEN0_AUCTION_DURATION,

adres (ten)

);

gen0CreatedCount ++;

}

Przyjrzyjmy się funkcji createPromoKitty ().

Tak więc przy bliższej analizie pewne rzeczy są oczywiste:

  • Dyrektor operacyjny może stworzyć dowolnego kociaka promocyjnego z dowolnymi genami.
  • Dyrektor operacyjny może wysłać promocyjnego kotka każdemu, kogo chce.

Po sprawdzeniu funkcji createGen0Auction () widać następujące kwestie:

  • Dyrektor operacyjny ma pełną władzę nad tym, jaki kotek gen 0 chce stworzyć.
  • Jednak po stworzeniu kotka trafia prosto na aukcję.

# 7 CryptoKitty Core

To jest główny kontrakt, który działa na Ethereum Blockchain.

Ta umowa dziedziczy wszystkie funkcje z poprzednich umów ORAZ definiuje również własną metodę:

funkcja getKitty (uint256 _id)

zewnętrzny

widok

zwroty (

bool isGestating,

bool isReady,

uint256 cooldownIndex,

uint256 nextActionAt,

SiringWithId uint256,

uint256 birthTime,

uint256 matronId,

uint256 sireId,

generacja uint256,

geny uint256

)

{

Zestaw do przechowywania kotka = kotki [_id];

isGestating = (kit.siringWithId! = 0);

isReady = (kit.cooldownEndBlock <= numer.blok);

cooldownIndex = uint256 (kit.cooldownIndex);

nextActionAt = uint256 (kit.cooldownEndBlock);

siringWithId = uint256 (kit.siringWithId);

birthTime = uint256 (kit.birthTime);

matronId = uint256 (kit.matronId);

sireId = uint256 (kit.sireId);

generacja = uint256 (generacja zestawu);

geny = kit.genes;

}

Ta funkcja w zasadzie zwraca wszystkie dane dla określonego kotka z łańcucha bloków.

Skoro już wiemy, co dzieje się za kulisami, zobaczmy, jak interfejs działa w prawdziwym życiu.

Jak kupić CryptoKitties?

Zanim zaczniesz cokolwiek, potrzebujesz trzech rzeczy:

  • Przeglądarka Chrome lub Firefox.
  • Portfel Metamask.
  • Ether w portfelu Metamask.

To naprawdę wszystko, czego potrzebujesz, aby zacząć.

Po uporządkowaniu tych rzeczy zakup kociąt jest bardzo prosty.

  • Idź do Cryptokitties Rynek.
  • Po wejściu zobaczysz to:

    Co to są Cryptokitties? Szybki kursImage Credit: Cryptokitties Kiedy zobaczysz kotka, który Ci się podoba, po prostu go kliknij.

  • Po tym wystarczy kupić kotka.

Załóżmy, że nie lubisz żadnego z kotów, które widzisz, możesz po prostu wyszukać kotka Gen 0. Te kotki znajdują się na karcie „Gen 0”.

Ok, teraz, kiedy już wiesz, jak kupować kocięta, spójrzmy, jak możesz spłodzić swoje kocięta.

  • Najpierw przejdź do Zakładka „siring” rynku.
  • Następnie zobaczysz wszystkie kocięta wystawione na spłodzenie.Co to są Cryptokitties? Szybki kursŹródło zdjęcia: Cryptokitties
  • Po tym jest prosta kwestia wyboru kotka, który chcesz mieć ze swoim kotkiem.

Zużycie gazu przez CryptoKitties.

Teraz przyjrzymy się jednemu z szalejących punktów dyskusji, które pojawiły się z powodu kryptowalut. Ilość zużytego gazu i sposób, w jaki zatykał łańcuch bloków Ethereum.

W chwili pisania tego artykułu jest to trzeci najbardziej energochłonny inteligentny kontrakt w Ethereum.

Co to są Cryptokitties? Szybki kurs

Źródło zdjęcia: Stacja benzynowa ETH

Sama popularność kotków zadała blockchainowi Ethereum kilka poważnych pytań. Ze względu na rosnące zapotrzebowanie na kocięta liczba niepotwierdzonych transakcji na blockchain wzrosła wykładniczo.

Co to są Cryptokitties? Szybki kurs

Źródło zdjęcia: kwarc

Z tego powodu Axiom, czyli firma zajmująca się kryptowalutami, została zmuszona do podwyższenia opłat za narodziny. Oto, co powiedzieli w swoim artykule w mediach:

„Podekscytowanie i adopcja, które widzieliśmy w tym tygodniu, były przytłaczające i nie mogliśmy być szczęśliwsi! Jednak sieć Ethereum jest całkowicie pełna. Jedynym sposobem, aby zapobiec opóźnieniom CryptoKitties, jest podniesienie cen gazu, aby wszystkie transakcje mogły zostać szybko zakończone. Wiemy, że wzrost cen spowoduje, że niektórzy z Was będą musieli spowolnić swój reżim hodowlany i jesteśmy tym niesamowicie rozczarowani. Ale kto wie? Może to spowolnienie oznacza po prostu, że pokochasz kotki, które już masz, o wiele bardziej ”

Wszyscy wyciągnęliśmy bardzo cenną lekcję z całego tego odcinka.

Chociaż Ethereum z pewnością odegra rolę w zdecentralizowanej przyszłości, w tej chwili po prostu nie ma środków, aby sprostać rosnącym wymaganiom głównego nurtu. Zdecydowanie muszą bardziej popracować nad skalowalnością, aby iść do przodu.

Ekonomiczny cykl kryptowalut

Natknęliśmy się na ten fascynujący artykuł Jaz Liu na medium. Dokumentuje cały cykl gospodarczy kryptokitties. Zamierzamy pobrać dane z jej artykułów dla tej konkretnej sekcji.

Jak działa gra oparta na „zbieraniu rzadkich rzeczy”? Działa na prostym pojęciu „rzadkości”.

Użytkownicy są zainteresowani zebraniem jak najmniej rzadkich przedmiotów kolekcjonerskich. Ale wtedy nasuwa się pytanie, kto właściwie decyduje, które cechy są rzadkie i pożądane?

Oto, co Arthur Camara, inżynier oprogramowania w zespole CryptoKitty w Vancouver, powiedział o tym:

„Słuchaj, nie powiedzieliśmy, że kotki 1-100 są rzadkie. To jest ludzka perspektywa niedoboru. Ludzie po prostu myślą, że są ważniejsi z jakiegoś powodu, może tak właśnie wyglądają. Gra polega na tym, że kociaki, które rozmnażają się najwięcej, zwiększą popularność tych cech. Więc jeśli hodujesz dużo kociąt z zielonymi oczami, będzie ich mniej. Ludzie kontrolują ten niedobór w sposób, i sami tworzą tę wartość. To użytkownicy tworzą ideę niedoboru z genami i swoimi kociętami ”.

Mając to na uwadze, zobaczmy, jak ekonomia CryptoKitty rozegra się w typowym cyklu biznesowym.

Co to są Cryptokitties? Szybki kurs

Źródło zdjęcia: średni

Etap 1: wzrost

Stanowi to pierwszy etap ekonomii kryptowalut. Średni koszt kotka początkowego wynosił 4 dolary, jednak w ciągu tygodnia wzrósł do 8 dolarów.

Etap 2: Szczyt

To drugi etap gospodarki, kiedy popyt przekracza wszelkie oczekiwania, a DAPP staje się głównym nurtem. Popyt był tak duży, że zablokował Ethereum Blockchain.

Recesja # 3

Co to są Cryptokitties? Szybki kurs

Źródło zdjęcia: Kitty Explorer

A po wzroście dojdzie do nieuchronnej recesji.

Jak widać na wykresie, liczba kupionych kociąt zdecydowanie spadła w ciągu ostatnich kilku dni.

Stopień 4 Depresja

Czy kotki osiągną absolutne dno, zanim wyzdrowieją??

To nie jest jasne. Jedno jest jednak oczywiste. Ze względu na ich popularność trudno to sobie wyobrazić.

Wniosek

Nie jest przesadą stwierdzenie, że kryptokoty szturmem podbiły świat. To, co tu widzieliśmy, to pierwsze popularne zastosowanie łańcucha bloków w formie czysto rekreacyjnej. To coś więcej niż tworzenie aplikacji użytkowych, ale może to stać się głównym nurtem.

Jednak to nie jedyna lekcja, jakiej nas nauczyli. Wszyscy wiemy teraz, że zdecydowanie należy popracować nad skalowalnością. Jeśli Ethereum będzie w stanie rozwiązać te problemy w przyszłości (z wykorzystaniem shardingu, plazmy itp.), Wtedy DAPP może naprawdę się przełamać i stać się istotną częścią ducha czasu.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me