今回は、直接コントラクトを叩く「直コン」について解説します。直コンの操作方法を知っておくと、トラブル回避ができますし、自分の資金を守れるようになります。
最近で言うと、FantomNetworkのShadowSwapというサイトがラグプルで飛んだのですが、直コン操作を覚えておくと、LPや中に入れた資金を取り出すことがすぐにできます。直コン操作について知らない方もいると思うので、こういった緊急時のための操作手順を画像付きで解説していきたいと思います。
ちなみに、操作手順の解説ではShadowswapを扱いたかったのですが、サイトが飛んで完全に無くなっていたのでSpiritSwapを用いて操作手順を解説していきます。
1コントラクトでLPを作成する
今回は、他と比較してAPRが高かった「BNB-SPIRIT」を例にまずはLPを作成します。(個人的にはSPIRITは持ちたくないのですが、わかりやすそうだったので選んでいます。)
まずはBNBとSPIRITをそれぞれ購入したいので、「BNB-SPIRIT」を見つけて「Details」をタップします。
次に「BNB-SPIRIT LP」をタップします。
上にある「Swap」をタップして、通貨をそれぞれ選びます。(今回はFTMをBNBにスワップします。)通貨を選んだらどれくらいスワップするのか数量を入力します。そして下にある「Swap」ボタンをタップします。
「Confirm Swap」をタップします。
「確認」をタップします。これでBNBの購入が完了です。
次にSPIRITも同じように購入します。SPIRITの購入手順は省きます。BNBとSPIRITを無事購入できたらLPを作成していきます。
まず上にある「Liquidity」をタップして「Add Liquidity」をタップします。
通貨はBNBとSPIRITを選び、数量をそれぞれ入力します。(今回はMAXでいきます。)そして、「ApproveBNB」「ApproveSPIRIT」のボタンをそれぞれタップしていきます。
Approveがそれぞれ完了したら「Supply」ボタンが表示されるのでタップします。
「Confirm Supply」をタップします。
「確認」をタップします。これでLPの作成が完了です!
2 コントラクトでLPをMasterChefにApproveする
MasterChefってなんぞや?という方もいると思うので、まずはMasterChefについて解説します。
MasterChefとは簡単に言うと「どこのプールにどれだけトークンを配布するか」を制御しているものです。そして基本的にはこのMasterChefがイールドファーミングで配られている独自トークンのオーナーになっています。
どういうことかと言うと、例えば私が下の画像の赤枠の「SPIRIT-FTM」に預けているとします。
これをHarvestしたときにMasterChefがSPIRITトークンをMint(鋳造・発行)して配ってくれます。なのでMasterChefはSPIRITトークンを発行できる権限を持っている(オーナーである)ということになります。
ちなみにこのMasterChefを作った人が、MasterChefにオーナー権を譲渡して構築しています。
以上でMasterChefの簡単な説明は終わります。
では早速「2 コントラクトでLPをMasterChefにApproveする」の手順を解説していきます。
まず「BNB-SPIRIT」を探して「Approve」をタップします。
次に右側に出てきた小さい画面にある「アクセス許可の編集」をタップします。
このとき「無制限」「カスタム使用限度」と表示されます。基本的には「無制限」で構わないのですが、「カスタム使用限度」で数量を設定すると、MasterChefに対して設定した数値分しか操作できないように制限をかけることができます。MasterChefに勝手に引っこ抜かれることが怖い方にはおすすめです。
ただ、「カスタム使用限度」を利用する場合、注意点があります。
上の画像の右側の小さい画面に「1.157920….」と表示されています。この数字はプログラム用の数字なのでここには表示されていませんが、単位が「Wei」という単位になっています。
なので、カスタム使用限度使うときに仮に「1」と入力してしまうと、Wei単位では「10000000000000000000」となるので、数量が間違ってしまうことになります。(下記画像参照↓)
このことから「カスタム使用制限」を使うときは、私たちの世界で使っている「1」「2」という単位ではなく、プログラムの世界で使っているWeiという単位に合わせて入力しないといけません。入力するときは数字を18倍にして入力しましょう。
注意点について話したので、話を本題に戻して手順の解説をしていきます。
今回は「無制限」でいきます。「無制限」を選択したら「保存」をタップします。
次に「確認」をタップします。
本当は、コントラクトから直接操作ができればよかったのですが、SPIRIT LPの関数の承認がまだされていなかったのでApproveを手動でやる手順を解説しました。
Approveの操作手順は以上です。
3 コントラクトでMasterChefにDepositする
ここでは、コントラクトからDepositするために必要である「プールID (pid)」と「amount」の2つを調べます。早速その操作手順を解説していきます。(下記画像参照:コントラクト上でpidとamountを入力してwriteをタップするとDepositができる)
まず、SpiritSwapのページ右側にある「More」をタップして「Docs(ドキュメント)」をタップします。
ドキュメントのページが開いたら「Contracts」をタップして「SpiritMasterChefのリンク」をタップします。(MasterChefからプールIDを探していきます。)
「Contract」をタップして「Read Contract」をタップします。
下にスクロールします。すると「8.poolLength」の項目に30unitと表示されているのがわかります。これは、SPIRITのプールが0〜29の計30個ありますよ。といった意味になります。
その上の「7.poolinfo」の空欄に0〜29までの数字を入れて、BNB-SPIRITに該当するプールを探し出します。ここで該当した数字がプールID(pid)になります。
まずは試しに「0」を入力します。すると情報が表示されます。
次に「lpToken」のアドレスリンクをタップしてみます。
すると下の画像のようなページが表示されます。TokenTrackerを見てみると「SpiritSwap Token」と記載されています。これで「0番目のトークンはSpiritSwapトークンを入れるプール」ということがわかりました。
おそらく下の画像のStakingのプールに、この「0番目」が該当すると思われます。
画像をよく見るとSPIRITの真下に「2x」と表示されています。これはマルチプライヤー(重み)が2という意味です。
そして先ほどコントラクトで0番目のプール情報を見たときに「allocPoint(アロケーションポイント(マルチプライヤー/重みの元))」が200になっていたので、「1x」の場合はallocPointがおそらく100になるであろう。ということが考えられます。
この仕組みを頭に入れた上で「BNB-SPIRIT LP」のマルチプライヤーを見てみると「0.25x」となっています。なのでコントラクトでプールを探したときに「allocPoint」が「25」になるということがわかると思います。
これに加えてLPのコントラクトを覚えておくと、後々pidを見つけやすくなります。ということで、先ほど作ったLPのコントラクトを一旦確認したいと思います。
まずは右上にMetaMaskのアイコンをタップして「Add Liquidity」をタップします。
右上の「↗︎」をタップします。
するとページが移動して、自分が作ったLPが表示されるので、先ほど作ったLP「SpiritLPs」をタップします。
表示されたページにコントラクトが記載されています。コントラクトの末尾「676d」を覚えておくと、後々pidを見つけやすくなります。
次に、MasterChefのpidを入力するページを開きます。(忘れた方は3の項目の冒頭を再度確認してみてください。)
まずは試しに「1」を入力します。するとアドレスも末尾も違いますし、allocPoint(アロケーションポイント)は600となっているので、探したいpidではないことがわかります。
続いて「2」を入力します。これも違います。
こんな感じで、どんどん番号を入力して確認していきます。
すると「22」を入力したところでトークンアドレスが「676d」で終わっていて、allocPoint(アロケーションポイント)が25になっているpidが見つかりました。
ということで、これが探したいpidだということがわかりました。
続いてamount(数量)を調べます。amountは先ほど5個前の画像(操作)で見つけたSpiritLPsの左側に記載されていました。
「0.35….」から始まっているのがamountになります。ここで注意しないといけないのが、amountに入力するときは単位を「Wei」に変えなければいけません。
なので、18倍にして入力してください。
続いて、pid(22)とamount(354..)を入力していきます。
まず、MasterChefのページを開きます。(忘れた方は3の項目の冒頭を再度確認してみてください。)
ページを開いたら「Contract」をタップして「Write Contract」をタップします。
そしてまずはウォレットを接続します。ウォレットはMetaMaskしか対応していないので注意してください。
「Connect to Web3」をタップします。
「MetaMask」をタップします。
接続するウォレットを選択した後「接続」をタップします。
再度「MetaMask」をタップします。
「OK」をタップします。これでウォレットの接続が完了しました。
続いて、少し下にスクロールすると「2.deposit」と表示されている欄があるので、そこに「22」「354….」を入力して、「Write」をタップします。
「確認」をタップします。このときガス代が通常通り表示されていれば通りますが、エラー表示が出ているときは通らないので操作をやり直してみてください。
これでDepositができました。一応、ちゃんと操作が反映されているか確認してみます。確認するときは「Veiw your transaction」をタップします。
SpiritLPsのところを見てみるとトランザクションが通ったことがわかります。
他にもSpiritSwapの「BNB-SPIRIT LP」を確認してみるとちゃんとステークされている表示になっていることが確認できました。
以上で「3.コントラクトからMasterChefにDepositする」の操作が完了しました。
4 コントラクトでMasterChefからWithdrawする
正直、ここの項目が直コンで一番重要なところです。
直コン操作をするときは、ほとんどがラグプルから抜けるときなのですが、その際はWithdrawを使います。
そしてWithdrawには「Emergency Withdraw」と「Withdraw」の2種類があります。
この2つの何が違うかというと、EARNEDのところで稼いでいる分で、まだHarvest(収穫)していないトークンをもらえるか、もらえないかが違います。
もらいたい場合は普通に「Withdraw」で大丈夫です。もらわなくてもいいから早く抜きたいという場合は「Emergency Withdraw」で操作します。
では早速、操作の手順を解説していきます。
まずは簡単な「Emergency Withdraw」から解説します。
3の項目でpidとamountを入力したページを開きます。(SpiritMasterChef→Contract→WriteContractの順でタップ)
そして、下にスクロールすると4番目に「4.emergencyWithdraw」と表示されているので、そこの空欄にプールID(pid)を入力して「Write」ボタンをタップします。
「確認」をタップします。これで操作完了です。
ちゃんとできているかSpiritSwapの「BNB-SPIRIT LP」を確認します。
表示が0に変わったので「Emergency Withdraw」がちゃんとできていることがわかりました。
ラグプルと戦うときはスピード勝負なので、正直「Emergency Withdraw」の方を使う可能性が高いと思います。プールID(pid)を入れるだけで残高など関係なく抜き出してくれるので緊急時には便利です。
続いて「Withdraw」の操作手順を解説していきます。
「Withdraw」をするには先ほど開いたMasterChefのページを下にスクロールして「12.withdraw」の空欄に「pid」と「amount」を入力して「Write」をタップします。(すでに「pid」と「amount」は先ほどの手順の途中でわかっているので、ここではその手順の説明を省きます。)
「確認」をタップします。これで資金の引き抜きが完了しました。
「Withdraw」をする場合は、今現在のamount(数量)を調べないといけないので、緊急時に数量を調べる時間は正直もったいないかなとは思います。
5コントラクトでLPを解体する
SpiritSwapに戻り、左側にある「Trade」のページを開き「Liquidity」をタップして「Remove」をタップします。
その後、どれくらい解体するのか数量を選択して「Approve」をタップして、右側に表示される「確認」をタップします。これでLPの解体操作が完了です。ここの操作手順はいつも通りなので、簡単に解説しました。
ちなみにですが、今のところラグプルするケースで多いのがBinanceSmartChainだとPancakeSwapのDEXを使っているパターンや、FantomNetworkだとSpookySwapのDEXを使っている場合が多いので、ユーザーインターフェース上でLPを解体すればいいのですが、DEXもそこが作っている場合だとそのDEX上でしか解体ができません。
どういうことかと言うと例えば今回ShadowSwapがラグりましたが、ShadowSwapがDEXも提供している場合(SHADOW LPみたいなものを提供している場合)には、ShadowSwap上のDEXでしか解体ができません。
そうなると、この5番目の操作を余儀なくさせられることになります。ここについては、また別の記事やYoutube動画で解説します。
6.まとめ
最近FTMやPolygonが充実してきたおかげで直コンの講座が非常にやりやすくなったプラス、ガス代もやすいので、今後も何個か扱っていければと思っています。
直コン操作はいざという時に必要になるので、トラブルが起きたときに見様見真似でやれば良いやと考えるのではなく、今のうちに一通りやり方を覚えておいて準備しておくことが大事です。
初めて直コン操作をする方にとっては難しいかもしれませんが、自分の資金を無駄にしないためにも、ぜひ読んでいただけたらと思います。
ブログだと分かりづらいという方は3MIKANのYoutube動画でも直コン講座はいくつか扱っているので参考にしてください。
ちなみに今回扱った内容と同じYoutube動画は下のリンクから見れますので、動画の方が良いという方はチェックしてみてください。
【DeFi】ShadowSwapのラグプルを回避できるスキル!今や知ってて当然の直コンを再度解説します。
最後まで読んでいただき、ありがとうございました。