ERC1155について
本記事では、ERC1155に関して、概要、動機、実装、事例を簡単に説明します。
概要
ERC1155[EIP]は、複数の異なる種類のトークンを1つのコントラクトで管理するための規格です
同じ種類であれば代替可能で、異なる種類であれば代替不可能となり、代替可能性と非代替可能性を併せ持つことが特徴です。
Enjinというゲーム系のプロジェクトによって提案されました。
[EIP] https://eips.ethereum.org/EIPS/eip-1155
動機
複数種類のトークンを作成する際のガス代の節約を動機に提案されました。
例えば、ゲーム開発などでは、数千種類のトークンを作成する必要がある可能性があります
数千種類のERC20をデプロイすると膨大なガス代がかかります。
1つのコントラクトで管理できればガスを節約することができます。
実装
tokenに対して、idとamountを割り振り、idがtokenの種類、amountがその量を表すような実装です。
実装につき、下記をご参照ください。
[openzeppelin ドキュメント] https://docs.openzeppelin.com/contracts/3.x/erc1155
[実装] https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol
特に、safeBatchTransferFromでは、複数のアイテム(装備一式など)を一括で送信できます。もしアイテムがERC20によって表現され、複数コントラクトに分かれていた場合、カスタムコントラクトに対して、approveし、一括送信のトランザクションを組む必要がありますが、そういったことも必要ありません。
事例
Enjinは、ゲーム向けにトークン発行プラットフォームを提供しています。
Enjin CoinというFTを裏付けて、ゲーム開発者は誰でもERC1155を発行、販売[ENJIN market]できます。
ERC1155をバーンすると、裏付けられたEnjin Coinを取り出せます。
これにより、ERC1155が発行されればされほど、Enjin Coinが希少価値が上がります。また、NFTの最低価値も担保されます。
[ENJIN marketplace] https://enjinx.io/eth/marketplace
補足
ERC1155にはいくつかの注意点があります[qiita]
ERC1155では、ownerOf関数が定義されていなく、token_idに対する所有者を得るには、indexerなどを活用する必要があります。その他、下記の記事に注意点が載ってあります。
[qiita]https://qiita.com/okamu_/items/6dc57360d5bb262da546