Solidity

【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. 練習問題

以下の課題に挑戦してみましょう:

  1. 複数のトークンタイプを一括でミントする機能を実装してください。
  2. 特定の条件下でのみトークンを転送できるようにしてください。

5. まとめ

本記事では、ERC-1155トークンの特徴と基本的な実装方法について解説しました。この規格を活用することで、効率的かつ柔軟なトークン管理が可能となります。さまざまなユースケースに対応できるERC-1155を活用して、次世代のDAppを構築してみましょう。