在NFT一哥BAYC头上套利80万美金的技术真相
0x0451
March 18th, 2022

NFT一哥无聊猿BAYC(Bored Ape Yacht Club)给持有者空投APECOIN,整个业界好不热闹。持有BAYC的地址可以claim 10094APE,一时间口水与泪水齐飞。

空投刚开始不久就有了一位顶级科学家完成了一次传奇套利:大家都还没看清套利手法,他已经赚到了278ETH约80万美金。

Alex也非常好奇,这位科学家是怎么做到的?套利的技术原理和流程到底是什么?其他产品是否还有类似的漏洞(机会)存在?

区块链的公开账本,让我们有机会去分析套利的技术真相。

综述

  1. 套利交易:

    0xeb8c3bebed11e2e4fcd30cbfc2fb3c55c4ca166003c7f7d319e78eaab9747098

  2. 套利者地址是:0x6703741e913a30d6604481472b6d81f3da45e6e8 (大概率是 https://yieldfarming.com/ 团队成员的杰作,后文有线索说明)

  3. 套利成本:106ETH

  4. 套利收益:278ETH,约80万美金

  5. 套利手法:不是从Sushi做了闪电贷。不过手法和闪电贷类似,在一个transaction中反复使用nftx的mint/redeem,来获得多个的BAYC NFT的所有权,从而claim APECOIN

    更正:感谢 @twodam.eth 的进一步深入核实:是在NFTX中使用了闪电贷,来获得多个的BAYC NFT的所有权,从而claim APECOIN

分析ethersan.io数据时的Tips:

  • 一个Transaction内部的各个transfer的展示顺序,并不代表真实的逻辑顺序。因为合约的代码执行是有逻辑顺序的,但上链的数据是并发的状态
  • Tokens Transferred内容也是运算的结果,并不是运算过程。

也欢迎小伙伴来一起讨论,求真第一:

具体的技术原理和流程如下

  1. 套利者从FTX提现了159.99ETH(后文我们就按160ETH计算)到 0x6703741e913a30d6604481472b6d81f3da45e6e8
  2. 已106ETH从Opensea.io买入BAYC的#1060,Item Activity里可以发现是 yieldfarmingdotcom (https://opensea.io/assets/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d/1060)
  3. 创建包含套利操作流程的合约:0x7797A99a2e91646aBdc9DC30e838A149CCB3013B
  4. 合约内执行逻辑:
    • 从0x6703地址转出BAYC#1060到合约0x7797
    • 0x7797和NFTX合约交互,给出Mint 6次、Redeem 5次的操作结果。综合计算如下:
      • Mint: 6次,NFTX规则是每次消耗10%手续费,获得 6*0.9 = 5.4 vToken BAYC
      • Redeem: 5次,采用Random方式,每次消耗4%手续费,需要消耗 5**1.04= 5.2 vToken BAYC
      • NFTX合约判定vToken足够,则执行操作
      • 0x7797得到:剩余的0.2 vToken,以及瞬时的6个BAYC NFT的owner权,立即Claim APECOIN 6份,共计60,564APECOIN
      • 0x7797失去:BAYC#1060这个NFT(购买成本为106ETH)
      • 0x7797再创建合约0x3ebd3d86f810b141f9b2e9b15961fc66364b54f3,自动卖出剩余的0.2 vToken,得到14.15ETH并转账给0x6703
套利合约的运算结果上链
套利合约的运算结果上链

套利合约执行完成,0x6703手动卖出APECOIN、增减LP。最后转出了399ETH,持有19.2ETH+7,273APECOIN的LP(可以约等于38.4ETH)

Mint时需要支出10%BAYC给现有的Staker(原谅我没有BAYC...)
Mint时需要支出10%BAYC给现有的Staker(原谅我没有BAYC...)
Random方式兑换手续费最低为1.04 BAYC
Random方式兑换手续费最低为1.04 BAYC

深入堆栈:

感谢 @twodam.eth 的进一步深入核实:

堆栈信息:

这笔交易的操作路径应该是:

  1. 闪电贷借出 5.2 $BAYC
  2. 赎回 5 个 BAYC NFT
  3. 领取 $APE
  4. 存入 BAYC #1060 并归还借来的 5 个 BAYC,用来铸造 $BAYC ,归还本金加利息
  5. 卖出剩余的 $BAYC 代币

$BAYC 数值:

  1. 借出 5.2
  2. 铸造 6 (1:1)
  3. 利息 0.6

综合来看:

  • 初始资金:160ETH,其中106ETH为真实支出成本
  • 终局资金: 转出399+LP38.4+余额1.48≈438ETH
  • 套利收益:438-160=278 ETH

感慨

套利者对于合约的研究特别透彻,艺高人胆大,成就了一次传奇套利。

非常希望作者能站出来贡献思路和心得,并为后来的项目提供规避此类问题的建议。

毕竟说到底,这是白嫖了Staker的claim权益。

Arweave TX
UuDWr_aavqJqcgE4u4GMKNjBl-NMl_W7jOZivRq1fX4
Ethereum Address
0x0451536D1Fa7d76C73d16cDA6E4aFfBf12632fAd
Content Digest
tG-9BmiO3nG4Pbv7BZhzeel4aH-hcJgLaWmAJgek7GA