仮想通貨

【DeFi】Rugpull(ラグプル)対策直コン講座!Approve/Deposit/Withdrawを操作する

今回は、BSC(バイナンス スマートチェーン)でコントラクトを直接叩く方法について解説していきます。

コントラクトを直接叩くというとわかりにくいかもしれませんが、どういうことかというと、「BscScan」というサイトでは全てのトランザクションがみれるのですが、このサイトを利用して直接ファームから資金を抜いたりHarvestする操作ができます。

これを「直コン」といい、この一連の操作をDeFiをやってる人なんかは「直コン(コントラクトを直接叩く)」と言います。

この直コンを覚えておくと2つ良いことがあるのですが、そこについてまずは解説します。

直コンを覚えておくと良い2つの理由

ブロックチェーンの中でどういうトランザクションが起こっている分かるようになる

直コンを覚えることで、自分が何をしているのか、細かく理解できるようになります。

これについては後ほど詳しく解説していきます。

トラブルがあったときに資金を取り返せやすくなる

Rugpull(ラグプル)というのですが、サイトが止められたり、運営者が悪意があって資金を引き抜こうとしたときに、こちらが先に資金を取り返せることができます。

同様に運営側がサイトを停止させようがさせまいが、こちらは直接ファームをいじれるのでフライングしてファーミングができることがたまにあります。

例えば「17:00から公開してファームができます」というアナウンスがあったとします。このときブロックチェーンの準備が16:55くらいには終わっている場合があります。なので先にそのプールに資金を入れておくと、周りのユーザーが始める前にファーミングができるという裏技があります。

こういったことを実践すると他のユーザーよりも早くスタートダッシュができるので、とてもお得です。

見たことがある人もいるかもしれませんが、たまにファームが新しく始まるときにユーザーインターフェイス上ではstakeボタンが押せないにも関わらず、なぜかTVL(トータルバリューロックド)が増えていることがあります。

これは、たった今解説した直コンをする人がいるからです。直コンを覚えておけば、自分の資金を守ることもできますし、いろんな理解に役立つと思うので、今回はより詳しく画像付きで直コンについて解説していきます。

直コンの操作方法

今回は、Pancake swapを用いて画像付きで解説します。

例として、BUSD-BNBに入れて引き出す、という操作をやっていきます。

いきなり直コンの操作方法をすると「今この操作はなんのためにしているのか?」「ここをタップして大丈夫なの?本当に安全?」などと、今自分が何をしているのか訳がわからなくなるので、まずはLPの作成手順を解説したのち、各用語や抑えておきたい項目について解説していきます。

そしてそのあと直コンの操作について解説します。

ちなみに3MIKANのYoutube動画でも直コンについて解説しているので、動画の方が理解しやすいという方はぜひそちらも見てみてください。

では早速、LP作成手順から解説していきます。

まずはLPを作成する

まずはLPを作ります。Pancake swapを開いて左上にある「Trade」をタップして「Liquidity」をタップします。すると「Add Liquidity」というボタンが表示されるので、そのボタンをタップします。

次に「Select a currency」をタップして通過を選択します。そして数量を入力します。数量はどちらか一方を入力すればもう一方は自動で計算され表示されます。

数量を確認して問題なければ「Supply」をタップします。

「Confirm supply」をタップします。

右側に表示された画面の「確認」をタップします。

これでBUSD-BNBのLPが作れました。

続いてBUSD-BNBのファームに預け入れます。

Pancake swapを開いて左上にある「Farm」をタップします。Farmの画面を開いたらBUSD-BNBのペアを探してタップします。

「BUSD-BNB」をタップすると下の画像のように表示されます。表示されたらコントラクトを見ていきます。

今回の場合には、小さく「View Contract」と表示されているのでそこをタップすればすぐにLPペアのコントラクトを確認できるのですが、「View Contract」と表示されていない場合もあります。

今回は、コントラクトが表示されなかった場合の操作方法について解説します。

コントラクトを確認する

コントラクトが表示されなかった場合、まずはPancake Swapの画面左側にある「Pools」をタップします。

次に単体プールのガバナンストークンを見つけて「Details」をタップします。

するとこのように詳細が表示されます。「View project site」をタップするとコントラクトを確認できます。

もしくは、単体プールではなく画面左下にあるドルマークが表示されているところをタップします。

すると新しいタブでページが開き、上部にトークンアドレスが表示されます。ここを一部コピーします。

次にBscScan(ビーエスシースキャン)というBSC(バイナンス スマートチェーン)上にあるコントラクトが全て閲覧できるサイトを開きます。

BcScanを開いたら、検索窓に先ほどコピーしたトークンアドレスを貼り付けて検索ボタンをタップします。

