Openseaが意外とガバガバだった話。
[Opensea Hack] NFT Favorite Bot 2022✨
— Synergy (@LostMyCode) July 5, 2022
✅Everyday Everynight Getting More Likes on Your NFTs
Created by @LostMyCode#NFTCommunity #opensea pic.twitter.com/rSHHPvJZaM
Openseaは世界最大級のNFTマーケットプレイスです。
はじめに
@LostMyCode: 日々なんかhackできることないか探すのに勤しんでいます(謎精神)
なぜこんなものを作ったのか?
どんな意味があるのか?
そんな疑問もあるでしょうが、作ったのは「いいね」が欲しいからではないです。
ただ、そこにいいねを無限に増やせそうなOpenseaがあったからです。。。
Openseaのいいね機能
Openseaは世界最大のNFTマーケットプレイスで、NFTごとに「いいね」を押せる機能があります。
そこで気づいたんですけど、Openseaってウォレットさえ用意すればアカウント作れるから無限にアカウント作り放題なんですね。
つまり、「いいね」も付け放題の状態です。
1日くらいほったらかしにしてたら1万8000いいね付いてました(証拠)
実現するまでの流れ
言語: node.js
おおまかな流れとしては
- ウォレットを作成
- Openseaのアカウント作成
- アカウントのAuthトークンを取得
- 「ターゲットのNFTにいいねをつける」メッセージを送信
までをプログラムで自動化する。
ウォレット作成
イーサリアムのウォレットを作成します。
これはnode.jsなら ethereumjs-wallet
とかを使えば可能です。
const ethWallet = require("ethereumjs-wallet");
...
const privateKeyBuffer = Buffer.from(privateKey, "hex");
const wallet = ethWallet.default.fromPrivateKey(this.privateKeyBuffer);
const address = this.wallet.getAddressString();
Openseaアカウントを作成
作成したウォレットを用いてOpenseaアカウントを作成します。
OpenseaのAPIに対して
challengeLoginMessageQuery
というリクエストを自分のウォレットアドレスを添えて送るとメッセージが届きます。
以下のようなメッセージ(Metamaskで見たことある人も多いハズ)
このメッセージに対して自分のウォレットで署名して送り返す必要があります。
Authトークン取得
ウォレットでメッセージに署名してAPIに送ることでAuthトークンを取得することができます。
署名は node.jsですと、 eth-sig-util
が使えます。
例
const ethSigUtil = require("eth-sig-util");
...
// dataがメッセージstring
const signature = ethSigUtil.personalSign(privateKeyBuffer, { data });
これで署名を得られます。
これをOpenseaAPIに対してauthLoginMutation
でリクエストします。
送るのは 自分のウォレットアドレス、受け取ったメッセージ、メッセージに対する署名
するとAPIからtokenがレスポンスで返ってきます。
auth token
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiVlhObGNsUjVjR1U2TXpVMU5UWTJNams9IiwidXNlcm5hbWUiOiJTWU5LLXMxbXI4M2pkIiwiYWRkcmVzcyI6IjB4MDMyYzVmYWJmYzkxZDcyNTg1M2NlOGE2MTY5NDMxYTEzNDRmMDQxNiIsImlzcyI6Ik9wZW5TZWEiLCJleHAiOjE2NTczNzk0OTQsIm9yaWdJYXQiOjE2NTcyOTMwOTQsImFwaUFjY2VzcyI6Im5vbmUifQ.N82VH95yDa9V31PoHJw6nnFG7CVKkfMtpcOePTh7foo
いいね付けたいNFTに「いいね」リクエスト送信
またまたAPIにリクエストを送ります。
今回はさきほど受け取ったAuth tokenをAuthorizationヘッダにセットします。
headers: { authorization: "JWT " + authToken }
いいねをつけるときは useAssetFavoriteMutation
リクエストを送信します。
送るリクエスト内容は以下のようになっています。
let res = await OSP.requestAPI(
{
"id": "useAssetFavoriteMutation",
"query": "mutation useAssetFavoriteMutation(\n $asset: AssetRelayID!\n $isFavorite: Boolean!\n) {\n assets {\n updateFavorite(asset: $asset, isFavorite: $isFavorite)\n }\n}\n",
"variables": {
"asset": assetId,
"isFavorite": true
}
},
{
headers: {
"authorization": "JWT " + authToken
}
}
);
assetIdが対象のNFTのIDです。
このIDの取得方法は今回は省略します。
(簡単な説明:NFTのページにハードコードされているのでスクレイプするだけで大丈夫です)
一連の処理を無限ループ化
あとはwhileするなり、いいね押したい数だけforループするなりで好きなだけ「いいね」をNFTに押せるようになります。
https://opensea.io/assets/matic/0x2953399124f0cbb46d2cbacd8a89cf0599974963/18787915268332924190917742420012866093351266449183228028156090440355409821697
さいごに
いいね増やして「何の意味があるのか?」と思うかもしれませんが、
冒頭でもお話したように意味はないですし「いいね」が欲しいわけでもなく、ただそこにいいね押す機能があったからです。
ただ、あなたのNFTが普通の無名NFTより「なんでこんないいね付いてるんだ?」って注目を集めることはできると思います。
追記:リリースしました
WEBサイトにアクセスするだけで誰でも使えます
詳細はTwitterから御覧ください
他のOpensea関連ツール紹介
NFTを無限にMintしてプレゼントするツール
[Behind] Takeover The Hidden Collections 😎
— Synergy (@LostMyCode) July 3, 2022
✅This script can fill someone's hidden collections with my NFTs
☠️ Your collections gonna be so dope ☠️#NFTCommunity #opensea pic.twitter.com/GsegG64yq8
【自動】手数料無料で数万人のユーザーにNFTを送るツール
[Behind] Auto Transfer Script Updated.
— Synergy (@LostMyCode) April 17, 2022
Now its possible to send over 1000 NFTs within a few hors (it never costs gas fee)😎
It may help creators who wanna hold #NFTGiveaway event✨ https://t.co/Q05SSrVgDX pic.twitter.com/yUPpOBjAyw
Hacked by @LostMyCode