在NFT一哥BAYC头上套利80万美金的技术真相
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权益。

Subscribe to fancyAlex
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from fancyAlex

Skeleton

Skeleton

Skeleton