voltgzer0/invariant-bounty-guard
GitHub: voltgzer0/invariant-bounty-guard
一个 Solidity 防御性原语,通过双层 revert/catch 机制将 DeFi 恒定条件违规转化为原子性状态回滚并自动触发有偿白帽子报告。
Stars: 0 | Forks: 0
# 不变赏金守护
**状态**:生产级参考实现。可供集成、授权及与审计公司合作。
## 功能说明
大多数 DeFi 漏洞利用都遵循一个模式:攻击者找到破坏会计恒定条件(`sum(balances) == totalSupply`、`contractBalance >= totalLiabilities` 等)的方法,然后通过这个漏洞抽走资金。
`InvariantBountyGuard` 将每个结算级函数包装在一个 **双层 revert/catch** 中:
1. 外层帧对恒定条件的量级进行快照。
2. 函数体在内部的自 `delegatecall` 中执行。函数体执行完毕后,内层会断言恒定条件。
3. **如果恒定条件被打破,内层帧将会 revert** —— EVM 会原子性地回滚函数体的状态变更。
4. 外层帧捕获 revert,从 revert 数据中解码出违规程度,**向原始调用者支付漏洞赏金**,并触发条件性暂停。
5. DoS 防护机制可防止误报尝试(对已破坏的恒定条件进行探测不会产生 delta → 无支付,无暂停)。
经济上的结果是:原本可以抽走 1000 万美元的攻击者现在只能获得固定的赏金(例如 1 ETH),协议只损失 1 ETH 而不是失去所有资金,并且攻击会在同一个区块内被转化为一份有偿的白帽子报告。
## 实时数据(anvil,全新链)
取自附带的验证套件,在真实的 EVM 上执行:
```
[breach] prober calls brokenWithdraw(50) on a vault with 100/100 supply/liabilities
status 1 (success) ← outer caught the breach
gasUsed 106515
[post] totalSupply = 100 ← state rolled back atomically
[post] totalLiabilities = 100
[post] balanceOf(prober) = 100
[post] paused = true ← conditional pause tripped
[post] pendingBounty = 1 ETH ← reporter credited
[post] totalEscrow = 4 ETH ← escrow debited
[claim] prober ETH after = +1 ETH ← pull-pattern payout
[probe] same call against an already-broken invariant
[post] paused = false ← DoS-resistance: zero state delta = no pause/payout
```
四项 Foundry 属性测试,涵盖正常路径、真实违规、误报 DoS 以及支付时的重入攻击 —— 全部通过。
```
[PASS] test_honestWithdraw_passes_noPayout_noPause (gas: 196,020)
[PASS] test_breach_rollsBackState_paysReporter_pauses (gas: 338,268)
[PASS] test_falseTrigger_noPayout_noPause (gas: 201,505)
[PASS] test_reentrancy_on_claimBounty_blocked (gas: 586,437)
```
## 威胁模型摘要
| 攻击向量 | 缓解措施 |
|---|---|
| 违规后函数体状态变更依然保留 | 内层帧通过 `delegatecall` 运行整个函数体;revert 会在 EVM 级别进行回滚。 |
| 自调用导致报告者身份丢失 | `delegatecall` 保留了 `msg.sender`;报告者即为原始外部调用者。 |
| 误报 DoS(对已有违规进行探测) | 执行前/后的量级快照;当 delta 为零时,`_onBreach` 不执行任何操作。 |
| 漏洞赏金支付时的重入攻击 | 采用 Pull 模式(`pendingBounty` + `claimBounty`),并结合 CEI 排序 + `nonReentrant`。 |
| 函数体内非恒定条件违规的 revert 被误当作违规处理 | 外层帧对 revert 数据进行解码;只有 `InvariantBreach(uint256)` 选择器会触发支付,其他所有情况都会按原样重新抛出。 |
| 资金不足的托管阻碍了暂停操作 | 无论支付是否成功,暂停机制都会触发 —— 安全性优先于收益。 |
## 公共接口
[`IInvariantGuard.sol`](src/IInvariantGuard.sol) —— 完整的外部接口表面。包含 NatSpec 注释,具备审计就绪的签名。
实现代码在授权下提供。请通过下方方式联系。
## 扩展:第三方赞助的赏金托管
[`IBountyVault.sol`](src/IBountyVault.sol) —— 为您无法控制的、受 `InvariantGuard` 保护的目标赞助赏金的接口。
标准模式将目标合约、托管和支付合并在一个合约中 —— 这在协议为自身的赏金提供资金时有效,但阻碍了第三方(审计公司、生态项目、保险资金池)为某个目标的恒定条件提供担保。`IBountyVault` 是最清晰的分离方案:
```
sponsor ──fund──▶ BountyVault ◀──notifyBreach── guarded target
│
└─ pendingBounty[reporter] ──claim──▶ reporter
```
特性:
- 赞助商通过白名单决定哪些目标可以触发支付。
- 目标合约只能为报告者增加额度,绝不能直接提取托管资金。
- 采用 Pull 模式领取赏金;支付与违规事件保持原子性。
- 赞助商可以撤销行为异常的集成;在此之前产生的待处理额度将予以保留。
- 目标合约的暂停/回滚语义保持不变;托管资金存放在其他地方。
配合 `InvariantGuard` 的 `BountyConnectorGuard` 变体,将目标合约接入此托管系统。实现代码在授权下提供。
## 适用对象
- 具有会计恒定条件的 **DeFi 协议** —— 金库、借贷、AMM、永续合约、RWA、稳定币发行方。
- 希望获得审计后安全网并将其与项目打包的 **审计公司**。
- 资助防御性基础设施作为公共产品的 **L1 / L2 生态系统**。
## 授权与集成
接口已基于 MIT 协议发布,供审查使用。
实现代码、商业化层(`Marketplace`、`RevenueShareGuard`)以及集成支持属于商业项目。针对个人协议、审计公司(白标)和生态合作伙伴提供分层定价结构。
联系我们获取:
- 针对您现有合约的示例集成,
- 授权报价,
- 审计公司合作条款。
## 作者
由 [voltgzer0](https://github.com/voltgzer0) 构建 —— 是 **Voltgzer0 Labs Ltd** 安全投资组合的一部分。
联系方式:[X](https://x.com/voltgzer0) · [Telegram](https://t.me/voltgzer0) · [Cantina](https://cantina.xyz/u/voltgzer0) · `voltmattty77@gmail.com` · [GitHub](https://github.com/voltgzer0)
希望进行公开讨论?请提交 [issue](../../issues/new)。
白帽子。可供集成、授权及与审计公司合作。
© 2026 voltgzer0。实现代码保留所有权利。接口基于 MIT 协议发布。
标签:DeFi, Solidity, 区块链, 安全机制, 智能合约