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

Uniswapで理解するWeb3の仕組み

 Uniswapで理解するWeb3の仕組み

Web3?分散型?クライアントサーバシステムと何が違うのさ!?
Web3サービスを代表するUniswapの仕組みを紐解くことで、捉えづらいWeb3の仕組みを垣間見ることにトライする。
これによりクライアントサーバシステム(Web2)とWeb3のアーキテクチャ的な違いを明らかにする。
小倉 聡司 (ソフトバンク株式会社)

初出
2022/05/25(水)
SB Tech Night #7 Web3とはなにか? #SBTechNight
https://sbtechnight.connpass.com/event/245846/

SoftBank Tech Night

May 25, 2022
Tweet

More Decks by SoftBank Tech Night

Other Decks in Technology

Transcript

  1. 自己紹介 - ヒエラルキーを嫌い、ホラクラシーを愛するイーサリアン - “Power To The People” - 本当はビットコイン・マキシマリスト

    - 会社ではBlockchainをやるためにEthereumを推す半端者 - 暗号資産が創造する新世界を信じてBitcoinとEtherをガチホ - 含み損が増えるほどR&D活動に精を出す - 購入したバンクシーNFTの価格が暴落中 - みんなで買い支えてください。お願いします - 入社7年目ぐらいのSE - セキュリティやったり、BCのR&Dやったり - 小倉 聡司 - “サトシ・ナカモト”ではありません
  2. - 「DAO」による意思決定 - DAO(Decentralized Autonomous Organization)= 分散型自律組織 - = 中央管理者が存在しない

    - ガバナンストークン(UNI)の所有者に投票権がある - 「Uniswap Labs」が開発 - 開発チームは旧来型の体制であり、この点でたまに批判は受ける(らしい) - ソースコードはすべて「Public」 - v2は「GNU GPL」で出してしまい、たくさんのコピープロジェクトを生んでしまった v3からは「BSL」を採用し、4年間は勝手に使用できないように変更した - 分散型PaaSの組み合わせによるサービス提供 - 開発者が気にする(開発・管理する)のはアプリケーションのみ ※「分散型PaaS」は、小倉が勝手に命名 Uniswap | とは DEX界トップの取引高を誇る「分散型取引所(DEX)」
  3. Uniswap | サービス概要 トレーダー - トークンを交換する(=Swap) - 0.3%の手数料を上乗せする 流動性供給者 トレーダー

    Uniswap Swap Deposit LT 流動性供給者 - トークンのペアを預け入れる(=Deposit) - 預け入れの証明に流動性トークンを受け取る - トークンのペアを引き出す(=Withdraw) - 流動性トークンを返却する - ユーザーが支払った手数料分だけ上乗せされて 返ってくる 分散型取引所
  4. IPFS | エコシステム IPFSノード C IPFSノード B IPFSノード A (Pinata)

    Developer (Uniswap Labs) リソース提供者 (IPFSノード運用) Pin ユーザ (トレーダー/流動性供給者) メリット - 耐障害性 - 負荷分散 - 耐検閲性 - 耐改ざん性 静的コンテンツ (React) ipfs://baf…mxi PaaS的に利用 不特定多数のノード運用者 =分散
  5. Ethereum | エコシステム Developer (Uniswap Labs) Smart Contract リソース提供者 (Ethereumノード運用)

    ユーザ (トレーダー/流動性提供者) 静的コンテンツ (React) Ethereumノード A (INFURA) Ethereumノード C
  6. Smart Contract | Deposit TokenA (ERC20) TokenB (ERC20) TokenC (ERC20)

    PairA/B (+ ERC20) PairB/C (+ ERC20) Router ユーザ1: 100 ユーザ2: 1,000 PairA/B: 0 ユーザ1: 1 ユーザ2: 10 PairA/B: 0 PairB/C: 5 ユーザ1: 0 ユーザ2: 0 ユーザ1: 0 ユーザ2: 7.07 ユーザ2 (流動性供給者) addLiquidity TokenA: 1,000 TokenB: 10 ー 1,000 + 1,000 + 100 Deposit処理の流れ ① ユーザ2がRouterの addLiquidityをコール TokenA: 1,000 TokenB: 10 ② RouterがPairA/Bアドレスに 供給されたTokenを移す ③ PairA/Bコントラクトで、 ユーザ2に流動性トークンが mintされる mint額 = sqrt(TokenA x B) 100 = sqrt(1,000 x 10) ユーザ1: 0 ユーザ2: 0 PairB/C: 10 ー 10 + 10 … Smart Contract … Contractのステート
  7. Smart Contract | Swap TokenA (ERC20) TokenB (ERC20) TokenC (ERC20)

    PairA/B (+ ERC20) PairB/C (+ ERC20) Router ユーザ1: 100 ユーザ2: 0 PairA/B: 1,000 ユーザ1: 1 ユーザ2: 0 PairA/B: 10 PairB/C: 5 ユーザ1: 0 ユーザ2: 0 PairB/C: 10 ユーザ1: 0 ユーザ2: 100 ユーザ1: 0 ユーザ2: 7.07 ユーザ1 (トレーダー) swapExactTokensForTokens TokenA: 100 Path: TokenA→TokenB→TokenC ー 100 + 100 ー 0.91 + 0.91 Swap処理の流れ ① ユーザ1がRouterの swap関数をコール TokenA: 100 ② 各トークンのプール残高から 各トークンの送金枚数を算出 *送金前後で流動性トークンの 枚数が一定となる送金枚数 ③ 算出した枚数通りに 各トークンで送金を実行する + 1.54 ー 1.54 オンチェーンデータのみでswap レートはアビトラのみで調整
  8. The Graph | エコシステム Developer (Uniswap Labs) subgraph リソース提供者 (Graphノード運用)

    ユーザ (トレーダー/流動性提供者) 静的コンテンツ (React)
  9. The Graph | How it works ユーザ (トレーダー/流動性提供者) 静的コンテンツ (React)

    Token DayData Pair DayData Uniswap DayData Token Pair Uniswap Factory Swap Burn Mint Block Block … receiptsRoot … Rc Rc Receipt Block log Transfer Event Transfer Event Sync Event Swap Event Entity Mapping GraphQL Graphノード Ethereumノード
  10. ※ 加工済みデータ … ドル建て価格、取引ボリューム等 ※ 「Blockchain Data」は、Contract Accountのステート(storageに保持されるデータ)を指す ※ EthereumのFull

    Nodeでは、最新の128blockしかステートが保持されない Archive Nodeを参照することで、過去の全ステートを参照することは可能 ユーザが”欲しいデータ”を”取得しやすい手段”で提供する The Graph | 存在理由 Blockchain Data (Ethereum上のステート) Indexed Data (TheGraph上のデータ) データの中身 基本データ 基本データ + 加工済みデータ データの時制 基本的に”現在”の値のみ 加工(保持)の仕方次第で “過去”も可能 Queryの利便性 コントラクトのFunction依存 基本的にGetterのみ GraphQL APIで可能な検索 Sort, Filter, etc Blockchain DataとIndexed Dataの比較
  11. Webサーバ APサーバ/DBサーバ 静的コンテンツ 動的コンテンツ/データ クライアント クライアント・サーバシステム | Web3 (Uniswap) APサーバとDBサーバの線引き

    が曖昧(Developerから見ると、 同一ノード上で動的コンテンツ とデータが管理されているよう にみえる)
  12. クライアント・サーバシステム | Web2 vs Web3 (Uniswap) アプリケーション [参照可否] React [公開]

    Solidity [公開] Blockchain Data [公開] ミドルウェア IPFS Ethereum インフラ [管理] ホスティング [分散(他者)管理] ホスティング [分散(他者)管理] TypeScript [公開] Indexed Data [公開] The Graph ホスティング [分散(他者)管理] Webサーバ APサーバ DBサーバ アプリケーション [参照可否] React [秘匿] Java [秘匿] Data [秘匿] ミドルウェア Nginx Tomcat MySQL インフラ [管理] クラウド/オンプレ [集中(自主)管理] クラウド/オンプレ [集中(自主)管理] クラウド/オンプレ [集中(自主)管理] Web2 アプリケーション [参照可否] ミドルウェア インフラ [管理] 秘匿・集中管理 Web3 公開・分散管理
  13. アプリケーション [参照可否] React [公開] Solidity [公開] Blockchain Data [公開] ミドルウェア

    IPFS Ethereum インフラ [管理] ホスティング [分散(他者)管理] ホスティング [分散(他者)管理] TypeScript [公開] Indexed Data [公開] The Graph ホスティング [分散(他者)管理] アプリケーション [参照可否] ミドルウェア インフラ [管理] Web3 公開・分散管理 まとめ - 分散型PaaSの組み合わせによるサービス提供 - 開発者が気にする(開発・管理する)のはアプリケーションのみ ※「分散型PaaS」は、小倉が勝手に命名 - 意思決定・インフラが不特定多数に維持管理され、ソースコード・データが秘匿でない - Uniswapだけでなく、それを支えるすべて(IPFS、Ethereum、The Graph)に当てはまる - 「秘匿」・「集中管理」(中央集権)をなくすムーブメント