するとこのようにトークンの詳細が表示されます。右下をよく見ると「Pancakeswap Token(これはパンケーキスワップのトークンです)」と記載してありますね。

これを確認したのち、ページ下にある「Contract」をタップします。

「Contract」をタップしたら、下に少しだけスクロールして「Read Contract」をタップします。これからCAKEのオーナーを見ていきます。

「9.getOwner」に記載されているオーナーをタップします。すると新しいタブでページが開きます。

新しく開いたページを見てみると、下の方にあるContract Nameのところに「Master Chef(マスターシェフ)」と記載されいます。

このMasterChef(マスターシェフ)が、Pancakeswapのプール・ファーム・CAKEのリワードを管理していますよ。という記載になります。

具体的にMasterChefがどんな働きをしているかというと、「この人はどこのプールに入れていて、Rewardがいくらあって、まだ引き出しがない分がこれくらいあって、、」というのを全て加味して計算して管理してくれています。以上がコントラクトの確認方法になります。

続いて、いよいよ直コンの操作方法について解説します。タイトルにもあるように、BscScanからApprove/Deposit/Withdrawを直接コントラクトで操作する方法を解説します。

直コンの操作方法3手順

まず全体の簡単な流れとしては、

①LPを作りApproveする
(Master ChefにLPを動かしていいですよ。という権限をあげる作業)

②Depositする
(これもMaster Chef宛にDepositする)

これで、Stakeが完了となります。

そして、引き出す際の手順ですが、これも簡単にまとめると

③Withdrawボタンをタップして完了

となります。

ちなみにもう一つ方法があります。それは、

③emergency Withdrawです。

仮想通貨の情報発信をしているほとんどの方がこの方法を紹介しているのですが、普通にWithdrawをするときと何が違うのかというと、その時のトークンのRewardになります。

HarvestできるRewardが手に入るか入らないかという違いがあります。

実際にこの①〜③までの手順について解説します。

①LPを作りApproveする

最初の方でBUSD-BNBのLP作成は済んでいるので、ここではBscScanからApproveする方法について画像付きで解説します。

まずはBscScanでBUSD-BNBのコントラクト(下記画面)を表示します。

表示したら「Write Contract」をタップしたのち、「🔴Connect to web3」をタップします。

続いて下の画像のように表示が出るので、「MetaMask」をタップして自分のウォレットをコネクトしていきます。

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

すると下記画面のように「🟢Connected」と表示されます。

「1.Approve」の欄を見てみると「spender(address)」「value(unit256)」と表示されています。この2箇所を入力するとApproveが完了です。ではこの2箇所に何を何を入力すれば良いかと言うと、

「spender(誰に許可するのか)」にはMasterChefのシェフのアドレスを入力して、

「value(いくら分許可するのか)」には数量(自分が持っているトークン数)を入力します。数量を指定すると、指定した以上のトークンを動かそうとした時に動かせないようになります。

実は、普段はこの「value」の欄の数量は大きめに設定されていて、ほぼ無制限の状態になっています。ちゃんとこの欄に数量を指定して入力することで、悪意がある人から資金を抜かれたり、自分が使おうとしている以上の資金がうっかり抜かれるということが防げます。

ここは、できればちゃんと設定することをお勧めします。

そしてこの「value」には、自分のトークン数の価格を入力する必要があるのですが、そもそも今自分がどれくらいトークンを持っているのかわからないと思うので、確認します。

まずは少しだけ上にスクロールして「Read contract」をタップします。

下の方にスクロールすると「BalanceOf」という項目があるので。そこの空欄に自分のウォレットアドレスを入力します。

ウォレットアドレスを入力すると自動でバランスが表示されます。

この上の画像で言うと青文字部分の370922……のところが自分が今持っているトークン数です。この数字だけ見るととてもトークン数があるように見えますが、そもそも単位がとても小さいので数字が大きくなっています。

続いて詳細を見たいので、この表示されたバランスの青文字部分をタップします。

するとこのようなページが表示されます。右側が単位で、左がその値です。先ほど表示されていた370922…..の数値の単位は「Wei(10-18)」の単位に当てはめられて表示されていることがわかります。

さらに下の方を見るとBNB(1)単位表示されている数値があります。左の数値を見ると0.037092…とあります。これがそもそもの「トークン数が1」のときの数値になります。1換算した場合の数値が0.037092…ということです。ちなみにPancakeswap上ではこの数値(0.037092…)がデフォルトで表示されます。

このように、ぱっと見だと「Wei(10-18)」の単位の方が数値がとても大きく見えてしまうので、判別できるようにしておきましょう。

