Introduzione a ERC-721: il token CryptoKitty

Cryptokitties ci ha mostrato che forse creare cripto-collezionabili conformi a ERC-721 è il modo per andare avanti quando si tratta di un’adozione diffusa e diffusa. In questa guida, vediamo cosa significa ERC-721 e come funziona.

Circa 10 mesi fa, tutti nello spazio crittografico si sono imbattuti in uno dei titoli più strani di sempre.

Introduzione a ERC-721: il token CryptoKitty

L’idea dei crypto kitties è molto semplice. Crei il tuo gatto digitale in cima alla blockchain di Ethereum e poi puoi prenderti cura di loro, riprodurli, metterli all’asta ecc..

Creazione di standard per i token

Secondo il sito web di Ethereum, “Ethereum è una piattaforma decentralizzata che esegue contratti intelligenti: applicazioni che funzionano esattamente come programmato senza alcuna possibilità di tempi di inattività, censura, frode o interferenza di terze parti. Queste app vengono eseguite su una blockchain personalizzata, un’infrastruttura globale condivisa enormemente potente che può spostare il valore e rappresentare la proprietà della proprietà “.

Per dirla semplicemente, Ethereum diventerà un supercomputer decentralizzato in cui chiunque, ovunque può noleggiare un po ‘di potenza di calcolo e creare applicazioni decentralizzate (Dapps) che possono essere eseguite sulla piattaforma Ethereum.

Queste Dapp sono alimentate da contratti intelligenti che sono codificati utilizzando il linguaggio di programmazione Solidity. Questi contratti intelligenti si autoeseguiranno con istruzioni specifiche scritte sul suo codice che vengono eseguite quando vengono soddisfatte determinate condizioni.

C’è un’altra cosa di cui tenere conto quando si tratta del funzionamento di queste applicazioni decentralizzate.

Le Dapp sono finanziate dagli ICO. Le ICO o Initial Coin Offerings sono la versione in criptovaluta delle Initial Public Offer o IPO. Tuttavia, rispetto alle IPO, le ICO sono molto più amichevoli per gli imprenditori. Quindi, per mantenerlo breve, quando si tratta di ICO, gli sviluppatori distribuiscono token in cambio di fondi.

Un token è una rappresentazione di qualcosa nel suo particolare ecosistema. Potrebbe essere valore, posta in gioco, diritto di voto o qualsiasi altra cosa. Un token non è limitato a un ruolo particolare; può svolgere molti ruoli nel suo ecosistema nativo, come ad esempio:

  • Pedaggio: Un token può fungere da gateway per Dapp. Fondamentalmente, per accedere alla Dapp, dovrai tenere i token.

  • Diritti di voto: I token possono anche qualificare i titolari per avere determinati diritti di voto. Pensa a EOS, possedere token EOS ti consentirà di votare per i produttori di blocchi.

  • Scambio di valore: Questo è uno dei ruoli più comuni dei token all’interno dell’ecosistema. I token possono aiutare a creare un sistema economico interno all’interno dell’applicazione.

  • Miglioramento dell’esperienza utente: Il token può anche consentire ai possessori di arricchire l’esperienza dell’utente all’interno dei confini di un particolare ambiente. Per esempio. In Brave (un browser web), i possessori di BAT (token utilizzati in Brave) avranno i diritti per arricchire l’esperienza del cliente utilizzando i loro token per aggiungere pubblicità o altri servizi basati sull’attenzione sulla piattaforma Brave.

  • Moneta: Può essere utilizzato come riserva di valore che può essere utilizzato per condurre transazioni sia all’interno che all’esterno dell’ecosistema dato.

Quindi, ora sappiamo l’importanza dei token, tuttavia, tutte le ICO nei primi giorni stavano affrontando alcuni seri ostacoli.

Ostacoli simbolici

Nei primi giorni, sembrava che ogni gettone ICO stesse cercando di “reinventare la ruota” per quanto riguarda l’esecuzione. Ciascuno di quei token aveva il proprio elenco di funzioni. Ora, questo ha portato a tutta una serie di nuovi problemi.

