Uniswapの登場人物を実際のコントラクトで確認する

前回、Uniswapをはじめとした流動性プールの全体像を概念的に理解しました。

今回は、実際のコントラクトから流動性プールの構成をたどります。

uniswapのDocsに各ネットワークにおけるFactoryとRouterのコントラクトアドレスが掲載されています(今回はUniswap V2プロトコルを対象とします)。

例えば、Base Mainnetについて確認します。
Routerのコントラクトアドレスは0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24
とあります。

BaseScanでこのコントラクトアドレスを検索するとUniswap V2 Routerコントラクトを見つけることができます。

https://basescan.org/address/0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24

ContractのRead Contractのfactory関数を見ると、
0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6
と書かれており、これはUniswap DocsにあるFactoryコントラクトのアドレスと一致します。

今度は、BaseScanでFactoryコントラクトを検索します。

https://basescan.org/address/0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6

ContractのRead Contractにある関数を確認します。

allPairsには、各通貨ペアに対応するPoolのアドレスが配列形式で格納されています。
[tokenAとtokenBのpool, tokenCとtokenDのpool, tokenEとtokenFのpool, …., ]という感じです。
この場合、配列の0番目がtokenAとtokenBのpool、配列の1番目がtokenCとtokenDのpool、というような対応になります。

試しに、allPairsに0と入れて返り値を見てみます。

あるアドレスが返ってきました。これが配列0番目に格納されているPoolアドレスということになります。

では、返り値にあるアドレスをBaseScanで検索してみます。

https://basescan.org/address/0x88A43bbDF9D098eEC7bCEda4e2494615dfD9bB9C

ContractのRead Contractを見ると、token0とtoken1があります。
ここに入っているアドレス(ERC20トークン)を確認すると何と何のPoolなのかが分かります。

この2つのアドレスをBaseScanで検索してみます。

https://basescan.org/address/0x4200000000000000000000000000000000000006

一つはWETHだと分かりました。

もう一つは、

https://basescan.org/address/0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913

USDCだと分かりました。

つまり、Poolアドレス(0x88A43bbDF9D098eEC7bCEda4e2494615dfD9bB9C)はWETHとUSDCペアのPoolだということが分かりました。

逆に、WETHとUSDCのPoolアドレスを調べたい場合は、FactoryコントラクトのgetPair関数にWETHとUSDCのアドレスを入力します。

先ほどallPairsの配列0番目に格納されていたアドレスが返ってきました。

同様にallPairsの配列1番目、2番目、3番目、・・・というようにUniswapの各ペアのPoolアドレスがすべてここに存在することになります。

このように、前回記事で概念的に理解した流動性プールが、Base Mainnetに存在するということを確認できました。

いいなと思ったら応援しよう!