また、先ほど解説した「🟢connected」の「value」の空白に「1」と入力すると「Wei(10-18)」の単位での計算でトークン数を指定することになってしまうので、めちゃくちゃ小さいLPのトークン数になってしまいます。ここは気をつけてください。

ということで、操作手順の続きを解説します。何度も言いますが単位だけ注意してください。

とりあえず今回は全部のトークンを入れたいと思います。なので、先ほど確認した「Wei(10-18)」の単位で表示されている370922….をコピーします。

続いてコピーした数値を「🟢connected」の「value」の空白に貼り付けます。

「コントラクトを確認する」の手順の途中で表示したMasterChefのアドレスをコピーします。どのページかわからない方はお手数ですが、さかのぼって確認してください。

この左上にあるアドレスをコピーします。

コピーしたら再び「🟢Connected」の表示画面に戻り「spender(address)」の空白にアドレスを貼り付けます。

貼り付けたら青いボタンの「Write」をタップしてください。

右側に表示された画面の「確認」をタップします。

これでまずは「Approve」操作が完了です!

続いてDepositです。

②Depositする

Master Chefのページを開きます。(先ほど「Approve」の解説でMasterChefのアドレスをコピーした時と同じページ。開き方がわからない方はお手数ですが「コントラクトを確認する」の手順の途中で解説しているので、さかのぼって探してください。)

MasterChefのページを開いたら「Write Contract」をタップします。

下にスクロールすると「2.deposit」の欄があります。ここの「pid」はpool ID(プールID)という意味で、pool ID(数字)を自分で調べてIDを入力します。そして「amount」には「pid」に入力したプールにいくらdepositするのか「数量」を指定して入力しなければなりません。

ということで、先に「pid」に入力するプールIDを調べます。まずは上にスクロールして「Read Contract」をタップします。

下にスクロールすると「9.poolInfo」と表示されているのでここからプールIDを調べます。

ちなみに「10.poolLength」にはpoolの長さが表示されています。ここには「131」と表示されていますが、これは「poolが131個ありますよ」という意味です。この131個のpoolの中から自分が希望するpoolを選びます。(今回の場合はBUSD-BNBのプールです)

前述したとおり、今回はBUSD-BNBのプールなので、このプール探すために「input」の欄に0から130まで順に入力していきます。※根気のいる作業になります。

0と入力したら下にある「Query」のボタンをタップします。

すると、0番目のプールの詳細が表示されます。詳細部分を見ると「lpToken」には何のLPであるのか確認できるURLが記載されています。その下の「allocPoint(アロケーションポイント)」にはCAKEの報酬割当が表示されています。

続いて、0番が何のプールであるのか確認したいので「lpToken」に表示されたURLをタップします。

表示されたプールの詳細を見ると「CAKE単体」のプールであることがわかります。なのでこのプールは今回見つけたいBUSD-BNBのプールではないということがわかりました。

ということで、先ほどまで開いていたBscScanのページに戻り「9.deposit」の欄に「1」を入力して「Query」をタップします。そして詳細が表示されたら「lpToken」のURLをタップします。

URLをタップして詳細を見てみると、赤線のところに表示されているとおり、Pancakeswap上にある「何かのLP(ペアの名前までは不明)」であることは確認できました。

何のペアのLPか確認したいので下にスクロールしてコントラクトを確認します。(このコントラクトを確認する方法は、前半の「コントラクトを確認する」の項目で解説しましたが、一応手順をもう一度画像付きで説明します。)

まずは「Contract」をタップして「Read contract」をタップします。

下までスクロールするとLPのそれぞれのペアのトークン詳細が確認できるページURLが表示されているので両方ともタップしてそれぞれ確認します。

「15.Token0」を確認すると「CAKE」であることがわかりました。この時点でBUSD-BNBのペアではないことも分かりました。

ということで再び、先ほどまで開いていたBscScanのページに戻り「9.deposit」の欄に、今度は「2」を入力して「Query」をタップします。そして詳細が表示されたら「lpToken」のURLをタップします。

ページが表示されたら、Pancakeswap上にある「何かのLP(ペアの名前までは不明)」であることが確認できました。

続いてコントラクトを確認していきます。下に少しスクロールして「Contract」をタップし「Read contract」をタップします。

そして、一番下までスクロールすると、LPのそれぞれのペアのトークン詳細が確認できるページURLが表示されているので両方ともタップしてそれぞれ確認します。

「15.Token0」のURLをタップして詳細を確認すると「BNB」のトークンであることが分かりました!

続いて「16.Token1」のURLをタップして詳細を確認すると「BUSD」のトークンであることが分かりました!!

ということで、0〜130番中「2番」がBUSD-BNBのプールであることが分かりました!!!探していたプールが早くも見つかりました。

