見出し画像

3つのステーブルコインから学ぶWeb3システム設計のコツ Part2 旧MakerDAO編

今回は第1回で解説した仮想通貨を担保に発行するステーブルコインの元祖である旧MakerDAO versionのSaiについて、設計や実運用、歴史を踏まえつつ解説していきます。

今回の連載のURLはこちら:


Sai / 旧MakerDAO

仮想通貨をもとにステーブルコインを作る試みは2015年ごろからあったのですが、大規模に成功したのは、この2017/12/19にリリースされたMakerDAOとSai (当時はDaiという名前の)というステーブルコインです。
いわゆる今回話す過剰担保型Stablecoinの元祖で、担保はETHという仮想通貨のみです。この次話す複数担保型に移行する際に、旧型のこっちの名前がDaiからSaiに改名され、複数担保型の方がDaiという名前になりました。 (なのでSaiのローンチ当初はDaiという名前でした。)

Saiの生成/焼却周りの話

登場する用語です。

  • WETH: ETHをERC20にラップして扱うためのコントラクト

  • PETH (Pooled ETH): WETHとは違う、半分ペッグするトークン。PETHをかます理由は、清算がうまく行かなかった場合にPETHを希釈化するためとされています。普段は清算ペナルティーの一部がPETHに流れてきてPETH/ETHの価格は上がる。(余ったDaiでPETHを買う) これを理由にETHをPETHに交換しておく人たちが現れました。 (これは結果として清算がうまくいかなかった時のショックを和らげてくれます。)

  • CDP: Collateralized Debt Positionsの略 ユーザーは専用のCDPを開設して、そこにPETHをDepositしSaiを借入します。

  • MKR: Stability Fee(いわゆる金利) をMKRという独自トークンで徴収します。徴収されたものはBurnされます。

MakerDAOでSaiを借りる時のフローはこんな感じです

  1. まずETHを入金する必要があります。ETHはWETHというETHをERC20で扱える規格に変換します。

  2. WETHはPETHに変換します。清算がうまく行った時はPETHが希少化し、うまくいかなかった場合はPETHを希釈します。

  3. PETHをCDPというコントラクトにロックします。そうするとSaiが一定額まで借りれます。

返済するときはSaiをCDPに返済します。そうするとPETHのLockが解除できるようになります。それをETHに戻せば完了です。
また返済する際に、Stability Fee (いわゆる金利です)をMKRで支払う必要があります。支払われたMKRはBurnされます。
また、CDPは過剰担保で借金を行う仕組みなので、この担保評価額が下落した場合、これ以上担保が目減りしないうちに担保を売却して借金の返済に充てる必要があります。これが清算です。
清算についてはこんな感じです。

  1. 清算の閾値に達した人のCDPのトリガーが引かれることで清算プロセスが開始されます。この精算の閾値は担保金額(USD建て)が借入金額(Saiの枚数+金利=SINで計算)に対して150%以下に設定されています。トリガーは誰かが発動させます。(ETHの価格は常に配信されているので可能)

  2. 清算が発動すると、システムではある程度値引いて(記憶だと5%くらいだったはず)PETHを直接定額で販売しSaiを手に入れる。清算が発動するとペナルティーとして14%ほどさらに引かれます。返済してペナルティーとして余ったSaiはPETHの買い戻しに使われます。(PETHはBurnされ、PETHとWETHの交換レートがあがる) そしてさらに余った分は元のCDP保有者に戻されます。

MKRのGovernanceで変更可能なパラメーターなど

MKRトークンには金利 (Stability Fee)の支払いのほかに、MKRトークンによる投票でシステムの各種パラメーターを変更することができます。
way: Dai reference price drift
どのアカウントがETH価格の配信を行うか (Oralceになるか) を設定することができます。またこの価格変動率には上限が設定されており、例えば300ドルで前回配信されていたのが、次の価格更新でいきなり3ドルにするといったことはできないようになっています。
cap: Debt ceiling 予期せぬ量のSaiが大量発行されないよう、一つのCDP Type毎に発行できるSaiの量の上限を設定することができます。
mat: Liquidation ratio (清算ラインの設定)
これは、清算ラインの設定を行います。Saiでは、清算ラインが66.6%に設定されていました。つまりETHが1499ドルの時、1ETHを担保に1000Saiを借りていた場合清算されてしまいます。
tax: Stability fee
いわゆる金利です。Saiの価格安定のために調整されます。 (後述)
axe: Liquidation penalty
清算ペナルティーの%を変更することができます。

