MiniMeトークンの作成方法

MiniMeトークンの作成方法

はじめに


第4回 最新技術動向にて、ERC20トークンの解説をしました。そこで、MiniMeトークンにての概要を説明しました。

今回はMiniMeトークンについて具体的に以下の事項を説明します。
  • MiniMeトークンとは
  • 今回やることの概要
  • 親トークンの作成
  • クローントークンの作成
  • キャンペーンコントラクト

本記事は、過去にコンセンサス・ベイスが主宰していたオンラインサロンの記事です。記事は2017年~2018年にかけて執筆されたため、一部は、既に古くなっている可能性があります。あらかじめご了承ください。

MiniMeトークンとは 


MiniMeトークンとは「クローン可能なERC20トークン」を作成できるライブラリ的な扱いをされるコントラクトであり、それを使用して作成されたトークンそのものの呼び方でもあります。MiniMeトークンはGivethにより提案されました。

通常、トークンなどのスマートコントラクトは一度デプロイしてしまうとメソッドの追加や修正が不可能です。しかし、元のトークンの保有量などの状態を引き継ぐ「独立したクローントークン」を作成することで、トークンに新機能を追加したり、一時的な役割を与えたりすることが出来ます。MiniMeトークンを導入することで、そういったクローントークンを作成できるようになります。

MiniMeトークンの応用例として以下のようなものが紹介されています:
  • 投票後に無効となる投票権トークン
  • 使用後に償却されるクーポントークン
  • スピンオフするDAO用のトークン
  • 参加者限定のトークンセールなどのイベントに参加する入場券トークン

MiniMeトークンでは任意の過去ブロックの親トークンの状態からクローントークンを作成できます。クローントークンを作成したアドレスがトークンの管理者となり、クローントークンの発行、破棄、移動、凍結、管理者の変更が行えます。

後からの説明となってしまいましたが当記事では、クローン元のトークンを親トークン、親トークンから生まれたトークンをクローントークンと呼びます。

今回やることの概要


  1. 親トークンとなるMy Token(MYT)を作成します。
  2. 次に、My TokenからクローンされたCloned My Token(CMYT)を作成します。
  3. そして最後にCloned My Tokenを使用したキャンペーンを作成します。

以下は2のクローントークン作成のイメージです。まだ出てきていない用語等もありまますが、この図の内容をを実現する手順をこれから詳しく説明していきます。


親トークンの作成


まずは親トークンを作成していきます。親トークンはMiniMeTokenコントラクトというコントラクト継承します。

MiniMeTokenコントラクトにはERC20メソッドに加えて、クローントークンを作成、管理するための各種メソッドが含まれています。つまり、このコントラクトを継承するだけで「ERC20に準拠したクローン可能なトークン(親トークン)」を作成できるということです。

逆に言えば、親トークンがMiniMeTokenコントラクトを継承していないとクローントークンを作成することが出来ません。

親トークン作成の手順は以下に沿って説明します。
  1. MiniMeTokenFactoryコントラクトをデプロイする
  2. 親トークンを作成、デプロイする

1.MiniMeTokenFactoryコントラクトをデプロイする


MiniMeTokenFactoryコントラクトはMiniMeトークンをクローンして新たなMiniMeトークンを作成する機能を持ったコントラクトです。createCloneToken()というメソッドのみを持ち、クローントークンを作成してそのアドレスを返します。

親トークンをデプロイする際に、既にデプロイされたMiniMeTokenFactoryのアドレスが必要なため、以下のMiniMeToken.solをダウンロードしてMiniMeTokenFactoryコントラクトを先にデプロイしておきます。

MiniMeTokenFactoryコントラクト(562行目から)

https://github.com/Giveth/minime/blob/2b61f1c0faf4401140abad3f0639733f3142b65e/contracts/MiniMeToken.sol#L562
contract MiniMeTokenFactory {
    function createCloneToken(
            address _parentToken,
            uint _snapshotBlock,
            string _tokenName,
            uint8 _decimalUnits,
            string _tokenSymbol,
            bool _transfersEnabled
    ) returns (MiniMeToken) {
    //  新規MiniMeトークンをデプロイ
        MiniMeToken newToken = new MiniMeToken(
            this,
            _parentToken,
            _snapshotBlock,
            _tokenName,
            _decimalUnits,
            _tokenSymbol,
            _transfersEnabled
        );
 
        newToken.changeController(msg.sender);
        return newToken;
    }
}

2. 親トークンを作成、デプロイする


先ほど述べたように、親トークンのコントラクトはMiniMeTokenコントラクトを継承します。MiniMeTokenコントラクトが含まれるSolidityファイルは前述したMiniMeTokenFactoryと同じものです。

MiniMeTokenコントラクト(77行目から)
https://github.com/Giveth/minime/blob/2b61f1c0faf4401140abad3f0639733f3142b65e/contracts/MiniMeToken.sol#L77

上記ファイルをimportしてMiniMeTokenコントラクトを継承した親トークンコントラクトを作成します。コンストラクタで親トークンの各種パラメータを設定します。
MyToken.sol
pragma solidity ^0.4.11;
import "./MiniMeToken.sol"; //ファイル配置によって適宜変更してください。
 
