今回は、BSC(バイナンス スマートチェーン)でコントラクトを直接操作する方法について解説していきます。
コントラクトを直接操作するというとわかりにくいですが、仮想通貨の元になっているブロックチェーンでは全てのトランザクションがみれるようになっているので、サイトを開かなくとも直接ファームから資金を抜いたりHarvestする操作ができます。
この一連の操作をDeFiをやってる人は「直コン(コントラクトを直接叩く)」と言います。直コンを覚えておくと3つ良いことがあるので、まずはそこについて解説します。
※この記事は自分で実践しながら読むかじっくり時間を取って読むことをおすすめします。なかなか重たい内容となります。
直コンを覚えておくと良い3つの理由
直コンを覚えておくといい理由3つは以下になります。
それぞれについて解説していきます。
トランザクションについての理解が深まる
仮想通貨では全ての取引(送金・交換など)はトランザクションという形でブロックチェーンに記録されていきます。
ブロックチェーンはこういった取引の履歴がブロックとなり繋がっている(チェーン)のでブロックチェーンと呼ばれていると思っていいです。
この取引の履歴1つ1つがトランザクションであり、トランザクションの内訳は誰でも確認することができます。
送金しているのか、通貨を交換しているのか(スワップ)、ファームの収穫をしているのか…などなど基本的に全て把握することができます。
トラブルに対処できるようになる
直コンを覚えると直接コントラクトに関する操作を行うことができるようになるので、普段はサイト上からしか行えなかった操作をScan上で行うことができます。
- ファームに預けている資金のwithdraw
- ファームへのdeposit
- スワップ(通貨の交換)
- LPを組む
- LPを解除する
- 流動性があるかないかの確認
これらの操作を行うことができます。
ですので、Rugpull(ラグプル)などでサイトにアクセスできなくなったりした場合にも、コントラクトから操作して資金を取り返すことができます。
同じ理由で流動性状況なども確認できるので、開発側からのアナウンスよりも早くスワップできたりファームを開始できたりします。
例えば「17:00から公開してファームができます」というアナウンスがあったとします。このときブロックチェーン側では準備が16:55くらいには終わっている場合があります。その場合に先にプールに資金を入れておくと、周りのユーザーが始める前にファーミングができるという裏技があります。
このように直コンを実践すると他のユーザーよりも早くスタートダッシュができるのでお得です。
たまにファームが新しく始まるときにサイト上ではstakeボタンが押せないにも関わらず、なぜかTVL(トータルバリューロック)が増えているのは直コンによるものです。
bot制作・Dapp制作の参考になる
最近はDeFiに関するbotも増えてきて、新しいトークンをとにかく早く買うbotなどが登場してきています。
こういったbotは、いわゆる手動でやる直コンの操作を自動でやってくれてるようなものです。
プログラム上ではコントラクト上の関数を実行することができるので、botはそれを自動的に行なっているだけで、操作方法自体は手動の直コンとほとんど変わりません。
つまり、bot制作などにおいてコントラクトを直接操作できる知識をつけることは重要なことです。
直コン(コントラクトの直接操作)の操作方法例
今回は、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ステップ)
- 【Approve】直コンでMasterChefにLPの操作を承認する
- 【Deposit】直コンでMasterChefにLPを預け入れる
- 【Withdraw】直コンでMasterChefからLPを引き出す
①②が預け入れる(ファームに参加する)ための操作で、③は引き出す操作となります。
LPを作成すること自体も直コンでできますが、まずはこの3ステップをマスターしましょう。
上記の流れをPancakeSwapなどで練習すれば比較的リスクも低く、ガス代も少なく済ますことができます。(ETHチェーンだとガス代が大変です)
Withdrawに関しては2種類の引き出し方があるので両方解説していきます。
それでは実際にこの①〜③までの手順について解説します。
①【Approve】直コンでMasterChefにLPの操作を承認する
ファームに資金を預ける際、あなたが持っているLPを動かすのは「MasterChef」になります。シンプルにいうと「あなたではない」ということです。
イメージをお伝えすると、投資の際にあなたが利用している銀行の「銀行員」があなたの口座資金を動かすようなイメージです。
その場合「あなたの承認」が必要になります。当たり前ですよね。勝手に動かされては困ります。
最初はこの「あなたの承認」を意味する『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】直コンでMasterChefにLPを預け入れる
この預け入れる処理が終われば、Stakeできている状態になります。つまりファームに参加できている状態です。
まずは、Master Chefのページを開きます。先ほど「Approve」の解説でMasterChefのアドレスをコピーした時と同じページになります。
開き方がわからない方はお手数ですが「コントラクトを確認する」の手順の途中で解説しているので、さかのぼって探してください。
MasterChefのページを開いたら「Write Contract」をタップします。
下にスクロールすると「2.deposit」の欄があります。
ここの「pid」はpool ID(プールID)という意味で、pool ID(数字)を自分で調べて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」をタップし「Write contract」をタップします。そしてValueのところに表示された数量をコピーします。
続いて、BscScanのMasterChefのページに再度戻ります。
ページを開いたら「pid」のところに先ほど判明した「2」を入力し、「amount」のところにたった今コピーした数量を貼り付けます。そして青い「Write」ボタンをタップします。
すると右側に小さい画面が表示されるので「確認」をタップします。これでstakeの完了です!
ちなみに「amount」に入力した数量が間違っていたりすると、ガス代が高く表示されたり、確認ボタンが押せなくなったりするので気をつけてください。
試しに、ちゃんとstakeができたかPancakeSwapを開いて確認してみます。
トップページの左側にある「Farm」をタップして「staked only」をタップします。
するとstakeされているLPペアが表示されます。下の画像を見ると分かるとおり、しっかりstakeができていました。
そして、これまでの手順を振り返って分かるとおり、Pancakeswap上からは何もせずにPoolに資金を入れることができました。これが「直コン」です。
続いて、プールから引き出す際の操作方法を解説します。
③【Withdraw】直コンでMasterChefからLPを引き出す
引き出す方法は2つあります。一つは「Withdraw」二つ目は「Emergency Withdraw(緊急引き出し)」です。
この2つのやり方をそれぞれ解説します。まずは「Withdraw」から解説します。
直コンのWithdrawのやり方
まずBscScanでMasterChaefのページを開きます。開いたら「Write contract」をタップします。
一番下までスクロールすると「15.Withdraw」と表示されています。
「pid」にはBUSD-BNBのプールIDである「2」を入力します。
「amount」にはいくら引き出すのか数量を入力します。今回は、先ほどの「370922…」の数量を入力します。入力したら「Write」をタップします。
「確認」をタップします。
するとこのような表示に変わります。
このWithdrawの方法でやるとCAKEのHarvest(収穫)も自動でできます。
Withdrawが正常にできたか、試しにPancakeswapで確認してみると「Staked only」の欄からBUSD-BNBのプールが消えていました。これでWithdrawがちゃんとできていることが分かりました。
続いて「emergency Withdraw」のやり方を解説します。
直コンのEmergency Withdrawのやり方
このやり方はHarvest(収穫)ができなくなるやり方です。「Emergency」とあるように緊急脱出するようなものだと思ってください。
まず、同じようにBscScanでMasterChaefのページを開きます。開いたら「Write contract」をタップします。
下にスクロールすると「4.emergency Withdraw」とあるのでそこの空欄にBUSD-BNBのプールIDである「2」を入力して「Write」をタップします。
なお、数量は自動で全額引き出されます。なので、緊急性があるときなどにこの「Emergency Withdraw」を利用するといいです。
特にラグプルなどでサイトが飛び、いますぐに資金を引き抜いてくるかもしれない場合に使ってください。
ラグプルの場合にはそのファームの独自トークンもゴミ価格になっていることが多いのでEmergencyWithdrawで十分でしょう。
「Write」をタップしたら右側に小さい画面が表示されるので「確認」をタップします。
以上で「emergency Withdraw」の完了です。
最後にラグプルの場合の操作方法について解説します。
ちなみにラグプルとは、ラグ(敷物)を突然引っ張られると転倒するということが転じて、突然の事件・事故によりサービスがクラッシュするということを意味します。
ラグプル(Rugpull)の場合の操作方法
ラグプル(Rugpull)になった場合は「Revoke」も一緒にやっておきましょう。
まず、「BSC Revoke」でググります。検索したら「Smart contract allowance checker」をタップします。
するとこのような画面が表示されるので、「connect」をタップします。
「次へ」をタップします。
すると、どこで何を許可したのかという履歴が一覧で表示されます。
Revokeしたいものを選んで、右側にある「Revoke」ボタンをタップします。
「確認」をタップします。
この操作を済ませておかないと、後から裏から資金を抜くことができるので注意が必要です。
以上で操作は完了になります。
そのほかの直コン操作方法
この記事では「Approve」「Deposit」「Withdraw」を紹介しましたが、LPの作成・解体やスワップも同様に直コンで操作することができます。
多少複雑なので、Youtubeで全て解説しているものを参考にしてください。
直コンのまとめ
直コンは慣れないと手間取ると思うので、最初はPancakeswapなどの有名なプールで練習してから実際に新しいファームで実践してみる。という流れがおすすめです。
ラグプルやファームのフライングができるという金銭的なメリットだけでなく、「コントラクト」に詳しくなるということはブロックチェーン自体に詳しくなることに繋がります。
つまり、直コンができるようになると他の人よりも頭ひとつ抜けて仮想通貨の知識や理解が深まります。知識として今回の記事の内容を知っておくのは役に立つのではないかと思います。
長くなりましたが、最後まで読んでいただきありがとうございました!!