Per creare un ecosistema sano su Ethereum, è assolutamente essenziale che le Dapp costruite su di esso possano interagire tra loro senza problemi. Tuttavia, cosa succederà se abbiamo due token, diciamo Token Alpha e Token Beta, ed entrambi hanno strutture di contratto intelligenti diverse?

Affinché i due token interagiscano, gli sviluppatori dovranno studiare attentamente entrambi i loro contratti e mappare esattamente come questi token funzioneranno l’uno con l’altro.

Ora, questo non è di buon auspicio per la scalabilità ora, lo fa?

Se ci sono 100 token diversi con 100 contratti diversi, per limitare tutte le qualifiche e le condizioni richieste per assicurarsi che i trasferimenti possano passare tra tutti questi token sarà necessaria una quantità enorme di calcoli complessi. Questo non è affatto uno scenario ideale.

Qualcosa doveva essere fatto e il 19 novembre 2015 Fabian Vogelsteller ha escogitato una soluzione ingegnosa.

Secondo Wikipedia, ERC-20 è un “elenco di regole che un token Ethereum deve implementare, dando agli sviluppatori la possibilità di programmare come funzioneranno i nuovi token all’interno dell’ecosistema Ethereum. Lo standard di token ERC-20 è diventato popolare tra le società di crowdfunding che lavorano su casi di offerta iniziale di monete (ICO) grazie alla semplicità di implementazione, insieme al suo potenziale di interoperabilità con altri standard di token di Ethereum.”

Per mantenerlo semplice, ERC-20 è una guida di regole e regolamenti che aiuteranno a creare un modello per i contratti intelligenti basati su Ethereum per creare i loro token. “ERC” sta per “Ethereum Request for Comment”, mentre il numero ’20’ è il numero assegnato a questa richiesta.

Diamo un’occhiata a ciò che getta le basi di ERC20:

  • totalSupply
  • equilibrio di
  • trasferimento
  • trasferito da
  • approvare
  • indennità

Ora, queste sono le regole e le funzioni che i token ERC20 devono avere obbligatoriamente. Tuttavia, possono anche avere le seguenti 3 caratteristiche opzionali.

  • Nome token
  • Simbolo
  • Decimale (fino a 18)

I token ERC-20 sono responsabili degli standard dei token di tutte le ICO in circolazione. Tuttavia, poiché vengono utilizzati principalmente come sistema di pagamento, i token ERC-20 devono avere anche un’altra caratteristica ….

Cos’è la fungibilità?

La mancanza di fungibilità è un grosso problema che le criptovalute devono risolvere.

Secondo Investopedia, “La fungibilità è l’intercambiabilità di un bene o di un bene con altri beni individuali o beni dello stesso tipo.

Allora, cosa è fungibile e cosa non è fungibile.

Se prendi in prestito 100 USD dal tuo amico e gli restituisci un’altra banconota da 100 dollari, allora va benissimo. In effetti, puoi dare al tuo amico 2 banconote da 50 dollari o anche 10 banconote da 10 dollari. Andrà benissimo perché i dollari (o le valute cartacee in generale) sono, per la maggior parte, fungibili.

D’altra parte, che dire di … un materiale da collezione?

Per esempio. Supponi che per qualche motivo tu abbia preso il dipinto di Picasso del tuo amico per un giorno? Ora, cosa succederà se, quando dovrai restituirlo, le restituirai qualche altro dipinto di Picasso? Ancora peggio, e se invece di restituire il dipinto, restituissi il dipinto in pezzi più piccoli?

Ad ogni modo, sarai fortunato se non ti eviscererà.

Perché è così?

A differenza della valuta, i dipinti e qualsiasi tipo di oggetto da collezione non sono fungibili.

La valuta acquista effettivamente più valore grazie alla sua fungibilità. Più una valuta è ampiamente considerata e accettata, più persone la useranno e quindi più il suo valore percepito sarà.

Questa equazione, tuttavia, cambia completamente quando si sostituisce la valuta con oggetti da collezione. Un oggetto da collezione ottiene il suo valore solo dalla sua unicità e rarità.

