Skip to content
On this page

玩转碎片NFT市场:百万美元的秘密等你揭晓!

想象一下,一个NFT市场,不仅可以交易完整的数字藏品,还能将其拆分成无数“碎片”进行出售,甚至有人将一个NFT标价高达百万美元!这就是Shards NFT Marketplace,一个充满机遇也隐藏着漏洞的去中心化平台。

Shards NFT Marketplace允许NFT持有者以任何价格(USDC计价)出售他们的Damn Valuable NFT。更具颠覆性的是,他们可以将NFT分割成更小的“碎片”,这些碎片以ERC1155代币的形式存在,为买家提供了更灵活的入场方式。然而,卖家只有在整个NFT被完全售出后才能收到款项。

挑战:在“挖矿者”发现之前,拯救尽可能多的资金!

这个市场的运营方会向卖家收取1%的Damn Valuable Token (DVT) 作为手续费。这些DVT会被存入一个安全的链上金库,并与DVT的质押系统集成。

现在,一个价值百万美元的NFT正在被拆售,而你,作为一名精明的“寻宝者”,拥有绝佳的机会在“挖矿者”(Degens)们蜂拥而至之前,深入这个市场,用一次单一交易**,尽可能多地挽救资金,并将其存入指定的恢复账户。

核心机制分析:

  • NFT碎片化: 允许将NFT分割成ERC1155代币进行交易,增加了流动性。
  • 卖家收款条件: 只有当所有碎片售罄,卖家才能收款。
  • 1% DVT手续费: 卖家需要支付DVT作为交易费用。
  • 链上金库与质押: 手续费被集中管理,并与DVT质押系统联动。

关键漏洞点(根据提供的代码推测):

在深入研究ShardsNFTMarketplace.solShardsFeeVault.sol的代码后,我们可以发现潜在的攻击向量。

  1. fill函数中的价格计算: fill函数中,买家支付的DVT数量是根据offer.price(NFT总价)和offer.totalShards(总碎片数)以及当前的rate(DVT兑USDC汇率)计算得出的。
  2. cancel函数中的退款机制: cancel函数允许买家在特定时间窗口内取消购买并取回DVT。这里的退款金额是根据购买的碎片数量、购买时的rate1e6(可能代表USDC的精度)计算的。
  3. setRate函数: 允许oracle地址修改DVT兑USDC的汇率。
  4. ShardsFeeVaultdepositwithdraw deposit函数会将收到的DVT转移到金库,并根据stake参数决定是否质押。withdraw函数在unstaketrue时,会从质押合同中提取DVT,并可能包含质押奖励。

攻击思路:

我们的目标是在一次交易中最大化利润。一个可能的思路是利用cancel函数中的退款机制,结合setRate函数来操纵汇率,从而在取消交易时获得比最初支付更多的DVT。

  1. 触发openOffer 卖家(在测试环境中是seller)会调用openOffer来创建一个NFT的销售。
  2. 大量购买碎片: 我们需要购买大量的NFT碎片,这样才能在取消时获得可观的退款。
  3. 利用cancel取消购买: 在满足cancel函数的条件后,取消我们的购买。
  4. 利用setRate操纵汇率: 在我们进行fillcancel操作期间,我们可以(在测试环境中)利用oracle的身份调用setRate,操纵DVT和USDC之间的汇率。
  5. 计算最佳roundWANT_PER 目标是找到一个最佳的组合,使得通过大量的fillcancel操作,能够将市场上的DVT(尤其是那些原本支付给卖家的DVT,以及手续费)以一个“折扣”的价格提取出来,并存入指定的恢复账户。

代码实现的关键点(参考提供的答案):

  • MyContract构造函数: 这是我们的攻击合约。
  • rate_initialTokensInMarketplace_ 传入当前的市场汇率和市场上最初的DVT数量。
  • roundWANT_PER的计算: 这是攻击的核心,需要精心计算,以确定购买多少碎片(WANT_PER)和执行多少次fillcancel操作(round)。计算逻辑是基于市场上的总DVT数量、DVT的兑换率以及每次购买的DVT成本来确定的。
  • 循环调用fillcancel 攻击合约会循环执行fill操作购买碎片,然后执行cancel操作取消购买并取回DVT。这里会利用i(购买索引)和round来控制cancel的次数。
  • 最终取款: 在执行足够多的fillcancel后,合约会检查其持有的DVT是否达到了预期的目标。最后,将所有DVT转移到recovery_账户。

总结:

Shards NFT Marketplace 的挑战在于利用其碎片化和交易机制中的潜在漏洞,通过精心设计的交易序列,在一次操作中最大化利润。这个挑战不仅考验了我们对智能合约逻辑的理解,更考验了我们对链上经济模型和潜在风险的洞察力。

准备好进入这个充满财富秘密的碎片NFT市场了吗?每一次点击,都可能是一个改变游戏规则的决定!

Built with AiAda