caliperforge/bsc-invariants
GitHub: caliperforge/bsc-invariants
基于 Foundry 的 BSC DeFi 协议不变量测试框架,通过模糊测试和植入式 CI 对验证智能合约核心数学属性的正确性。
Stars: 0 | Forks: 0
# bsc-invariants (v0.0.2,第 1 + 2 周)
**状态。** BNB grant build-to-win 的第 1 + 2 周。PancakeSwap v3
invariants P-1 (FeeGrowthGlobalMonotonicity)、P-2 (TickInBounds)、P-3
(SqrtPriceX96InBounds)、P-4 (LiquidityEventConsistency) 和 P-5
(FeeGrowthOutsideConsistency,仅增量守恒形式)
已合入代码树,并在 `forge test` 下通过 (31 / 31 全绿)。P-1 植入式
CI 对也已落地,并在植入分支上确定性地触发 `INVARIANT VIOLATED`。
P-6、P-7、P-2 / P-3 的植入对、wrap-around
P-5 变体以及 BSC-mainnet fork 测试属于第 3 周的工作,目前
不在代码树中。Venus 和 Stargate harness 属于 M2 / M3 阶段,并且
**尚未开始**。本 README 仅声明在 HEAD 发布时实际交付的内容。
## 本库是什么
**M-status 附录 (第 2 周,HEAD)。** P-1 植入 bug 对已
落地:`invariants/planted/PancakeV3FeeGrowth.planted.t.sol` 会确定性地触发
`INVARIANT VIOLATED feeGrowth_neverDecreases`,并且 `forge test`
在植入分支上以非零状态退出。P-2 和 P-3 植入对
属于第 3 周的工作;参见 `SCOPE.md` §1。
## 本库不声明什么
- **非审计。** 针对协议合约运行本库 fork 的 CI 通过记录,并不能证明该协议是安全的。该
库仅能捕获 invariants 所编码的 bug 类别;残余的
攻击面由协议自身承担。
- **非 runtime 监控。** 这些属性是部署前的 CI 门控。
- **尚未实现广覆盖。** 在 v0.0.2 阶段,代码树中仅有 PancakeSwap v3 包含任何 invariants
。Venus 和 Stargate 属于 M2 / M3 阶段,且明确
未开始。
- **非 PancakeSwap 生产源码的 fork。** `src/PancakeV3FeeAccountingRef.sol` 下的参考
合约是一个与所测 invariants 对应的同源
最小化孪生体。在重现 v3-core 数学
常量的地方 (`src/lib/TickMath.sol`),上游
归属说明位于 `NOTICE` 中。
## v0.0.2 中的 Invariants (产品)
五个 invariants 以及一对植入式 CI 对在 PancakeSwap v3
池边界处落地。每一行将 `invariants/` 中的属性映射到
它所测试的上游 v3 语句。完整文本位于
[`docs/invariants.md`](docs/invariants.md);代码中的 NatSpec 是
精确语句的唯一事实来源。
| ID | Invariant | 被测参考 | 属性束 |
|---|---|---|---|
| **P-1** | FeeGrowthGlobalMonotonicity | [`PancakeV3FeeAccountingRef.sol`](src/PancakeV3FeeAccountingRef.sol) | [`PancakeV3FeeGrowth.t.sol`](invariants/PancakeV3FeeGrowth.t.sol) |
| **P-2** | TickInBounds (MIN_TICK ≤ tick ≤ MAX_TICK) | [`PancakeV3FeeAccountingRef.sol`](src/PancakeV3FeeAccountingRef.sol) | [`PancakeV3TickBounds.t.sol`](invariants/PancakeV3TickBounds.t.sol) |
| **P-3** | SqrtPriceX96InBounds (MIN_SQRT_RATIO ≤ sqrtPriceX96 < MAX_SQRT_RATIO) | [`PancakeV3FeeAccountingRef.sol`](src/PancakeV3FeeAccountingRef.sol) | [`PancakeV3TickBounds.t.sol`](invariants/PancakeV3TickBounds.t.sol) |
| **P-4** | LiquidityEventConsistency (mint / burn 对范围内的头寸精确更新 ±Δ 活跃流动性;范围外保持不变) | [`PancakeV3LiquidityEventsRef.sol`](src/PancakeV3LiquidityEventsRef.sol) | [`PancakeV3LiquidityEvents.t.sol`](invariants/PancakeV3LiquidityEvents.t.sol) |
| **P-5** | FeeGrowthOutsideConsistency (每个已初始化 tick 的 `feeGrowthOutside ≤ feeGrowthGlobal`,仅增量形式) | [`PancakeV3FeeGrowthOutsideRef.sol`](src/PancakeV3FeeGrowthOutsideRef.sol) | [`PancakeV3FeeGrowthOutside.t.sol`](invariants/PancakeV3FeeGrowthOutside.t.sol) |
| **P-1 植入** | 植入式 CI 对 (植入分支触发 `INVARIANT VIOLATED feeGrowth_neverDecreases`,非零退出) | 内联 `BrokenPancakeV3FeeAccountingRef` (hyperevm-safety 约定) | [`PancakeV3FeeGrowth.planted.t.sol`](invariants/planted/PancakeV3FeeGrowth.planted.t.sol) |
P-1 是最高优先级的 invariant。它所捕获的 bug 类别,
即在任意非零 swap 下减少的 fee-growth accounting,正是
Uniswap-v3-fork 分叉项目在错误移植
`feeGrowthGlobalX128 += FullMath.mulDiv(...)` 增量时的确切故障模式:这是
分叉项目在重构池时引入的典型 accounting bug。
PancakeSwap v3 invariants 及其已覆盖(和未覆盖)的层面已
编目在 [`SCOPE.md`](SCOPE.md) 中。
## 仓库布局
```
experiments/bsc-invariants/
README.md # this file
LICENSE # Apache-2.0 (born-with-license rule)
NOTICE # upstream attributions
AI_DISCLOSURE.md # AI-touched surfaces + review discipline
SECURITY.md # responsible disclosure
SCOPE.md # protocols x invariants x status (M1/M2/M3)
RUN_SUMMARY.md # Weeks 1+2 run summary (what shipped vs deferred)
foundry.toml # Foundry config (solc 0.8.28, CI fuzz budgets, [fmt] pin)
remappings.txt # forge-std remapping
.gitignore
.github/
workflows/ci.yml # path-gated CI: each M2/M3 job flips on file presence
actions/foundry-setup/ # composite action: pinned Foundry + forge-std install
src/
lib/TickMath.sol # v3 tick/sqrtPriceX96 constants (attributed in NOTICE)
PancakeV3FeeAccountingRef.sol # minimal v3 reference for P-1/P-2/P-3
PancakeV3FeeGrowthOutsideRef.sol # per-tick feeGrowthOutside reference for P-5
PancakeV3LiquidityEventsRef.sol # mint/burn + active-liquidity reference for P-4
invariants/
PancakeV3FeeGrowth.t.sol # P-1: fee-growth global monotonicity
PancakeV3TickBounds.t.sol # P-2 + P-3: tick + sqrtPriceX96 bounds
PancakeV3LiquidityEvents.t.sol # P-4: liquidity-event consistency
PancakeV3FeeGrowthOutside.t.sol # P-5: per-tick feeGrowthOutside conservation
mocks/ # M2/Week-3: Recon Chimera CryticTester scaffold lands here
planted/
PancakeV3FeeGrowth.planted.t.sol # P-1 planted twin (Week 2, LANDED)
docs/
invariants.md # prose invariant descriptions + upstream citations
receipts/
forge-build-*.log # forge build receipts (Weeks 1+2)
forge-test-*.log # forge test receipts (Weeks 1+2)
planted_demo/p1-*.log # P-1 planted-twin clean + planted leg receipts
```
## 本地运行
```
# 安装 Foundry (https://book.getfoundry.sh/getting-started/installation)
curl -L https://foundry.paradigm.xyz | bash && foundryup
# 从这个目录开始
forge install foundry-rs/forge-std@v1.9.4 --no-commit # pinned per CI
forge build
forge test -vv
```
预期结果:全部五个 invariants (P-1、P-2、P-3、P-4、P-5) 加上 P-1
植入式对在干净的参考下通过 (31 / 31 全绿;
植入分支以非零状态退出并触发 `INVARIANT VIOLATED`)。
Fuzz 预算较小 (1000 次运行) 以便快速本地迭代;CI
`nightly` 工作流 (M2/第 3 周) 将运行更长的测试活动。
**格式化。** `forge fmt` 样式固定在 `foundry.toml` 的
`[fmt]` 下 (行长 120,全行多行函数头),以便
参考合约和测试中手动调整的多行参数布局
在重新格式化时得以保留。
## CI
`.github/workflows/ci.yml` 会针对干净的参考运行 `forge build` 和 `forge test`。每个 M2 / M3 PancakeSwap-extension 作业以及每个
M2 Venus / M3 Stargate 作业都是 **path-gated** (路径门控):该作业会检查
文件系统并选择运行(当 wiring 文件存在时)或输出一条
GitHub Actions `::notice::` 日志说明被推迟的原因。这
保持了 CI 图在各里程碑间的稳定;一个新的 harness 会在 wiring
文件落地的瞬间,将其自身的作业从 `deferred` 翻转为 `real-work-green`。
当前 CI 状态(源自运行日志,而非徽章)记录
在 [`RUN_SUMMARY.md`](RUN_SUMMARY.md) §3 中。
## 路线图 (尚未合入代码树;参见 SCOPE.md)
- **M2 / 第 3 周,PancakeSwap v3 剩余部分。** P-6 protocol-fee 计提
边界,P-7 oracle observation cardinality monotonicity,P-2 + P-3 的植入式
CI 对,P-5 的 wrap-around 变体,在固定区块上针对真实 PancakeSwap v3 池的第一个
BSC-mainnet fork 测试,以及 Recon Chimera `Properties.sol` + `CryticTester.sol`
脚手架。
- **M2,Venus 借贷 invariants。** Account-liquidity 正确性,
collateral-factor 边界,liquidation-incentive monotonicity,XVS
reward-accrual 边界(即 2021 年
XVS-collateral 事件背后的 bug 类别)。
- **M3,Stargate-on-BSC 跨链桥 invariants。** 跨 chain-id 对的 Pool delta accounting
,LD/SD 转换安全性,credit-tracking
monotonicity。
- **M3,BNB Chain AI agent-registry harness。** 针对 2026 年技术路线图 agent
registry 规范的 Invariant + 可验证能力测试
harness (取决于该规范的公开落地)。
## 许可证
Apache License 2.0;参见 [`LICENSE`](LICENSE) 和 [`NOTICE`](NOTICE)。
## 联系方式
CaliperForge: michael@caliperforge.com, team@caliperforge.com.
标签:BSC, DeFi, Foundry, 区块链, 形式化验证, 智能合约, 测试框架