2022 年,是 NFT 大火的一年,是 Ethereum 转型 PoS 的一年,是我入行区块链的第二年。那一年,我通过狙击 NFT 盲盒,赚到了几十个 ETH ,并购买了一个 CryptoPunk。本文将回忆当时的一些细节和巧妙策略,不会透露具体的代码实现。
狙击 NFT 盲盒,是指有一些 NFT 合约在发售后处于盲盒状态,NFT 的图片和属性(Metadata)都是未知,到后面才会揭晓。盲盒状态的 NFT 就已经可以在 OpenSea 等 NFT 交易市场上流通,已经有了定价和流动性。
盲盒揭晓之后,不同的 NFT Token 会有不同的稀有程度(Rare Score),而 NFT 交易市场的更新总是有延迟,此时如果提前发现稀有程度高的 Token 正在交易市场上以较低价格挂卖单,那么立即将其买下,再挂高价卖单卖出,会是个胜率很高的策略。我写了一个 Bot,支持了当时最火的三家 NFT 交易市场:OpenSea、LooksRare、X2Y2。
原理就是这么简单,但魔鬼藏在细节之中。
第0层
大部分 NFT 合约的开盒都是 NFT 发行方通过调用一个函数(通常名为setBaseURI
)来设置新的baseURI
。Bot 在检测到baseURI
更新后,可以通过读取合约的tokenURI()
函数获得新的 URI,再访问 URI 获得 Token 的 Metadata。
把全部 Token 的 Metadata 都抓下来,使用算法计算稀有度,再抓取的订单信息比对价格和地板价的差距,然后决定买走哪些挂单。鉴于 EVM 每个钱包有nonce
要串行上链,可以准备多个钱包并行狙击多个 Token。
有些 NFT 合约的 Metadata 是存在 IPFS 上的,我也用了一些手段加速 IPFS 的访问速度。也有一些 Metadata 存在 Arweave 上,我也做了支持。
第1层
其实并不需要等待 NFT 发行方的setBaseURI
交易上链,可以在交易还在 mempool 的时候就获取到,快人一步。
也不一定非要通过读取合约的tokenURI()
函数来获取 URI,可以提前看 NFT 合约代码,在获取到baseURI
之后,自己拼接 URI。
不必等待全部 Token 的 Metadata 都抓下来再计算稀有度,可以一边抓取,一边实时计算,抓取进度越接近 100%,可信度越高。大约抓取 70% 左右的 Token Metadata 就基本不会翻车了。
NFT 交易市场的订单可以提前进行抓取并保持更新,等稀有度计算完成后可以瞬间下单。其中 X2Y2 订单信息是和下单钱包地址绑定的,因此需要写一个代理合约,不同的钱包使用同一个代理合约购买。
在使用 IPFS 作为tokenURI
的 NFT 合约中,有些使用ipfs://
协议,有些使用https://
协议,都可以识别并提取文件 hash,再同时向多个 IPFS Gateway 发起请求。
第2层
后面有些 NFT 发行方学聪明了,除了设置baseURI
之外,还会设置一个偏移量offset
。这样导致原本tokenId
是X
的 Token,其对应的tokenURI
不能使用X
这个数字简单拼接出来,而是变成了X+offset
。有些时候项目方是通过调用合约简单设置这个偏移量,有时候则会使用预言机来生成随机数(最常用的是 Chainlink VRF)。
Chainlink 的 VRF Coordinator 合约会调用 NFT 合约的fulfillRandomWords
函数来设置随机数,而这笔交易也是可以在 mempool 中提前捕获并模拟出结果的。从而可以提前计算出偏移量,提前计算出真正的tokenURI
。
有些 NFT 发行方使用了 Gnosis Safe 多签钱包来调用 NFT 合约的setBaseURI
,殊不知 Safe 多签钱包的待签名交易是完全公开的,可以通过抓取 Safe 网页上的 JSON API 来获取,里面包含了完整的calldata
,这样就可以比 mempool 还要早很多。有几次我通过这个方法,在 NFT 发行方开盒前几分钟抢到了几个稀有 Token,导致发行方被社区怀疑老鼠仓,但它们完全没有办法自证清白。
还可以通过各种方式”猜出”即将设置的新baseURI
,比如:域名解析记录变动;Arweave 同一个钱包上传了新的 Metadata;发行方在测试网测试合约,等等。
第3层
时间久了之后我发现有其它 Bot 通过监控抢跑我的交易,那时 Flashbots 的市场占有率大概还不到 50%,为了确保第一时间抢到订单,我并没有使用 Flashbots。我换了全新的钱包进行抢购,仍然会被抢跑。因此我推测它们是根据 NFT 开盒时突然出现的高 Gas 购买 NFT 交易来判断是否要抢跑。
但它们的抢跑其实是有风险的,因为它们不一定计算了稀有度,只是单纯的抢跑。因此我可以使用小号提前随便买入几个 Token 在市场上挂稍微高于地板价的盲盒,并且在开盲盒的瞬间用 Bot 抢购这几个 Token,做出一个左手倒右手的动作,但那些抢跑我的 Bot 并不知情。如果我被抢跑,那么我的普通 Token 就高价卖给了抢跑我的 Bot。如果我没有被抢跑,那么我会损失 Gas 和 NFT 交易版税。
最终我并没有实施这个方案,因为感觉风险不低,并且利润不高。
本文只介绍了 NFT 抢盲盒。NFT 还有抢发售和 MEV 等套利方式,以后有机会再接着回忆。
这是我第一次尝试从区块链中进行套利,学到了很多知识,赚到了第一桶金。
目前我开发了一个套利工具,并运营了一个套利社区,欢迎加入!