Uniswap で買えるけど二度と売れないトークンを買った話
ある日、自分の運用している bot(自動売買ツール)がCORXという謎のトークンを、「いいの見つけたワーン」、とUniswapでスワップして拾ってきてくれました。これが地獄のスキャムトークンでした。
Uniswapでこのトークンを売る(ETHにスワップする)ことを試みると以下の画像のようなエラーが出てしまいました。TRANSFER_FROM_FAILD というのがエラーコードのようです。
結論から言いますと、これは特殊なトークンで、一度買ったら二度と売れません。
なぜこのようなことに成るかと言うと、仕組みとしては非常に簡単で、トークンの移動に制約が付いているからです。送信元(from)、宛先(to)のアドレスについて、以下の条件のうちどれかが当てはまらないとトークンの移動ができません。
- 'from' が Contract 作成者である。
- 'to' が Contract 作成者である。
- 'from' が Uniswap のペアプールである
Uniswap で売買する、正確に言えばスワップするということは、結局はトークンの移動なわけですから、上のような制約ではこのトークンをUniswapのペアプールから買って移動することはできますが、売ることはできません。ペアプールに移動できないからです。
そもそも、売れないどころか自分のウォレットから移動することすら不可能だとわかりますね。永遠に GOX しています。
ちなみに二番目の制約が不要だと思いますが、スキャマー宛てに送ればトークンをウォレットから消せるぞ〜ゴミ箱にどうぞ〜という優しさか何か?
この制約については、識者の方も確認してくれました。
@horobi_gengar さん、ありがとうございました。
まあこのスキャムは正直面白いですね。スキャマーしか売ることができないという仕様のために全く値下がることなくすごい勢いで値上がりしています。値上がりが値上がりを呼ぶという仕組みです。自分のように bot が自動的に引っかかった人もいるでしょう。300ETHは集まっているので、もう時価1000万円以上は集めていますね。ちなみに、トランザクションをみると、スキャマーが定期的に1ETHなど少額を抜いているのがわかります。一気に行くまでかなり粘るつもりのようです。
思えば、2017年バブル時には、謎の取引所が乱立したものでした。自分も魔界と呼ばれたニュージーランドの取引所に出入りしたものです。あの頃も大変なものでしたが、いやはやUniswapには更なる深淵が広がっていたようです。
特に、Twitterでのこの指摘は示唆に富んでいました。全てのコントラクトがオープンになっていて、何も隠されてはいないわけですから、全て仕様通りに動いていますよね?とも言えるわけです。個人的には暗号通貨の世界観のひとつの側面を身を持って味わった心持ちです。
最後に、この詐欺をプログラムから検知する方法を考えてみます。botがこんなのにひっかかり続けては破産してしまいますので。あまりのことにおれの怒りが有頂天になったので、詐欺にあってから数時間で検知用のプログラムを実装してテストしてみました。このプログラムを公開しようと思ったのですが、検証してみるといくつか難しい点がありました。
まず手動でエクスプローラを観察したり、コントラクトを読めば当然怪しいものは検知できますが、自分は取引を自動化したいのでこれはなしです。
一度トークンを購入すれば、それが移動できるかどうかの検証は簡単ですがそれもなしです。
実際トークンを買ってはいけないという制約の元では、買った後に売れるかどうかを自動で検出をするのはかなりむずかしいように思われます。
- コントラクトの動作を調べてみる?
-
- 一回分のコントラクト呼び出しなら、トランザクションを発行署名せずに、結果を調べる方法がありますが、Buy -> Approve -> Sell とブロックチェーンの状態を変更させずに検証することは簡単にはできないように思われる(ご存知の方いたら教えてください)
-
- 何度か売買が行われていたら問題ないことにする?
-
- 売買履歴は偽装できます。
-
- トークンのホルダー数が多ければ問題ない?
-
- いくらでも増やせます。
- 実際このスキャマーはコントラクト作成時にランダムにトークンをばらまいています。
-
- プールのETHの量が多ければ信用できる?
-
- 全く信用できません。
- 私は事前にスキャム対策として念の為プールのETHの量が200ETH以下のものは避けるという処理をいれていました。
- 今回スキャマーはちょうど200ETHの初期流動性提供を行なっていました。かなりの額ですがこれが毀損するリスクは皆無なので問題なかったでしょう。
- このスキャマーのウォレットを追ってみましたがかなりのETHを動かせるようです。
-
と言うわけで、結局チェーンの中の情報だけでは完全には判定できないと判断しました。どうしてもチェーンの外の情報が必要ですね。
で結局どうしたの?というところだけ有料としておきます。拍子抜けすることしか書いていないと思います。