Introduzione a ERC-721: il token CryptoKitty

Questa carta da baseball del 1952 del leggendario Mickey Mantle è costata fino a 1,13 milioni di dollari in un’asta. Ora, sarebbe davvero andato per così tanto se ci fossero state come altre 100 carte “Mickey Mantle 1952” disponibili?

Questa qui è la differenza fondamentale fondamentale tra ERC-20 e ERC-721.

ERC-721

Lo standard dei token ERC-721 aiuta a creare token non fungibili. In molti modi, è abbastanza simile a ERC-20 nella funzionalità. Questa somiglianza esiste per due motivi:

  • In primo luogo, è più facile per gli sviluppatori effettuare la transizione. Poiché tutti gli sviluppatori di ethereum hanno già familiarità con ERC-20, non dovranno imparare una miriade di cose nuove
  • Rende la vita molto più semplice per gli utenti che possono conservare questi token in normali portafogli e scambiarli negli scambi.

L’ERC-721 ottiene le sue proprietà non fungibili acquisendo la proprietà di quel particolare token. Questo è il motivo per cui le funzioni takeOwnership sono incluse nello standard ERC-721.

Funzioni ERC-721

Lo standard ERC-721 definisce le seguenti funzioni: name, symbol, totalSupply, balanceOf, ownerOf, approve, takeOwnership, transfer, tokenOfOwnerByIndex e tokenMetadata. Definisce inoltre due eventi: Trasferimento e Approvazione.

Prima di entrare nelle discussioni sulle singole funzioni, è necessario sapere cosa si intende per proprietà del token e creazione del token delle funzioni ERC-721

Proprietà del token

Quando acquisti token ERC-20, i tuoi diritti di proprietà saranno scritti negli smart contract. Il contratto intelligente contiene anche dati su quanti gettoni avrà ogni singolo indirizzo dopo l’affare … e questo è tutto. Il fatto è che questi contratti non devono preoccuparsi di token specifici perché sono fungibili, quindi sono tutti uguali.

Tuttavia, il valore di un token ERC-721 non è lo stesso di un altro token ERC-721 a causa della sua non fungibilità. Aggiungere un indirizzo e un saldo al contratto non sarà sufficiente, è necessario aggiungere anche i dettagli di proprietà univoci di un token.

Creazione di token

La creazione di token nei token ERC-20 riguarda il bilanciamento dei token. Quindi, tutto ciò che devi fare è impostare un limite superiore e assicurarti che le persone non possano creare più gettoni del limite superiore. Rispetto a ciò, la creazione di token ERC-721 è molto più complicata. Lo standard ERC-721 mantiene un array di token e ogni singolo token viene aggiunto all’array separatamente.

Il contratto è così definito:

contratto ERC721 {

// Funzioni compatibili con ERC20

nome funzione () ritorni costanti (nome stringa);

simbolo di funzione () ritorni costanti (simbolo di stringa);

funzione totalSupply () ritorni costanti (uint256 totalSupply);

funzione balanceOf (indirizzo _owner) ritorni costanti (uint balance);

// Funzioni che definiscono la proprietà

la funzione ownerOf (uint256 _tokenId) restituisce la costante (proprietario dell’indirizzo);

approvazione della funzione (indirizzo _to, uint256 _tokenId);

funzione takeOwnership (uint256 _tokenId);

trasferimento della funzione (indirizzo _to, uint256 _tokenId);

funzione tokenOfOwnerByIndex (address _owner, uint256 _index) ritorni costanti (uint tokenId);

// Metadati del token

la funzione tokenMetadata (uint256 _tokenId) restituisce la costante (stringa infoUrl);

// Eventi

Trasferimento evento (indirizzo indicizzato da _from, indirizzo indicizzato da _to, uint256 _tokenId);

Approvazione evento (indirizzo indicizzato _owner, indirizzo indicizzato _approved, uint256 _tokenId);

}

Ora esaminiamo ciascuna di queste funzioni. Grida a Gerald Nash per i dati.

# 1 nome ()

Questa funzione viene utilizzata per definire il nome del token per contratti e applicazioni esterni. Vediamo come funziona.

