【Solidity】第6章第6回:ERC-1155(マルチトークン)の特徴と実装

本記事では、ERC-1155トークンの特徴と基本的な実装方法について解説します。ERC-1155は、複数のトークンタイプを1つのコントラクトで管理できる効率的な規格です。この特性を活かし、ゲームアイテムやデジタルアートなど、幅広いユースケースに対応できます。
0. 記事の概要
この記事を読むメリット
- ERC-1155の基礎理解:複数トークンタイプを効率的に管理する仕組みを学べます。
- 実践的なスキル:SolidityでのERC-1155トークンの実装を習得できます。
- 応用力の向上:ERC-1155を活用した高度なDAppを設計可能になります。
この記事で学べること
- ERC-1155の特徴とメリット
- 基本的な実装手法とコード例
- トークン管理の効率化の方法
1. ERC-1155とは?

1.1 ERC-1155の特徴
ERC-1155は、複数のトークンタイプ(Fungible TokenとNon-Fungible Token)を1つのスマートコントラクトで管理できる標準規格です。この規格の主な特徴は以下の通りです:
- 効率的なガスコスト:1つのトランザクションで複数のトークン操作が可能
- 柔軟性:FT(ERC-20)とNFT(ERC-721)の両方を1つのコントラクトで管理
- 高い拡張性:ゲームやデジタルアートのような複雑なアプリケーションに適用可能
1.2 主なユースケース
- ゲーム内アイテム(例:武器や防具)
- デジタルアートやコレクティブル
- 複数タイプの仮想通貨
2. SolidityによるERC-1155トークンの実装

2.1 基本的なコード例
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
contract MyERC1155Token is ERC1155 {
constructor() ERC1155("https://mytoken.io/metadata/{id}.json") {}
function mint(address account, uint256 id, uint256 amount, bytes memory data) public {
_mint(account, id, amount, data);
}
function burn(address account, uint256 id, uint256 amount) public {
_burn(account, id, amount);
}
}
動作解説
このコードでは、ERC1155
を継承して基本的なマルチトークン機能を実装しています。mint
関数で新しいトークンを発行し、burn
関数でトークンを破棄できます。
2.2 トークンURIの設定
// トークンごとに異なるURIを設定
contract MyERC1155TokenWithURI is ERC1155 {
mapping(uint256 => string) private _tokenURIs;
constructor() ERC1155("") {}
function setTokenURI(uint256 tokenId, string memory uri) public {
_tokenURIs[tokenId] = uri;
}
function uri(uint256 tokenId) public view override returns (string memory) {
return _tokenURIs[tokenId];
}
}
動作解説
このコードでは、トークンごとに異なるメタデータURIを設定する機能を追加しています。setTokenURI
関数を使用してURIを設定し、uri
関数で取得できます。
3. ERC-1155のメリットと注意点

3.1 ERC-1155のメリット
- ガスコストの削減
- トークン管理の効率化
- 柔軟なトークン設計
3.2 注意点
- メタデータの管理に注意する
- トークンIDの重複を避ける
- ミントやバーン操作の権限管理を適切に行う
4. 練習問題
以下の課題に挑戦してみましょう:
- 複数のトークンタイプを一括でミントする機能を実装してください。
- 特定の条件下でのみトークンを転送できるようにしてください。
5. まとめ
本記事では、ERC-1155トークンの特徴と基本的な実装方法について解説しました。この規格を活用することで、効率的かつ柔軟なトークン管理が可能となります。さまざまなユースケースに対応できるERC-1155を活用して、次世代のDAppを構築してみましょう。