Cryptokitties: află totul despre joc și pașii de urmat

a cryptokitties kriptopénz hírek mycryptoption

Cryptokitties nu sunt criptomonede. Sunt mai degrabă token-uri nefungibile (NFT) ce funcționează pe rețeaua blockchain a Ethereum. Astfel, fiecare CryptoKitty este unic, individual și se află în posesia utilizatorului, este validat prin blockchain iar valoarea sa se schimbă în funcție de raportul cerere-ofertă de pe piață. Acestea nu pot fi copiate, iar fără acordul utilizatorului nu pot fi transmise nici de către dezvoltatori.

Versiunea test a CryptoKitties a fost prezentată pe 19 octombrie 2017, cu ocazia hackathon-ului Ethereum, ETH Waterloo. În același an, pe 2 decembrie, a fost valorificată prima și cea mai prețioasă pisică, Genesis, în schimbul a 246,9255 ETH (117.712 dolari).

În ultimii ani, s-a constatat un interes crescut față de Dapps (aplicații descentralizate). Probabil știi că DAPPs nu se află în proprietatea vreunei autorități centrale, iar ele reprezintă o schimbare de paradigmă într-o lume din ce în ce mai centralizată.

Pentru ca Dapps să beneficieze la scară largă de atenția cuvenită, una dintre ele trebuia să se desprindă și să devină mare (tehnic vorbind, Bitcoin este tot un DAPP, dar aici nu vom discuta despre criptovalute). Desigur, au existat mai multe aplicații înaintea Cryptokitties care au fost urmărite cu interes, dar a fost nevoie ca una să iasă în față și să cuprindă atenția publicului.

Ce este Cryptokitties?

Cryptokitties este un joc virtual bazat pe blockchain, care permite utilizatorilor să obțină, să crească și să tranzacționeze pisici virtuale. Jocul a fost creat de compania blockchain Axiom Zen, cu sediul în Vancouver. Important de precizat, aceasta este prima aplicare cunoscută a DAPP în scop de recreere și timp liber.

Valorificarea Cryptokitties a ieșit din tipare. Oamenii au cheltuit mai mult de 12 milioane de dolari pentru a cumpăra pisici virtuale. Unele rapoarte susțin că au fost persoane care au câștigat mai mulți bani din cryptokitties decât dacă ar fi investit în fonduri de pensii.

Numeroase articole au scris despre „fenomenul kitty”, ceea ce a atras și mai mult atenția asupra jocului.

Fiecare pisică are propriul genom unic de 256-bit, care este adăugat tuturor pisicilor descendente prin intermediul algoritmului genetic (Genetic Algorithm).

Ce este algoritmul genetic?

Algoritmul genetic (GA) este o tehnică de optimizare utilizată pentru rezolvarea unor probleme de eficientizare neliniare. Funcționează asemenea geneticii din biologie. Începe prin generarea unor eventuale soluții primare, care sunt testate prin intermediul funcției obiectiv. Pe urmă, algoritmul generează soluții ulterioare din aceste soluții primare prin utilizarea unor operațiuni de origine biologică, cum ar fi selecția, încrucișarea și mutația.

Pe când genele din corpul nostru sunt compuse din proteine și alte diverse elemente, în GA sunt reprezentate prin numere. Să aruncăm o privire asupra procesului evoluției prin utilizarea algoritmului genetic. Vom folosi doar cazuri binare – deci cele în care genele pot fi reprezentate ca 1 și 0.

Selecția:

Fundamental, selecția înseamnă că de la o generație la alta vor fi păstrați părinții cu cele mai bune performanțe. Aceștia sunt singurii preferați pentru reproducere. De exemplu, cei doi părinți aleși prin selecție vor fi: părintele 1: 1010011000 părintele 2: 1001001010.

Încrucișarea

Aici vom alege variabilele comune ale celor doi părinți, ce vor fi transmise urmașului. Folosind exemplul: Părinte 1: 1010011000 Părinte 2: 1001001010  Urmaș: 1000011010. Cam asta se întâmplă și în viața reală. În acest fel primește copilul unele trăsături ale mamei și tatălui.

 Mutația

