Multitokenový standard ERC-1155
Stránka naposledy aktualizována: 14. února 2026
Úvod
Standardní rozhraní pro kontrakty, které spravují více typů tokenů. Jeden nasazený kontrakt může obsahovat libovolnou kombinaci zastupitelných tokenů, nezastupitelných tokenů nebo jiných konfigurací (např. polozastupitelných tokenů).
Co znamená multitokenový standard?
Myšlenka je jednoduchá a usiluje o vytvoření smart kontraktového rozhraní, které může reprezentovat a kontrolovat libovolný počet zaměnitelných a nezaměnitelných typů tokenů. Token ERC-1155 tak může plnit stejné funkce jako tokeny ERC-20 a ERC-721, a dokonce i obě najednou. Zlepšuje funkčnost standardů ERC-20 a ERC-721, činí je efektivnějšími a opravuje zjevné chyby v implementaci.
Token ERC-1155 je plně popsán v EIP-1155opens in a new tab.
Předpoklady
Pro lepší pochopení této stránky doporučujeme nejprve si přečíst o standardech tokenů, ERC-20 a ERC-721.
Funkce a vlastnosti ERC-1155:
- Dávkový převod: Převod více aktiv v jednom volání.
- Dávkový zůstatek: Získání zůstatků více aktiv v jednom volání.
- Dávkové schválení: Schválení všech tokenů na adresu.
- Háky: Hák pro příjem tokenů.
- Podpora NFT: Pokud je zásoba pouze 1, považuje se za NFT.
- Pravidla pro bezpečný převod: Sada pravidel pro bezpečný převod.
Dávkové převody
Hromadný přenos funguje velmi podobně jako běžné přenosy ERC-20. Podívejme se na běžnou funkci transferFrom v ERC-20:
1// ERC-202function transferFrom(address from, address to, uint256 value) external returns (bool);34// ERC-11555function safeBatchTransferFrom(6 address _from,7 address _to,8 uint256[] calldata _ids,9 uint256[] calldata _values,10 bytes calldata _data11) external;Zobrazit všeJediný rozdíl v ERC-1155 je ten, že předáváme hodnoty jako pole a také předáváme pole ID. Například pokud jsou ids=[3, 6, 13] a values=[100, 200, 5], výsledné převody budou:
- Převod 100 tokenů s ID 3 z
_fromna_to. - Převod 200 tokenů s ID 6 z
_fromna_to. - Převod 5 tokenů s ID 13 z
_fromna_to.
V ERC-1155 máme pouze transferFrom, žádný transfer. Chcete-li ji použít jako běžný transfer, stačí nastavit odesílající adresu na adresu, která funkci volá.
Dávkový zůstatek
Odpovídající volání balanceOf v ERC-20 má také svou partnerskou funkci s podporou dávkového zpracování. Pro připomenutí, takto vypadá verze ERC-20:
1// ERC-202function balanceOf(address owner) external view returns (uint256);34// ERC-11555function balanceOfBatch(6 address[] calldata _owners,7 uint256[] calldata _ids8) external view returns (uint256[] memory);Ještě jednodušší je volání za účelem získání informace o zůstatcích: V jednom volání můžeme získat několik zůstatků najednou. Předáváme pole vlastníků, následované polem ID tokenů.
Například pokud jsou _ids=[3, 6, 13] a _owners=[0xbeef..., 0x1337..., 0x1111...], návratová hodnota bude:
1[2 balanceOf(0xbeef...),3 balanceOf(0x1337...),4 balanceOf(0x1111...)5]Dávkové schválení
1// ERC-11552function setApprovalForAll(3 address _operator,4 bool _approved5) external;67function isApprovedForAll(8 address _owner,9 address _operator10) external view returns (bool);Zobrazit všeSchválení se mírně liší od ERC-20. Namísto schvalování konkrétních částek nastavíte operátora na schváleného nebo neschváleného pomocí setApprovalForAll.
Aktuální stav lze zjistit pomocí isApprovedForAll. Jak můžete vidět, je to vše nebo nic. Nemůžete definovat, kolik tokenů schválit nebo dokonce kterou třídu tokenů.
Tento design je záměrně jednoduchý. Můžete schválit pouze vše nebo nic pro jednu adresu.
Hák pro příjem
1function onERC1155BatchReceived(2 address _operator,3 address _from,4 uint256[] calldata _ids,5 uint256[] calldata _values,6 bytes calldata _data7) external returns(bytes4);Díky podpoře EIP-165opens in a new tab podporuje ERC-1155 háky pro příjem pouze pro chytré kontrakty. Funkce háčku musí vrátit magickou předdefinovanou hodnotu bytes4, která je dána jako:
1bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))Když přijímající kontrakt vrátí tuto hodnotu, předpokládá se, že kontrakt přijímá přenos a ví, jak zacházet s tokeny ERC-1155. Skvělé, už žádné tokeny zaseknuté v kontraktu!
Podpora NFT
Když je zásoba pouze jedna, token je v podstatě nezaměnitelný token (NFT). A stejně jako u standardu ERC-721 můžete definovat URL metadat. Klienti mohou adresu URL číst a upravovat, viz zdeopens in a new tab.
Pravidlo bezpečného převodu
Už jsme se dotkli několika pravidel pro bezpečný přenos v předchozích vysvětleních. Podívejme se však na ta nejdůležitější z nich:
- Volající musí mít schválení k útratě tokenů pro adresu
_fromnebo se volající musí rovnat_from. - Volání přenosu musí být zrušeno, pokud
- Adresa
_toje 0. - délka
_idsnení stejná jako délka_values. - zůstatek držitele některého z tokenů v
_idsje nižší než odpovídající částka v_valuesodeslaná příjemci. - Dojde k jakékoliv jiné chybě.
- Adresa
Poznámka: Všechny dávkové funkce, včetně háku, existují také ve verzích bez dávkového zpracování. Je to takto nastaveno kvůli efektivitě využití paliva, protože přenos pouze jednoho aktiva bude pravděpodobně stále nejběžněji používaným způsobem. Pro zjednodušení jsme tyto funkce z článku vynechali, stejě jako pravidla bezpečného přenosu. Jejich jména jsou ale identická, stačí jen odstranit "Batch".