ERC1155 : Multi Tokenの標準規格

Kazuki Kyakuno
Axell Corporation
Published in
2 min readMay 24, 2021

Multi Tokenを作成するための標準規格であるERC1155を紹介します。

ERC1155について

ERC1155はMulti Tokenを作成するための標準規格です。ERC1155はFunsible TokenとNon Funsible Tokenの両方に使用することができます。

従来のERC20やERC721では1つのコントラクトで1つのトークンのみを扱っていました。ERC1155では1つのコントラクトで複数のトークンを扱うことができます。

全てのトークンで同じURIを使用することで、GASコストを削減することができます。また、複数のトークンを同時に送付することができます。

https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC1155

ERC1155の応用例

ERC1155はENJINのCTOであるWiltek Radomskiにより開発されました。ゲーム向けの応用を想定しており、個数の概念を用いるアイテムの導入を目的としています。ERC20は通貨、ERC721は1つしか存在しないアイテムを定義しますが、ERC1155はこれらをまとめて扱えると共に、個数の概念を持つアイテムを扱うことができます。

ERC1155のAPI

Field

ERC1155は下記のフィールドを持ちます。

// Mapping from token ID to account balances
mapping (uint256 => mapping(address => uint256)) private _balances;
// Mapping from account to operator approvals
mapping (address => mapping(address => bool)) private _operatorApprovals;
// Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
string private _uri;

トークンIDからBalanceとApprovalへのマップ、メタ情報のuriを持ちます。

Public API

ERC1155は下記のAPIを実装する必要があります。

constructor (string memory uri_)
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool)
function uri(uint256) public view virtual override returns (string memory)
function balanceOf(address account, uint256 id) public view virtual override returns (uint256)
function balanceOfBatch( address[] memory accounts, uint256[] memory ids )
function setApprovalForAll(address operator, bool approved) public virtual override
function isApprovedForAll(address account, address operator) public view virtual override returns (bool)
function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override
function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override

ERC1155では新たにBatchTransferFromが実装されており、複数のトークンをまとめて送付することができます。

Private API

ERC1155は下記のプライベートAPIを持ちます。

function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual
function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual
function _setURI(string memory newuri) internal virtual
function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual
function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual
function _burn(address account, uint256 id, uint256 amount) internal virtual
function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual
function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual
function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private
function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private
function _asSingletonArray(uint256 element) private pure returns (uint256[] memory)

ERC1155のExtension

ERC1155Pausable

トークンの移動を止めることができます。

ERC1155Burnable

トークンを破棄することができます。

ERC1155Supply

IDごとにトークンの総供給量をトラッキングすることができます。totalSupplyが1の場合はNFTになります。

MetaMaskへの対応

ERC1155は現在、MetaMaskが対応していません。対応時期はQuarter 4 2021が予定されています。

--

--