仮想通貨

【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

今回は直接コントラクトからLPを解体する方法について画像付きで解説していきます。

この記事は「【DeFi】直接コントラクトからLPを作成する方法を解説します。」の続きの内容となっています。

まずは大きく1〜4項目に分けて各操作の流れや「なぜこの操作をするのか?」を解説し、5項目目で内容の復習も兼ねて実際にLPを解体する時の操作手順を解説していきたいと思います。

難しく感じる方は、5項目目の操作手順のところだけでもぜひ見てもらえたらと思います。

1. Router(ルーター)を探す

スクリーンショット 2021 07 07 16.08.57 1024x576 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

DEXというのはRouterとFactoryと各LPのコントラクトから構成されていて、この3つのおかげでSwapやLiquidityの提供がされるようになっています。

ユーザーはRouterを介して操作することになるので、まずはRouterを探す必要があります。

2. RemoveLiquidityを探す

次にRouterの中からRemoveLiquidityという機能を探す必要があります。今回は題材としてPancakeSwapを扱うのですが、下の画像(Pancakeのコード)で赤枠の部分(removeLiquidity)を探す必要があります。

実際は、このままコードを貼り付ける必要はなくBscScanから見つければ大丈夫です。

スクリーンショット 2021 07 07 18.56.23 1024x499 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

仮に片方がネットワークトークンの場合、例えばバイナンススマートチェーンであればBNB、ファントムネットワークであればFTM、ポリゴンネットワークであればMATICなどの場合は、先ほどのコードのすぐ下にある部分を使います。(removeLiquidityETH)

片方のトークンがネットワークトークンの場合はこっちのコードを使うんだな〜ということだけ覚えておいてください。

スクリーンショット 2021 07 07 19.16.48 1 1024x455 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

そしてひとつ分かりにくいところがあるのですが「RemoveLiquidity」と「RemoveLiquidityWithPermit」という2つの似ている機能(関数)があります。基本的にDeFiをやっている人が無意識に使ってるのは「RemoveLiquidityWithPermit」になります。

ここでは何をやっているかというと、LPの解体をするためにはRouterにLPの使用をApproveしなければいけませんが、それを省略することができます。

LP解体操作をやったことがある人は分かると思いますが、LPの解体をするときにApproveボタンを押してRemoveボタンを押すと思いますが、Approveの時にトランザクションを実行していないはずなんです。(DEXによっては実行しているところもありますが、基本的には実行しなくてもそのままできます。)

この際「Permit」がポイントになるのですが、イメージとしては「鍵のようなものを用意して、結果的にApproveをしているのと同じように扱える」という感じになっています。

ここはプログラムを書ける人からしたら簡単に解決できるのですが、scan上からトランザクションを発行したい直コン組には難しいポイントです。

今回は「RemoveLiquidityWithPermit」を直コンでScanからやる場合は「Permit」の処理をするのが難しいので、今回は「RemoveLiquidity」を選びました。

3. LPをRouterに向けてApprove

これはMasterChefに向けてApproveする時と同じです。

解体する時にはRouterに解体の許可をして、その後RouterがFactoryに送ったりいろいろ工程があるのですが、その時にユーザーのLPを扱うことになるのでApproveしないといけません。

スクリーンショット 2021 07 07 16.08.57 1024x576 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

Approveの処理はいつもどおり、LPのコントラクトに行きApproveでRouterのコントラクトアドレスと数量を入れるだけですので画像は省略します。

もしわからない方は記事冒頭の動画を確認してください。

4. MinとDeadlineを入れて実行

コードを見ると「Min」と「Deadline」と書かれているのがわかります。ここにタイムスタンプを入れる必要があります。

スクリーンショット 2021 07 07 23.44.19 1024x320 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。
埋めるべき項目
  • tokenA / tokenB
    各トークンのコントラクト
  • liquidity
    LPの数量(Wei単位)
  • amountAMin / amountBMin
    LP解体を中断させるための各トークンの最低使用量(普段はスリッページに基づいて設定される)
  • to
    作成したLPの送付先。自分のアドレスを入力すればよい。
  • deadline
    強制終了させる時間のタイムスタンプ

コントラクトの実行の仕方を記事で紹介する場合、0から説明しておかないと後から訳がわからなくなるので一応ここで丁寧に説明しておくと、コード部分に「tokenA」「tokenB」と書かれていますが、これがLPを構成する各トークンのコントラクトになります。