Mutația este atunci când luăm un părinte și modificăm aleatoriu câteva dintre variabilele sale. pentru a crea un urmaș. Facem asta pentru a ne asigura că sistemul poate descoperi și alte posibilități pentru soluția optimă. Părinte: 1010011000 Urmaș: 0101010001

Cryptokitties utilizează algoritmul genetic pentru a crea pisici noi. Se folosește de mecanismul încrucișării pentru a genera genomul urmașului, utilizând două pisici ca părinți. Acest genom de urmaș va fi folosit pentru crearea noii pisici.

După ce-am văzut cum funcționează algoritmul genetic, să aprofundăm și să ne uităm la contractul lor smart.

Contractul smart CryptoKitty

Întregul cod este se împarte în mai multe contracte mici. Se întâmplă astfel fiindcă în caz contrar corpul de cod uriaș ar face gestionarea codului imposibilă.

Arborele genealogic al contractelor arată astfel:

contract KittyAccessControl

contract KittyBase is KittyAccessControl

contract KittyOwnership is KittyBase, ERC721

contract KittyBreeding is KittyOwnership

contract KittyAuction is KittyBreeding

contract KittyMinting is KittyAuction

contract KittyCore is KittyMinting

După cum afirmă ghidul solidity: „Atunci când un contract moștenește din mai multe contracte, pe blockchain va fi creat doar un contract, iar acesta va copia codurile din toate contractele de bază.”

În acest caz, KittyCore este contractul care moștenește toate codurile din contractele de bază. Să definim ce face fiecare dintre aceste contracte.

1. KittyAccessControl

Contractul conferă dezvoltatorilor roluri speciale. Acest contract stabilește sistemul de control al întregului contract, neavând vreo legătură funcționarea jocului. Rolurile speciale stabilite de contract sunt:

CEO (director general): CEO-ul poate aloca alte roluri și schimba adresele contractelor smart dependente. Acesta poate chiar anula întreruperea contractului.

CFO: Poate retrage fonduri din KittyCore și din contractele de licitație.

COO: Poate elibera gen0 kitties pentru licitații și crea pisici promoționale.

2. CryptokittyBase

KittyBase este cel mai important contract în ceea ce privește „definirea pisicii”. Aici sunt stabilite regulile de bază pentru crearea pisicii.

Aceste pisici sunt de fapt o structură cu mai multe variabile.

struct Kitty

{

uint256 genes;

uint64 birthTime;

uint64 cooldownEndBlock;

uint32 matronId;

uint32 sireId;

uint32 siringWithId;

uint16 cooldownIndex;

uint16 generation;

}

Această parte a contractului urmărește și proprietarul pisicii, prin următoarea linie de cod:

mapping (uint256 => address) public kittyIndexToOwner;

3. Cryptokitty OwnerShip

KittyOwnerShip este definit astfel în contractul lor:

„Acesta furnizează metodele necesare tranzacțiilor de token-uri nefungibile, urmând standardele specificate în ERC-721.”

Ce este substituibilitatea? Investopedia o definește în felul următor:

„Substituibilitatea este posibilitatea schimbării bunului sau instrumentului pe alte bunuri sau instrumente de același fel.”

Să presupunem că ai împrumutat 20 de lei de la un prieten. Dacă îi înapoiezi tot o bancnotă de 20 de lei, totul se potrivește perfect. De fapt, poți să-i dai o bancnotă de 10 lei și două de 5; rămâne totul în regulă. Aici, leul are proprietăți fungibile (dar nu în toate cazurile).

Însă, dacă ai împrumutat mașina cuiva pe durata sfârșitului de săptămână, iar atunci când te întorci îi înapoiezi o altă mașină, persoana nu va fi mulțumită și își va cere propria mașină. De asemenea, dacă ai plecat cu o Dacia roșie și te-ai întors cu o altă Dacia roșie, dar nu cu aceeași, tot nu va funcționa. În acest caz, mașinile nu sunt instrumente fungibile.

