Czym jest standard tokenów ERC-721 i jak działa w blockchainie?

Czym jest standard tokenów ERC-721 i jak działa w blockchainie?

Czym jest standard tokenów ERC-721?

ERC-721 to standard Ethereum dla NFT: unikalnych tokenów, których nie można wymieniać jeden do jednego tak, jakby wszystkie były takie same. Każdy NFT ma własny numer, czyli tokenId. Dzięki temu kontrakt może dokładnie śledzić, który adres posiada który NFT.

Można to porównać do ponumerowanych kart wstępu. Dwie karty mogą obie dawać dostęp do tego samego wydarzenia, ale karta numer 14 nie jest technicznie tą samą kartą co numer 15. W ERC-721 działa to tak samo: każdy token jest rejestrowany osobno.

Token ERC-721 jest identyfikowany przez dwie rzeczy razem: adres smart kontraktu i tokenId. Ta kombinacja wskazuje jeden konkretny token w łańcuchu Ethereum.

Standard zapewnia smart kontraktom wspólny zestaw zasad. Dzięki temu portfel kryptowalutowy, marketplace lub inna aplikacja może rozpoznać, jak wyświetlić, pobrać i wysłać zgodny NFT. W tym pomaga też ERC-165. To sposób, w jaki oprogramowanie może sprawdzić, jaki standard obsługuje dany kontrakt.

Ważne: unikalny tokenId oznacza tylko, że token jest unikalny w ramach tego kontraktu. Nie dowodzi automatycznie, że powiązany obraz, dzieło sztuki lub fizyczny przedmiot również jest naprawdę unikalny albo autentyczny.


Najważniejsze informacje

  • ERC-721 to standard Ethereum dla unikalnych, niewymienialnych tokenów.
  • Każdy NFT ma w ramach kontraktu własny tokenId.
  • Adres kontraktu i tokenId razem identyfikują jeden konkretny token.
  • Standard pomaga portfelom i aplikacjom rozpoznawać i obsługiwać NFT w ten sam sposób.
  • Unikalny tokenId nie dowodzi automatycznie, że powiązane dzieło lub przedmiot jest autentyczny.

Jak działa standard tokenów ERC-721?

Smart kontrakt ERC-721 przechowuje dla każdego tokenId informację, który adres blockchainowy jest obecnym właścicielem. Za pomocą ownerOf(tokenId) można sprawdzić tego właściciela. Z kolei balanceOf(adres) pokazuje, ile NFT łącznie posiada dany adres.

Gdy ktoś wysyła NFT, kontrakt zmienia zarejestrowanego właściciela. Do takiego transferu służą między innymi transferFrom i safeTransferFrom.

Ta druga opcja jest zwykle szczególnie ważna, gdy wysyłasz NFT do innego smart kontraktu. safeTransferFrom sprawdza wtedy, czy kontrakt odbiorcy potrafi przyjmować tokeny ERC-721. Jeśli nie, transakcja zostaje cofnięta. Dzięki temu można uniknąć sytuacji, w której NFT przypadkowo utknie w kontrakcie, który nie potrafi go obsłużyć.

Właściciel może też nadać uprawnienia innemu adresowi:

  • approve pozwala temu adresowi przenieść jeden konkretny tokenId.
  • setApprovalForAll daje operatorowi uprawnienie do przenoszenia wszystkich tokenów ERC-721 należących do tego właściciela.

To drugie uprawnienie jest więc dość szerokie. Nadaj je tylko kontraktowi, któremu ufasz. Zgoda dla jednego NFT wygasa, gdy ten NFT zostanie przeniesiony.

Kontrakt zapisuje też transfery i uprawnienia w eventach: komunikatach w publicznym logu blockchaina. Aplikacje mogą dzięki temu śledzić, kiedy NFT zmienia właściciela albo kiedy operator otrzymuje uprawnienie.

ERC-721 nie określa, jak ma działać minting ani burning. Minting to tworzenie i emisja nowego tokena, natomiast burning trwale usuwa token z obiegu. Twórca kontraktu sam decyduje, kto może mintować, ile tokenów może istnieć oraz czy transfery można na przykład tymczasowo wstrzymać albo obciążyć opłatą.

Do czego używa się tokenów ERC-721?

Tokeny ERC-721 stosuje się do rzeczy, które chcesz śledzić osobno, ponieważ każdy token może mieć własne cechy lub własną funkcję. Chodzi na przykład o cyfrową sztukę, przedmioty kolekcjonerskie, elementy gier, bilety na wydarzenia, certyfikaty, tokeny dostępu i tożsamość online.

