Repository navigation
Commit 6ae1e8e
fix: bind Incentives to the vault's live wiring in SystemSealer
INVARIANT 8 checked Incentives.owner() == ROOT_TIMELOCK but never that
config.incentives was the address CoreVault actually reads from — the
same decoy gap already closed for feeCollector/router/bufferManager/
healthRegistry, just missed for this component. A correctly-governed
Incentives contract the vault doesn't point to could still pass
canSeal()/verifyAndSeal().
_verifyLiveState now checks vault.incentives() == config.incentives
before the ownership check, matching the existing pattern. Added
test_canSeal_and_verifyAndSeal_agree_whenIncentivesIsADecoy, wiring a
real Incentives contract into the vault and proving both canSeal() and
verifyAndSeal() reject a separate, correctly-owned decoy.1 parent 217971b commit 6ae1e8e
2 files changed
Lines changed: 31 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
358 | 358 | | |
359 | 359 | | |
360 | 360 | | |
361 | | - | |
| 361 | + | |
362 | 362 | | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
363 | 367 | | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
364 | 371 | | |
365 | 372 | | |
366 | 373 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
38 | 38 | | |
39 | 39 | | |
40 | 40 | | |
| 41 | + | |
| 42 | + | |
41 | 43 | | |
42 | 44 | | |
43 | 45 | | |
| |||
228 | 230 | | |
229 | 231 | | |
230 | 232 | | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
231 | 254 | | |
232 | 255 | | |
233 | 256 | | |
| |||
0 commit comments