Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

DEX research #1 DEX 触ってみた

384 views

Published on

neutrinoでDEXに関する発表を行った際の資料です。

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

DEX research #1 DEX 触ってみた

  1. 1. DEX research -DEX触ってみた- Onplanetz 株式会社 CTO 松本拓也 0
  2. 2. アジェンダ 1. 自己紹介 2. Etherdeltaについて Etherdeltaの概要 取り扱いトークンについて 3. コード概要 githubの内容解説 テストコードの実行結果 4. コントラクトのデプロイ 5. トレードの仕組みについて トークンの預け入れ トークンの注文 トークンの取引 トレード情報の管理 6. まとめ 1
  3. 3. コンサルティングファームで機械学習に関する案件に従事し、現在は Onplanetzという会社で、CTOを務めています 1. 自己紹介 これまでの 経歴 これまでに 関わった業務 現在の活動  東京大学大学院を卒業後、大手コンサルティングファームに複数社経たのち、Onplanetzを共 同創業(CTO) (コンサル時代は、データサイエンティスト的な案件をいくつかこなしてました)  画像認識技術を活用したドライバー監視システムの研究開発支援  Deep learningの省メモリ高速化に関する基礎研究支援  飲料メーカー、アパレルメーカーに向け、Datarobotを活用した需要予測のPoC支援  Onplanetzにおけるサービス開発のリード及び、機械学習やブロックチェーンといった最新技術の ビジネス応用の検討  DEXに関する調査(今回の講演内容) 2
  4. 4. Onplanetzでは、Bootneyというサービスを現在開発中で、将来的に サービス内にDappsやDEX機能の導入を検討しております 1. 自己紹介 2018/8/2より、事前登録受付開始 3
  5. 5. EtherdeltaはDEXの一つで、ERC20ベースのトークンを豊富に取扱う取 引所 2. Etherdeltaについて 4
  6. 6. コントラクトにトークンを預金し、注文、取引はetherdeltaのコントラクト 上で実行している 2. Etherdeltaについて 5 コントラクトへのトークンの預け入れ、 コントラクトからのトークンを引き出し を実行 コントラクト上での注文処理
  7. 7. Etherdeltaのgithubを見ると、リポジトリが3つ存在 https://github.com/etherdelta 3. コード概要 –githubの中身について- 6
  8. 8. Etherdelta.github.ioには、webページのhtmlや現在取り扱っているトークン の情報などが格納されている https://github.com/etherdelta/etherdelta.github.io 3. コード概要 –githubの中身について- 7
  9. 9. 現在取り扱っているトークンのコントラクトアドレスは、configのmain.jsonと tokenguideフォルダで管理(現在は約900のERCトークンが対象) https://github.com/etherdelta/etherdelta.github.io 3. コード概要 –githubの中身について- 8
  10. 10. 当該レポジトリの中には、solidity fileのbytecode、jsonのみが格納されており、 大元のsolidityファイルは別の場所にある 3. コード概要 –githubの中身について- 9
  11. 11. Smart_contractフォルダの中には、先ほどのbytecode、jsonファイルの大元の solidityファイルやテストコードなどが格納されている https://github.com/etherdelta/smart_contract 3. コード概要 –githubの中身について- 10
  12. 12. ローカル環境にクローンし、必要なパッケージをインストールした後、テストを行うと、 トークンの預け入れから、注文、取引、引き出しの一覧の流れをlocalhostにて 実行している 3. コード概要 –テストコードの実行結果- 11
  13. 13. コントラクトのデプロイについては、etherdeltaにデプロイ用のサンプルコードがあり、 それを活用することで容易にデプロイが可能 4. コントラクトのデプロイ 12
  14. 14. 今回は、元のデプロイコードを若干修正し、ropstenテストネットにcontractのデ プロイを実施 4. コントラクトのデプロイ 13 元のコード Metamaskのニーモニック Infuraのトークン 【修正点】 • Web3のproviderにtruffle-HDwallet-providerを使用 • Metamaskのニーモニック、Infuraによって、 HDwalletproviderを設定
  15. 15. 前段階の設定を行ったのちにデプロイを行うと、コントラクトアドレスが発行され、 etherscanでコントラクトを確認することができる 4. コントラクトのデプロイ 14 コントラクトアドレス コードの実行結果
  16. 16. コントラクトのコードタブを見ると、デプロイ対象のsolidityファイルで定義されている 関数を確認することができる 4. コントラクトのデプロイ 15
  17. 17. コントラクトのread contractやwrite contractタブからは、実際に関数を実行 することが出来る 4. コントラクトのデプロイ 16
  18. 18. コントラクトへの預金、コントラクト上での注文、コントラクト上での取引の3つから 構成される 5. トレードの仕組みについて 17
  19. 19. Ethereumの預金を行う場合は、deposit関数を使用する 5. トレードの仕組みについて –トークンの預金- 18 Solidityのevent関数 Etherdelta上の関数 使用例 (setTransaction、sendTransactionはそれぞれ、トランザクションに使 用するデータの整形、トランザクションの送信を表す) [引数] Token:預金するトークンのアドレス Address:預金するユーザーのアドレス Amount:預金量 Balance:預金後の残高
  20. 20. Ethereum以外のERC系トークンの預金を行う場合は、depositToken関数を 使用し、トークンのコントラクトアドレスを指定して預金を行う 5. トレードの仕組みについて –トークンの預金- 19 event関数 Etherdelta上の関数 使用例 event関数は、ethのdepositと同じものを使用
  21. 21. Ethereum以外のERC系トークンの預金を行う場合は、事前にトークンの approveが必要 5. トレードの仕組みについて –トークンの預金- 20 Tokenのapprove関数 実行例 approve関数のABI
  22. 22. depositTokenを実行後、etherscan上でトークンが預け入れられたことが確認 出来る 5. トレードの仕組みについて –トークンの預金- 21
  23. 23. Event logでは、Depositイベントが実行されたことが確認出来る 5. トレードの仕組みについて –トークンの注文- 22
  24. 24. EtherdeltaのbalanceOfを使うことで、預けたトークンの総残高を確認すること が出来る 5. トレードの仕組みについて –トークンの預金- 23
  25. 25. トークンの注文には、order関数を使用し、注文情報は、注文者のアドレスと注 文情報のハッシュ値によって管理される 5. トレードの仕組みについて –トークンの注文- 24 event関数 Etherdelta上の関数 使用例 [引数] tokenGet:欲しいトークンのアドレス amountGet:欲しい量 tokenGive:渡すトークンのアドレス amountGive:渡す量 expires:有効期間(ブロック高) nonce:注文番号 user:注文者 Etherdelta上の関数
  26. 26. orderを実行後、etherscan上でorder関数が実行されたことが確認出来る 5. トレードの仕組みについて –トークンの注文- 25
  27. 27. Event logでは、Orderイベントが実行されたことが確認出来る 5. トレードの仕組みについて –トークンの注文- 26
  28. 28. トークンの取引には、trade関数を使用し、trade後の約定情報は、注文者のア ドレスと注文情報のハッシュ値によって管理される 5. トレードの仕組みについて –トークンの取引- 27 event関数 使用例 [引数] tokenGet:欲しいトークンのアドレス amountGet:欲しい量 tokenGive:渡すトークンのアドレス amountGive:渡す量 get:取得アカウント give:渡すアカウント Etherdelta上の関数
  29. 29. トークン情報、オーダー情報、オーダーの約定情報については、コントラクト内のマッ プ変数にて管理している 5. トレードの仕組みについて –トレード情報の管理について- 28 tokens(どのユーザーがいくらトークンを持っているか) orders(どのユーザーがどんなオーダーをしたか(オーダー情報はハッシュ化されている)) orderfills(オーダーの内、どれだけ約定したか)
  30. 30. EtherdeltaはDEXの仕組みを理解するのに効果的。引き続き他のDEXについ ても調査を進めていきたい 6. まとめ 29 • WEB3とproviderを使ってetherdeltaコントラクトのデプロイ〜各種関数の実行まで実施 • コントラクト上で実行される関数、及びコントラクト上でのデータの管理の仕組みの概要に関しては、確 認することが出来た • DEXはマッチングに対してアクションを起こすという、アプリケーションの基本的なロジックを抑えており、中 でもetherdeltaはそれをオンチェーン上で実行している →ブロックチェーン上でマッチングからアクションを行う動作を理解するのに、非常に効果的 • 他のDEX、もしくはDEX上で動作するプロトコルの仕組みについては引き続き調査していきたい。 【今回のまとめ】 今回使ったコードはこちらのgithubにも挙げています。 https://github.com/takmorefun/etherdelta_testcode

×