Można ich też używać do powiązania określonych aktywów fizycznych z tokenem, na przykład domu. Jest jednak ważna różnica: ERC-721 rejestruje przede wszystkim, kto zarządza tokenem na blockchainie. To, czy token daje poza blockchainem prawo do biletu, przedmiotu lub innego roszczenia, zależy od twórcy, metadanych, warunków kontraktu i ewentualnych osobnych ustaleń.

Ponieważ wiele aplikacji rozumie ten sam interfejs ERC-721, większość rozwiązań może w zasadzie rozpoznać token i go przenieść. To sprawia, że standard jest przydatny w świecie krypto, bez konieczności ponownego sprawdzania przez każdą aplikację, jak działa dany kontrakt dla każdej kolekcji NFT. Dlatego bardzo łatwo jest też samodzielnie rozpocząć projekt NFT.

Jaką rolę pełnią tokeny ERC-721 w NFT?

ERC-721 to często używana techniczna podstawa NFT w sieci Ethereum. Standard reguluje podstawy: identyfikację pojedynczego NFT, rejestrację właściciela, wysyłanie NFT i zarządzanie uprawnieniami.

NFT oznacza po prostu non-fungible token, czyli token niewymienialny jako równoważna jednostka. ERC-721 nie jest tym samym co NFT. To jeden konkretny standard, na którym można budować NFT. NFT może więc korzystać także z innego standardu technicznego.

Kontrakt ERC-721 może ponadto zawierać dodatkowe zasady. Na przykład reguły dotyczące mintingu, dostępu do określonych funkcji, metadanych lub ograniczeń transferów.

Royalties nie są standardowo częścią ERC-721. ERC-2981 to osobny standard, który pozwala pobierać informacje o royalty. Nie oznacza to jednak, że marketplace automatycznie wypłaci takie royalty: płatność zależy od marketplace’u lub innej zaangażowanej strony.

Jak zapisywane są cyfrowe prawa własności?

Kontrakt ERC-721 zapisuje, który adres jest właścicielem określonego tokenId. Każdy może sprawdzić ten techniczny zapis własności za pomocą ownerOf oraz eventów Transfer kontraktu. Wszystko jest przecież widoczne na blockchainie, więc właściciela NFT można zazwyczaj łatwo sprawdzić lub zobaczyć. W większości przypadków można też przejrzeć smart kontrakty użyte do kolekcji NFT.

Załóżmy, że tokenId 42 przechodzi z adresu A na adres B. Wtedy adres B staje się zarejestrowanym właścicielem tokenId 42. Adres kontraktu i tokenId 42 pozostają jednocześnie tą samą techniczną identyfikacją tego tokena.

NFT może też mieć metadane: dodatkowe informacje o tokenie. Za pomocą tokenURI kontrakt może wskazywać na przykład plik JSON z nazwą, opisem i linkiem do obrazu.

To on-chain prawo własności nie jest automatycznie tym samym co prawa autorskie, własność intelektualna ani prawna własność obrazu, dzieła lub fizycznego przedmiotu. Posiadanie NFT nie oznacza więc automatycznie, że otrzymujesz wszystkie prawa do powiązanej treści. Zwykle potrzebna jest do tego osobna, ważna umowa.

Jaka jest różnica między ERC-721 a ERC-20?

ERC-20 został stworzony dla tokenów fungible, natomiast ERC-721 dla tokenów non-fungible. Fungible oznacza, że każda jednostka jest wzajemnie równoważna. Jeden token ERC-20 tego samego typu jest więc równy innemu tokenowi ERC-20 tego typu.

W ERC-20 wysyłasz określoną ilość, na przykład 10 tokenów. W ERC-721 wysyłasz jeden konkretny tokenId, na przykład token numer 42.

Najważniejsze różnice w skrócie:

  • Transfer: ERC-20 dotyczy liczby tokenów. ERC-721 dotyczy jednego unikalnego tokenId.
  • Własność: W ERC-20 adres ma saldo. W ERC-721 kontrakt śledzi właściciela dla każdego tokenId.
  • Uprawnienia: ERC-20 używa allowance dla określonej kwoty do wydania. ERC-721 może przyznać uprawnienie do jednego NFT albo do wszystkich NFT właściciela.
  • Podzielność: Tokeny ERC-20 można wysyłać w określonych ilościach. Token ERC-721 jest technicznie jednym odrębnym tokenId i nie ma standardowej funkcji decimals.
  • Łączna liczba: ERC-20 ma totalSupply jako standardową funkcję. W ERC-721 totalSupply jest dostępne tylko wtedy, gdy kontrakt korzysta z opcjonalnego rozszerzenia ERC721Enumerable.

