DAICOオープンソースフレームワーク #04 TokenController.solの実装

DAICOオープンソースフレームワーク #04 TokenController.solの実装

今回はTokenControllerについて解説する。

 

TokenControllerは、トークンの発行を管理するコントラクトである。トークンコントラクトのownerとなり、トークンのmintを行う。TokenContollerの役割は、ICOの各フェイズで誰がトークン発行の権限を持つかを管理することである。

 

コンストラクタは以下の通りだ。

 

状態遷移

TokenContollerは、次の順に状態遷移する。

  • トークンセール開始前
  • トークンセール中
  • プロジェクト開始後

コントラクト中では、stateは以下のように表される。

 

トークン発行権限

トークンの発行権限は以下のルールで管理される。

  • トークンセール開始前は、プロジェクトの起案者(TokenContollerのowner)のみがトークンを発行できる。
  • トークンセール中は、トークンセールを管理するコントラクトTokenSaleManagerのみがトークンを発行できる。トークン購入者からETHを受け取ると、TokenSaleManager経由でTokenControllerにmintが指示される。このフェイズでは、プロジェクトの起案者はトークン発行はできない。
  • プロジェクト開始後は、現時点の仕様では誰もトークンを発行できない。将来的な拡張として、Votingによって「トークンの追加発行」が可決された場合に追加発行できるようになる。その場合は、Votingコントラクトのみが発行権限を持つ。

上記の権限管理は、mint()内に実装されている。

運用フロー

全体的な運用フローは第2回の記事に詳述しているので、ここではTokenControllerのみに注目したフローを概説する。

  • TokenControllerをデプロイ(state:トークンセール開始前
  • トークンのownershipをTokenControllerに移す
  • プロジェクト起案者(TokenControllerのowner)は、TokenContoller.mint()を使ってトークンセール開始前に配布する分のトークン配布を行う。
  • TokenController.openTokenSale()を実行してstateをトークンセール中にする。
  • TokenSaleManagerによってトークンセールが実行される。
  • TokenSaleManagerのfinalizeを行う。TokenControllerのcloseTokenSale()が呼ばれ、stateがプロジェクト開始後になる。

状態遷移function

状態遷移のfunctionは次の3つがある。

  • constructor()でstateがInit(トークンセール開始前)に初期化される。
  • openTokenSale()でstateがTokenSale(トークンセール中)に遷移する。
  • closeTokenSale()でstateがPublic(プロジェクト開始後)に遷移する。

 

その他Getter function

現在のstateをチェックするGetterが用意されている。

  • isStateInit
  • isStateTokensale
  • isStatePublic

enum Stateは内部的にはuintで表現されているため、returns値としてStateを返すと暗黙的に割り当てられたuint値を返してしまう。これは保守性の観点で問題があるため、Stateを返すfunctionを作る代わりに、isStateXXXXという形で各stateであるかどうかをtrue/falseで返すfunctionを用意した。

 

 

TokenControllerについては以上だ。

Profile

解説:小幡 拓弥

ICOVO AGのCOOであり、ブロックチェーンエンジニア。2016年Blockchain HackathonにてMVP。自然言語処理や機械学習、チェスライクゲームAI開発の分野での経験を持つ。