Kyber NetworkとRemixでKyber Networkを試してみる

この記事は[オオキマキ](https://twitter.com/ookimaki_JP)さんの[Kyber NetworkでdAppsを作ってみよう勉強会](https://dapps-developers-guild.connpass.com/event/99560/)の後半部分の記事です。前半部分は[こちら](https://qiita.com/hamakihito/items/ed7cafd6d352a723291e)をどうぞ！
また同じ部分の記事ですがより画像が多い記事も[こちら](https://qiita.com/hamakihito/items/75c8a438dd5004a27133)にあります！
動かない、などありましたらコメントください！

# 必要なもの
- MetaMask
- npm

# Kyber Networkとは？
どんなトークンをどこでも使えるようにするマントラです。合言葉は***Any Token, Anywhere***です。詳しくはKyber Network Evangelistの[horyさん](https://twitter.com/taisuke_hory)の[資料](https://speakerdeck.com/taisuke1234/kyber-networkwoshi-tutedappwozuo-tutemiyou)をご覧ください。

# やってみる
Kyner NetworkのSolidityのバージョンが低く、truffleだとコンパイラのバージョンを落とせないためRemixを使います。

## 準備
- `git clone https://github.com/KyberNetwork/smart-contracts.git`
- `cd smart-contract`
- `npm install -g remixd`
- `touch contracts/KyberExample.sol`（今回使うファイルです）
- `remixd -s <path/to/contracts folder>`
- https://remix.ethereum.org/#optimize=true&version=soljson-v0.4.18+commit.9cf6e910.js を開く（CompilerのバージョンをKyberNetworkに合わせてあります）
- Remixの左上の方にある鎖アイコンをクリック→Connectを選択
- https://developer.kyber.network/docs/DappsGuide#contract-example を `KyberExample.sol` にコピペし、下記の修正を行う。
  - l. 79のsrcToken → token
  - l. 86のrequire外す
  - 修正後のコードは[こちら](https://gist.github.com/hidehiro98/233e5cecd26cddfac308812d405cd020)
- `KyberNetworkProxyInterface.sol` にこれをコピペする

```

function swapTokenToEther(ERC20 token, uint srcAmount, uint minConversionRate) public returns(uint) ;
    function swapEtherToToken(ERC20 token, uint minConversionRate) public payable returns(uint);

        function swapTokenToToken(
        ERC20 src,
        uint srcAmount,
        ERC20 dest,
        uint minConversionRate
    )
        public
        returns(uint);

        function trade(
        ERC20 src,
        uint srcAmount,
        ERC20 dest,
        address destAddress,
        uint maxDestAmount,
        uint minConversionRate,
        address walletId
    )
        public
        payable
        returns(uint);
```


- ContractとTokenのAddressはここを参照 https://developer.kyber.network/docs/RopstenEnvGuide

## swapEtherToTokenを試す
  - MetaMaskがRopstenになっていることを確認
  - 右側のRunのところからKyberExampleを選択
  - Gas limitを6000000くらいにしてDeploy
    - Tx例 https://ropsten.etherscan.io/tx/0x07a2ca3c7404253ccd272cb00444e6dc3d2cc2531997dc10d8f90b3f1d2b7faa
  - MetaMaskを開いて確認を押す
  - Depoyed ContractsからswapEtherToTokenの所の下三角をクリック
    - _kyberNetworkProxyにhttps://developer.kyber.network/docs/RopstenEnvGuide#kybernetworkproxy を入力
    - tokenに https://developer.kyber.network/docs/RopstenEnvGuide#adx-adex を入力（ADXの場合）
    - destAddressに自分のMetaMaskのアドレスを入力
    - transactを押す
    - Tx例 https://ropsten.etherscan.io/tx/0xc78621b0006bd784f939c2367d9ed87736bb8a348cf53c1a2d66873c9ba0051f

## swapTokenToEtherを試す
  - 送るtokenのapproveをする
    - Load contract from addressに https://developer.kyber.network/docs/RopstenEnvGuide#adx-adex をコピーしAt Addressを押す
    - Deployed ContractsからERC 20を選択
      - approveを選択
        - _spenderにKyberExampleのアドレスを入力
        - _valueにapproveする量を入れる
          - Ethscanでtokenを確認して、Decimalsの所にある0の数を追加するのを忘れない
          - https://etherconverter.online/ が使いやすい
        - transactを押す
        - Tx例 https://ropsten.etherscan.io/tx/0x2b639127f1013352c36f8bd386748c023c7f94585b8d47eb00d749498ffdae6a
  - KyberNetworkを使いswapTokenToEtherを試す
    - Deployed ContractsからKyberExampleを選択
      - swapTokenToEtherを選択
        - _kyberNetworkProxyにhttps://developer.kyber.network/docs/RopstenEnvGuide#kybernetworkproxy を入力
        - tokenに https://developer.kyber.network/docs/RopstenEnvGuide#adx-adex を入力（ADXの場合）
        - tokenQtyに上記でapproveした以下の数を入力
        - destAddressに自分のMetaMaskのアドレスを入力
        - transactを押す
      - EthscanでTxを確認すると、OverviewのToの所に小さくTRANSFERの額が書いてある。ValueはFromのアドレスから出た額なので0となっている
        - Tx例 https://ropsten.etherscan.io/tx/0x183ed7c5df71686f53929c26eb5f15e6000346d60a4e578d667c82c24fa8ac66