Skip to content
On this page

S2C8: Multi-Lock Contract

1. 问题

合约有多个"锁"(lock)机制,需要依次解锁才能调用 mintFlag。每个锁有不同的解锁条件(如支付 ETH、特定状态、storage 操作等)。

2. 原因

合约实现了分层的访问控制 — 多个 modifier 或条件检查堆叠在一起。每层都可以通过特定操作解锁。

3. 方案

  1. 读取合约 storage 分析每个锁的状态
  2. 按顺序解锁每个锁(发送 ETH、调用特定函数、写 storage)
  3. 所有锁解锁后调用 mintFlag

4. 遇到的陷阱

锁的依赖关系: 某些锁可能依赖其他锁的状态,解锁顺序可能很重要。攻击合约需要预先存入 ETH。

5. 陷阱的原因

合约的状态变量之间可能存在依赖关系。如果按错误顺序操作,可能导致状态被重置或交易回滚。

6. 如何解决

通过 cast storage 逐一读取锁状态,设计原子操作在单个交易中解锁所有锁。

7. 技术要点

要点说明
多层访问控制多个 modifier/条件堆叠的合约设计
原子操作在单个交易中完成所有解锁和 mint
Storage 分析读取 storage 槽位了解合约状态

Built with AiAda