そのほかにも

  • 新たなCDP Typeの設定 (SFやCFなど)

  • Oracleの選出

  • Global settlementに関わる人の選出

  • Emergency Shutdownを行う人の選出

  • Price Feedの変化率設定

を行うことができます。

どうしてSaiはStableなのか?/本当にStableなのか?

まずこのSaiは、直接1ドル分のETHやあるいは現金のドルと引き換えができるようなものではないです。なので、1ドルより下へと乖離することもありますし、なんなら上へと乖離することもあります。これを調節するのがStability Feeです。
基本的にSaiの価格は需給で決まります。SaiではStability Feeという金利を需給の調整を行うことで調節します。

  • Sai価格が1ドル以下の時: Stability Feeを引き上げる。「金利がきついから早めに償還しなきゃ」という思いにさせる。返済するときにマーケットでSaiを買うので価格上がるよねという

  • Sai価格が1ドル以上の時: Stability Feeを引き下げる「金利安いなら借りようかな」という気持ちにさせる。


https://www.coingecko.com/en/coins/sai

ここでSaiが取りうる価格の上限と下限を考えて見ましょう。
(なおETHのCollateralが清算される値は150%以下、オラクルは常に正しい値を発信する。そしてネットワークは混雑してないものとします。)
答えは、0ドル~1.5ドルです。究極的に言えば、返済需要がゼロかつSai売却(供給)が過剰の場合、0ドル近辺まで売られまくるからです。1.5ドルというのは、例えば100ドルの価値のETHに対して66.6 Sai まで借りることができるので、そのSaiの売却単価が1.5ドルであれば担保額と同等の分をSai即時売却で得ることができます。つまり1.5ドル以上であれば (Debt Cailingに達していない限り) Saiを限界まで借りて発行して売却すれば儲かるということになります。

また、Saiの価格についてですが、基本的にSaiの需要は「ETHを担保にSaiを借入して売ってETHや欲しいものに交換する」ということが主なので、ETH価格が上がれば下へと乖離し、逆にETH価格が下がれば返済需要が高まるので、上へと乖離します。
上のグラフはETH価格の変動と、それに伴うStability Feeの変動です。ちょうど2019/5あたりにETH価格が上がった時にStability Feeをあげているのがわかるかと思います。先程のSaiの価格変動のグラフを見ても、2019/5ごろに1.03ドルへと常時上に乖離していたのが見て取れると思います。

その他

  • Emergency Shutdown: 緊急の時/システムを終了するときに、これをトリガーすることで全ての借入/返済などのアクションは停止され、CDP所有者は担保に入れていたETH - 借入した分のSaiのあまりのETHを受け取り、Sai保有者は1ドル換算のETHを手に入れることができるというものです。これはSaiからDaiへと移行する時にも利用されました。

さて、開発者は無償労働は辛いので、たいてい利益を得られるポイントをプロトコル作成時に作ります。大体はトークン発行とその組み込みによって行いますが、このMakerDAOの仕組みも同様でしょう。この開発者の儲かりポイントはMKRの販売が主と見られます。 実際プロダクトローンチ時にVCに対して$7.5Mの販売を行っていました。 他にも定期的にStability Fee支払いのためにMKRが必要なので、一定の買い圧力が常時存在し、Saiが発行されればされるほどMKRの買い圧力が高まります。
ほかにも清算を行うBotを作ることで利益を得ることができるようになっています。 ただ、初期のうちは手動でポータルをぽちぽち触れば清算に参加して安くETHを手に入れるといったことができたので、開発者側はそういったものは作ってなかったようですが。
ここまで、Saiの「設計者の意図」と思われるところについて触れながら仕組みについて解説していきましたが、ここからはリスクシナリオと実運用におけるカバーについて見ていきたいと思います。

