Standard ERC-721
Tokeny niewymienialne
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 tokenabalanceOf(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
transferFromoraz bezpieczniejszej funkcjisafeTransferFrom - Zatwierdzanie: dotyczące pojedynczego tokena
approveoraz pełnesetApprovalForAll - Rozszerzenie metadanych dodaje
tokenURI, a ERC-165 umożliwia wykrywanie interfejsów - Zasoby zwykle znajdują się poza łańcuchem i są wskazywane przez URI
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
- Standard ERC-721
- Tworzenie NFT
- Metadane tokenów
- Marketplace'y