見出し画像

Revoke(承認の取り消し)やってみた

おはようございます。😊

今日はいろいろあってRevoke(承認の取り消し)をしようと思いました。

DeFi歴5か月にもなるのに、安全のために必要な防御=Revokeのことをほとんど気にしないでDeFiの世界で生きてきました。このnoteでも1回も説明していませんでした。

僕がそもそもRevokeが必要になりそうな怪しいプロジェクトには近づかない主義だったからということもあります。しかし、Revokeは全てのDeFi民に必須の知識なので、ここでしっかりと覚えておきましょう。

やり方

僕はこちらのサイトを参考にしました。

やってみた

BSCScanでやってみました。

画像2

いつものBSCScanの画面の右の方、「Misc」というプルダウンリストがあるので、そちらの「Token Approvals」をクリックします。

画像1

入力欄に自分のウォレットのアドレスを入力します。

画像4

リストが出てくるので、左上の「Connect to Web3」をクリックします。メタマスクの確認がポップアップ……されません、画面がグレーになって先に進みません。

残念ながら何かの相性が悪いのかもしれません。Beta版だから文句も言わずに諦めます。参考までに僕の環境はWindows+Chromeです。

DeBank

次にDeBank(debank.com)を試してみました。

画像4

DeBankのウェブサイトに行き、左の「Profile」右の「Approval」、「BSC」と順にクリックするとリストが現れます。

左側にトークン、真ん中の欄にプロジェクト/コントラクトが表示されます。

画像5

目的のものはこれだと思うのですが、なんだか怪しげなものがいくつも並んでいます……どうしようかな……。とりあえずRabbitを「Decline」(却下)します。メタマスクのポップアップが現れ、手続きに$0.23かかることが表示されます。確認します。

画像6

BSCScanで確認します。無事Revokeされました。

目的は完了なのですが、このついでに1つ1つチェックです。わかっているのはいいですが、「Unknown project」というのは素性を確かめて、怪しかったり使わないものであったら消していきます。

1つ目のUnknown projectのコントラクトをBSCScanで見てみます。

画像7

「Contract」をクリックすると、Contract Nameが見れました。Hase……Decline(削除)。

次のUnknown project。

画像8

コントラクトネーム「Pool」……ちょっとわかりません。Fromの欄のアドレスはほとんど一緒、最終利用が43日前……1つTxの内容を見ると……DIAMOND関係なので、Iron関係だとするとまあいいかということで、放置。

次、コントラクトネームがValueLiquidRouter、ValueDefiぽいから削除。知らんけど。

次、コントラクトネームZapProxy、まったくわからない。Txの内容はVenusとACryptoSが多い、一応放置。

次、コントラクトネームSwap、わからない。Txの内容はValueDefiぽいから削除。

次、明らかにこの中で一番怪しい「Not open source」、いろいろ見ても何かわからないので、とりあえず削除。

画像9

これでBUSDを扱うコントラクトは全て把握できているものとなり、最低限になりました。ホッと安心です。😊

Revokeの判断基準⇒よくわからなければ全てRevoke

今回、僕は中身をひとつひとつ確認しながらRevokeをしていきました。

やってみるとわかると思いますが、何のコントラクトなんだかよくわからないものがたくさんあると思います。僕はそもそも怪しいところには立ち入りもしていないので、少ない方だと思うんですが、それでもすごくたくさんの量のApproveがありました。

考えるのがめんどくさければ、「よくわからないものは全てRevoke」というのもひとつの考えだと思います。一度Revokeしても必要なら再度Approveすればいいだけなので、そうすればより安全です。手数料は少しかかりますが。

ただし、ゴミトークンとか、ウォレットに無いトークンはRevokeする必要はありません。ウォレットの中に無いものは盗まれませんから、手数料をかけるのがもったいないです。盗まれたら困るトークンのみ気を配れば大丈夫です。

また、いらないからといって取引所で売るのは、危険がともなうことがあるのでご注意を。

