Upgrade to Pro — share decks privately, control downloads, hide ads and more …

0x_V2.pdf

Sota Watanabe
November 02, 2018
110

 0x_V2.pdf

Sota Watanabe

November 02, 2018
Tweet

Transcript

  1. 基本情報 2 CEO : Will Warren Los Alamos Nat Labで

    物理学を応用。 UCサン ディエゴメカニカル エンジニアPhD中退 CTO: Amir Bandeali Olaf Carlson-Wee Polychain capital founder Joey Krug CIO Pantera Capital. Augur Founder Fred Ehrsam Coinbase Founder 7月に0x protocol V2をローンチした。今回のアップデートで はERC721トークンに対応したことに加え、ユーザビリティー と流動性の向上が見られる。 Source: 0x medium ※同社サイト、プレスより連載 <会社概要> CEO : Will Warren 本拠地:サンフランシスコ 資金調達額:$24M HP : https://0xproject.com/ <プロジェクト概要?> 0xはイーサリアムのスマートコントラクトで作成された、 DEXを 構築するためのプロトコル。非中央集権性を担保した上で異なるトークン間の流 動性の向上を目指している。決済以外の処理をオフチェーン上で 行うことによって、高速な処理と低手数料を実現している。( Off-chain order relay On-chain settlement)0xは単なるDEXではなく、プラットフォームであり、ゲー ム、アート、未来予測、ローンなどのアプリケーションが 0x上で作られている。 プロジェクトの進捗詳細は 0x protpcol Wikiから確認できる。 <チーム>          <アドバイザリー>
  2. 0x protocolの使用方法 0x Protocolでトレーディングをする 0x ProtocolでDAppsを作成する 1. ウォレットのセットアップをする a. Metamask

    b. Coinbase Wallet c. Ledger Nano S d. Trezor hardware wallets 2. 0x portal上でセットアップを行う 3. Relayerを選択し交換を行う 1. 0xのGithubでOpenIssueを解決する 2. 0x Developer Tools & Documentationで学習する 3. 各チャネルに参加する a. Rocket.chat b. 0x Forum c. Developer Update Email List Rocket.chat 3
  3. 0xとは? 0xとは? “At its core, 0x is an open and

    non-rent seeking protocol that facilitates trustless, low friction exchange of Ethereum-based assets. Developers can use 0x as a platform to build exchange applications on top of (0x.js is a Javascript library for interacting with the 0x protocol). For end users, 0x will be the infrastructure of a wide variety of user-facing applications i.e. 0x Portal, a decentralized application that facilitates trustless trading of Ethereum-based tokens between known counterparties.” 0xはオープンで使用料をとらないトラストレスでフリクションの少ない Ethereumベースのアセット交 換所。開発者 0x.jsというライブラリーを用いて 0xのプラットフォーム上にアプリケーションを作成す ることができる。エンドユーザーにとっては、 0xは多種のアプリケーションのインフラとなる。 0xが解く問題とは? “Rapid iteration and a lack of best practices have left the blockchain scattered with proprietary and application-specific implementations. As a result, end users are exposed to numerous smart contracts of varying quality and security, with unique configuration processes and learning curves, all of which implement the same functionality. This approach imposes unnecessary costs on the network by fragmenting end users according to the particular dApp each user happens to be using, eliminating valuable network effects around liquidity. 0x is the solution to this problem by acting as modular, unopinionated building blocks that may be assembled and reconfigured.” 4 Conventional Exchangeと何が違うのか? • 0xは交換所の為のプロトコルでありアプリケーションではない • 0xは分散化され、トランストレスである。故にハッキングを受けることが ない • 0xは公共のインフラであり、使用料がかからない。営利目的のアプリ ケーションをその上に構築することはできる どの様なアセットが扱えるようになるのか? “0x supports all Ethereum-based assets that adhere to the ERC20 token standard. There are many ERC20 tokens, worth a combined $2.2B, and more tokens are created each month. We believe that, by 2020, thousands of assets will be tokenized and moved onto the Ethereum blockchain including traditional securities such as equities, bonds and derivatives, fiat currencies and scarce digital goods such as video game items. In the future, cross-blockchain solutions such asCosmos and Polkadot will allow cryptocurrencies to freely move between blockchains and, naturally, currencies such as Bitcoin will end up being represented as ERC20 tokens on the Ethereum blockchain.” 0x v1ではERC20トークンのみであったが v2ではERC721のトークンもサポートした。 今後はERCトークンのマーケットの拡大から証券やエクイティー、債権、デリバティ ブ、法定通貨、ゲームのアイテムなど様々なアセットを取引可能にする予定。 出典: https://0xproject.com/faq
  4. 0xトークン ZRXとは? 5 基本情報 0x protocol token (ZRX) is utilized

    in two ways: 1) to solve the coordination problem and drive network effects around liquidity, creating a feedback loop where early adopters of the protocol benefit from wider adoption and 2) to be used for decentralized governance over 0x protocol's update mechanism. ZRXトークンは2つの用途で使用される。 1つ目はCordination問題(ゲーム理論の問題) を解決し流動性を担保するネットワークエフェクトを加速させ、アーリーアダプターがマス アダプションによってフィードバックループが得られるようにすること。 2つ目は0xのアップ デート時に分散化されたガバナンスモデルを使用するためである。 具体的な用途 • MakerとTakerがリレイヤーに対して ZRXトークンによって手数料を払う • 0xプロトコルのアップデートに関し、 ZRXが分散ガバナンスを支えるトークンと しての役割を持つ。 ZRXホルダーによって 0xプロトコルのアップデートが安全 でありネットワークを破壊する可能性を最小限にする ETHではなく0xトークンが使われる理由 ZRXはガバナンストークンであるためプロトコルのアップデートに際して、ステーキン グする。ステーキングする際にステークホルダーとエンドユーザーのインセンティブを 最大化することができる。 ETHを0xプロトコルのガバナンストークンにした場合、 0xプ ロトコル外のユーザーが力を持つことになってしまう。 0xトークンはどのような役割を持っているのか? 通貨総量:1,000,000,000 ZRX トークン発行日:2017年8月15日 トークンアロケーション 50% : Token Launch 15%:0x core dev team 15% : Developer Fund(Partnership, Hackathon, Community Dev) 10%:Founding team 10% : Early Backers & Advisers https://0xproject.com/faq
  5. DEXのメリットとDEXプロトコルのメリット 1. 安全。資産に関して完全にユーザーがオーナー シップを持つことができる。 2. グローバルに価値の交換を行うことができる。誰 でもどこの国からでも取引を可能にする。 3. サインアップが必要でなく単にトレードするだけと いう簡易さ。

    1. オーダーが同じフォーマットで共有され需要と供給が マッチングしたユーザー同士で p2pでマッチングされ る。 2. DAppsが運営されるのをもっと簡単にする。 3. オープン・スタンダード、プロトコル上にアプリケーショ ンを作り、カスタマイズすることができる。 4. 自動的に新しいトークンをサポートする。 DEXのメリット DEXプロトコルのメリット Fred ehrsam Co-founder of Coinbase Conventional Exchange から Decentralized Exchangeへ 6
  6. • Aragon • Auctus • Augur • bZx • Blocknet

    • ChronoBank • Dharma • District0x • dYdX • EasyTrade • Gods Unchained • Hut34 Project • Lendroid • Maker • MelonPort • OpenANX • Paradigm Protocol • Request Network • Set 0x protocol上に構築されたDApps 7
  7. •Amadeus •Bamboo Relay •DDEX •Dextroid •ERC dEX •Ethfinex •IDT Exchange

    •Instex •LedgerDex •MobiDex •OpenRelay •Paradex •Radar Relay •Shark Relay •Starbit •The Ocean •Token Jar •Tokenlon •Weswap 0x protocolを使用しているリレイヤー 8
  8. リレイヤー 9 0xは買いと売りのマッチングをオフチェーンで行っている。 取引内容をマッチングさせるため、 リレイヤーという取引所のようなもの があ る。(1つではない)0xプロトコル上でリレイヤー同士がオフチェーンでメッセー ジを送り注文をマッチングさせることによってオンチェーンでの取引を行う。 リレイヤーは取引の手数料を徴収することをインセンティブに運営を行い、 0x

    上のリレイヤーはそれぞれ手数料の %を決めることができる。 現状、リレイヤーは手数料 0でマッチングをさせているが、手数料の %を自由 に決めることができることで 0xプロトコル上に一種の市場環境を作り出してい る。 <プロトコルとしての 0x> 0xはあくまでプロトコルであるので、トークンのマッチングをしたい個人だけで はなく、DAppsの架け橋となることができる。 DApps内でトークンの交換をし たい場合0xプロトコルを使って実行することができる。 代表的なリレイヤーである Rader Relay シンプルなUIとUXを提供して いる。 “Off chain order relay and On chain settlement”
  9. リレイヤー 10 “Off chain order relay and On chain settlement”

    長方形はスマートコントラクトを表し、 Ethereum Blockchain内の矢印はcall関数を表 す。外の矢印は情報のフローを表す。 1. MakerはTokenAにアクセスするためにDEXのコントラクトを承認する 2. MakerはTokenAをTokenBに交換するための条件(望ましいレート、有効期限、秘密鍵での署 名)を明記したオーダーを作る 3. Makerはオーダーをブロードキャストする 4. TakerはMakerの作り出したオーダーを見て、交換するかの意思決定を行う 5. TakerはTokenBにアクセスするためにDEXコントラクトを承認する 6. TakerはDEXコントラクトにMakerがサインしたオーダーを送る 7. DEXのコントラクトはMakerの署名、有効期限が切れていないこと、オーダーがまだ実行され ていないことを確認して予め設定させていたレートで取引を実行する
  10. Reference : https://blog.0xproject.com/governance-in-0x-protocol-86779ae5809e “Having spent time developing on Ethereum and

    seeing rapid iteration across all layers of its technology stack, we knew that upgrades to our system would be frequent and unavoidable. So, we designed our system to accommodate upgrades. Conceptually, our system of smart contracts was designed to act as a pipeline where orders enter one end of the pipeline and token balances are modified at the other end.” コアチームはイーサリアムのレイヤー構造をまたいだ開発スピードの速さを見て、 頻繁なアップデートは避けることができないと判断した。なので、スマートコントラク トの仕組みがパイプラインのようになっていて、アップデートに応じて取替を可能に 設計した。またアップデートはコミュニティによって決定され 0xはプロトコルを公共 財(public infrastructure)と位置づけている。 “Governance over upgrades must be decentralized.” Further, a well designed token could draw a connection between protocol participation and influence. This basically boiled down to two overarching questions (1) token mechanics i.e. how does the token tie into use of the protocol and (2) governance mechanics i.e. how does on-chain token voting actually work? よくデザインされたトークンはプロトコルの参加とコミュニティ内の影響力が紐 付いている。これは2つの問いに落とし込める。①トークンメカニズム:トークン がどうプロトコルの使用につながっているか?②ガバナンスメカニズム:オン チェーンボーディングがいかにして動いているか? 0xのガバナンスにおけるコアな問いと回答 Q. 何が優れたガバナンスモデルを生み出すのか? A. すべてのステークホルダーの関心が顕在化されガバナンス に反映されること。 Q. 0xプロトコルにおけるステークホルダーはだれか? Relayers, market makers, dApp developers と、traders. 0x protocolのガバナンス 11
  11. 0x ガバナンスロードマップ Phase I: Community Managed Token Registry Phase II:

    Community Veto Power Phase III: Liquid Democracy 0xのコアチームを中心に集権的にコミュニティをマネジメントして いフェーズ。トークンによるインセンティブ設計を行う。 ガバナンス主体を0xコアチームからトークンホルダーに移行して いくフェーズ。コアチームによって提案されたアップデートをトーク ンホルダーが採択する。 委任型民主主義。全体をコーディネートするコストはイノベーショ ンを失速させるのでPhase3において完全な分散型をとることは 望ましくない。投票権はコミュニティが持ち分散化されるが意思 決定はコアdevチームが行う。 13
  12. 0x Protocol V2 https://blog.0xproject.com/introducing-0x-protocol-v2-9f5bda04d38d V2 キーポイント 1. ERC721に対応 2. より効率的なオーダリレーとマッチング

    3. 新しい電子署名タイプの追加 4. “filter contracts”機能の追加(許可された ユーザーのみアクセスできる Liqidity Pool 5. など 0xプロトコルは2018年の6月末にProtocol V2をローンチした ユーザー数は増加の一途をたどっている 14
  13. 0x Protocol V2 v1では、主にExchangeとProxyの2種類のコントラクトで成り立ってい た。Exchangeコントラクトは、Tokenの交換を行う際にProxyコントラクト に指示を送る。ProxyコントラクトがTokenのインターフェースとなり残高 を更新する。ERC20トークン以外のアセットを扱おうとすると更新に従い 毎回Proxyコントラクトをデプロイする必要がありこのモデルではスケー ルしないという問題点があった。 v2ではアセットの規格ごとに

    Proxyをデプロイしている。なので規格のアッ プデートに際して1つのProxyをリデプロイする必要がなく、新しい AssetProxyをデプロイするだけで良くなった。 これによって新しい規格を追加する際にユーザーがスマートコントラクトを アップデートしたり、運営側がスマートコントラクトをアップデートしなくてよ くなった。将来的には ENS names、ERC777トークン、R-Tokenなども0x 上で取引できる。 Proxyコントラクトの規格変更 出典:https://blog.0xproject.com/introducing-0x-protocol-v2-9f5bda04d38d 15
  14. WhitePaperを読み流す “In the long run, open technical standards tend to

    win over closed ones, and as more assets are being tokenized on the blockchain each month, we will see more dApps that require the use of these different tokens. As a result, an open standard for exchange is critical to supporting this open economy.” DAppsの数が増えるに従って、 DApps間でことなる価値を交換 するニーズは増えていくことが見込まれる。従って、価値交換の オープンスタンダードが不可欠になることがみこまれ、 0xはその プロトコルを開発している。 DApp間の価値交換を容易にし、トークンの流動性を高める。 MakerとTakerはトラストレスな方法で価値の交換をする。 1. リレイヤーはトランザクション料とスケジュールを公開する 2. MakerはfeeAとfeeBを設定しオーダーを作る 3. Makerが署名されたオーダーをリレイヤーに送る 4. オーダーがリレイヤーの要件を満たすものであり検証ができ次第、リレ イヤーはオーダーブックにトランザクションを載せる 5. Takerはアップデートされたオーダーブックを受け取る 6. TakerがEthereumブロックチェーン上のExchange Contractにオー ダーブックを送ることでMakerオーダーをFillする 17
  15. WhitePaperを読み流す オーダーは keccak SHA3によってハッシュ化され 32byteになる。オーダーの作成 者はプラベートキーを用いてオーダーハッシュにサインし ECDSA署名を作り出 す。 左図は、P2Pオーダーメッセージのフォーマット。 Takerのアドレスを指定すること

    によって受け取れる Takerを指定する。 v, r, sはECDSAの値。 Makerは自分の交換したいトークンの量とほしいトークンの量を明確にし、有効期 限を設定する。 Takerのアドレスはどの Takerでも取引可能にするために一般的には入力しない。 左図はブロードキャストするオーダーのフォーマット。 リレイヤーによって仲介されるので、リレイヤーに対する手数料や、 feeA、feeBをMakerが指定する。 Makerがfeeを決めるのはリレイヤーによって設定される条件を満たし、 Makerのオーダーを採択する権限が完全にリレイヤーにあるのでリレイ ヤーの要望を踏まえ Makerが手数料を決めるから。 feeRecepientはスマートコントラクトでもよい。これに拠ってより複雑な 手数料の配分を行うことができる。 18
  16. WhitePaperを読み流す MakerとTakerはトラストレスな方法で価値の交換をする。 1. リレイヤーはトランザクション料とスケジュールを公開する 2. MakerはfeeAとfeeBを設定しオーダーを作る 3. Makerが署名されたオーダーをリレイヤーに送る 4. オーダーがリレイヤーの要件を満たすものであり検証ができ次第、リレ

    イヤーはオーダーブックにトランザクションを載せる 5. Takerはアップデートされたオーダーブックを受け取る 6. TakerがEthereumブロックチェーン上のExchange Contractにオー ダーブックを送ることでMakerオーダーをFillする ERC20トークンの送金をホワイトリストを参照し制限することができる。ホワ イトリストにのっているEthereumアドレスでしか送金を受け取ることができな い。似たこころみにSecurity Tokenプロジェクト • Polymath ST-20 • Harbor R-Token • OpenFinanceNetwork S3 • Zeppelin TPL などがある。 上記の図で長方形はスマートコントラクトを表し、丸は Ethereumアカウントを表している。 Transfer関数を実行する際に、トークンのコントラクトが Registryコントラクトを参照し、ホワイト リストに登録されていた場合にのみ Transferを実行する。 19
  17. 技術的課題 1. 衝突 - MakerのCancelとTakerのFillが同時に起こる - Orderを2つ以上のTakerが同時にFillする 2.フロントランニング問題 - オーダーのインターセプト。より高い

    gasを設定しター ゲットの取引が行われる前にその取引を横取りする。左 図の5番がそれにあたる。 0xが行ったEtherDelta上のテスト( サンプル2,000 blocks)では90%のトレードが正確に実行された。 同実験をした他グループの調査によると70%とも報 告されている。 20
  18. 解決策② Order Matching https://blog.0xproject.com/front-running-griefi ng-and-the-perils-of-virtual-settlement-part-1- 8554ab283e97 MakerがMatcherに取引のマッチングをを委任する。 この場合、Makerが交換したいERC20トークンを有効 期限と交換比率を明示した上で署名したオーダーを Matcherにわたす。

    Matcherは交換可能な取引を見つけると SmartContractにオーダーを送り価値交換を行う。こ の場合もオーダーは Makerのみが決済できる。 フロントランニング問題と衝突の問題は防止できるが、 リレイヤーとDAppsから直接アクセスできないプール での処理なので流動性がない、 Matcherがフロントラ ンニングをする可能性がある。 Matcherがgasを負担 する必要があるなどの問題点がある。 22
  19. 流動性 23 DEXでは流動性が鍵となり、流動性の増加はユーザーとプロトコル上のアプリ ケーションの増加を促進し、ユーザーとアプリケーションの増加は流動性の増加に つながる。つまりこの両者にはネットワークエフェクトが存在する。 0xエコシステムではネットワークエフェクトを促進するために、リレイヤー間で取引 を共有できるStandard relayer APIなどが開発されている。 (このAPIによってリレイヤー同士が協力し

    feeをスプリットすることが可能となった) “Traders and dApp users can access all of these streams of order flow from a single standard wallet. No trading accounts. No need to put custody in the hands of a third party. No need to scatter one’s digital assets across multiple smart contracts. No deposits or withdrawals. This becomes increasingly useful as more types of digital assets and associated relayers enter the network.” 出典:https://blog.0xproject.com/front-running-griefing-and-the-perils-of-virtual-settlement-part-2-921b00109e21
  20. WETH ETHはERC20の標準に従っていない。 Wrappedする ことによってERC20トークンと交換することができるよ うになる。 UI上はETHをラップして WETHにしているように見 えるが、実際にやっている ことは、スマートコントラクト に応じてETHと同量の

    WETHに交換している。 https://weth.io/jp/index.html ETHがERC20に準拠するようにERC223でアップデー トが行われている。 1:1なのでETHでコントラク トに送って、引き出すときに 名前を変えているに過ぎな い? https://etherscan.io/address/0x29563 56cd2a2bf3202f771f50d3d14a367b4 8070#code 24
  21. 0x Trade Widget ETHで1クリックから0xプロトコル上のトークンを購入できる。 通常、ETHとEthereum上で発行された ERC20トークンは交換できず、 ETHをERC20トークンと して扱うWETHとして他のERC20トークンと交換される。 裏ではForwarding Contractと呼ばれるコントラクトが動いている。ワークフローは以下である。

    1. ETHと0xのオーダーを Forwarding Contractに送る 2. Forwarding ContractはETHをWETHに変換する 3. Forwarding Contractは0xのスマートコントラクトを通して WETHをERC20トークンと交 換する 4. 交換したトークンをユーザーに返す 将来的にはいかなる NFTも1クリックで他のトークンから購入可能になる。 25
  22. Open Order Book リレイヤーはtakerのパラメータが 0x0000000000000000000000000000000000000000 のオーダーを収集しブロードキャストする。トレーダーは ローカル環境でブロードキャストされたトランザクションに 署名し、Ethereumノードに送る。 例: Aliceが1WETHと1000ZEXを交換するためにリレイヤー

    にOrderAを提出。Bobがリレイヤーのオープンオーダー ブックを見てfillOrder(orderA, 1000)関数を呼び出す。こ れによってBobとAliceのトークンが交換される。 オープンオーダーブックのメリット 1. リレイヤー間で共有できる(流動性が高い) 2. DAppsが流動性の担保に使うことができる 3. 外部のスマートコントラクトがオーダーを利用でき る 26
  23. リレイヤーを作る 0x.jsを通じてOn-chain (0xスマートコントラクト)と Off-chain(リレイヤー)のや り取りを行う。 マッチング リレイヤーはオーダーの Takerの部分が空となっている オーダーを収取し、買い注文と売り注文で価格がマッチ ングするものを見つけると

    batchFillOrdersもしくはbatchFillOrKillOrders 関数を呼び出し両方のオーダーをマッチングする 例: OrderA : Aliceは1WETHを1000ZRXに変えようとして いる OrderB : Bobは1000ZRXを1WETHに変えようとして いる batchFillOrKillOrders (orderA, 1000, orderB, 1) によって交換を行う 27
  24. Mainnet •AssetProxyOwner: 0x17992e4ffb22730138e4b62aaa6367fa9d3699a6 •ERC20Proxy: 0x2240dab907db71e64d3e0dba4800c83b5c502d4e •ERC721Proxy: 0x208e41fb445f1bb1b6780d58356e81405f3e6127 •Exchange: 0x4f833a24e1f95d70f028921e27040ca56e09ab0b •Forwarder:

    0x7afc2d5107af94c462a194d2c21b5bdd238709d6 •OrderValidator: 0x9463e518dea6810309563c81d5266c1b1d149138 •WETH9 (i.e new EtherToken): 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 •ZRXToken: 0xe41d2489571d322189246dafa5ebde1f4699f498 Kovan •AssetProxyOwner: 0x2c824d2882baa668e0d5202b1e7f2922278703f8 •ERC20Proxy: 0xf1ec01d6236d3cd881a0bf0130ea25fe4234003e •ERC721Proxy: 0x2a9127c745688a165106c11cd4d647d2220af821 •Exchange: 0x35dd2932454449b14cee11a94d3674a936d5d7b2 •Forwarder: 0xd85e2fa7e7e252b27b01bf0d65c946959d2f45b8 •OrderValidator: 0xb389da3d204b412df2f75c6afb3d0a7ce0bc283d •WETH9 (i.e new EtherToken): 0xd0a1e359811322d97991e03f863a0c30c2cf029c •ZRXToken: 0x2002d3812f58e35f0ea1ffbf80a75a38c32175fa Ropsten •AssetProxyOwner: 0xf5fa5b5fed2727a0e44ac67f6772e97977aa358b •ERC20Proxy: 0xb1408f4c245a23c31b98d2c626777d4c0d766caa •ERC721Proxy: 0xe654aac058bfbf9f83fcaee7793311dd82f6ddb4 •Exchange: 0x4530c0483a1633c7a1c97d2c53721caff2caaaaf •Forwarder: 0x3983e204b12b3c02fb0638caf2cd406a62e0ead3 •OrderValidator: 0x90431a90516ab49af23a0530e04e8c7836e7122f •WETH9 (i.e new EtherToken): 0xc778417e063141139fce010982780140aa0cd5ab •ZRXToken: 0xff67881f8d12f372d91baae9752eb3631ff0ed00 デプロイされたコントラクト 28
  25. 0x.js 開発にはganache-cliを使用することが推奨されている。 ▶ git clone ▶ dependenciesとしてyarnをインストールする ▶ yarn(0x-starter-project内で実行) ▶

    事前にdeployされている0xコントラクトをダウンロードする ▶ 別のターミナルの同じディレクトリで ganacheを起動 29