Web3 & DApp Development Fundamentals · Lekcja

Standard ERC-721

Tokeny niewymienialne

Lekcja 1 z 413 kroki

Standard ERC-721 to bezpłatna lekcja Web3 & DApp Development Fundamentals na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Web3 & DApp Development Fundamentals, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Web3 & DApp Development Fundamentals zawiera 4 lekcji w sumie.

Czym jest ERC-721?

ERC-721 to standard dla niezamiennych tokenów (NFT). W przeciwieństwie do ERC-20 każdy token jest unikatowy i identyfikowany przez odrębny tokenId.

Tokeny NFT reprezentują własność unikatowych przedmiotów: dzieł sztuki, przedmiotów kolekcjonerskich, zasobów w grach i wielu innych.

Zamienne a niezamienne

Najważniejsza różnica:

  • ERC-20 — wszystkie tokeny są identyczne i wymienne, a ich stan śledzi się za pomocą salda
  • ERC-721 — każdy token jest unikatowy, a jego właściciela śledzi się dla każdego tokenId

Posiadają Państwo konkretny token nr 42, a nie część wspólnej puli.

Podstawowe funkcje własności

ERC-721 śledzi własność za pomocą dwóch kluczowych funkcji odczytu:

  • ownerOf(tokenId) — określa właściciela konkretnego tokena
  • balanceOf(owner) — określa, ile tokenów posiada dany adres
<code>function ownerOf(uint256 tokenId) external view returns (address);
function balanceOf(address owner) external view returns (uint256);</code>

Funkcje transferu

ERC-721 udostępnia funkcje transferFrom oraz bezpieczniejszą safeTransferFrom, która sprawdza, czy kontrakt odbiorcy potrafi obsługiwać tokeny NFT.

<code>function transferFrom(address from, address to, uint256 tokenId) external;
function safeTransferFrom(address from, address to, uint256 tokenId) external;</code>

Funkcje zatwierdzania

Właściciele mogą upoważnić inne osoby do transferu konkretnych tokenów za pomocą approve albo przyznać im pełne uprawnienia do wszystkich swoich tokenów za pomocą setApprovalForAll.

<code>function approve(address to, uint256 tokenId) external;
function setApprovalForAll(address operator, bool approved) external;
function getApproved(uint256 tokenId) external view returns (address);
function isApprovedForAll(address owner, address operator) external view returns (bool);</code>

Wymagane zdarzenia

ERC-721 definiuje trzy zdarzenia: Transfer, Approval i ApprovalForAll. Należy zwrócić uwagę, że tokenId jest indeksowany, dzięki czemu łatwo śledzić transfery konkretnego NFT.

<code>event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);</code>

safeTransferFrom i onERC721Received

safeTransferFrom chroni przed zablokowaniem tokenów NFT. Jeśli odbiorcą jest kontrakt, musi on implementować onERC721Received i zwracać prawidłową wartość magiczną; w przeciwnym razie transfer zostanie cofnięty.

<code>// receiving contract must implement:
function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data)
    external returns (bytes4);</code>

Rozszerzenie metadanych

Większość tokenów NFT implementuje opcjonalne rozszerzenie metadanych, dodające funkcje name(), symbol() oraz, co najważniejsze, tokenURI(tokenId), wskazującą na przechowywane poza łańcuchem metadane tokena w formacie JSON.

<code>function name() external view returns (string memory);
function symbol() external view returns (string memory);
function tokenURI(uint256 tokenId) external view returns (string memory);</code>

Wykrywanie interfejsów za pomocą ERC-165

ERC-721 opiera się na standardzie ERC-165, który pozwala kontraktom informować, jakie interfejsy obsługują, za pomocą supportsInterface. Giełdy i marketplace’y używają go do wykrywania tokenów NFT.

<code>function supportsInterface(bytes4 interfaceId) external view returns (bool);</code>

Korzystanie z OpenZeppelin ERC721

Podobnie jak w przypadku ERC-20, praktycznym rozwiązaniem jest dziedziczenie po audytowanej implementacji ERC721 z biblioteki OpenZeppelin i dodanie własnej logiki emisji.

<code>// import '@openzeppelin/contracts/token/ERC721/ERC721.sol';
// contract MyNFT is ERC721 {
//     constructor() ERC721('MyNFT', 'MNFT') {}
// }</code>

Gdzie znajduje się zasób

Token NFT w łańcuchu to tylko identyfikator i właściciel. Rzeczywisty obraz lub inne multimedia zwykle znajdują się poza łańcuchem (często w IPFS), a wskazuje na nie tokenURI. Łańcuch potwierdza własność, a nie sam plik.

Szybki test

Sprawdź swoją wiedzę na temat standardu ERC-721.

Podsumowanie

Opanowano standard ERC-721:

  • Tokeny NFT są unikatowe, identyfikowane przez tokenId i śledzone za pomocą ownerOf
  • Transfery korzystają z transferFrom oraz bezpieczniejszej funkcji safeTransferFrom
  • Zatwierdzanie: dotyczące pojedynczego tokena approve oraz pełne setApprovalForAll
  • Rozszerzenie metadanych dodaje tokenURI, a ERC-165 umożliwia wykrywanie interfejsów
  • Zasoby zwykle znajdują się poza łańcuchem i są wskazywane przez URI
Bezpłatny start

Ucz się Web3 & DApp Development Fundamentals dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
29
Lekcje
105

Często zadawane pytania

Czy lekcja „Standard ERC-721” jest bezpłatna?

Tak — pełny tekst „Standard ERC-721” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Web3 & DApp Development Fundamentals, przejdź na CoddyKit PRO. Kurs Web3 & DApp Development Fundamentals zawiera 4 lekcji w sumie.

Co nauczysz się w „Standard ERC-721”?

Tokeny niewymienialne Ćwiczysz Web3 & DApp Development Fundamentals z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Web3 & DApp Development Fundamentals?

Nie wymagamy żadnego doświadczenia. Web3 & DApp Development Fundamentals w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Standard ERC-721”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Web3 & DApp Development Fundamentals?

Tak. Każda lekcja Web3 & DApp Development Fundamentals zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Standard ERC-721
  2. Tworzenie NFT
  3. Metadane tokenów
  4. Marketplace'y
← Powrót do Web3 & DApp Development Fundamentals