この「tokenA」「tokenB」がネットワークトークン(BSCならBNB、PolygonNetworkならMATICなど)だった場合は「RemoveLiquidityETH」になります。(下記画像参照)

スクリーンショット 2021 07 07 23.51.41 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

続いて「unit liquidity」の部分についてですが、これはLiquidityのamount(数量)になります。

スクリーンショット 2021 07 08 22.18.53 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

ちなみに数量はユニットコンバーターの単位です。下の画像の一番上にある「Wei」という単位になります。

スクリーンショット 2021 07 09 0.12.50 1024x478 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

続いて「amountAMin」「amountBMin」はそれぞれAとBのトークンを「最小どれくらい受け取りたいか?」を意味しています。なのでここに書き込まれた数字以下であれば強制終了にになり、実行しなかったことにしたい。という数量になります。

ちなみに、なにがなんでも実行したいという場合は両方とも「0」「0」を入力するといけます。

スクリーンショット 2021 07 09 0.14.34 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

続いて「address to」は、自分のアドレスを入れる箇所になります。

スクリーンショット 2021 07 09 0.19.18 1024x308 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

次に「unit Deadline」は、タイムスタンプになります。

スクリーンショット 2021 07 09 0.20.34 1024x330 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

タイムスタンプと検索すると下の画像のようなサイトが出ます。この表示されているタイムスタンプが現在時刻です。そしてこれを未来の時間にすれば良いということになります。

スクリーンショット 2021 07 09 0.22.57 1024x616 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

以上で、項目1〜4の解説を終わります。では実際に操作していきます。

5. 操作の流れ

いろんなページを行ったり来たりするので、一度開いたページは閉じないほうが便利です。

開くことになるページまとめ

  • Routerのコントラクトページ
  • LPペアのコントラクトページ
  • tokenAのコントラクトページ
  • tokenBのコントラクトページ
  • timestampの取得用のサイトのページ

この方法を覚えておくと、仮にDEXを自作しているラグプルがあった場合にもLPを解体することができます。

基本的にラグプルするパターンというのは、大体PacakeのDEX(いわゆるCAKE LP)でずっとやっていたり、他のところで裏ではDEXを使っているというパターンが多いです。今のところ他のサイトがラグってもPancakeRouterで処理できるので、Pancake上でインポートすれば解体ができるようになっています。

今回は、作ったばかりの「BUSD-LINK LP」を解体していきたいと思います。

スクリーンショット 2021 07 09 0.44.53 1024x456 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

まずは項目①で解説した通り、DEXのRouterを探していきます。今回の場合だとPancakeRouterを探します。探すときは「Docs」「Github」「LPを作成した時のトランザクションのログ」のどれかから探すことができます。今回はトランザクションのログからいきます。

右上のMetaMaskのアイコンをタップして、トランザクションのログをタップします。

スクリーンショット 2021 07 09 20.59.27 1024x499 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

「↗︎」をタップします。

スクリーンショット 2021 07 09 21.00.54 1024x419 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

「Overview」をタップします。

スクリーンショット 2021 07 09 21.04.16 1024x369 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

下にスクロールすると自分が作ったLP一覧が記載されています。「Pancake LPs(Cake-L…)」をタップします。

スクリーンショット 2021 07 10 3.03.01 1024x291 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

次に「Write Contract」をタップします。

スクリーンショット 2021 07 09 22.31.20 1024x514 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

「Contract to Web3」をタップしてウォレットを繋げていきます。

スクリーンショット 2021 07 09 22.33.48 1024x430 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

接続したいウォレットをタップします。

スクリーンショット 2021 07 09 22.35.17 1024x355 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

ウォレットが接続できたら「spender(Routerのコントラクト)」と「value」に入力します。

スクリーンショット 2021 07 10 3.16.07 1024x279 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

まずは「spender」にRouterのコントラクトを入力する方法から解説します。先ほど5個前の操作(画像)で開いたページに戻り「Logs」をタップします。

スクリーンショット 2021 07 10 3.10.33 1024x483 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

下にスクロールして今回解体するのに必要なRouterアドレスを探します。(ページを開けばコントラクト名を確認できます。)

スクリーンショット 2021 07 10 3.06.20 1024x417 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

するとこのように表示されているのですが、上部にあるアドレスをコピーします。

スクリーンショット 2021 07 10 3.24.32 1024x523 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

再びウォレットを接続した時のページ(4つ前の画像)に戻りペーストします。