続いて「amount」に入力する数量を調べます。これは、6つ前の画像と同じページ(LP tokenの詳細ページ)を開きます。

下に少しスクロールして「Contract」をタップし「Wirte contract」をタップします。そしてValueのところに表示された数量をコピーします。

続いて、Master Chefのページに再度戻ります。(「②Depositする」の上から2枚目の画像と同じページを開きます。)

ページを開いたら「pid」のところに先ほど判明した「2」を入力し、「amount」のところにたった今コピーした数量を貼り付けます。そして青い「Wirte」ボタンをタップします。

すると右側に小さい画面が表示されるので「確認」をタップします。これでstakeの完了です!

ちなみに「amount」に入力した数量が間違っていたりすると、ガス代が高く表示されたり、確認ボタンが押せなくなったりするので気をつけてください。

試しに、ちゃんとstakeができたかPancakeswapを開いて確認してみます。

トップページの左側にある「Farm」をタップして「staked only」をタップします。

するとstakeされているLPペアが表示されます。下の画像を見ると分かるとおり、しっかりstakeができていました。

そして、これまでの手順を振り返って分かるとおり、Pancakeswap上からは何もせずにPoolに資金を入れることができました。これが「直コン」です。

続いて、プールから引き出す際の操作方法を解説します。

③Withdrawする

引き出す方法は2つあります。一つは「Withdraw」二つ目は「emergency Withdraw」です。

この2つのやり方をそれぞれ解説します。

まずは「Withdraw」から解説します。

Withdrawのやり方

まずBscScanでMasterChaefのページを開きます。開いたら「Wirte contract」をタップします。

一番下までスクロールすると「15.Withdraw」と表示されています。

「pid」にはBUSD-BNBのプールIDである「2」を入力します。

「amount」にはいくら引き出すのか数量を入力します。今回は、先ほどの「370922…」の数量を入力します。入力したら「Wirte」をタップします。

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

するとこのような表示に変わります。(ちなみに、このWithdrawの方法でやるとCAKEのHarvest(収穫)もできます。)

Withdrawが正常にできたか、試しにPancakeswapで確認してみると「Staked only」の欄からBUSD-BNBのプールが消えていました。これでWithdrawがちゃんとできていることが分かりました。

続いて「emergency Withdraw」のやり方を解説します。

emergency Withdrawのやり方

このやり方はHarvest(収穫)を無視したやり方です。

まず、同じようにBscScanでMasterChaefのページを開きます。開いたら「Wirte contract」をタップします。

下にスクロールすると「4.emergency Withdraw」とあるのでそこの空欄にBUSD-BNBのプールIDである「2」を入力して「Wirte」をタップします。

なお、数量は自動で全額引き出されます。なので、緊急性があるときなどにこの「emergency Withdraw」を利用するといいです。

特にRugpullなどでサイトが飛び、いますぐに資金を引き抜いてくるかもしれない場合に使ってください。

「Write」をタップしたら右側に小さい画面が表示されるので「確認」をタップします。

以上で「emergency Withdraw」の完了です。

最後にRugpullの場合の操作方法について解説します。

ちなみにRugpullとは、ラグ(敷物)を突然引っ張られると転倒するということが転じて、突然の事件・事故によりサービスがクラッシュするということを意味します。

Rugpullの場合の操作方法

Rugpullになった場合は「Revoke」をする必要があります。

まず、「BSC Revoke」でググります。検索したら「Smart contract allowance checker」をタップします。

するとこのような画面が表示されるので、「connect」をタップします。

「次へ」をタップします。

すると、どこで何を許可したのかという履歴が一覧で表示されます。

Revorkeしたいものを選んで、右側にある「Revorke」ボタンをタップします。

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

この操作を済ませておかないと、後から裏から資金を抜くことができるので注意が必要です。

以上で操作は完了になります。

まとめ

正直、これは慣れないと手間取ると思うので、最初はPancakeswapなどの有名なプールで練習してみて、実際に次の日から新しいファームで実践してみる。というのをやってみるといいのではないかと思います。

Rugpullやイールドファーミングのフライングなど、そういったもの以前に「コントラクト」にそもそも詳しくなるということは、ブロックチェーン自体に詳しくなるということなので、他の人よりも頭ひとつ抜けて仮想通貨の知識や理解が深まります。

なので、知識として今回の記事の内容を知っておくのは役に立つのではないかと思います。

長くなりましたが、最後まで読んでいただきありがとうございました!!

ABOUT ME
みかん
みかん
みかん(3mikan)です。 トークン/DEX開発経験があり、主に仮想通貨・DeFiについて情報発信しています! お仕事のご依頼やご相談はテレグラムの個人DMから、ご質問がある場合にはテレグラムのグループにてお願いします。