对了,突然想起来前几天有个很有意思的故事,丢钱真是无处不在。
友人X君mint了个Trait Sniper的pass,准备了A和B两个地址,打算A地址mint完用B号出高offer接,刷交易额钓鱼,耍点小聪明让人误以为这是高档pass (pass有两个级别的,低级的和高级的,高级更贵)。
于是X君用A账号挂了4E的一口价,转手换成B账号出了1.6E的offer,再切换成A账号无视offer把一口价降到0.6E。由于B的offer高于当前的一口价0.6,直接成交了,B账号也成功收到了NFT。
重点来了:X君切换回A账号的时候,并没有收到1.6个E的offer所得,而是只有0.6E的余额。X君认为这是OS的挂单规则,则offer高于一口价的情况下只给一口价的钱,差价opensea收入囊中。然而事实真的是这样吗?我们来看一下图一这条交易tx
ERC721协议的NFT在A到B的转移中经过了0xbe的地址,但转账是成功了。我一开始以为0xbe是OS的路由。但疑点出现在ERC20代币的转移中,0xbe的地址向ethermine矿池转移了0.6765E。如果根据推断,0xbe是opensea的路由地址,那么opensea为什么要向矿池打款呢?
点进0xbe的地址看(图二)这个地址除了有weth的余额,还有looks的余额,到这里可以初步判断0xbe的地址是一个MEV(俗称夹子)0xbe探测到B的offer与A降价后的一口价有巨大价差,通过A降价后的一口价拍下A手上的NFT,再以B出的offer价格转手给B,这一切都在一个区块内(一条哈希)完成
到这里推断已经基本清楚了,那么0xbe向ethermine矿池打的0.6765E应该诊断为矿工的贿赂费,目的是为了保证转手到B的步骤能快速上链
整个过程不好防,也没得防,只能感叹科学家的强大。心疼X君的同时,也别忘了,聪明终被聪明误
https://weibo.com/1841459694/LrOYN2RA8
Tinder小博:纳尼,offer高于拍卖价会直接成交吗,不是拍卖以后只能place bid而不能给offer了嘛,还是他先给的offer然后拍卖
Tinder小博:回复@Yondcutie:喔喔懂了,真恐怖啊…这种操作都会被夹[笑cry]
Yondcutie:我确认了一下,不是bid,是A先挂了一口价高价,等B发offer以后,不接offer,再lower price到比offer低几倍的价格,在这个过程中offer和一口价的价差过大,被MEV探测到了[砖头] MEV搬走了当前一口价的NFT并以offer的价格卖给了B
来学习了,夹子机器人夹别人:以太坊中的抢先交易(front-running),并进行了实践:抢跑一笔铸造NFT的交易。
教程和代码开源在github: solidity.wtf.academy