Metadane w ERC-721 są również opcjonalne. Kontrakt nie musi więc koniecznie udostępniać nazwy, symbolu ani tokenURI, choć większość kontraktów NFT to robi.

Jak stworzyć token ERC-721?

Token ERC-721 tworzy się przez zbudowanie smart kontraktu i dodanie do niego logiki mintingu. Sam ERC-721 nie daje gotowej publicznej funkcji mint, więc to deweloper decyduje, jak powstają nowe tokeny.

W praktyce wygląda to zwykle tak:

  1. Zbuduj lub użyj kontraktu ERC-721 Deweloper pisze smart kontrakt w Solidity, który obsługuje ERC-721 i ERC-165. Często rozszerza się sprawdzoną podstawową implementację, taką jak OpenZeppelin ERC721, zamiast pisać wszystko od zera.

  2. Określ zasady mintingu Kontrakt musi ustalić, kto może mintować, jak są wydawane tokenIds, czy istnieje maksymalna liczba tokenów oraz czy minting kosztuje pieniądze. W tym miejscu należy też określić kontrolę dostępu: nie każdy musi automatycznie móc tworzyć nowe NFT.

  3. Przypisz nowy tokenId Dla każdego nowego NFT kontrakt musi użyć tokenId, który jeszcze nie istnieje. Ten tokenId jest przypisywany do prawidłowego adresu, a więc nie do pustego adresu.

  4. Używaj tam, gdzie to możliwe, bezpiecznego safe mintingu _safeMint sprawdza, czy odbiorca będący smart kontraktem potrafi przyjmować tokeny ERC-721. Zmniejsza to ryzyko, że świeży NFT utknie u odbiorcy.

  5. Wdróż kontrakt i wykonuj transakcje Po wdrożeniu na łańcuch EVM minting, transfery i uprawnienia są wykonywane jako transakcje blockchainowe. Koszty i ryzyko zależą od wybranego łańcucha, a przede wszystkim od kodu kontraktu.

Samo skopiowanie kontraktu nie wystarczy do bezpiecznego użycia. Dodatkowa logika dotycząca płatności, whitelist, aktualizacji lub royalty może wprowadzać nowe podatności. Dlatego testy i, tam gdzie to odpowiednie, niezależny audyt bezpieczeństwa są ważne.

Jakie elementy zawiera smart kontrakt ERC-721?

Smart kontrakt ERC-721 musi oferować stały zestaw funkcji i eventów. Ten stały interfejs sprawia, że inne aplikacje wiedzą, jak obsługiwać NFT.

Do wymaganych elementów należą między innymi:

  • balanceOf: sprawdza, ile NFT posiada dany adres.
  • ownerOf: sprawdza, który adres jest właścicielem określonego tokenId.
  • transferFrom i safeTransferFrom: wysyłają NFT na inny adres.
  • approve i getApproved: zarządzają i sprawdzają uprawnienie do jednego konkretnego NFT.
  • setApprovalForAll i isApprovedForAll: zarządzają i sprawdzają uprawnienie do wszystkich NFT właściciela.
  • Transfer, Approval i ApprovalForAll: eventy, dzięki którym aplikacje mogą śledzić transfery i uprawnienia.
  • supportsInterface: funkcja ERC-165, która pozwala aplikacjom sprawdzić, czy kontrakt obsługuje ERC-721.

Istnieją też opcjonalne rozszerzenia. ERC721Metadata dodaje name, symbol i tokenURI. ERC721Enumerable dodaje między innymi totalSupply oraz funkcje do wyliczania tokenIds.

Poza tym praktyczny kontrakt często zawiera własne funkcje, takie jak funkcja mint, role administratorów, zasady sprzedaży, base URI lub funkcja burn. To, jak kontrakt przechowuje dane wewnętrznie, na przykład właścicieli i uprawnienia, nie jest określone przez ERC-721. Standard dotyczy tego, co kontrakt musi umieć pokazać na zewnątrz.

Jak metadane są powiązane z tokenem ERC-721?

Metadane są zwykle powiązane przez tokenURI(tokenId), opcjonalną funkcję, która zwraca odwołanie do informacji o jednym konkretnym NFT. Ten URI może na przykład wskazywać na plik JSON.

W takim pliku JSON mogą znajdować się pola takie jak name, description i image. Marketplace NFT lub portfel kryptowalutowy może użyć tych danych do wyświetlenia nazwy, opisu i obrazu tokena. Ponieważ każdy NFT ma własne statystyki, można to traktować jak rodzaj kart kolekcjonerskich. Niektóre karty kolekcjonerskie są unikalne i rzadkie, a inne są powszechne. Właśnie w ten sposób zazwyczaj określa się wartość NFT.

