Context: oracle_verify_milestone (contracts/crowdfunding/src/lib.rs ~750) marks a milestone verified based on one caller's assertion (the registered oracle) and the milestone completion path releases the escrowed tranche.
Problem: A single compromised or coerced oracle can green-light a fake milestone and unlock the milestone tranche; there is no multi-signal (independent assessor + oracle) and no challenge window on the release.
Proposed approach: Require oracle + second check (e.g. builder attestation or a second oracle quorum), add a dispute window before tranche release, and emit MilestoneVerified with the verifier list for audits.
Acceptance criteria: single-source verification cannot release funds; challenge path prevents release within the window; tests cover both.
Context:
oracle_verify_milestone(contracts/crowdfunding/src/lib.rs ~750) marks a milestone verified based on one caller's assertion (the registered oracle) and the milestone completion path releases the escrowed tranche.Problem: A single compromised or coerced oracle can green-light a fake milestone and unlock the milestone tranche; there is no multi-signal (independent assessor + oracle) and no challenge window on the release.
Proposed approach: Require oracle + second check (e.g. builder attestation or a second oracle quorum), add a dispute window before tranche release, and emit
MilestoneVerifiedwith the verifier list for audits.Acceptance criteria: single-source verification cannot release funds; challenge path prevents release within the window; tests cover both.