見出し画像

わたしとABIとスマートコントラクトと

BOTを作る際、ABIが理解できず、怒りながらABI探し出し、貼り付けては「これじゃない!」とエラーで弾かれてたので、今日はABIに向き合い、心から必要と思えるまで知っていきたいです。

間違えてるところ多々あるはずです。コメントで教えてくださるととてもありがたいです!書いてる途中で混乱してきました。

ABIとは

スマートコントラクトの使い方ガイドみたいなもの。

スマートコントラクトとは?

スマートコントラクトはドラえもん。


スマートコントラクトはドラえもんのようにたくさんの道具(機能)を出してくれます。どこでもドアやタイム風呂敷などです。

そしてわたしはドラえもんに「あれ出してよ!あの開けるやつやん!」と不適切に頼むと、襖が出されるかもしれません。最近は無視されています。
でもここでドラえもん使い方ガイド(ABI)を使って「どこでもドアを1つ出してください」と頼むとちゃんとどこでもドアを出してくれます。わたしはPythonのコードで「どうやってお願いすればいいか」を正しく理解でき、ドラえもんも迷いなくポッケに手を突っ込んでのドマンナカのものを取り出せるんです。

わたしとスマートコントラクト

UniswapでSwapするBOTを作るときに必要なABIファイルとは?

ABIは使い方ガイドで文字数がすごく多いので、メインのファイルとは別のファイルを作って保存します。ABIファイル(jsonファイル)です。

UniswapでSwap BOTを作るにはABIファイルは2つ必要です。UniswapのRouterコントラクトが書かれたABIファイルプールコントラクトが書かれたABIファイルです。この2つをもっと掘り下げていきます。

UniswapのRouterコントラクトとは?

Uniswap V2のRouterコントラクトにはswapExactTokensForTokens、swapTokensForExactTokensなどの関数、Uniswap V3のRouterコントラクトにはexactInputSingleやexactInputといった関数があります。

V2とV3ではRouterのコントラクトが異なりますが、スワップを実行する際にどちらかのRouterコントラクトのABIが必要です。

ここではV2について考えます。

V2のRouterコントラクト

swapExactTokensForTokensとは?

Uniswap V2のRouterコントラクトには2つ関数(swapExactTokensForTokens、swapTokensForExactTokens)があり、そのうちの1つです。
swapExactTokensForTokensについて考えます。これは「持っている分をそのままピッタリ交換する機能」です。

スマートコントラクトをドラえもんとすると、わたしは「持っている分をそのままピッタリ交換したい」人。わたしは計算なんてせずに「持っているものを全部使ってできるだけ多く交換したい!」人です。

例えば100円分のトークンを、別のトークンに「全部交換したい!」と思っているとき、この機能を使うと便利。この「ピッタリ交換機能」を使えば、その100円分を全部きれいに交換できます。
わたしが計算しなくても、ドラえもん(スマートコントラクト)がswapExactTokensForTokens を使って、その時のレートに合わせて自動でどれだけ交換できるかを決めてくれます。

swapTokensForExactTokensとは?

先ほどとはちょっと違います。「最終的に欲しい量を決めて、それを手に入れるために必要な分だけ交換する」という意味です。

swapTokensForExactTokens を使うと、わたしが「最終的に1 USDCが欲しい」とだけ伝えれば、わたしは計算しなくてもドラえもん(スマートコントラクト)がその時のレートに合わせて必要な分を勝手に計算して交換してくれます。

わたしとスマートコントラクト

プールコントラクトABIとは?

スマートコントラクトをドラえもんに例えると、
プールコントラクトABIは「トークンが出たり入ったりする池」にドラえもんが飛び込ませていろんな仕事をさせる指示書です。
ドラえもんは、「池に飛び込んでトークンを入れたり、出したり、交換したり」というお仕事をしてくレます。

ドラえもんに「この説明書(ABI)に書かれた通りにやって!」とお願いすると、ドラえもんがその通りに池に飛び込んで、「トークンを入れたり出したり、交換したり」してきてくれるんです。


ちょっとよくわからなくなってきましたが、今日はここまでにしておきます。

この記事が気に入ったらサポートをしてみませんか?