TrueUSD
TrueUSDとは
TrueUSDはUSドルと1対1で交換可能なステーブルコインで、TrustTokenが発行した最初のトークンである。ERC20を拡張している。 常に全TrueUSD相当額の担保が信託銀行にUSDで保管されている。
信託の仕組み
監査体制
USドルは複数の信託会社のエスクロー口座に保管される。銀行口座は使われない。
取引は信託会社と直接行われ、TrueUSDのシステムはファンドには一切触れない仕組みになっている。
TrueUSD発行
TrueUSDの購入者(交換ではない)はKYC/AMLチェックを受けた上で、TrueUSDの信託会社にUSドルを送金する。
信託口座へのUSD送金が検証されれば、信託会社のAPIによりTrueUSDのスマートコントラクトが実行され、TrueUSDがmintされ、TrueUSD購入者に送金される。
トークンがウォレットに送金されれば、交換所などでBTCと交換したり、送金したり、取引に利用したりできるようになる。
https://cdn-images-1.medium.com/max/1600/1*LAdhyn_9G9ybxXwXnV-wFw.png
USDに交換
KYC/AMLチェックを通った後、信託会社に登録したEthereumアドレスからTrueUSDトークンを0x0に送る。その後エスクロー口座からUSDが払い出される。このときアドレスに送られたTrueUSDはburnされる。
TrueUSDのシステムはファンドには一切干渉しない。信託会社がエスクロー口座を通じて購入や現金の領収など一切の業務を執り行う。
https://cdn-images-1.medium.com/max/1600/1*UDRKbDAaI_v2Sgw66fI8EA.png
この一連の業務はPrime Trustが担っており、USDとTrueUSDの交換は必ずこの信託会社を通して実行される。つまり信託会社がTrueUSDのゲートウェイになっている。ただしTrueUSDはERC20なのでETHなどを経由して交換所でFiatに戻すことも可能。 Prime Trustは信託口座のファンドを運用しない。エスクロー口座にUSDを保管し、TrueUSDと1対1交換する業務に徹する。
信託口座を利用することで定期的な検証と法的保護を受けられるようになる。
具体的な購入・償還の方法
TrueUSDの購入・返金は以下のフォームから申請できる。
Tetherとの違い
法的に保護される
エスクロー口座を利用することで残高の定期的な監査が行われ、トークンホルダーは法的に強く保護される。
USDと交換できる
標準的なKYC/AMLチェックが行われたTrueUSD口座を持つ個人または機関は、TrueUSDをUSDと交換することができる。
信用できるファンドマネジメント
法的立て付けとしては、TrueUSD保有者はエスクロー口座を通して直接USDに交換できるようになっており、TrueUSDのシステムはUSDファンドに触れないようになっている。TrueUSDと契約する信託会社のエスクロー口座にてUSDを入金/出金することで、TrueUSDとUSDの交換を行えるようになっている。
完全に担保されている
全てのTrueUSDは常にUSDでの担保によって完全に保証されている。USDは専門の信託会社のエスクロー口座で保管される。流通するTrueUSDとエスクロー口座のUSDが1:1の同等量になることを保証するため、公的にコード監査されたスマートコントラクトによって、エスクロー口座にUSDが確実に入金されたことが確認されるとTrueUSDが発行され、USDが払い戻されるとTrueUSDが焼却される。
定期的な監査
エスクロー口座はCohen & Coなどの専門の独立した第三者の監査機関によって定期的に監査され、監査レポートが発行される。これによりベストセキュリティプラクティスを確保している。 TrustTokenが将来やりたいこと・考えていること
将来的にTrueEuroやTrueYenなどを発行することも想定されている。貴金属や不動産を担保にしたトークンも発行したい。
さらにそれらステーブルトークンのバスケットも提供したい。誰もがバスケットを作れるようになり、自由に最もステーブルだと思うバスケットを選べるプラットフォームを作りたい。
将来的には現実世界のあらゆるアセットをトークン化したい。
最も魅力的な市場の一つとして不動産市場を挙げている。世の中には200兆USドルものオフラインな不動産があり、これらをトークン化できればより多くの富を創出できると考えている。
スマートコントラクト詳細
以下はアップグレード前のコントラクトの解説になっている。
構成コントラクト一覧 (階層は継承関係を表す。上の階層が派生コントラクト)
トークンのmint, burnができる
うっかりEther, ERC223Token, コントラクトが送信されてもrevertして所有しないようにするためのコントラクト
例えばベースクラスのHasNoEther.solではpayable functionを持ってて、require(msg.value == 0)してる burnできる金額に上限と下限を設けたコントラクト
2018年11月1日現在、信託会社が受け付ける払戻額は1万ドルからなので、下限(burnMin)に1万USD相当の値が設定されている
なおburnMaxには2000万USD相当の値が設定されている
オンチェーンのストレージ registry にKYC/AML等チェック済みのEthereumアドレスを保存し、管理するコントラクト mint, burn, transferするときにregistryを参照し、requireでのバリデーションを行う
transfer, burn, mint時にトランザクション手数料を評価できるようにするコントラクト
registryを利用し、手数料がかからないアドレスを設定することもできる
誰が手数料払うか?
mint時はmintされるアドレスから手数料を払う(mint後に手数料支払い関数が実行される)
burn時はburnしようとしてるアドレスから手数料を払う(手数料支払い関数実行後にburnされる)
transfer時はtransferしようとしてる額から手数料が差し引かれる
例えばAがBに1000トークン送るとき、Bは999トークン受け取り、ステーカーが1トークン受け取るような感じ
n枚のトークンに対する手数料は以下のように計算できる
n * feeNumerator / feeDenominator + feeFlat
2018年11月1日現在、コントラクトストレージを確認したところ手数料は0に設定されている
0x0へのtransferをburnと解釈して処理を委譲するコントラクト
delegate関数の処理を対応する通常の関数に委譲するコントラクト
新しいコントラクトがリリースされたときに、delegate*関数を実行することでユーザーが元々のバージョンを使い続けられるようにする仕組み
2018年11月1日現在、delegatedFromは設定されていない (0x0が設定されている)
delegateに新しいコントラクトのアドレスを設定すると、そのコントラクトに通常の処理を委譲するコントラクト
2018年11月1日現在、delegateは設定されていない (0x0が設定されている)
TrueUSDの初期オーナーで、オーナー鍵、mint鍵、mintポーズ鍵、mint承認鍵で構成される
セキュリティを最大化するため、mint時にディレイタイム(実際にmintされるまでに時間がかかり、問題があればその間にキャンセルできる仕組み)を課している
TimeLockedController.solのオーナーで、onlyOwnerな全関数への承認を2/3承認が必要なマルチシグに切り替える
所感
現実のアセットをいかにブロックチェーンと紐付けるかというオラクルの問題は、このTrueUSDのスキームが現時点での最適解のように思える。
信託会社をトークンアクセスのゲートウェイとすることでいろんな問題がすごく簡単になる。
例えばKYC/AMLや財産の保管を信託会社に、財産の監査を外部の独立した会計監査会社に任せることができ透明化できるようになる。逆に信託会社を使ってない場合、財産の担保が無いか、あったとしても不透明な管理状況になるし、KYC/AMLも煩雑になる。
信託会社の手数料徴収もスマートコントラクトを介して自動的に行える。手数料はトークンの発行・払い戻し・移転を行うときに徴収されるが、単に預けている担保に関して手数料を自動的に徴収することはできない。そのため、一定期間で一定額の信託報酬を得るような仕組みを作るのは難しい。そのようなビジネスモデルに依存する信託会社は、トランザクションに応じて手数料をどれだけ取れば収益を最大化できるか検討しなければならないだろう。