Deweloper może zapisać osobny URI dla każdego NFT. Inną opcją jest użycie bazowego URI i dodanie do niego dla każdego tokena własnego numeru lub fragmentu. OpenZeppelin udostępnia do tego między innymi ERC721URIStorage z _setTokenURI.

Ważne: ERC-721 nie wymaga, aby metadane były trwałe lub niezmienne. URI to tekstowe odwołanie do danych poza blockchainem. To, kto może zmienić URI i gdzie znajduje się treść, zależy od kontraktu i sposobu przechowywania. Obraz lub plik JSON mogą więc potencjalnie się zmienić albo przestać być dostępne.

Jakie są zalety i wady ERC-721?

ERC-721 jest przydatny, ponieważ zapewnia jasny, wspólny sposób tworzenia unikalnych tokenów w Ethereum. Jednak standard nie rozwiązuje wszystkich problemów związanych z NFT.

Zalety:

  • Interoperacyjność: portfele, brokerzy, aukcje i inne aplikacje mogą rozpoznawać i obsługiwać NFT ERC-721 w przewidywalny sposób.
  • Śledzenie: dla każdego tokenId widać, który adres jest właścicielem i jakie transfery miały miejsce.
  • Elastyczne uprawnienia: można nadać adresowi uprawnienie do jednego NFT albo operatorowi do wszystkich swoich NFT.
  • Rozszerzalność: metadane i enumeracja są opcjonalne. Kontrakt może więc pozostać mały albo otrzymać dodatkowe funkcje.

Wady i ryzyka:

  • Duża moc setApprovalForAll: zatwierdzony operator może przenieść wszystkie tokeny ERC-721 z Twojego adresu. Regularnie sprawdzaj takie uprawnienia i nadaj je tylko zaufanym kontraktom.
  • Ryzyko przy transferFrom: NFT może utknąć, jeśli kontrakt odbiorcy nie potrafi go obsłużyć. safeTransferFrom sprawdza to lepiej, ale dodatkowe wywołanie zewnętrzne może tworzyć ryzyko reentrancy. W takiej sytuacji inny kontrakt próbuje ponownie wywołać funkcję podczas wykonywania operacji.
  • Wyższe koszty przy enumeracji: ERC721Enumerable często nie jest używany, ponieważ wyliczanie tokenów on-chain może kosztować dużo dodatkowego gazu.
  • Brak gwarancji poza blockchainem: ERC-721 nie dowodzi automatycznie praw autorskich, autentyczności roszczeń, trwałości metadanych ani obowiązkowej wypłaty royalty.

Krótko mówiąc: ERC-721 daje techniczną podstawę do własności i transferu NFT. To, czy dana kolekcja jest też bezpieczna i jakie dokładnie prawa się z nią wiążą, zależy od kodu kontraktu, uprawnień administracyjnych, metadanych i ustaleń poza blockchainem.

Podsumowanie

ERC-721 to standard Ethereum, który nadaje NFT własną tożsamość. Smart kontrakt rejestruje dla każdego tokenId, kto jest właścicielem, jak NFT jest przenoszony i kto ma do tego uprawnienia.

To sprawia, że ERC-721 jest przydatny między innymi dla cyfrowej sztuki, elementów gier, biletów i tokenów dostępu. Jednocześnie NFT nie jest automatycznym dowodem praw autorskich, autentyczności ani prawnej własności tego, z czym jest powiązany. Dlatego warto patrzeć nie tylko na sam NFT, ale też na zasady kontraktu, metadane i uprawnienia, które nadajesz kontraktowi.

O Finst

Finst to wiodąca platforma kryptowalutowa w Holandii, oferująca bardzo niskie opłaty transakcyjne, bezpieczeństwo klasy instytucjonalnej oraz szeroki zakres usług crypto, takich jak trading, przechowywanie aktywów, staking oraz wpłaty i wypłaty fiat. Finst, założona przez byłych kluczowych członków zespołu DEGIRO, jest autoryzowana jako dostawca usług w zakresie kryptoaktywów na mocy MiCAR przez Holenderski Urząd ds. Rynków Finansowych (AFM) i obsługuje klientów detalicznych oraz instytucjonalnych w 30 krajach europejskich.

Platforma krypto dla wszystkich inwestorów

Niezależnie od tego, czy aktywnie handlujesz, czy inwestujesz długoterminowo, Finst pomaga Ci rozwijać portfel krypto z pewnością i spokojem.

Zarejestruj się