// 親トークンのコントラクト。MiniMeTokenを継承。
contract MyToken is MiniMeToken {
    function MyToken(address _tokenFactory)
            MiniMeToken(
                    _tokenFactory,      // 先にデプロイしたMiniMeTokenFactoryのアドレス
                    0x0,    // 親トークンはないので0
                    0,    // 親トークンから引き継ぐ特定ブロック。無いので0
                    "My Token",    // トークン名
                    18,    // 小数第何位まで有効か
                    "MYT",    // トークンシンボル
                    true    // トークンの移動を許可
            ) {}
}
このコントラクトに先程デプロイしたMiniMeTokenFactoryのアドレスを渡してデプロイすると、クローン可能な親トークン、MYTが作成できたことになります。

クローントークンの作成


親トークンがデプロイされると、いつでも、どのアドレスからでもクローントークンを作成することが出来ます。

クローントークンを作成するには親トークンのcreateCloneToken()メソッドを呼びます。こちらはSolidityのコードではなくgethなどのクライアントで実行されるJavaScriptのコードです。
MYT.createCloneToken(
        “Cloned My Toknen”,    // クローントークン名
        18,    // 小数第何位まで有効か
        “CMYT”,     // トークンシンボル
        web3.eth.blockNumber,    // 引き継ぐブロック。ここでは現在のブロックを指定
        true  // トークンの移動を許可
)

上記を実行すると内部でMiniMeTokenFactory.createCloneToken()が呼ばれ、以下が実行されます。
new MiniMeToken(
        this,   // MiniMeTokenFactory自身のアドレス
        0xaaa,    // 親トークンのアドレス。自動で設定。
        XXXXXXXX,    // web3.eth.blockNumber
        “Cloned My Toknen",
        18,
        “CMYT”,
        true
);

これでMYTのクローントークン、CMYTの作成が完了しました。CMYTはMYTの残高を引き継ぎますが、それぞれ独立したトークンとして存在することになります。つまりCMYTを消費してもCMTが減るといったことはありません。

ちなみに、クローントークンはいくつでも作成できます。クローントークンもまたMiniMeトークンであるのでさらにそこから孫トークンを作成することもできます。

キャンペーンコントラクト


クローントークンが作成できたらそのクローンを使ったキャンペーンなどを展開できます。

以下は非常にシンプルな資金集めキャンペーンコントラクト重要部分を記載したものです。(完全なものではありません)

キャンペーンでMiniMeトークンを使用するためには先程のMiniMeToken.solをimportしておく必要があります。
Campaign.sol
import "MiniMeToken.sol";
 
contract Campaign is TokenController, Owned {
・・・省略
    MiniMeToken tokenContract;
 
    function Campaign(
        uint _startFundingTime,   //  キャンペーン期間の設定
        uint _endFundingTime,
        address _vaultAddress,  //  集めたEtherを送るアドレス
        address _tokenAddress  //  キャンペーンで使用するトークンのアドレス
    ) {
            tokenContract = MiniMeToken(_tokenAddress);  // MiniMeトークンの設定
            ・・・省略
}
        
・・・省略
}

完全なキャンペーンコントラクトのコードはこちら

_tokenAddressをクローントークンであるCMYTのアドレスにしてこのコントラクトのデプロイするとキャンペーンの準備が完了します。

参考資料:


     

免責事項

本記事に掲載されている記事の内容につきましては、正しい情報を提供することに務めてはおりますが、提供している記事の内容及び参考資料からいかなる損失や損害などの被害が発生したとしても、弊社では責任を負いかねます。実施される際には、法律事務所にご相談ください。

技術・サービス・実装方法等のレビュー、その他解説・分析・意見につきましてはblock-chani.jp運営者の個人的見解です。正確性・正当性を保証するものではありません。本記事掲載の記事内容のご利用は読者様個人の判断により自己責任でお願いいたします。

     

コンセンサス・ベイス(株)とブロックチェーン事業を行なってみませんか?

当サイトを運営するコンセンサス・ベイス株式会社は、2015年設立の国内で最も古いブロックチェーン専門企業です。これまでに、大手企業の顧客を中心に、日本トップクラスのブロックチェーンの開発・コンサルティング実績があります。

ブロックチェーンに関わるビジネスコンサル・システム開発・教育・講演などご希望でしたら、お気軽にお問い合わせください。

     
     

ブロックチェーン学習に最適の書籍の紹介

図解即戦力 ブロックチェーンのしくみと開発がこれ1冊でしっかりわかる教科書

ブロックチェーン イーサリアムへの入り口 第二版 (ブロックチェーン技術書籍)

本書は、ブロックチェーン技術に興味を持ったエンジニアや、その仕組みを学び、自分の仕事に活かしたいビジネスパーソンを対象にして、ブロックチェーンのコア技術とネットワーク維持の仕組みを平易な言葉で解説しています。この本を読んだうえで、実際にコードを書くような専門書、ブロックチェーンビジネスの解説書を読むことで、理解度が飛躍的に高まるでしょう。(はじめにより)

イーサリアム(Ethereum)カテゴリの最新記事