スクリーンショット 2021 07 10 3.27.22 1024x299 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

次に「value」に入力する方法を解説していきます。9個前の操作(画像)で開いたページに戻り、赤枠の部分をコピーします。

スクリーンショット 2021 07 10 3.31.33 1024x325 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

次に、プログラム用の単位(Wei)に変換して「value」に入力しなければいけないのでBscScanの「Unit Converter」というページを開きます。([Unite Converter BscScan] でググってください。)

このようなページが出ます。

スクリーンショット 2021 07 10 3.34.26 1024x588 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

次に「1」の欄に先ほどコピーした数値をペーストします。

スクリーンショット 2021 07 10 3.36.34 1024x518 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

そして一番上の「Wei」という単位の欄に表示された数値をコピーします。

スクリーンショット 2021 07 10 3.37.59 1024x447 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

再び、5つ前のページ(画像)に戻り「value」の欄にペーストします。

スクリーンショット 2021 07 10 3.40.10 1024x278 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

「Write」をタップして「確認」をタップします。

スクリーンショット 2021 07 10 3.40.50 1024x421 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

続いて、8個前の操作(画像)で開いたページに戻ります。

「Contract」「Write Contract」「Connect toWeb3」 の順でタップします。

スクリーンショット 2021 07 10 3.51.26 1024x339 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

ウォレットを接続するので、接続したいウォレットをタップします。

スクリーンショット 2021 07 10 3.52.56 1024x352 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

接続されたら下にスクロールして「3.Remove Liquidity」の欄を入力していきます。まずはtokenAからいきます。

8個前の操作(画像)で開いたページに戻り、赤枠をタップします。

スクリーンショット 2021 07 10 4.03.02 1024x356 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

トークンアドレスをコピーします。

スクリーンショット 2021 07 10 3.59.07 1024x414 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

再びこのページに戻りtokenAの欄にペーストします。

スクリーンショット 2021 07 10 3.59.50 1024x451 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

再び3つ前の画面に戻り赤枠をタップします。

スクリーンショット 2021 07 10 3.57.34 1 1024x335 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

同じようにトークンアドレスをコピーします。

スクリーンショット 2021 07 10 4.04.56 1024x447 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

そして下のページに戻りtokenBにペーストします。

スクリーンショット 2021 07 10 4.06.17 1024x301 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

続いてLiquidityの欄には11個前の操作でやった「Wei」の数値をコピー&ペーストします。

スクリーンショット 2021 07 10 3.37.59 1 1024x447 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。
スクリーンショット 2021 07 10 4.07.09 1024x309 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

続いて「amountAMin」「amountBMin」は両方とも0と入力します。(ここは解体した後に手に入るトークンの最小量になります。)

スクリーンショット 2021 07 10 4.10.32 1024x446 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

続いてウォレットのアイコンをタップしてアドレスをコピーし、「to(address)」にペーストします。

スクリーンショット 2021 07 10 4.13.00 1024x517 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。
スクリーンショット 2021 07 10 4.15.01 1024x425 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

次にGoogleで[Timestamp]と検索して赤枠のサイトをタップします。

スクリーンショット 2021 07 10 4.18.35 1024x515 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

「現在時刻を取得」をタップします。

スクリーンショット 2021 07 10 4.18.51 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

Timesatampが表示されるのでコピーします。

スクリーンショット 2021 07 10 4.19.15 1024x282 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

再び4つ前の操作(画面)に戻り「Deadline(unit256)」にペーストします。

そして、このままWrite」をタップしても現在時刻が過ぎていれば通らないので、数字を少し増やします。

スクリーンショット 2021 07 10 4.24.37 1024x95 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

↓(途中の数字を適当に増やして未来の時間にします。)

スクリーンショット 2021 07 10 4.24.45 1024x113 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

その後「Write」をタップすると通ります。

スクリーンショット 2021 07 10 4.27.36 1024x441 - 【DeFi】直接コントラクトからLPを解体する方法を徹底解説します。

以上で解体の操作が完了です。

6.まとめ

ページを行ったり来たりするので難しく感じた方もいらっしゃるともいますが、少しずつ覚えていただくと今後他の部分で役に立つかもしれないので実際にやってもらえたらと思います。

文章だとわかりづらい方はYoutube動画でも解説しているのでそちらも見てもらえたらと思います。

参考:【DeFi】直接コントラクトからLPを解体する方法

最後まで読んでいただきありがとうございました。