Appearance
玩转碎片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.sol和ShardsFeeVault.sol的代码后,我们可以发现潜在的攻击向量。
fill函数中的价格计算:fill函数中,买家支付的DVT数量是根据offer.price(NFT总价)和offer.totalShards(总碎片数)以及当前的rate(DVT兑USDC汇率)计算得出的。cancel函数中的退款机制:cancel函数允许买家在特定时间窗口内取消购买并取回DVT。这里的退款金额是根据购买的碎片数量、购买时的rate和1e6(可能代表USDC的精度)计算的。setRate函数: 允许oracle地址修改DVT兑USDC的汇率。ShardsFeeVault的deposit和withdraw:deposit函数会将收到的DVT转移到金库,并根据stake参数决定是否质押。withdraw函数在unstake为true时,会从质押合同中提取DVT,并可能包含质押奖励。
攻击思路:
我们的目标是在一次交易中最大化利润。一个可能的思路是利用cancel函数中的退款机制,结合setRate函数来操纵汇率,从而在取消交易时获得比最初支付更多的DVT。
- 触发
openOffer: 卖家(在测试环境中是seller)会调用openOffer来创建一个NFT的销售。 - 大量购买碎片: 我们需要购买大量的NFT碎片,这样才能在取消时获得可观的退款。
- 利用
cancel取消购买: 在满足cancel函数的条件后,取消我们的购买。 - 利用
setRate操纵汇率: 在我们进行fill和cancel操作期间,我们可以(在测试环境中)利用oracle的身份调用setRate,操纵DVT和USDC之间的汇率。 - 计算最佳
round和WANT_PER: 目标是找到一个最佳的组合,使得通过大量的fill和cancel操作,能够将市场上的DVT(尤其是那些原本支付给卖家的DVT,以及手续费)以一个“折扣”的价格提取出来,并存入指定的恢复账户。
代码实现的关键点(参考提供的答案):
MyContract构造函数: 这是我们的攻击合约。rate_和initialTokensInMarketplace_: 传入当前的市场汇率和市场上最初的DVT数量。round和WANT_PER的计算: 这是攻击的核心,需要精心计算,以确定购买多少碎片(WANT_PER)和执行多少次fill和cancel操作(round)。计算逻辑是基于市场上的总DVT数量、DVT的兑换率以及每次购买的DVT成本来确定的。- 循环调用
fill和cancel: 攻击合约会循环执行fill操作购买碎片,然后执行cancel操作取消购买并取回DVT。这里会利用i(购买索引)和round来控制cancel的次数。 - 最终取款: 在执行足够多的
fill和cancel后,合约会检查其持有的DVT是否达到了预期的目标。最后,将所有DVT转移到recovery_账户。
总结:
Shards NFT Marketplace 的挑战在于利用其碎片化和交易机制中的潜在漏洞,通过精心设计的交易序列,在一次操作中最大化利润。这个挑战不仅考验了我们对智能合约逻辑的理解,更考验了我们对链上经济模型和潜在风险的洞察力。
准备好进入这个充满财富秘密的碎片NFT市场了吗?每一次点击,都可能是一个改变游戏规则的决定!