4. CryptoKitty Breeding (reproducere)

Acesta este contractul unde stabilim acele funcții care sunt necesare ca două pisici să participe dea naștere la o nouă pisică prin reproducere. Există un proces de reproducere, iar pe urmă unul de naștere. Să vedem cum funcționează ambele:

function _breedWith(uint256 _matronId, uint256 _sireId) internal 
 
{
 
    Kitty storage sire = kitties[_sireId];
 
    Kitty storage matron = kitties[_matronId];
 
    matron.siringWithId = uint32(_sireId);
 
    _triggerCooldown(sire);
 
    _triggerCooldown(matron);
 
    delete sireAllowedToAddress[_matronId];
 
    delete sireAllowedToAddress[_sireId];
 
    pregnantKitties++;
 
    Pregnant(kittyIndexToOwner[_matronId], _matronId, _sireId, matron.cooldownEndBlock);
}

Ce se întâmplă în această bucată de cod?

În primul rând, luăm atât ID-ul mamei, cât și al tatălui, iar prin valorile „siring withId” ale mamei modificăm ID-ul tatălui. (De reținut: valoarea siringwithId a mamei negravide este 0, în timp ce în cazul uneia gravide, valoarea siringwithId va fi ID-ul tatălui).

Totodată, în sistem, numărul pisicilor gravide crește cu 1.

Acum să vedem cum funcționează procesul nașterii

function giveBirth(uint256 _matronId)
    external
    whenNotPaused
    returns(uint256)
{
 
Kitty storage matron = kitties[_matronId];
 
require(matron.birthTime != 0);
 
require(_isReadyToGiveBirth(matron));
 
uint256 sireId = matron.siringWithId
 
Kitty storage sire = 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);
 
address owner = kittyIndexToOwner[_matronId];
    
uint256 kittenId = _createKitty(_matronId, matron.siringWithId, parentGen + 1, childGenes, owner);
 
delete matron.siringWithId;
 
pregnantKitties--;
 
msg.sender.send(autoBirthFee);
 
return kittenId;
 
}

Prima dată, funcția verifică dacă mama este pregătită de naștere. Dacă răspunsul este da, parentGen (generația părintelui) va fi setat pe generația tatălui sau cea a mamei, în funcție de care este mai tânăr.

Pe urmă, vor fi create genele urmașului cu ajutorul funcției geneScience.mixGenes(). Algoritmul de reproducere este „sooper-sekret” și gestionat de un contract care pune în aplicare GeneScienceInterface. Algoritmul este pe sursă închisă, nefiind deschisă publicului.

După ce mama a născut, se vor petrece trei lucruri:

  • Numărul pisicilor gravide scade cu 1
  • Proprietarul noii pisici va fi cel care deține pisica mamă
  • Ecuația va apela la funcția „createKitty ()”, elaborată în KittyBase.

5. Licitații CryptoKitty

Aici găsim metodele publice de licitație a pisicilor. Funcționalitatea reală a licitației este dată de două contracte surori (unul pentru valorificare, altul pentru naștere), în timp ce crearea licitației și ofertarea sunt mediate mai ales prin acest segment al contractului de bază.

În acest contract, dezvoltatorii au stabilit diferite metode publice pentru licitația pisicilor. Principala funcționalitate a licitației a fost împărțită în două contracte surori:

setSaleAuctionAddress ().

setSiringAuctionAddress ()

Aceste funcții pot fi utilizate doar de CEO.

Dezvoltatorii au înființat două contracte surori din următorul motiv:

„Logica lor este puțin mai complexă și întotdeauna există riscul unor mici erori. Dacă le păstrăm în propriile contracte, le putem actualiza fără a perturba contractul principal ce urmărește proprietatea pisicii.”

6. CryptoKitty minting

Îți amintești de cele scrise anterior, că COO are dreptul de a crea pisicile promo și cele gen 0? Acest contract este cel care le asigură acest lucru.

Numărul pisicilor gen 0 și promo ce pot fi create este limitat. Apare și în cod:

  • uint256 public constant PROMO_CREATION_LIMIT = 5000;
  • uint256 public constant GEN0_CREATION_LIMIT = 45000;

