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, 区块链, 安全机制, 智能合约