contratto Blockgeeks {

nome funzione () costante restituisce (nome stringa) {

ritorno "Leggi Blockgeeks";

}

}

# 2 simbolo ()

La funzione symbol () aiuta con l’identificazione del token, creando la sua scorciatoia e il simbolo. La funzione fornisce anche la compatibilità con lo standard token ERC20.

contratto Blockgeeks {

simbolo di funzione () ritorni costanti (simbolo di stringa) {

ritorno "BG";

}

}

# 3 fornitura totale ()

La funzione totalSupply () definisce il numero totale di token disponibili nel contratto e restituisce anche il numero totale di monete disponibili sulla blockchain. La fornitura non deve essere costante.

contratto Blockgeeks {

// Può essere un numero arbitrario

uint256 private totalSupply = 1000000000;

function totalSupply () constant returns (uint256 supply) {

return totalSupply;

}

}

# 4 balanceOf ()

Questa funzione viene utilizzata per trovare il numero di token che possiede un determinato indirizzo.

contratto Blockgeeks {

mapping (indirizzo => uint) saldi privati;

funzione balanceOf (address _owner) costanti restituisce (uint balance)

{

saldi dei resi [_proprietario];

}

}

Funzioni di proprietà

Veniamo ora alle funzioni di proprietà dei token ERC-721. Le due aree particolari in cui i token ERC-721 mostrano la loro qualità unica sono la proprietà e la creazione. Esaminiamo entrambe queste aree e come si comportano sia l’ERC-20 che l’ERC-721 in quelle categorie.

Le funzioni di proprietà sono le seguenti:

  • proprietario di()
  • approvare()
  • assumere la proprietà()
  • trasferimento()
  • tokenOfOwnerByIndex ()

# 1 proprietario di ()

Lo scopo di questa funzione è restituire l’indirizzo del proprietario del token. Poiché ogni singolo token ERC721 è non fungibile e unico, è referenziato sulla blockchain tramite il suo ID univoco.

Si può facilmente determinare il proprietario del token utilizzando l’ID.

contratto Blockgeeks {

mappatura (uint256 => address) tokenOwners privati;

mappatura (uint256 => bool) token privatoExists;

funzione ownerOf (uint256 _tokenId)

ritorni costanti (proprietario indirizzo) {

require (tokenExists [_tokenId]);

return tokenOwners [_tokenId];

}

}

# 2 approva ()

Questa funzione approva o concede a un’altra entità l’autorizzazione a trasferire un token per conto del proprietario.

Capiamo questo con un esempio.

Se Alice possiede 1 BG, può chiamare la funzione di approvazione per il suo amico Bob. Quando la chiamata ha esito positivo, Bob assumerà la piena proprietà per eseguire operazioni sul token in un secondo momento per conto di Alice.

contratto Blockgeeks {

mapping (indirizzo => mapping (indirizzo => uint256)) consentito;

function approve (address _to, uint256 _tokenId) {

require (msg.sender == ownerOf (_tokenId));

require (msg.sender! = _to);

consentito [msg.sender] [_ to] = _tokenId;

Approvazione (msg.sender, _to, _tokenId);

}

}

# 3 takeOwnership ()

L’idea della funzione takeOwnership () è di agire come una funzione di ritiro. Una parte esterna può chiamarlo per prelevare i token dall’account di un altro utente. Quindi, se Alice consente a Bob di possedere una certa quantità di token e desidera che ritiri detti token dal saldo di un altro utente, utilizzerà la funzione takeOwnership ().

contratto Blockgeeks {

function takeOwnership (uint256 _tokenId) {

require (tokenExists [_tokenId]);

indirizzo oldOwner = ownerOf (_tokenId);

indirizzo newOwner = msg.sender;

require (newOwner! = oldOwner);

require (consentito [oldOwner] [newOwner] == _tokenId);

saldi [vecchio proprietario] – = 1;

tokenOwners [_tokenId] = newOwner;

saldi [nuovoProprietario] + = 1;

Trasferimento (oldOwner, newOwner, _tokenId);

}

}