Uită-te la acest contract:

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

    address kittyOwner = _owner;

if (kittyOwner == address(0)) {

         kittyOwner = cooAddress;

    }

    require(promoCreatedCount < PROMO_CREATION_LIMIT);

    promoCreatedCount++;

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

}

function createGen0Auction(uint256 _genes) external onlyCOO {

    require(gen0CreatedCount < GEN0_CREATION_LIMIT);

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

    _approve(kittyId, saleAuction);

    saleAuction.createAuction(

        kittyId,

        _computeNextGen0Price(),

        0,

        GEN0_AUCTION_DURATION,

        address(this)

    );

    gen0CreatedCount++;

}

Să verificăm funcția createPromoKitty ().

Dacă ne uităm mai îndeaproape, vor ieși în evidență unele aspecte:

  • COO poate crea orice promo kitty dorește, cu orice genă.
  • COO poate trimite promo oricui dorește.

La verificarea funcției createGen0Auction () putem constata următoarele:

  • COO are puteri depline legat de care pisică gen 0 dorește s-o creeze.
  • După ce-a fost creată, pisica merge direct la licitație.

7. CryptoKitty Core

Acesta este acel contract principal care rulează pe blockchain-ul Ethereum.

Contractul moștenește toate funcțiile contractelor anterioare, în plus stabilește și propriile metode:

function getKitty(uint256 _id)

    external

    view

    returns (

    bool isGestating,

    bool isReady,

    uint256 cooldownIndex,

    uint256 nextActionAt,

    uint256 siringWithId,

    uint256 birthTime,

    uint256 matronId,

    uint256 sireId,

    uint256 generation,

    uint256 genes

)

{

    Kitty storage kit = kitties[_id];

isGestating = (kit.siringWithId != 0);

isReady = (kit.cooldownEndBlock <= block.number);

cooldownIndex = uint256(kit.cooldownIndex);

nextActionAt = uint256(kit.cooldownEndBlock);

siringWithId = uint256(kit.siringWithId);

birthTime = uint256(kit.birthTime);

matronId = uint256(kit.matronId);

sireId = uint256(kit.sireId);

generation = uint256(kit.generation);

genes = kit.genes;

}

Fundamental, această funcție ne furnizează toate datele unei pisici specifice din blockchain. Din moment ce știm ce se întâmplă în culise, să vedem cum funcționează interfața în lumea reală.

Cum putem cumpăra CryptoKitties?

Înainte de a începe achiziția, vei avea nevoie de trei lucruri:

  • Browser web Chrome sau Firefox.
  • Wallet (portofel) Metamask.
  • Ether în portofelul Metamask.

De mai mult de atât nu vei avea nevoie pentru a începe.

Din moment ce dispui de toate astea, a cumpăra pisici este deosebit de simplu.

Du-te pe piața Cryptokitties. Îndată ce intri, vei vedea următoarele:

Cryptokitties

Pe urmă, pur și simplu trebuie să cumperi pisica. Să presupunem că nu-ți plac cele expuse; dacă este așa, poți căuta ușor o pisică Gen 0, sub căsuța cu aceeași denumire. Odată ce știm cum putem cumpăra kitties, să vedem cum le putem ”fabrica”.

  • Prima dată, du-te la secțiunea „siring” a pieței.
  • Vei vedea toate pisicile care pot fi folosite pentru reproducere.
  • În final, doar trebuie să selectezi pisica pe care dorești s-o împerechezi cu a ta.

 Consumul gas al CryptoKitties

Vom verifica un punct controversat al jocului, care a generat multe discuții aprinse – cantitatea de gas consumată și „înfundarea” blockchain-ului Ethereum.

Acest joc este al treilea cel mai mare contract smart consumator de gas din Ethereum. Popularitatea pisicilor naște întrebări serioase în blockchain-ul Ethereum; fiindcă prin cererea mare față de kitties, numărul tranzacțiilor neconfirmate de pe blockchain a crescut exponențial.

