Co to jest NFT?
Tokeny NFT wdarły się ostatnio szturmem na główną scenę wszystkich branżowych portali dzięki sprzedaży cyfrowych obrazów za niebotyczne kwoty. Co różni je od innych tokenów?
NFT to skrót od wyrażenia non-fungible token (token niezamienialny), który jest zaprzeczeniem “tradycyjnych” tokenów stojących za większością kryptowalut. Spójrzmy na to w ten sposób, jeżeli zgubisz banknot o nominale 100zł i znajdzie go nieuczciwy znalazca, to może on bez przeszkód zapłacić nim w sklepie, ponieważ nie ma on przypisanego konkretnego właściciela. Jest to więc zasób zamienny, jeżeli towar kosztuje 100zł, możemy za ten towar zapłacić dowolnym banknotem o tej wartości.
Kryptowaluty uważane są za technologię pozwalającą na rzucenie wyzwania światu finansowemu. W czasach gdy tradycyjny pieniądz jest drukowany (bądź “wyklikiwany”) a powielanie czegoś w cyfrowym świecie jest praktycznie darmowe – Blockchain miał sprawić, że zasoby w świecie wirtualnym znowu zaczną się liczyć i dzięki zabezpieczeniom kryptograficznym zaszytym w Blockchain, kryptowalut nie będzie można sobie kreować wedle uznania. I tak też jest, dzięki algorytmom konsensusu i konstrukcji sieci za każdym nowym blokiem musi stać wykonana praca (Proof of Work) lub inne założenie konsensusu.
NFT a kryptowaluty
Mimo, że koncepcja powstała wcześniej, to historia NFT nabrała rozpędu dopiero w roku 2017 wraz z ukazaniem się projektów CryptoPunks i CryptoKitties. Polegały one na kupnie swojego unikalnego awatara, którego własność potwierdzał właśnie token NFT. Zasięg tych projektów i wyceny ich tokenów już wtedy przyprawiały o zawrót głowy.
Z technicznego punktu widzenia NFT zostało ustandaryzowane wraz z pojawieniem się propozycji EIP-721, które skutkowało późniejszą implementacją i wprowadzeniem standardu ERC-721 do sieci Ethereum.
Czym są EIP i ERC?
EIP to skrót od Ethereum Improvement Proposal, który opisuje propozycje potencjalnych aktualizacji działania platformy Ethereum. EIP dokumentują techniczne propozycje zmian i służą jako główne źródło prawdy dla społeczności. Wszystkie zmiany w Ethereum zaczynają się od opisania ich w EIP.
ERC, czyli Ethereum Request for Comments jest typem EIP, który definiuje zmiany w standardach działania Blockchaina Ethereum takich jak smart kontrakty, standardy tokenów, portfeli, rejestry nazw, schematy URI i formaty bibliotek.
ERC-20
Zacznijmy od początku, czyli od ERC-20
, który przez twórców Ethereum nazwany jest po prostu standardem dla tokenów, czyli właściwie podstawą działania całej sieci.
Jest to standard dla tokenów wymiennych (fungible tokens), który mówi, że jeżeli wartość i typ tokena są takie same dla dwóch tokenów, to są one identyczne – jak w przykładzie z banknotami z poprzedniego akapitu.
Standard opisuje podstawowe funkcjonalności, takie jak zasady przenoszenia tokenów pomiędzy kontami, pobranie salda danego konta czy ilość tokenów w całej sieci.
Jeżeli Smart Contract implementuje metody zawarte w interfejsie przedstawionym w ERC-20
, może być uznawany za kontrakt obsługujący tokeny ERC-20
.
Wczytując się w dokumentację można znaleźć metody, przyjrzyjmy się im nieco bliżej:
function name() public view returns (string)
// zwraca nazwę tokena
function symbol() public view returns (string)
// zwraca typ tokena
function decimals() public view returns (uint8)
// zwraca liczbę miejsc po przecinku, na jaką token może być podzielony
function totalSupply() public view returns (uint256)
// zwraca ilość tokenów w sieci
function balanceOf(address _owner) public view returns (uint256 balance)
// zwraca saldo konta, do którego podano adres
function transfer(address _to, uint256 _value) public returns (bool success)
// przelewa tokeny z jednego konta na drugie
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
// j/w, ale w innej implementacji
function approve(address _spender, uint256 _value) public returns (bool success)
// pozwala użytkownikowi na wybranie środków do wysokości określonej sumy
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
// zwraca liczbę tokenów, którą wciąż można wybrać z danego konta
Jak można zauważyć, powyższy interfejs definiuje naprawdę podstawowe funkcjonalności dla tokenów, dlatego można powiedzieć, że od niego wszystko się zaczęło 🙂
ERC-721
Od ERC-721
oficjalnie zdefiniowano i ustandaryzowano NFT w Blockchainie Ethereum, najważniejszą zmianą jest pojawienie się w interfejsie parametru tokenId, który jest unikalny dla każdego tokenu, co pozwala je rozróżnić.
Zmiany w tym standardzie koncentrują się na przechowywaniu tokenów, zmianie właściciela tokena i metodach, które pozwalają sprawdzić kto posiada konkretny token (o konkretnym tokenId). Większość metod jest bliźniaczych do tych z ERC-20
, z tą różnicą, że dodano do nich parametr tokenId, w celu okreslenia, który token przesłać z jednego konta na drugie. Należy zauważyć, że ERC-20
posługiwało się saldem i limitami wypłat jak w klasycznym koncie bankowym, natomiast ERC-721
definiuje przesyłanie między kontami konkretnych tokenów o konkretnych adresach.
Przykładową implementację kontraktu ERC-721
możemy znaleźć tutaj: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol
ERC-1155
ERC-1155
został zaproponowany przez zespół inżynierów z firmy Enjin, którzy postanowili połączyć dwa poprzednie standardy w jeden i nieco rozszerzyć ich działanie.
Według ERC-721
każdy nowy typ tokena NFT musi posiadać osobną definicję i instrukcje działania w Blockchainie, przez co często implementacje różnią się od siebie tylko minimalnie i większa część kodu jest kopiowana. Sprawia to, że każdy transfer pojedynczego tokena musi być osobną transakcją.
Wyobraźmy sobie, że wyłożyliśmy cały koszyk zakupów przy kasie w sklepie i po każdym zeskanowanym przez kasjera artykule musimy za niego zapłacić, żeby móc zeskanować kolejny.
W przypadku kolekcjonerskich tokenów NFT reprezentujących cyfrową sztukę to nie będzie problem – transakcje są raczej rzadsze i nie zachodzi ich zbyt wiele w między tymi samymi kontami w krótkich odstępach czasu. Wyobraźmy sobie za to grę multiplayer w którą w jednym momencie grają setki tysięcy osób.
Przykładowo gracz biegający sobie po wirtualnym świecie ma takie przedmioty jak broń, amunicja, apteczki, jakiś spersonalizowany strój czy ilość wirtualnych pieniędzy. Gracze na całym świecie cały czas ze sobą walczą, wymieniają się przedmiotami czy po prostu rozmawiają. Jeżeli jeden gracz pokona drugiego, to pewna część wirtualnych pieniędzy pokonanego przechodzi na konto wygranego – książkowy przykład tokenu wymiennego zdefiniowanego przez ERC-20
, natomiast jeżeli gracze wymieniają się między sobą spersonalizowaną bronią czy strojami, to już wchodzimy w obszar NFT ze standardu ERC-721
. ERC-1155
pozwala na przenikanie się obu tych światów dodając do tego możliwość wykonania wielu transakcji na raz i zweryfikowaniu ich dopiero na końcu serii.
Świetnym dodatkiem, który wynika z połączenia się fungible i non-fungible tokens w jednym standardzie jest zróżnicowanie wymienialności w zależności od kontekstu. Wyobraźmy sobie bilet do kina na seans, gdzie jest 300 miejsc. Biletera przy wejściu nie obchodzi identyfikator biletu, a jedynie to, czy przyszliśmy na właściwy film o właściwej porze, czyli w tym kontekście jest to token wymienialny, bo każdy z 300 biletów pozwoli nam wejść na salę. Jednak jeżeli pójdziemy z tym biletem do innego kina, to nie zostaniemy wpuszczeni na salę, bo tylko bilety z identyfikatorem kina do którego zostały przypisane pozwalają nam wejść na salę.
Boom na NFT
W ostatnim czasie mogliśmy zaobserwować widoczny boom na NFT, a wydarzeniem które obiło się najszerszym echem jest sprzedaż dzieła Everydays – The First 500 Days (kompilacja dzieł cyfrowego artysty Beeple) za 69 milionów dolarów.
Na drugim i trzecim miejscu są NFT ze świata CryptoPunks, których podaż wynosiła dokładnie 10000 tokenów. CryptoPunks to zbiór unikatowych awatarów, przedstawiających pikselowe postacie na różnym tle.
Najdroższym punkiem był ten o id #3100. Został sprzedany za 7,58mln dolarów czyniąc go drugim najdroższym NFT na świecie.
Trzecim najdroższym NFT został CryptoPunk o id #7804, sprzedany za 7,57mln dolarów.
Inne zastosowania NFT
Powyższe przykłady są z kategorii cyfrowej sztuki, czy NFT mogą być wykorzystywane do czegoś innego? Oczywiście, ten proces już trwa.
Jednym z przykładów jest rejestracja i przypisanie domeny. Tradycyjne domeny pozwalają na przypisanie adresom IP czytelnych adresów, które możemy wpisać w przeglądarce np adres Twojego ulubionego serwisu o Blockchain to 104.18.129.189, a jego domena to chainkraft.com – za przyporządkowanie ich do siebie odpowiada DNS (Domain Name System). W przypadku domen opartych o Blockchain, możesz przypisać czytelną nazwę dowolnemu adresowi w sieci. Przykładowy adres portfela w Ethereum to Registry 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 i jest, delikatnie mówiąc, mało czytelny. Jednak jeden z twórców Ethereum, Vitalik Buterin, przypisał do niego domenę vitalik.eth, która pozwala na łatwiejsze wskazywanie adresu w aplikacjach. Za zarządzanie adresami domen w Blockchain odpowiada CNS, (Crypto Name Service) lub ENS (Ethereum Name Service).Każda domena zarejestrowana w CNS jest tokenem opartym o standard ERC-721. Dwa główne komponenty systemu to Registry które jest mapą wskazującą adres właściciela domeny i adres Resolvera danej domeny. Resolver jest odpowiedzialny za przypisanie domeny do konkretnego adresu w blockchainie (np. adres portfela kryptowalutowego).