# 4 trasferimento ()

La funzione transfer () è un altro metodo utilizzato per trasferire i token. Consente al proprietario del token di inviarlo a un altro utente, simile a una criptovaluta standalone. Questo trasferimento può essere avviato solo se l’account ricevente è stato precedentemente approvato come proprietario del token dall’account mittente.

contratto Blockgeeks {

mapping (indirizzo => mappatura (uint256 => uint256)) ownerTokens privato;

function removeFromTokenList (address owner, uint256 _tokenId) private {

for (uint256 i = 0; ownerTokens [owner] [i]! = _tokenId; i ++) {

ownerTokens [proprietario] [i] = 0;

}

}

trasferimento di funzioni (indirizzo _to, uint256 _tokenId) {

indirizzo currentOwner = msg.sender;

indirizzo newOwner = _to;

require (tokenExists [_tokenId]);

require (currentOwner == ownerOf (_tokenId));

require (currentOwner! = newOwner);

require (newOwner! = address (0));

removeFromTokenList (_tokenId);

saldi [vecchio proprietario] – = 1;

tokenOwners [_tokenId] = newOwner;

saldi [nuovoProprietario] + = 1;

Trasferimento (oldOwner, newOwner, _tokenId);

}

}

# 5 tokenOfOwnerByIndex () [Facoltativo]

Ogni proprietario di token non fungibile può possedere più di un token alla volta. Come abbiamo detto, ogni token è referenziato dal suo ID univoco, quindi può essere davvero difficile per ogni utente tenere traccia dei singoli token che può possedere.

Per snellire questo processo e renderlo molto più semplice, il contratto tiene un registro degli ID di ogni token che ogni utente possiede. Per questo motivo, ogni singolo token di proprietà di un utente può essere recuperato dal suo indice nell’elenco (array) di token di proprietà dell’utente.

La funzione tokenOfOwnerByIndex ci consente di recuperare un token in questo metodo.

contratto Blockgeeks {

mapping (indirizzo => mappatura (uint256 => uint256)) ownerTokens privato;

function tokenOfOwnerByIndex (address _owner, uint256 _index) costanti restituisce (uint tokenId) {

return ownerTokens [_owner] [_ index];

}

}

Metadati

I metadati sono un insieme di dati che conferisce più carattere e personalità ai dati principali. I metadati hanno molti scopi importanti come la descrizione dei dati, la navigazione dei dati, il trasferimento dei dati, i metadati hanno un ruolo importante nella gestione delle risorse digitali. I metadati giocano un ruolo chiave nel sistema informativo digitale.

In ERC-721, la funzione tokenMetada () aiuta a definire i metadati del token.

contratto Blockgeeks {

mappatura (uint256 => string) tokenLinks;

function tokenMetadata (uint256 _tokenId) constant returns (string infoUrl) {

return tokenLinks [_tokenId];

}

}

Eventi

Gli eventi vengono attivati ​​ogni volta che un contratto li chiama e vengono trasmessi a tutti i programmi di ascolto una volta che sono stati licenziati.

I programmi al di fuori del contratto ascoltano gli eventi in modo che possano eseguire il codice al suo interno non appena viene avviato. Lo standard ERC-721 si occupa di due eventi:

  • Trasferimento()
  • Approvazione()

# 1 Trasferimento

Ogni volta che un token cambia di mano, questo evento viene generato. Ogni volta che la proprietà di un token passa da una persona all’altra, questo evento viene licenziato. Descrive in dettaglio quanto segue:

  • Quale account ha inviato il token
  • Quale account ha ricevuto il token
  • Quale token è stato trasferito (tramite controllo ID)

<stile div ="sfondo: #ffffff; overflow: auto; larghezza: auto; bordo: grigio pieno; larghezza del bordo: .1em .1em .1em .8em; padding: .2em .6em;"><pre style ="margine: 0; line-height: 125%">contratto Blockgeeks {

Approvazione evento (indirizzo indicizzato _owner, indirizzo indicizzato _approved, uint256 _tokenId);

}

pre>div>

Approvazione n. 2

