Standard nezaměnitelného tokenu ERC-721
Stránka naposledy aktualizována: 25. února 2026
Úvod
Co je to nezaměnitelný token?
Nezaměnitelný token (Non-Fungible Token - NFT) je používán k identifikaci něčeho nebo někoho jedinečným způsobem. Tento typ tokenu je ideální pro použití na platformách, které nabízejí sběratelské předměty, přístupové klíče, loterijní lístky, číslovaná místa na koncertech a sportovních zápasech atd. Tento speciální typ tokenu má úžasné možnosti, a proto si zaslouží odpovídající standard, kterým je ERC-721!
Co je ERC-721?
ERC-721 zavádí standard pro NFT, jinými slovy, tento typ tokenu je jedinečný a může mít jinou hodnotu než jiný token ze stejného smart kontraktu, například z důvodu jeho stáří, vzácnosti nebo něčeho jinému, například jeho vzhledu. Počkat, vzhledu?
Ano! Všechny NFT mají proměnnou uint256 s názvem tokenId, takže pro každý kontrakt ERC-721 musí být dvojice
adresa kontraktu, uint256 tokenId globálně jedinečná. Nicméně dapp může mít „konvertor“, který
používá tokenId jako vstup a na výstupu vrací obrázek něčeho skvělého, jako jsou zombie, zbraně, dovednosti nebo úžasné kočičky!
Předpoklady
Tělo
ERC-721 (Ethereum Request for Comments 721), navržený Williamem Entrikenem, Dieterem Shirleym, Jacobem Evansem a Nastassií Sachs v lednu 2018, je standard pro nezaměnitelné tokeny, který implementuje API pro tokeny v rámci smart kontraktů.
Obsahuje funkce, jako je převod tokenů z jednoho účtu na druhý, zjištění aktuálního zůstatku tokenů na účtu, zjištění ethereovské adresy vlastníka konkrétního tokenu a také celkového množství tokenů dostupných v síti. Kromě toho má i další funkce, jako je schválení, že určité množství tokenů z účtu může být přesunuto třetí stranou.
Pokud smart kontrakt implementuje následující metody a události, může být nazván ERC-721 Non-Fungible Token Contract, a jakmile je spuštěn, bude zodpovědný za sledování vytvořených tokenů na Ethereu.
Z EIP-721 (opens in a new tab):
Metody
1 function balanceOf(address _owner) external view returns (uint256);2 function ownerOf(uint256 _tokenId) external view returns (address);3 function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;4 function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;5 function transferFrom(address _from, address _to, uint256 _tokenId) external payable;6 function approve(address _approved, uint256 _tokenId) external payable;7 function setApprovalForAll(address _operator, bool _approved) external;8 function getApproved(uint256 _tokenId) external view returns (address);9 function isApprovedForAll(address _owner, address _operator) external view returns (bool);Zobrazit všeUdálosti
1 event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);2 event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);3 event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);Příklady
Podívejme se, proč je tento standard tak důležitý pro zjednodušení prohlížení jakéhokoliv kontraktu ERC-721 tokenu na Ethereu. Abychom mohli vytvořit rozhraní pro jakýkoliv ERC-721 token, stačí nám Contract Application Binary Interface (ABI). Jak můžete vidět níže, použijeme zjednodušené ABI, abychom vám to ukázali na jednoduchém příkladu.
Příklad Web3.py
Nejprve se ujistěte, že máte nainstalovanou knihovnu Python Web3.py (opens in a new tab):
1pip install web31from web3 import Web32from web3._utils.events import get_event_data345w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com"))67ck_token_addr = "0x06012c8cf97BEaD5deAe237070F9587f8E7A266d" # Kontrakt CryptoKitties89acc_address = "0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C" # Prodejní aukce CryptoKitties1011# Toto je zjednodušené binární rozhraní aplikace (ABI) kontraktu NFT ERC-721.12# Zpřístupní pouze metody: balanceOf(address), name(), ownerOf(tokenId), symbol(), totalSupply()13simplified_abi = [14 {15 'inputs': [{'internalType': 'address', 'name': 'owner', 'type': 'address'}],16 'name': 'balanceOf',17 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],18 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True19 },20 {21 'inputs': [],22 'name': 'name',23 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}],24 'stateMutability': 'view', 'type': 'function', 'constant': True25 },26 {27 'inputs': [{'internalType': 'uint256', 'name': 'tokenId', 'type': 'uint256'}],28 'name': 'ownerOf',29 'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],30 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True31 },32 {33 'inputs': [],34 'name': 'symbol',35 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}],36 'stateMutability': 'view', 'type': 'function', 'constant': True37 },38 {39 'inputs': [],40 'name': 'totalSupply',41 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],42 'stateMutability': 'view', 'type': 'function', 'constant': True43 },44]4546ck_extra_abi = [47 {48 'inputs': [],49 'name': 'pregnantKitties',50 'outputs': [{'name': '', 'type': 'uint256'}],51 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True52 },53 {54 'inputs': [{'name': '_kittyId', 'type': 'uint256'}],55 'name': 'isPregnant',56 'outputs': [{'name': '', 'type': 'bool'}],57 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True58 }59]6061ck_contract = w3.eth.contract(address=w3.to_checksum_address(ck_token_addr), abi=simplified_abi+ck_extra_abi)62name = ck_contract.functions.name().call()63symbol = ck_contract.functions.symbol().call()64kitties_auctions = ck_contract.functions.balanceOf(acc_address).call()65print(f"{name} [{symbol}] NFTs in Auctions: {kitties_auctions}")6667pregnant_kitties = ck_contract.functions.pregnantKitties().call()68print(f"{name} [{symbol}] NFTs Pregnants: {pregnant_kitties}")6970# Použití ABI události Převod k získání informací o převedených kočičkách.71tx_event_abi = {72 'anonymous': False,73 'inputs': [74 {'indexed': False, 'name': 'from', 'type': 'address'},75 {'indexed': False, 'name': 'to', 'type': 'address'},76 {'indexed': False, 'name': 'tokenId', 'type': 'uint256'}],77 'name': 'Transfer',78 'type': 'event'79}8081# K filtrování protokolů potřebujeme podpis události82event_signature = w3.keccak(text="Transfer(address,address,uint256)").hex()8384logs = w3.eth.get_logs({85 "fromBlock": w3.eth.block_number - 120,86 "address": w3.to_checksum_address(ck_token_addr),87 "topics": [event_signature]88})8990# Poznámky:91# - Pokud se nevrátí žádná událost Převod, zvyšte počet bloků z hodnoty 120.92# - Pokud jste nenašli žádnou událost Převod, můžete také zkusit získat tokenId na adrese:93# https://etherscan.io/address/0x06012c8cf97BEaD5deAe237070F9587f8E7A266d#events94# Kliknutím rozbalte protokoly události a zkopírujte její argument „tokenId“95recent_tx = [get_event_data(w3.codec, tx_event_abi, log)["args"] for log in logs]9697if recent_tx:98 kitty_id = recent_tx[0]['tokenId'] # Sem vložte „tokenId“ z výše uvedeného odkazu99 is_pregnant = ck_contract.functions.isPregnant(kitty_id).call()100 print(f"{name} [{symbol}] NFTs {kitty_id} is pregnant: {is_pregnant}")Zobrazit všeKontrakt CryptoKitties má několik zajímavých událostí, kromě těch standardních.
Podívejme se na dvě z nich, Pregnant a Birth.
1# Použití ABI událostí Pregnant a Birth k získání informací o nových kočičkách.2ck_extra_events_abi = [3 {4 'anonymous': False,5 'inputs': [6 {'indexed': False, 'name': 'owner', 'type': 'address'},7 {'indexed': False, 'name': 'matronId', 'type': 'uint256'},8 {'indexed': False, 'name': 'sireId', 'type': 'uint256'},9 {'indexed': False, 'name': 'cooldownEndBlock', 'type': 'uint256'}],10 'name': 'Pregnant',11 'type': 'event'12 },13 {14 'anonymous': False,15 'inputs': [16 {'indexed': False, 'name': 'owner', 'type': 'address'},17 {'indexed': False, 'name': 'kittyId', 'type': 'uint256'},18 {'indexed': False, 'name': 'matronId', 'type': 'uint256'},19 {'indexed': False, 'name': 'sireId', 'type': 'uint256'},20 {'indexed': False, 'name': 'genes', 'type': 'uint256'}],21 'name': 'Birth',22 'type': 'event'23 }]2425# K filtrování protokolů potřebujeme podpis události26ck_event_signatures = [27 w3.keccak(text="Pregnant(address,uint256,uint256,uint256)").hex(),28 w3.keccak(text="Birth(address,uint256,uint256,uint256,uint256)").hex(),29]3031# Zde je událost Pregnant:32# - https://etherscan.io/tx/0xc97eb514a41004acc447ac9d0d6a27ea6da305ac8b877dff37e49db42e1f8cef#eventlog33pregnant_logs = w3.eth.get_logs({34 "fromBlock": w3.eth.block_number - 120,35 "address": w3.to_checksum_address(ck_token_addr),36 "topics": [ck_event_signatures[0]]37})3839recent_pregnants = [get_event_data(w3.codec, ck_extra_events_abi[0], log)["args"] for log in pregnant_logs]4041# Zde je událost Birth:42# - https://etherscan.io/tx/0x3978028e08a25bb4c44f7877eb3573b9644309c044bf087e335397f16356340a43birth_logs = w3.eth.get_logs({44 "fromBlock": w3.eth.block_number - 120,45 "address": w3.to_checksum_address(ck_token_addr),46 "topics": [ck_event_signatures[1]]47})4849recent_births = [get_event_data(w3.codec, ck_extra_events_abi[1], log)["args"] for log in birth_logs]Zobrazit všePopulární NFT
- Etherscan NFT Tracker (opens in a new tab) uvádí nejlepší NFT na Ethereu podle objemu převodů.
- CryptoKitties (opens in a new tab) je hra zaměřená na chovná, sběratelská a neodolatelně roztomilá stvoření, která nazýváme CryptoKitties.
- Sorare (opens in a new tab) je globální fantasy fotbalová hra, kde můžete sbírat sběratelské předměty z limitovaných edicí, spravovat své týmy a soutěžit o ceny.
- Služba názvů Etherea (ENS) (opens in a new tab) nabízí bezpečný a decentralizovaný způsob adresování zdrojů na blockchainu i mimo něj pomocí jednoduchých, lidsky čitelných jmen.
- POAP (opens in a new tab) doručuje bezplatné NFT lidem, kteří se účastní událostí nebo dokončí určité akce. POAPy můžete vytvořit i distribuovat zdarma.
- Unstoppable Domains (opens in a new tab) je společnost se sídlem v San Franciscu, která vytváří domény na blockchainech. Blockchainové domény nahrazují kryptoměnové adresy lidsky čitelnými jmény a mohou být použity k vytváření webů odolných vůči cenzuře.
- Gods Unchained Cards (opens in a new tab) je sběratelská karetní hra (TCG) na blockchainu Ethereum, která využívá NFT k tomu, aby přinesla skutečné vlastnictví herních aktiv.
- Bored Ape Yacht Club (opens in a new tab) je sbírka 10 000 jedinečných NFT, která kromě toho, že je prokazatelně vzácným uměleckým dílem, funguje také jako členský token do klubu, který poskytuje členské výhody a benefity, jež se v čase zvyšují díky úsilí komunity.