[ Threat Log ]
[ Medium ]
1 finding- ✓ RemediatedCORE-06Medium
Community-rewards slice was counted as circulating, diluting backer refunds on a freeze (on-chain denominator + the off-chain Merkle builder that feeds it)
[ Low ]
4 findings- ✓ RemediatedVTR-07Low
Challenge resolution could run after a campaign left the funded state, and a pending challenge stake could be left parked on freeze / emergency refund
- ✓ RemediatedDEP-1Low
A default deploy could leave the platform fee recipient set to the throwaway deployer key, baked immutably into per-campaign fee claimers
- ◇ Accepted riskREG-01Low
The majority-supply registration guard is bypassable for liquid tokens via flash-borrowed supply (the launch registration path is unaffected)
- ○ Tracked / openVTR-05Low
Testnet-twin refund merkle-root commit guard diverges from mainnet (testnet-only; no delay bypass either side)
[ Informational ]
5 findings- ✓ RemediatedDEP-4/5/6Informational
Deploy validation + the wiring verifier were missing some guards (deployer-key collisions, the factory fee wallet, the staking signer)
- ✓ RemediatedSTK-claimInformational
A staker-reward claim could silently no-op after a long-delay rescue, leaving the claim advertised forever
- ✓ RemediatedLP-implInformational
The LP fee-claimer implementation left its initializer open (clones unaffected); the LP locker emitted no events on privileged setters
- ✓ RemediatedDOC-rolesInformational
The privileged-roles document described the per-escrow admin as the multisig; on-chain it is the operations hot key
- › DeferredPAUSE-finalizeInformational
finalize() is reachable from a paused campaign, so a deliberate pause does not halt early finalization