Questo secondo evento viene generato ogni volta che un utente consente a un altro utente di assumere la proprietà di un particolare token. L’evento descrive in dettaglio quale account è attualmente proprietario del token e quale account sta ottenendo l’autorizzazione per possederlo in futuro. Controlla anche l’ID del token per sapere quale particolare token è stato approvato per il trasferimento della sua proprietà.

contratto Blockgeeks {

Approvazione evento (indirizzo indicizzato _owner, indirizzo indicizzato _approved, uint256 _tokenId);

}

ERC-271 e il futuro

I Cryptokitties al loro apice sono diventati davvero virali. In effetti, a un certo punto è stato il terzo contratto più affamato di gas su Ethereum.

Introduzione a ERC-721: il token CryptoKitty

Tuttavia, è diventato troppo popolare per il suo bene. In poco tempo, ha completamente intasato la rete Ethereum, che semplicemente non era pronta a gestire l’enorme domanda

Introduzione a ERC-721: il token CryptoKitty

Le cose sono andate così male che Axiom, alias la società dietro i cryptokitties, è stata costretta ad aumentare le tariffe di nascita. Questo è ciò che hanno detto nel loro articolo medio:

L’entusiasmo e l’adozione che abbiamo visto questa settimana sono stati travolgenti e non potremmo essere più felici! Tuttavia, la rete Ethereum è completamente piena. L’unico modo per evitare che CryptoKitties sia in ritardo è aumentare i prezzi del gas in modo che tutte le transazioni possano essere completate rapidamente. Sappiamo che l’aumento dei prezzi significherà che alcuni di voi avranno bisogno di rallentare il proprio regime di allevamento e ne siamo incredibilmente delusi. Ma chi lo sa? Forse questo rallentamento significherà solo che amerai i gattini che hai già molto di più.

Abbiamo imparato due lezioni inestimabili da questo intero episodio:

  • Ethereum non è pronto per Dapp su larga scala (ancora)
  • C’è una grande richiesta di criptovalute da collezione.

Espandiamo il secondo punto.

Adozione mainstream tramite ERC-721

Non dimentichiamo che Cryptokitties, uno dei Dapp di maggior successo di tutti i tempi, non stava risolvendo alcun problema nell’ecosistema, né stava portando utilità rivoluzionaria nel sistema. È un semplice Dapp ricreativo che ha permesso agli utenti di crescere e allevare i propri gattini.

Forse è qui che risiede il vero percorso verso l’adozione mainstream.

La storia ci ha insegnato che le persone hanno ripetutamente abbracciato e adottato una nuova tecnologia tramite un veicolo che potrebbe non essere stato l’obiettivo previsto (di quelle tecnologie) in primo luogo.

Facciamo un esempio piuttosto pertinente.

Jeff Bezos, l’uomo più ricco del mondo, ha un patrimonio netto che supera i 150 miliardi di dollari. Ha fatto le sue ricchezze fondando Amazon, facilmente il più grande sito di e-commerce al mondo.

Il mercato delle console di gioco vale $ 50 miliardi e la Playstation di Sony possiede 53% del mercato Condividere. La PlayStation fa notoriamente l’uso di dischi Blu Ray.

La grande popolarità di Amazon e PS4 è tutta dovuta alla sua ridicola adozione mainstream.

Tuttavia, puoi indovinare cosa ha reso l’e-commerce e Blu Ray ampiamente accettati in primo luogo?

L’industria della pornografia.

Sul serio. Guarda in alto.

Siamo abbastanza sicuri che l’industria della pornografia non fosse il mercato previsto dell’e-commerce e del Blu Ray quando entrambi hanno iniziato.

ERC721 – Conclusione

erc 721 e cryptokitties

Gli oggetti da collezione ERC-721 ci hanno mostrato un modo comprovato per ottenere l’adozione della crittografia mainstream. C’è, tuttavia, molto lavoro da fare prima di poterlo fare. Detto questo, l’idea di creare oggetti da collezione non fungibili sulla blockchain ha molte promesse e diventerà sempre più sofisticata nel tempo.

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