MOLDが目指す世界観の一つに、「P2Pでのデジタル資産の自由で迅速な取引」を可能にすることがある。このデジタル資産とは、単に現存する暗号通貨のみではなく将来的に、game内のユーザーのアセットをはじめとして、web上に乗ってくるであろう様々な物をさす。そのために、現在、MOLDチームはα版として、Ethereum上でデジタルアセットの交換プロトコルを実装しSDKとして公開することを目標に活動しており、今回から3回に分けて、MOLDチームが取り組んでいる交換プロトコルについて紹介していく予定である。初回は、そもそもアセットの交換プロトコルとして知られているDEX(Decentralized Exchange)とは何か、中央集権的な取引所と比べた時の利点など基礎的なことから解説していき、次回からはMOLDが取り組んでいるDEXについての考察を進めていく。
資産の管理
多くの人が、自分の暗号通貨walletを、資金を保管するために使用される本物のwalletの単なるデジタル版と考えている。
しかし、実際には暗号通貨はwalletには格納されていない。そうではなく、walletには自分のデジタル所持品へのアクセスを許可する一対の公開鍵と秘密鍵が保存されている。一言で言えば、公開鍵は英数字の文字列で、他のユーザーが暗号通貨を送信するために使用できるアドレスとして機能する。また、BitcoinやEthereumのような暗号通貨は、アドレスに紐づいた秘密鍵を知っている人だけが、そのアドレスにある残高を自由に他のアドレスに送信する権利を持つ。したがって、「秘密鍵を知っている人=そのアドレスの管理者」という構図が成り立つので、アドレス保有者は、秘密鍵の管理に厳重な注意を払う必要がある。送金は、差出人と受取人のwalletの差額とともに、ブロックチェーンの元帳に記録されるだけなのである。もちろん、walletという言葉を使い、あたかも暗号通貨そのものが入っているかのように見せかけることでユーザーは直感的に理解しやすく、UXの改善にもなるのでそれ自体は何も問題ないが、本質的には秘密鍵と公開鍵のペアを管理していることを知っておく必要がある。
集中取引所の仕組み
中央集権的な取引所は、取引業者が法定通貨または他の暗号通貨を使用して暗号通貨を売買することを可能にするプラットフォームまたはアプリケーションである。そのような普通の取引所では、ユーザーごとにアドレスを振り分け先ほどの資産管理を行う。取引したいユーザーは、まず、そのアドレスに暗号通貨を送金することになる(法定通貨で購入する場合は割愛)。したがって、取引所に送信された暗号通貨及びその秘密鍵を管理するのは、取引所ということになる。また、ユーザーが出した取引注文は、取引所内の独自データベース内でマッチングが行われる。もちろん、ブロックチェーンに記録されることはない。注文が出されると、取引所はリアルタイムで買い注文と売り注文を照合する仕組みになっている。ここで、重要なのは、ユーザーはそのようなtokenの交換を行うときに、暗号通貨の秘密鍵を持っていないということだ。つまり、銀行と同様に、ユーザーは自身の残高を保存し管理するために取引所を信頼する必要が出てくる。
もちろん、ユーザーの暗号資産を一元的なやり取りで保管することにはある程度の保証があるが、そうすることに伴う基本的なリスクも存在する。また、一元化された取引所は利用者の資金に対して法的に責任がある一方、多くの場合ハッキングの影響を受けやすい。
public blockchainの思想の一つにtrustlessという言葉があるが、中央集権的な取引所とユーザーの間では、本質的なtrustlessの状態を実現できていないわけである。
DEXとは何か
一方、DEXではユーザーが自身で秘密鍵の管理を行う。一見すると当たり前に思えるこの仕組みだが、中央集権的な取引所の場合とは大きく異なることは前述した通りである。また、assetを交換する際に、スマートコントラクト上で実行するので、trustlessな仕組みであるとも言える(ただし、UXを考えると注文のマッチングなどはオフチェーンで行う必要があるため、ある程度DEXのサービス側を信頼しないといけない)。
また、0xプロトコルに見られるように、同じプロトコルを利用することで誰でもDEXネットワークを構築することができるのも魅力の一つだ。実際に、0xプロトコルを用いているDEXには、Paradex, Radar Relayなどがある。
まとめると次のような特徴があることがわかる。
- ユーザーが秘密鍵の管理を自分で行う。
- 中央集権的な管理からスマートコントラクト上での管理を実現
- 誰でもネットワークの構築が可能
DEXの必要性
それでは、次に複数の観点からなぜ中央集権的な取引所ではなくDEXが必要なのか考えてみよう。
プライバシー
分散型取引所での主な利点の1つは、プライバシーと匿名性に重点を置いていることだ。分散型取引所では、取引を開始するために、ユーザー名、パスワード、および暗号ウォレット以外の何も必要としていない。
KYCを経由せずにサインアップして取引を開始できることは、匿名を希望する人、および自分の資金を迅速に入金し、取引し、引き出すことができる人にとっては魅力的である。
ただし、2018年11月にEtherDeltaがSECから罰金を請求されたことをきっかけにDEXの中でもKYCをとるところもある。
参考:https://www.sec.gov/news/press-release/2018-258
セキュリティ
分散型取引所の種類によっては、ハッカーがすべてのユーザーの資金を狙って盗むための集中型のhot walletがないため、集中型取引所よりもセキュリティが強化される傾向がある。
DEXが各注文に対して分散決済を実行するので、これはハッカーが悪用する潜在的な攻撃経路を最小限に抑えることができ、また、場合によっては、攻撃が成功する可能性はほとんどないと言える。
ユーザーは、自身が取引している間、エスクローに置かれている(コントラクトが保持している)自分の資金の完全な親権を維持することができ、DEX側はユーザーに資金の安全性における安心感を提供できる。たとえDEXが機能を停止した場合でも、エスクロー取引が期限切れになった後で、ユーザーは自分の資金を回収することができる。
操作の可能性が低い
一元化されたエンティティまたは政府、当局に対する検閲耐性を持っている。orderbookそれ自体がが取引を維持し実行することなく、これは第三者による操作の可能性を最小にする。
過去に、いくつかの取引所は、偽の取引量を生み出し、重要な取引時にトークンの入出金を削減したり、あるいは取引注文やトークンの価格を操作したりするためにウォッシュ取引を行っていると非難された中央集権的な取引所がある。
参考:https://medium.com/@sylvainartplayribes/chasing-fake-volume-a-crypto-plague-ea1a3c1e0b5e
分散型の取引所に対する管理されたorderbookがないので、これはそのような操作的な行動が起こる可能性が少ないことを意味する。
DEXの問題点
一方、DEXの問題点として大きく次の点があげられる。
スピード
分散型取引所はスマートコントラクトを使用してオンチェーン上で運営されているため、合意を得て取引注文を執行するには、集中型のチェーン外取引プラットフォームよりも時間がかかる可能性がある。depositとwithdrawの確認についても同じことが言える。トラフィックが多いときには、ブロックチェーンネットワークで輻輳が発生すると、エスクロー、キャッシュアウト、または取引の実行が適時に不可能になるため、事実上DEXが使用できなくなる場合も考えられる。
UX
depositやwithdrawのタイミングなど、オンチェーンで対応する場合には、transactionがブロックに格納されてネットワークのノードが確認するまで待つ必要がある。そのため、中央集権的な取引所と比べて、時間がかかる場合が多い。また、web上のオンラインサービスのほとんどにカスタマーサービスがあるが、DEXの場合は、問題が発生した場合、ユーザー一人一人に適切な対応をすることが難しくなる(ユーザーの情報をDEX側で保持していないため)。そのため、ある程度、暗号通貨やブロックチェーンに詳しい人でないと使いこなすのが難しいというユーザービリティの観点からの問題が存在すると言える。
暗号通貨同士の交換しかできない
これは、DEXの特質上仕方ないが、ブロックチェーンで管理されていない法定通貨と暗号通貨をスマートコントラクトで交換することはできない。しかしながら、異なるブロックチェーン上でのトークンを交換するプロトコルの開発は現在進行中である
例:
WBTC:https://www.wbtc.network/
HTLCs:https://en.bitcoin.it/wiki/Hash_Time_Locked_Contracts
DEXの種類
DEXと一言でいってもそこには様々な仕組みが存在する。まずは、ERC20のtokenの仕様に則っているtoken交換プロトコルを見てみよう。Etherscanのデータを見ると次のようになる(2019年1月31日現在)。
この中から、比較的有名なDEXとして次のものが挙げられる。
マッチングした板同士のswapが実行される
注文をオンチェーンで管理する
注文をオフチェーンで管理する
リザーバーと注文者によってswapが実行される
交換比率が数式で定義されている
交換比率が実勢レートで定義されている
一方、CryptoKittiesのようなERC721のトークンの取引を可能にするDEXも存在し、OpenSeaなどが有名である。
DEXの仕組み
先ほど挙げた全てのDEXコントラクトをみるのは難しいので、比較的単純なEtherDeltaのコントラクトを元にDEXの仕組みを解説する。
※コントラクトは次のURLよりダウンロード可能
https://github.com/etherdelta/smart_contract/blob/master/etherdelta.sol
コントラクトの継承関係は図の通りになる。
分散型取引所であるDEXの特徴としては以下のようなものがある。
ETH、ERC20のトークンを交換できる
取引、注文、預け入れなどをコントラクト上で実行する
AccountLevelsコントラクト
DEXユーザーにランク付けを行う機能。regular user, silver user, gold user
に分かれており、regular user
は、成行(taker)で注文する場合も、指値(maker)で注文する場合も、手数料は発生する。silver user
は、成行の場合は、手数料はかかるが、指値の場合には、手数料がかからない他、rebate
として一部手数料の払い戻しを受ける(rebate feeの設定は、adminが行う)。gold user
は、成行の場合、手数料はかかるが、指値の場合には、手数料がかからない上に、成行注文を出した相手側の手数料全てをrebate
としてもらうことができる。
AccountLevelにおけるrebate fee
の決定は、EtherDeltaコントラクトのtradeBalances関数で実行される。
EtherDeltaコントラクト
Constructor
として、デプロイ時に実行されるEtherDelta
関数では、admin
, feeAccount
, accountLevelsAddr
, feeMake
, feeTake
, feeRebate
の6つを引数に設定している。
上記6つの項目を変更することができるのは、adminアカウントをもつ人だけ。
depositとwithdrawイベント
tokens[]の配列の中に、各ERC20トークンのコントラクトアドレスが格納されている。ちなみにETHは、tokens[0]に該当する。
注文イベントとキャンセルイベント
注文イベントは特に難しくない。指定したブロック高までに、条件にマッチする取引相手が出るまで有効。
キャンセルイベント
キャンセルイベントでは、ecrecover(hash, v, r, s)で署名と元となるhashデータから公開鍵を求めて、アドレスと一致しているかのvalidationが入っている。
トレードの流れ
実際にorderが入ってから、取引が行われるまでの流れを見てみる。
ここでは、トークンαとトークンβを交換する(userがトークンαをGetとして、トークンβをGiveする)場合を考える。
富の総量は変わらないので、user/msg.sender/dex
の三者の間でどのように、価値が移転するかを見れば良い。
①最初に、user
が、トークンαとトークンβをどのくらいずつ交換したいのか定める(userはmaker)。
②次に、msg.sender
が、userが決めた条件に合意して、user
とmsg.sender
間で取引を行う。
③最後に、DEX側のあらかじめ決められたアカウントにtakerとmakerの手数料の合計からrebate
を差し引いたものが送られる。
以上、みてきたようにEtherDeltaのコントラクトでは基本的には、コントラクト上で注文から交換まで行なっていることがわかるが、他のDEXでは注文のマッチングをオフチェーンでしたり、リザーバーを設置して自動的に交換したりするなどの工夫がある。
DEXの将来性
現在様々なÐappsが存在しているが、重要なのはお互いのDapps内のassetの交換が自由にできることである。もちろん、現在のÐappsはどれもUX的に優れているわけでないので既存のアプリケーションと比べるとまだまだ課題はたくあんあるが、今後スケーラビリティの問題が改善していくにあたって、UXが改善しユーザー数の増加が見込まれる。その時に、Ðapps間のtokenの交換及びÐapps間のassetsの交換がスムーズにできれば、ブロックチェーンの新たなユースケースとして認識されるようになるだろう。
次回:MOLDチームが進めるDEXについて
次次回 :ERC1155の革新性について
— — — — — — — — — — — — — — — -
Cosmos Gaming Hub Project(旧MOLD Project)
CEO & Co-Founder
朝野 巧己
全てのゲーム愛好家に最高のエンターテイメントを届けるために