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

Uniswapについて調べてみた

 Uniswapについて調べてみた

YutaSugimura

May 17, 2019
Tweet

More Decks by YutaSugimura

Other Decks in Programming

Transcript

  1. Enbowl inc. Exchange Contract Swap ަ׵ՄೳͳίΠϯ 40छྨҎ্ ex. REP, DAI,

    MKR, TUSD, ZRX, … Alice Alice 5ETH DAIʹަ׵ 4ETH ɾETH => ERC20 ɾERC20 => ETH ɾERC20 => ERC20 3ͭͷަ׵ํ๏ʹରԠ 0DAI 250DAI 1ETHΛ
  2. Enbowl inc. Exchange Contract Swap ethToTokenSwapInput() ethToTokenSwapOutput() tokenToEthSwapInput() tokenToEthSwapOutput() tokenToTokenSwapInput()

    tokenToEthSwapOutput() ͦͷଞ ɾETH => ERC20 ɾERC20 => ETH ɾERC20 => ERC20 https://github.com/Uniswap/contracts-vyper/blob/master/contracts/uniswap_exchange.vy Uniswap contract ͜ΕΒͷؔ਺Λ࢖ͬͯަ׵͍ͯ͠Δ
  3. Enbowl inc. Exchange Contract Send ETH => ERC20 ERC20 =>

    ETH ERC20 => ERC20 ૹۚͷࡍʹτʔΫϯΛม׵ͯ͠ૹۚ͢Δ͜ͱ͕Ͱ͖Δ Alice Bob 5ETH DAIʹަ׵ͯ͠ૹۚ 250DAI swapಉ༷ʹ3ͭͷૹۚʹରԠ 0DAI 1ETHΛ ॴ͍࣋ͯ͠ͳ͍τʔΫϯͷૹ͕ۚεϜʔζ https://github.com/Uniswap/contracts-vyper/blob/master/contracts/uniswap_exchange.vy Uniswap contract
  4. Enbowl inc. Exchange Contract Transfer ETH => ERC20 ERC20 =>

    ETH ERC20 => ERC20 ethToTokenTransferInput() tokenToEthTransferInput() tokenToTokenTransferInput() ಺෦తͰ͸Swapͷؔ਺͕࣮ߦ͞Ε͓ͯΓɺडऔਓ͕ૹۚ૬खͷΞυϨεʹͳ͍ͬͯΔ ethToTokenTransferOutput() tokenToEthTransferOutput() tokenToEthTransferOutput() ͦͷଞ
  5. Enbowl inc. Exchange Contract ྲྀಈੑͷఏڙ ࠷ॳʹྲྀಈੑΛఏڙ͢Δਓ͕Ձ֨Λઃఆ 5PLFOͱ 5PLFOͱಉྔͷ&5)ΛϩοΫ͢Δ Alice 1ETH

    250DAI uniswapʹྲྀಈੑΛఏڙ 1ETH 250DAI uniswap ΑͬͯՁ͕֨ઃఆ͞ΕΔ ͦΕҎ߱ʹఏڙ͢Δਓ͸ͦͷՁ֨ͰϩοΫ͍ͯ͘͠ ఏڙ͢Δ͜ͱͰख਺ྉͷҰ෦Λ΋Β͑Δ (0.3%ͷख਺ྉ͔Βఏڙൺ཰෼)
  6. Enbowl inc. Exchange Contract (Swap) (input_amount * 997) * output_reserve

    (input_reserve * 1000) + (input_amount * 997) Tokens_bought = output_reserve = self.token.balanceOf(self) input_reserve = self.balance -msg.value input_amount = msg.value (Pool͕͍࣋ͬͯΔτʔΫϯྔ) (͜ͷϓʔϧ͕͍࣋ͬͯΔETHྔ) (ߪೖʹ࢖༻͢ΔETHͷྔ) inputͷ৔߹ (outputͷ৔߹ҟͳΔ) ethToTokenSwapͷ৔߹
  7. Enbowl inc. 45.35OMGʹަ׵ token_Pool: eth_Pool: 10 500 ϓʔϧྔ invariant 5000

    Exchange Contract Alice 1ETHͰ Bob 1ETHͰߪೖ ड͚औΓྔ 37.8 OMG ಉֹۚ͡Ͱ΋ങ͑Δྔ͕ݮΔ AliceߪೖޙBob͕1ETHͰOMGߪೖ͢Δ token_Pool: eth_Pool: 11 454.65 ϓʔϧྔ New invariant 5001.15
  8. Enbowl inc. Exchange Contract 1000ഒͷPoolͩͱ 1ETHͰ49.84OMG token_Pool: eth_Pool: 10000 500000

    ϓʔϧྔ Alice ड͚औΔ͜ͱ͕Ͱ͖ͨ ΑͬͯPool͞Ε͍ͯΔτʔΫϯͷྔ͕ଟ͍ͱՁ͕֨҆ఆ͢Δ