Tutti pazzi per gli NFT?

Fungible o non-fungible, questo è il problema

Prendendo in prestito il titolo della famosa rubrica “Forse non tutti sanno che …”

NFT sta per non-fungible token per distinguerlo dal fungible token. La fungibilità per dirla in parole povere è la qualità di un token di non avere qualità. Nel senso che i token fungibili sono tali perché non distinguibili l’uno dall’altro. Ad esempio da un punto di vista contabile una somma di 1 euro è equivalente ad ogni altra somma di 1 euro. In questo senso l’euro sembrerebbe fungibile. Stesso discorso vale per le criptovalute. Un bitcoin vale un bitcoin e non esistono bitcoin speciali. Qui è proprio il caso di dire che uno vale uno.

Questa affermazione non è del tutto esatta in quanto un bitcoin appena minato vale più di un bitcoin che ha attraversato varie transazioni perché quest’ultimo potrebbe venire “contestato” e non accettato a causa di un suo sospetto uso illecito. Per questo accettare bitcoin dagli sconosciuti non è una buona idea, ma questo è un altro discorso.

In un mondo ideale, senza truffe e senza blockchain intelligence, i coin come bitcoin, ether, dash, litecoin eccetera sono considerati appunto fungibili

L’arte e(è) i non-fungible token

Esistono però dei token che nascono appositamente per essere non fungibili. L’esempio più famoso di qualche anno fa è rappresentato dai famosi cripto kitties, ovvero degli oggetti collezionabili che esistono in quanto rappresentati in blockchain e come tali godono della proprietà dei token, ovvero della scarsità. In altre parole mentre un oggetto digitale in generale potrebbe essere copiato un numero infinito di volte, un criptokitty o altro NFT è un individuo unico, o comunque in serie limitata, e può essere trasferito come una moneta elettronica. In pratica il mio criptokitty è mio finché sono io a detenerne il diritto di trasferirlo, ma se lo cedo a qualcuno io non ce l’ho più. Questo non significa che io non possa copiare all’infinito il file con la faccia del mio criptokitty, ma per la blockchain io non sono più il proprietario.

Questo concetto è forse il più difficile da capire per chi cerca di avvicinarsi alla cripto arte. In pratica acquistando un NFT da 10 euro o 10 milioni di euro io non sto impedendo agli altri di prendere l’immagine e copiarla all’infinito e farne la propria immagine copertina su facebook, sto invece acquistando una sorta di certificato digitale che dice che quella bitmap era nelle mani di qualcuno ad una data certa (costituendo una prova di esistenza e di possesso salvo che qualcuno dimostri il contrario), e che questo qualcuno ha messo in vendita questa prova digitale e noi possiamo acquistarla e vederla nel nostro wallet preferito. La blockchain registra tutti i passaggi di proprietà, senza notaio e senza ACI, da un indirizzo all’altro.

Tecnicamente i token, sia quelli fungibili che quelli non-fungibili sono implementati in blockchain tramite due standard principali: EIP20 ed EIP721. Il perché di questi strani nomi risiede nel fatto che sono nati come Ethereum Improvement Proposal. Il numero è semplicemente dovuto al fatto che quando è stato proposto EIP20 esistevano già 19 proposte precedenti (che non necessariamente riguardavano i token) e quindi è stato numerato in modo seriale.

Siccome dare una definizione di cosa sia l’arte moderna è oltre la portata di questo post e probabilmente oltre la portata della mia mente, mi limito a solleticare il lettore con l’idea che in questo caso, come già è avvenuto in passato (pensiamo alla merda d’artista di Manzoni), l’arte non sta tanto nel contenuto quanto in realtà nel contenitore.

No alternative text description for this image

Senza dilungarmi sulle caratteristiche tecniche dobbiamo almeno dire che i token sono secondo la terminologia di Ethereum degli Smart Contract. Ovvero, qualcuno scrive un codice informatico che implementa delle opportune specifiche e lo rilascia in blockchain e come tale viene eseguito da tutti i nodi della rete. Non tutti gli smart contract sono token, ma praticamente tutti i token su ethereum sono implementati come smart contract EIP20 e EIP721. Tali standard sono diventati talmente popolari che perfino altre blockchain oltre ethereum hanno li hanno adottati (ad esempio Binance Smart Chain). La specifica fondamentale di un token EIP20 è quella di implementare delle query e delle transazioni per ottenere balance e trasferire fondi da un indirizzo all’altro. Limitandosi alle due fondamentali queste sono

transferFrom (from, to, amount)

balanceOf (address)

Sì, il codice non è simpatico e interrompe il flusso di lettura. Ma si capisce abbastanza bene che la prima trasferisce un certo ammontare di token dal conto di chi la invoca verso un conto chiamato “to”. Mentre la seconda ci dice a quanto ammonta il balance di un certo indirizzo. Questi sono i token fungibili. Ma quelli non fungibili?

La transazione di trasferimento in questo caso deve anche riportare quale esemplare del token vogliamo trasferire ed assume una forma