Saiのリスクシナリオ

とりあえずありうるシナリオとしてはここら辺でしょうか

オラクルの配信価格
まず真っ先に考えつくのはこれでしょう。ETHの交換レート配信にこの仕組みは依存しています。これがCDPの清算やSaiの発行、償却など各種動作に重要だからです。例えば1ETH1000ドルなのに1ドルとオラクルが言ってしまった場合ほぼ全てのCDPは清算対象となりシステムは壊滅します。逆に1万ドルと言われてしまったばあい大量にSaiが生成され、売却され、Saiの価格は超暴落します。オラクルの安定性に対するケアはとても大切なのです。

Sai価格の下振れシナリオ
ETHが急速に上がっていった場合、Saiの価格がガン下げするリスク (0.5$とか)が存在します。ただ下振れてもシステム自体にそこまで負の影響はないです。(Saiの価格安定性に対する信用は落ちます)
逆に上振れると下のような負の影響が考えられます。

清算が進行しない
Saiの価格が十分に高いとき($1.3とか)、清算に出されたPETH($200)が190Saiで販売されていても、Saiを市場で売却してETHを直接買った方が儲かるので清算が進まないといったことが考えられます。 (実際は確か時間が経つにつれてどんどん価格下げていく方式だったはずですが)

Emergency Shutdownすると儲かる時がある
Saiが1.3ドルの時に借入&売却、その後Emergency Shutdownされた時に借りてた分のSaiはシステムでは1ドル換算なので 担保に入れていた金額-1ドル相当の借り入れたSai+1.3ドル分の売却した分ということで利益が借り入れた金額*0.3ドル儲かる計算になります。MKRを悪意ある人たちにたくさん握られた場合こういったことが考えられるのです。

Stability Feeをマイナスにはできない
こうしたSaiの上乖離を解消するためには、Stability Feeを下げる必要があるのですが、これが0%になってもなお上乖離がある場合にできる手段がほぼないです。Stability Feeをマイナスにするのは現在のシステム上ではできません。
ほかに追加で報酬を与えるスマートコントラクトを用意すればできますが、報酬の資金どうする問題が発生します。その結果Saiの価格が高止まりする可能性があります。

MKRガバナンスへの依存
基本的にこの仕組みでは、各種パラメータの調整といった厄介ごとをMKRガバナンスに押し付けることで解消しています。なので、MKRのガバナンスが適切に運用されないということはシステムの安定性を損なうことに直結します。
ほかにもMKR大量保有者が物理的に脅されたり、あるいはハッキングによって悪意あるハッカーの手に渡った場合にも、このシステム自体が攻撃されることにも繋がります。

まとめ

  • 仮想通貨担保のみできちんと安定したステーブルコインを生成することに成功した

  • 基本厄介なところはMKRガバナンスに寄せることで解決した (なので、パラメーターは基本開発者に近いところが最終決定できるくらいには持っていたはず。実運用はそれで解決)

  • MKRに一定のUtilityやCashflowを持たせることに成功。MKRの売却によって利益を得られるように

ここから派生して進化したのがMakerDAOの次のVersionのものと、Liquityというものです。
MakerDAOは世界中の様々なものを担保にDaiを生成する&Governanceの力によってそれを巧みに運営するという方向へと向かっていきました。対してLiquityはETHのみ担保のまま、Governance-lessでステーブルコインを実現しようという方向へと向かっていきました。これこそが、プロトコル設計の意図の違いです。

次回はMakerDAO現行バージョンについて見ていきます。


Turingumではこうしたリサーチや、たくさんのWeb3プロダクト開発、運営に一貫して携わる中で得られた知見をたくさん貯めて顧客の方々に還元していくサイクルを回しています。お気軽に下のフォームからお問合せください!


この記事が気に入ったらサポートをしてみませんか?