あと、あまりにもRevokeする対象が多い人は、新規ウォレットへの引っ越しを考えた方が手数料的にはお得になるかもしれません。

そもそもApprove(承認)とは

「ねえねえ岡村、Approveって何?」

ってチコちゃんに聞かれたら怖いですね、

「えーと、なんか新しいトークンを預けたり引き出したりするときにメタマスクのポップアップが出てきて、クリックせなあかんやつ」

なんて答えでは叱られそうです。一言でいうとApproveとは……デデン

「自分のウォレットの特定のトークンを操作する権限をSpenderに与えること~」

画像10

docs.openzeppelin.comより引用)

なんだかわかったようなわからないような説明です。Spenderって何じゃ?

例えばPancakeSwapのSwapコントラクト(両替機能)がひとつのSpenderですね。Spenderとは「お金を扱うコントラクト(プログラム)」というような意味あいです。

プログラミングの経験がある人なら、この関数に2つの引数があることがわかると思います。「(Spenderコントラクトの)address」と「amount(量)」です。そして一般的なコントラクト(メタマスク?)ではこのamountはデフォルトで「無制限」に設定されています。

画像11

結構衝撃的なのがわかりますか?

例えばPancakeSwapで、ORBSとBNBを両替しようと思います。僕がORBSを支払い、BNBを受け取りますが、この時必要な手続きは、PancakeSwapのSwapコントラクトが僕のウォレット内のORBSを引き出せる権限を承認(Approve)することです。

それはその時限りではなく、一度Approveしたらずっとです。

つまりどういうことかというと、PancakeSwapのSwapコントラクトは、今後ずっと、僕のウォレットのORBSをいつでもいくらでも引き出しできるということです。

文字どおり「いつでもいくらでも」です。僕が指示したとき/指示した額でなくてもです。

ちょっと感覚的には信じられませんよね。信じられなすぎて僕が何を言っているのかピンとこないでしょう。もっとわかりやすくいうと、Approveとは銀行員さんに通帳とハンコをずっと預けるようなものです。

もし銀行員さんに悪意があれば……

もちろんPancakeSwap(のSwapコントラクト)はそんな悪いことはしません。Swapコントラクトはたぶん中身が公開されているので、見る人が見ればわかりますし、タイムロックという簡単に書き換えることができないしくみもたぶん取り入れていると思うので安心しても大丈夫です。

いわゆる「トラストレス」なしくみです。「トラストレス」とは直訳したら「信頼不要」ですが、「疑う必要がない」と理解した方がわかりやすいと思います。

「Don't trust, verify.」(信頼するな、検証せよ)という言葉がありますよね。検証が可能であれば、信頼という概念は不要になります。

しかし、中身が公開されてなければ? タイムロックがなくてコントラクトがいつでも書き換え可能だったら? 自分自身で検証する能力、あるいは時間的なゆとりがなければ?

そこらへんは信頼せざるをえなくなります。つまり、多くの人の目にさらされている人気のプロジェクトから選ぶということです。「これだけ多くの人が預けてるんだから安心だ」ということです。

なんだか中央集権の既存金融と変わらないですね、でも一般に広まればそんなものです。

まとめ

思わず長くなってしまいました。まとめます。

・Approve(承認)は自分のウォレットの特定のトークンを引き出す権限を与えること
・Revoke(承認の取り消し)はその権限を取り消すこと
・Rovokeのするかどうかの判断基準は、盗まれたら困るトークンは、信頼できるプロジェクト以外全てRevokeでOK

信頼できるプロジェクトとは、「人気があって多くの人に長く利用されているプロジェクト」です。

DeFiの世界には「トラストレス」という言葉がありますが、それは公開されているコントラクトを理解して検証できる能力がある人にとってのことです。僕みたいな一般人にはそれは不可能なので、多くの目で監視されていることをよりどころにするしかありません。

これからも気を引き締めていきましょう、DeFiの世界にいる限りは。

というわけで今日の内容はここまでです。何か役にたてたことがあればうれしいです。

それではまた、DeFi~(@^^)/~~~


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