UNISWAP SDK(V2)をいじってみる!

UNISWAP SDK(V2)をいじってみる!

こんにちはかずみょんです。少しNode.jsとJavaScrypt分かってきた?のでuniswap sdkで提供されるライブラリをいじってみたいと思います。とりあえず備忘録としてやったことを記録していこうかな。Uniswapについての説明はここではしません。

1.動作環境準備

まずNode.js(Node.jsはJavaScryptを実行する環境です)をインストールしましょう。私は開発環境WindowsなんでWindows版をインストールしました。

インストール後コマンドラインでバージョンなど確認できます。

次に作業ディレクトリとファイルをつくります。”ドライブ:D”の下にtestというディレクトリと”D:/test/index.js”というファイルをつくります。

作成してディレクトリ下(”D:/test/")でこれからつくるプロジェクトの初期化します。コマンドラインで "npm init"をタイプし最後に"yes"で終わり。

作業ディレクトリ下に"package.json"というファイルが出来ました。

最後にUniswapのドキュメントのクイックスタートに記載されているuniswap sdkで必要なモジュールをインストールします。

コマンドラインで  

npm install @uniswap/sdk @ethersproject/address @ethersproject/solidity @ethersproject/contracts @ethersproject/providers

をタイプする。その後,"package.json”の中身をみるとインストールされたパッケージが見れました。

はい、ここまでできれば後はクイックスタートのドキュメントにそってコードを実行していくだけです。

2.ネットワークIDを呼び出す

クイックスタートに従ってコードを記述して実行していきたいと思います。

メインネットのIDを表示させるコードを先ほど作成した"index.js"に記述します。

//uniswap v2
const UNISWAP = require('@uniswap/sdk')
console.log("The chainId of mainnet is " + UNISWAP.ChainId.MAINNET)

コマンドラインで "node index.js"を実行。

メインネットのネットワークIDとして”1”が表示されました。

3.トークン情報を呼び出す(Fetching Data

DAIのトークン情報を呼び出したいと思います。下記コードを"index.js"に記述します。

//uniswap v2
const UNISWAP = require('@uniswap/sdk')
chainId = UNISWAP.ChainId.MAINNET

const Fetcher = UNISWAP.Fetcher

//DAIのコントラクトアドレス
const tokenAddress = '0x6B175474E89094C44Da98b954EedeAC495271d0F'

async function main () {
    const DAI = await Fetcher.fetchTokenData(chainId, tokenAddress)
    console.log(DAI)
}

main()

コマンドラインで "node index.js"を実行。

なんか通知(前はでてないような気がしたんですが)がでてますが、それは置いといてDAIのトークンがセットできました。この関数で読み込んだのは"decimals"だけなんですね。

4.ペアアドレスを呼び出す(Pair

DAIとWETHのペアアドレスを呼び出したいと思います。下記コードを"index.js"に記述します。

//uniswap v2
const UNISWAP = require('@uniswap/sdk')
chainId = UNISWAP.ChainId.MAINNET

const Fetcher = UNISWAP.Fetcher
const Pair =UNISWAP.Pair
const WETH =UNISWAP.WETH

//DAIのコントラクトアドレス
const tokenAddress = '0x6B175474E89094C44Da98b954EedeAC495271d0F'

async function main () {
    const DAI = await Fetcher.fetchTokenData(chainId, tokenAddress)
    //console.log(DAI)
    const pairAddress = Pair.getAddress(DAI, WETH[DAI.chainId])
    console.log('Pair address = ' + pairAddress)

}

main()

コマンドラインで "node index.js"を実行。

DAIとWETHのペアアドレスがゲットできました。

4.ペアの価格を呼び出す(Route

少し疲れましたが後少し頑張ります。ここではWETH/DAI、DAI/WETHの価格を呼び出してみます。はい、いつも通り下記コードを"index.js"に記述します。

//uniswap v2
const UNISWAP = require('@uniswap/sdk')
chainId = UNISWAP.ChainId.MAINNET

const Fetcher = UNISWAP.Fetcher
const Route = UNISWAP.Route
const Pair =UNISWAP.Pair
const WETH =UNISWAP.WETH

//DAIのコントラクトアドレス
const tokenAddress = '0x6B175474E89094C44Da98b954EedeAC495271d0F'

async function main () {
    const DAI = await Fetcher.fetchTokenData(chainId, tokenAddress)
    //console.log(DAI)
    const pair = await Fetcher.fetchPairData(DAI, WETH[DAI.chainId])
 
    //WETH --> DAI exchange route
    const route = new Route([pair], WETH[DAI.chainId])
    console.log('***** WETH --> DAI *****')
    console.log('WETH/DAI price = '+ route.midPrice.toSignificant(6))
    console.log('DAI/WETH price = ' + route.midPrice.invert().toSignificant(6))

}

main()

コマンドラインで "node index.js"を実行。

WETH/DAI と DAI/WETHの価格が取得できました。これは実際のトレード数量を考慮してないので、まあ参考価格といったところでしょうかね。トレード数量を反映した価格はTrade関数で取得できそうですが、今回は省略します。

最後に、WETH/DAI価格を算出するときにUSDCを迂回した場合の価格を取得してみます。下記コードを"index.js"に記述します。

//uniswap v2
const UNISWAP = require('@uniswap/sdk')
const chainId = UNISWAP.ChainId.MAINNET
const ChainId = UNISWAP.ChainId

const Fetcher = UNISWAP.Fetcher
const Route = UNISWAP.Route
const Pair =UNISWAP.Pair
const WETH =UNISWAP.WETH

//DAIのコントラクトアドレス
const tokenAddress = '0x6B175474E89094C44Da98b954EedeAC495271d0F'

async function main () {
    const DAI = await Fetcher.fetchTokenData(chainId, tokenAddress)
    //console.log(DAI)
    const pair = await Fetcher.fetchPairData(DAI, WETH[DAI.chainId])
 
    //WETH --> DAI exchange route
    const route = new Route([pair], WETH[DAI.chainId])
    console.log('***** WETH --> DAI *****')
    console.log('WETH/DAI price = '+ route.midPrice.toSignificant(6))
    console.log('DAI/WETH price = ' + route.midPrice.invert().toSignificant(6))

    //WETH -> USDC ->  DAI exchange route
    const USDC = await Fetcher.fetchTokenData(ChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48')

    const USDCWETHPair = await Fetcher.fetchPairData(USDC, WETH[ChainId.MAINNET])
    const DAIUSDCPair = await Fetcher.fetchPairData(DAI, USDC)

    const route1 = new Route([USDCWETHPair, DAIUSDCPair], WETH[ChainId.MAINNET])

    console.log('***** WETH -> USDC -> DAI *****')
    console.log('WETH/DAI price = '+ route1.midPrice.toSignificant(6))
    console.log('WETH/DAI price = '+ route1.midPrice.invert().toSignificant(6))
}

main()

コマンドラインで "node index.js"を実行。

はい、こんな感じです。価格取得するところまでは何とかできました。

ではまた。

Remaining : 0 characters / 0 images
1,000

Sign up / Continue after login

Related stories

Writer

Share

Popular stories

UNISWAP(V2) テストネットRopstenでETHからDAIの交換をしてみる!

53

DEXアービトラージ自動化への道(序)

45

UNISWAP(V3) テストネットRopstenでDAIからETHに交換をしてみる!

32