イーサリアム上にDEXでDappな「ZooMeX」を作りました。TOPDappsイーサリアム上にDEXでDappな「ZooMeX」を作りました。イーサリアム上にDEXでDappな「ZooMeX」を作りました。2018/03/08仮想通貨取引所のハッキングで多額の仮想通貨が盗まれるという大きな事件もあり、分散型取引所(DEX)の発展が今後とても重要になってくると感じています。そこでDEX関連のプロジェクトのリサーチを進める中で、0xというプロトコルが自分にも使えそうだったので実際に「ZooMeX」を作りました。(厳密にはDEXを簡単に利用するためのユーザーインターフェースなのでDappsと表現した方が正確です。)ZooMeXが提供するサービスの特徴は以下のとおりです。ユーザーが自身の秘密鍵を管理したままERC-20トークン同士の交換ができる簡単な操作でトラストレスなトークンの交換ができるなお、現在はメインネットではなくKovanテストネットでの運用となっております。そこで、当記事ではZooMeXの仕組み、土台となっている0xプロトコルの概要などを解説していきます。ZooMeXで何ができるのかユーザーが自身の秘密鍵を管理したままERC-20トークンを交換することができます。他の誰かに秘密鍵を預けるリスクはありません。交換したいトークンの種類を選択し、トークン数を入力するだけでトークン交換をすることが可能です。通常の取引所を介してトークンを交換する場合は、取引所がユーザーの秘密鍵を保持することでトークンの交換が行われます。取引所がハッキング等の被害に遭うとユーザーの資産(秘密鍵)も奪われてしまうという大きなリスクが存在します。そこで、この取引所自体をブロックチェーン、スマートコントラクトを活用することで分散的に構築し、ひとつの主体が集中的に管理するのを防ぐというアプローチが非常に重要になってきているのです。このように分散的な管理のもと、ユーザーが自身の秘密鍵を保持しながら暗号通貨の交換を行うことができるのがDEX(分散型取引所)となります。DEXにも、オンチェーン・オフチェーン処理、オーダーブックのあり・なし、などさまざまな角度からさまざまなプロジェクトが進行し、実用化に向けて積極的に開発されています。Protcolというプロジェクトはすでにメインネットで稼働しており、エコシステムも成長してきている注目すべきDEXであると僕は考えています。今回僕が作ったZooMeXも0xが提供するスマートコントラクトを使用し、ユーザーが秘密鍵を取引所に預けることなくトークンの交換を可能にしているのです。それでは、まずDEXのプロトコルを提供する0xと取引の流動性を供給するリレイヤーの概要を解説していきます。0xとリレイヤーZooMeXは上述した0xプロトコルで提供するスマートコントラクトを活用し成り立っています。0xはプロトコルであり、DEXの仕組みを提供しているだけなので、0x自体はDEXではありません。実際に0xプロトコル上でDEXとして存在するのがリレイヤーとなります。トークンを交換するためには「トークンを買いたい人」と「トークンを売りたい人」が必要です。そこで、トークンの交換を成り立たせるためにリレイヤーは、買い手と売り手のオーダーブックを管理してくれるのです。「アリスが1ETHを10GNTで買いたい」という注文であったり、「ボブが100REPで5ETHを売りたい」といった注文を管理してくれます。リレイヤーはこのような注文をブロックチェーンで管理しているわけではありません。ブロックチェーン外のオフチェーンで注文をマッチングさせているのです。実際のトークンの売買(settlement)はオンチェーンで処理されます。このようにオフチェーンマッチング・オンチェーンセトルメントの仕組みを導入することで、トランザクション処理のスピードをスケーリングさせていることになります。Protocolはこのようにリレイヤーがオフチェーン(ブロックチェーン外)でユーザーの売買注文を管理し、成立した取引をオンチェーンで処理できるような安全なスマートコントラクトを提供しているということです。リレイヤーは決済に関係のないオーダーブックのみの管理をし、取引の流動性を供給する役割です。決済(交換)はブロックチェーン上で行われるのでリレイヤーのシステムがハッキングされたとしても、攻撃者はユーザーの資産を奪うことはできません。リレイヤーは任意の手数料を買い手と売り手から得ることができます。この手数料収益がリレイヤーのインセンティブとなり、リレイヤーが増加すると市場競争により手数料も低下していくと考えられます。0xについては以下の記事でさらに詳しく解説しているのでぜひご参考にしてください。参考:分散型取引所(DEX)で高速かつ安価な取引を目指す「0xプロジェクト」とはZooMeXの仕組み上述した0xがプロトコルを提供し、リレイヤーが流動性を供給するという0xエコシステムの中で、ZooMeXはリレイヤーが管理しているオーダーブックを取得し、ユーザーにとって最適なレートのオーダーで取引を成立させる、というのが基本的な仕組みです。リレイヤーは外部からでもオーダーブックで取引が行えるようなAPIを提供しており、ZooMeXではこのAPIを使用しております。リレイヤーにとってもAPIを介した外部からの注文でも、自身のオーダーブックで取引されている限り取引手数料を得ることができるので、APIを提供するインセンティブとなります。これは0xエコシステム全体の発展につながることになります。ZooMeXではリレイヤーが管理しているオーダーブックですでに存在するオーダーに対して注文をぶつけることで取引を成立させています。「買い」と「売り」が存在する売買板に対して、オーダーをテイクしているのです。逆に言うと、「オーダーのテイク」だけの機能を提供することでオーダーブックの存在を隠したままライトユーザーにも分かりやすいUIを提供することができているのが大きな特徴となります。リレイヤー外のプレイヤーだからこそ複数のリレイヤーのオーダーブックを参照し、その中から最もレートの良いオーダーを算出し、ユーザーは自動でそのリレイヤーを介して交換をする、ということも可能になります。Relayは素晴らしい機能を提供しているリレイヤーですが、ライトユーザーにとってはかなりとっつきにくい画面であると感じます。https://app.radarrelay.com)そこでZooMeXは0xプロトコルとリレイヤーが管理しているオーダーブックを利用し、簡単な操作で安全にトークンの交換を行えるようなサービスを提供しています。ZooMeXに限らず0xのプロトコルを利用して初めてETHのトークン交換を行う場合は現状、以下のステップが必要になります。ETH)に変換するWETHのトークンアドレスに対して、所有者のアドレス以外が移動できることの許可を与える交換したいトークンの種類とトークン数を入力し交換を行う1.ETHからWETHへの変換WETHとはETHをERC-20に準拠させたトークンです。ETHはERC20トークンではないので、ETHにERC20の機能を付け加えるためにラッピングしていることになります。ETHをERC-20に準拠させる必要があるのかというとステップ2で、そのトークンを他の人が移動させる許可を与えるためです。ETH自体はこの機能を持っていないのでWETHに変換する必要があります。WETHの機能を拡張しただけなので、WETHとETHの価格は一致しています。少額のgasは必要になりますが、変換したWETHはいつでもETHに戻すことが可能です。この作業をユーザーに理解させるのも一手間ですし、そもそも本質的に不要。UX的にはWETHへの変換はバックグラウンドで自動処理できるとよさそう。2018イケハヤさんのツイートにもあるようにETHとWETH間の変換はユーザーにとって分かりにくいものとなっています。ETHをWETHに変換することは上述したように0xプロトコルを利用するために必要なことであり、かつ変換時にユーザーの署名が必要になります。WETHの存在をユーザーに隠して交換を実現しようとすると、交換時に同量のETHをWETHに変換するためのMetaMask決済画面が表示され、そのトランザクション処理が終わった後に、実際の交換のためのMetaMask画面の表示、という流れになります。このようにするとユーザーはETHを使った交換ごとにWETH変換のためのgasを支払う必要があるのが大きなデメリットです。0xのスマートコントラクト側でこのWETH問題は解決されていくのではないかなと思います。2.トークン送金の許可トークンの交換はリレイヤーが0xのスマートコントラクトを使用することでユーザーのトークン同士を交換しています。リレイヤーがユーザーのERC20トークンを移動させているのです。ERC20トークンには、所有者ではない第三者にそのトークンを移動させる権限を与えることができる機能があり、0xでトークン交換を行うためにはこの許可を与える必要があります。(もちろんトークンの送金を始めるためにはトークン所有者の署名が必要になるので、0xスマートコントラクトやリレイヤーが所有者の許可なしに勝手に移動させることはできません。)また、この許可は「ある特定のトークン数までに許可を与える」ということもできますが、ZooMeXではgasを抑え、利便性を向上させるため、一度特定のトークンに対して許可を与えた場合はその所有者のアドレスとトークンのアドレスが紐付けられ、トークン数の上限なしに許可を与えるようにしています。一度トークンの許可を与えれば同じトークンに対してはもう一度許可を与える必要はありません。3.レート算出と交換の実施ここまでのステップ1とステップ2は初めてWETHを交換するときに必要となるセットアップであり、すでにこれらのセットアップが完了している場合は、交換したいトークンペアを選択し、トークン数を入力するだけでリレイヤーのオーダーブックから最適なレートのオーダーを算出し、交換を実施することができます。交換したいトークン数の量が多く、最もレートの良いオーダーのトークン量を超えてしまった場合は次にレートの良いオーダーも取得し、差分をその次にレートの良いオーダーに充てるようにしています。Relayが用意してくれたオーダーを利用しているためそのオーダーに基づくトークン数の上限を設けさせていただいております。)ZooMeXと0xの今後ZooMeXはZooMeX単体では成り立たないサービスです。DEXのプロトコルを提供する0x、そして取引の注文を管理するリレイヤーが存在しなければ成り立ちません。0xのエコシステムに支えられて動いています。このZooMeX仕組みをそのままDappsやDAOに内部化していくことも可能で0xのプロトコル全体もその方向性に進んでいくと考えられます。ZooMeXのような外部UI、あるいはDappsでオーダーのテイクが簡単に行えるようになると、リレイヤーのオーダーブックで取引の成立が行われやすくなります。(外部からオーダーをメイクすることもできます)すると、オーダーを作るユーザーも増え、トークン交換の流動性も全体的に増加していくはずです。このような流動性の増加はトークン交換を行うユーザーの利便性の向上とリレイヤーの収益向上につながります。すると参入するリレイヤーも増え、市場競争によりリレイヤーの手数料が低下していきます。(手数料が高いリレイヤーのオーダーブックは使われなくなるので。)これにより、さらに利用者が増え、、という好循環が考えられるのです。RelayというKovanテストネットでのリレイヤーのオーダーブックを使用しています。RelayやParadexなどの大手リレイヤーのオーダーブックを複数使用することができ、扱えるトークンの種類も増加します。日本の法で仮想通貨交換業に該当してしまうおそれがあるのが難点です。