Přeskočit na hlavní obsah
Change page

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ř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-20
2function transferFrom(address from, address to, uint256 value) external returns (bool);
3
4// ERC-1155
5function safeBatchTransferFrom(
6 address _from,
7 address _to,
8 uint256[] calldata _ids,
9 uint256[] calldata _values,
10 bytes calldata _data
11) external;
Zobrazit vše

Jediný 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:

  1. Převod 100 tokenů s ID 3 z _from na _to.
  2. Převod 200 tokenů s ID 6 z _from na _to.
  3. Převod 5 tokenů s ID 13 z _from na _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-20
2function balanceOf(address owner) external view returns (uint256);
3
4// ERC-1155
5function balanceOfBatch(
6 address[] calldata _owners,
7 uint256[] calldata _ids
8) 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-1155
2function setApprovalForAll(
3 address _operator,
4 bool _approved
5) external;
6
7function isApprovedForAll(
8 address _owner,
9 address _operator
10) external view returns (bool);
Zobrazit vše

Schvá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 _data
7) 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:

  1. Volající musí mít schválení k útratě tokenů pro adresu _from nebo se volající musí rovnat _from.
  2. Volání přenosu musí být zrušeno, pokud
    1. Adresa _to je 0.
    2. délka _ids není stejná jako délka _values.
    3. zůstatek držitele některého z tokenů v _ids je nižší než odpovídající částka v _values odeslaná příjemci.
    4. Dojde k jakékoliv jiné chybě.

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".

Další čtení

Byl tento článek užitečný?