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"を実行。
はい、こんな感じです。価格取得するところまでは何とかできました。
ではまた。