transferFrom (from, to, tokenId)

Ovvero, non è più la quantità “amount” che dobbiamo trasferire, ma l’esemplare particolare. Qui le cose si fanno un po’ complicate. Infatti in teoria basterebbe un solo smart contract eip721 per rappresentare tutti gli nft di tutti gli utenti (almeno su Ethereum), ma in realtà non è quello che succede. Ad esempio lo smart contract 

https://etherscan.io/address/0x06012c8cf97bead5deae237070f9587f8e7a266d

Rappresenta tutti i cryptokitties ma nessun altro collectible, e ogni diverso kitty ha un suo id unico. Il mio ad esempio è un gatto con id = 1950572

Bello! Vero? Ma perché il contratto 0x060…266d del mio gatto non viene usato per tutti i collectible del mondo? Dalle figurine dell’NBA fino alle opere d’arte. La risposta è che i cryptokitty oltre ad implementare il protocollo EIP721 hanno nel loro smart contract altre funzionalità proprie e non standard, come ad esempio il genoma ed il fatto di potersi accoppiare per generare altri esemplari.

Ho capito, quindi se voglio implementare un mio smart contract con funzioni speciali che sia anche compatibile EIP721 così da poterlo vedere scambiato su ogni piattaforma Ethereum la cosa è semplice. Lo voglio fare quanto costa?

Ora, a parte il costo del programmatore, prendendo semplicemente il codice dello smart contract e facendone il deployment il gas necessario (nel caso di criptokitty) è stato 3,769,599 gas (grazie a etherscan è possibile vedere la tx di contract creation). Oggi (21 marzo) con i valori di gas price mediani costerebbe circa 0.63 ether ovvero circa $1100 😱😱. Quindi pensiamoci bene se vogliamo mettere online un nuovo EIP721. Se abbiamo ambizioni di creare un ecosistema ed una app per molti utenti ha senso, altrimenti è solo un gran costo di gas.

La regola d’oro in Ethereum è: fare transazioni è costoso ma fare il deployment di nuovi contratti è super costoso. Ormai quasi quanto andare da un notaio.

One ring to rule ‘em all = ERC1155

Ci sono altri standard? La risposta è sì, ma nessuno al momento compete con EIP20 ed EIP721 per i token fungibili e infungibili. Qualcuno però ha avuto una brillante idea. Se ho la necessità di emettere tanti token diversi, ad esempio diversi token fungibili con simboli diversi, supply diversi, e magari anche qualche collezione di token non-fungibili e non voglio usare uno smart contract per ogni “token” come posso fare? La risposta è ERC1155, un nuovo standard in fase di rapida diffusione.

La sua caratteristica è la gestione in contemporanea di più asset, cioè un solo smart contract è in grado di tenere la contabilità di tanti token fungibili e non-fungibili. Ogni token è rappresentato da un suo Id specifico e tutti i token con supply=1 sono di fatto non-fungibili.
La sua funzione transfer quindi rispetto a quella di EIP20 si evolve in qualcosa di più barocco


// ERC-1155
function safeBatchTransferFrom(
address _from,
address _to,
uint256[] calldata _ids,
uint256[] calldata _values,
bytes calldata _data
) external;

Bella vero?

Dove in un colpo solo si possono trasferire da “from” a “to” diversi importi relativi a diversi token.

Mi chiedo perché a questo punto non abbiano previsto di fornire “from” e “to” come array anch’essi. Si sarebbe potuto implementare una super transazione per effettuare in un colpo scambi di una moltitudine di asset, per una moltitudine di importi scambiati e tra una moltitudine di pagatori/paganti. Ma forse sarebbe stato troppo complesso.

Esistono NFT al di fuori di Ethereum?

Sì, #Algorand ad esempio fornisce un supporto nativo alla creazione di asset sulla sua blockchain, i cosiddetti Algorand Standard Asset (ASA)

Non è necessario creare nessuno smart contract e fare complicati audit di sicurezza. Esiste un tipo di transazione che crea gli ASA punto e basta. Si inseriscono parametri come il supply e altri metadati necessari. Nel caso di un #NFT semplicemente si crea un nuovo ASA con supply pari a uno. Per quanto riguarda le fee di creazione trattandosi di una semplice transazione il costo è di 0.001 Algo.

Algorand è stata la scelta per il nostro progetto uncommon-creative.net

Algorand porta con sé un gran numero di innovazioni e pur essendo così giovane ha già un gran bell’ecosistema ed un sdk molto completo. In Uncommon Creative implementiamo smart legal contract e sistemi p2p per la soluzione delle dispute. Utilizziamo gli NFT sia per notarizzare i testi legali che per trasferire la proprietà intellettuale sviluppata durante l’esecuzione di un contratto. Incorporare un contratto legale in un NFT è interessante, permette ad esempio di trasferire obblighi e diritti del contratto ad un terzo con una transazione in blockchain. Allo stesso modo i diritti commerciali su un’opera possono essere trasferiti e tracciati in modo matematico sulla blockchain.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...