DAICOのオープンソースフレームワーク #01 DAICOVOの構造

DAICOのオープンソースフレームワーク #01 DAICOVOの構造

ICO(Initial Coin Offering)という資金調達の方式が活況を呈している。PWCのレポートによると、2017年は500件以上のプロジェクトが総額70億ドル以上を調達しており、さらに2018年は最初の5か月でその2倍を超える調達額に達しているとのことだ。しかし、これだけの盛り上がりを見せるICOの裏側で、詐欺やプロジェクトの停滞が横行し、投資家の損失となっていることはすでに周知のことである。Satis Group LLCのレポートによれば80%以上のICOが詐欺であると報告されている。

 

このことを憂慮して、イーサリアムの発明者ヴィタリック・ブテリンはDAICOというコンセプトを提案した。DAICOはICOによって調達された資金のコントロールに投資家自身が関われる仕組み※1で、詐欺やプロジェクトの停滞から投資家を保護することができる。

※1 DAICOの詳細はヴィタリックによるEtheresearchへの投稿を参照してほしい。

ICOVOでは、このDAICOのコンセプトをスマートコントラクトの実装へと落とし込んだフレームワーク「DAICOVO」を開発し、オープンソースソフトウェアとして公開している。DAICOVOは誰でも自由に使うことができ、DAICOを組み込んだICOを簡単に導入することが可能だ。

 

DAICOVOhttps://github.com/icovo/DAICOVO

 

また、DAICOVOは単なるDAICOコンセプトの実装ではない。サービス提供に必要な機能やパラメータを検討して導入した実践的なスマートコントラクトになっている。

 

ICOVOは、ICO市場を健全化するため、DAICOVOを使って誰もが安心してICOに参加できるプラットフォームを提供している。

 

本連載では、DAICOへの理解をコードレベルで深めたいエンジニアや、DAICOVOテンプレートを用いてICOを運用しようとする読者に向けて、DAICOVOの運用方法やコードの詳細、実践的に使うために検討した事項について解説していく。なお、DAICOVOは今後も機能拡張を続けていくが、ここでは現時点での最新版(コミットハッシュ aa720c672eb91789431f252a3810c6f6c82cbcca)をベースにする。

 

第1回ではDAICOVOの全体構成について解説する。

DAICOVOのソースコード・開発環境

DAICOVOのコードはGitHubの以下のリポジトリにある。

 

https://github.com/icovo/DAICOVO

 

以下のようにgit cloneするなどしてソースコードを入手する。

 

 

DAICOVOは以下の環境で開発されている。そのため、上記のコードもtruffleのディレクトリ構成をとっている。

  • Node v8.10.0
  • Truffle v4.1.13 (core: 4.1.13)
  • Solidity v0.4.24 (Truffle includes solidity compilers)

ここでは各ツールの使い方については解説しないが、検索をすればたくさんの情報が出てくるため、そちらを参照してほしい。

DAICOVO構成図

DAICOVOは7つのスマートコントラクトで構成される。このほかにICOVOサービスに関連するコントラクトが公開されているが、DAICOの機能には含まれないのでここでは触れない。

 

DaicovoStandardToken (Token)

トークンのテンプレート。各プロジェクト用に名前などのパラメータを設定する。ERC20準拠かつERC223拡張。ただし、ERC223部分はインターフェイスがオリジナルと少し異なる独自拡張を施している。

TokenController

トークンの発行を管理する。セール開始前は起案者(TokenControllerのOwner)が、セール中はTokenSaleManagerがトークンを発行する権限を持つ。現在はセールが終わると誰も発行できなくなるが、将来的にVotingが拡張されると投票によって追加発行が可能になる。そのため、セール終了後にVotingによるトークンの発行を可能にするインターフェイスを用意している。

TimeLockPool

ETHやトークンを指定した期限まで預かってロックする。指定したタイムスタンプを過ぎると引き出し可能になる。1つのTimeLockPoolインスタンスであらゆる種類のERC20トークンとETHを預かることができるため、多数のプロジェクトで共有可能である。トークンセールにともなうハードロックアップを実現するためのコントラクトだ。

TokenSaleManager

一連のトークンセールを管理するコントラクト。このコントラクトの下に複数のTokenSaleコントラクトが管理される。TokenSaleコントラクトにETHが送られた場合、TokenSaleManagerを通してTokenControllerにトークン発行指示が出される。また、すべてのTokenSaleが終了すると、DaicoPoolに対してプロジェクト開始シグナルを送る。セールで集められた資金はすべてDaicoPoolに送金される。

TokenSale

トークンセールのテンプレート。プレセール、クラウドセールなど、セールにおける1つのフェイズにつき1つのTokenSaleが対応する。トークン価格、セール期間、販売トークン数、タイムロックの有無、キャリーオーバー有無などのパラメータを設定できる。

DaicoPool

ICOで集めた資金を格納するプール。各TokenSaleはfinalizeされると集めた資金をこのプールに送金する。プロジェクト開始シグナルを受け取るとTAPがオープンし、起案者による資金の引き出しが可能となる。また、VotingコントラクトからTAP増加、Self Destructionのシグナルを受け取り、対応する処理を行う。

Voting

投票コントラクト。誰でもこのコントラクトに一定のETHを送れば発議が可能になる。発議は現在2種類あり、TAP増加またはSelf Destructionについて投票を実施する。投票期間中、トークン保有者はトークンをこのコントラクトにデポジットすることで投票を行うことができる。一定の投票期間を経て可決された場合、DaicoPoolに該当するシグナルを送る。

 

以上がDAICOVOの全体的な構成図と各コントラクトの概要だ。

 

第2回では、DAICOVOのデプロイ方法・運用フローについて解説する。DAICOVOテンプレートをそのまま使用したいのであれば、こちらを読めば使い方がわかる。

 

第3回以降は、各コントラクトコードの詳細な解説に進む。DAICOの各機能がどのように実装されているか、どのような検討を経て仕様が決定されたかを知りたいエンジニアはこちらも読んでいただきたい。

 

Profile

解説:小幡 拓弥

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