Din această cauză, Axiom – compania aflată în spatele Cryptokitties – a fost nevoită să mărească taxele de naștere; cum apare și în articolul lor:

„Entuziasmul și acceptarea pe care le-am constatat recent au fost extraordinare, nici nu putem fi mai fericiți de-atât! Însă rețeaua Ethereum s-a umplut complet datorită jocului. Singura modalitate de evitare a întârzierilor CryptoKitties este creșterea prețului gas, astfel toate tranzacțiile pot fi rapid finalizate. Știm că majorarea taxei înseamnă pentru mulți dintre voi că va trebui să încetiniți procesul de reproducere, ceea ce ne dezamăgește profund. Dar cine știe? Poate că această încetinire va determina să vă iubiți și mai mult pisicile pe care le aveți deja.”

Cu toate că Ethereum își are rolul într-un viitor descentralizat, momentan chiar nu are instrumentele necesare pentru a face față acestor solicitări în masă. Pentru a avansa, obligatoriu trebuie să lucreze mai mult la scalabilitate.

Ciclul economic al cryptokitties

Pe internet găsim articolul fascinant al lui Jaz Liu, care documentează întregul ciclu econimic al cryptokitties. Vom prezenta câteva dintre datele prezentate în acel articol.

Cum reușește să aibă succes un joc bazat pe colecționarea unor lucruri rare? Simplu, acesta funcționează pe baza principiului „rarității”. Utilizatorii sunt atrași de colectarea tuturor ciudățeniilor și cu cât este mai rar și mai interesant un obiect, cu atât mai mult îi va interesa. Apare însă o întrebare: cine decide care trăsături sunt rare și atrăgătoare?

Arthur Camara, un inginer software al echipei CryptoKitty din Vancouver, a afirmat următoarele legat de acest subiect:

„Nu se poate spune că pisicile dintre 1 și 100 sunt rare. Aceasta este perspectiva oamenilor asupra rarității. Ei cred că acestea sunt mai importante din anumite motive, poate datorită înfățișării lor. Jocul funcționează în așa fel încât pisicile care se reproduc cel mai mult, popularizează aceste trăsături. Astfel, dacă reproduci multe pisici cu ochi verzi, vor fi mai puțin rare și atrăgătoare. Oamenii controlează într-o anumită măsură această raritate și creează ei înșiși valorile. Utilizatorii sunt cei care generează ideea rarității, prin gene și pisicuțe.”

Având în vedere toate acestea, să ne uităm cum arată economia CryptoKitty într-un ciclu de afaceri tipic.

Jocul în ciclu de afaceri

1. etapă: Creștere

Reprezintă prima etapă a economiei kriptokitty. Costul inițial al unei pisici obișnuite era de 4 dolari, iar în decurs de o săptămână a crescut la 8 dolari.

2. etapă: Vârf

Este a doua etapă a economiei, unde cererea depășește toate așteptările și DAPP se extinde în masă. Interesul a fost atât de mare, încât „s-a înfundat” blockchain-ul Ethereum.

3. etapă: Recesiune

După creștere, a venit și inevitabila recesiune. Numărul pisicilor cumpărate a scăzut destul de mult.

4. szakasz: Depresiune

Oare Cryptokitties va intra în criză înainte să-și revină? Nu este foarte clar. Dar pare mult mai probabil ca popularitatea ei să împiedice ca acest lucru să se întâmple.

Concluzie

Cryptokitties a produs multă vâlvă, peste tot în lume. Ceea ce am văzut în cele prezentate este prima utilizare populară a blockchain în formă pur recreativă. Pe lângă aplicațiile utilitare, această formă de utilizare poate fi potrivită pentru a deveni mainstream.

Nu este singura lecție pe care am învățat-o prin intermediul jocului. Am aflat că mai trebuie lucrat neapărat și la scalabilitate. Dacă Ethereum reușește să rezolve în viitor aceste neajunsuri (prin utilizarea sharding, plasma, etc.), atunci Dapp-urile pot „exploda” și vor reuși să devină o componentă esențială a vremurilor noastre

Mai multe articole