Skip to content
On this page

S1C6: Meet All The Conditions

1. 问题

mintFlag 函数有多个条件检查:(1)points < THRESHOLD(2)points × levels >= MIN_POWER(3)某些位操作条件。需要同时满足这些看似矛盾的约束。

2. 原因

合约使用多个条件限制 mintFlag,但条件之间存在逻辑漏洞。通过精心计算参数组合,可以同时满足所有条件。

3. 方案

分析各条件的约束空间,找到满足所有条件的具体参数值,然后通过部署的合约调用函数。

4. 遇到的陷阱

条件矛盾: 某些条件看起来相互冲突,如 points 需要小于阈值但 points × levels 又要大于另一个阈值。

5. 陷阱的原因

合约设计者没有考虑到边界条件下的数学特性,使得看似矛盾的条件在特定参数下可以同时成立。

6. 如何解决

通过数学分析找出参数空间的可行解。使用 Foundry fork 测试不同参数组合。

7. 技术要点

要点说明
多重条件约束多个 require 语句的约束空间可能存在交集
边界值分析需要分析 uint 类型的边界行为
Solidity 整数运算乘法溢出、除法舍入等特性可能产生非直观结果

Built with AiAda