MettaChain/PropChain-contract
Replace manual `unwrap`/`expect` in production contracts with graceful error propagation
Closed
#742 opened on Jul 23, 2026
High ComplexityRustStellar Waveenhancementhelp wanted
Repository metrics
- Stars
- (1 star)
- PR merge metrics
- (PR metrics pending)
Description
Problem Statement
60+ instances of .unwrap()/.expect() in production code paths across governance, property-management, sanctions, prediction-market, etc.
Why it matters
An unwrap in a paid user path is a denial-of-service vector and a gas bomb on bug-fix deployments.
Technical Context
Replace each unwrap() with ? or a typed error variant. Reserve unwraps for #[cfg(test)].
Expected Outcome
grep -rE '\.unwrap\(\)|\.expect\(' contracts/*/src/lib.rs returns 0 lines outside #[cfg(test)].
Acceptance Criteria
- Production unwraps removed.
- Tests unchanged in count.
- Kani harness
prove_no_panic_in_storage_round_trip. - Stack-overflow review: deep recursion removed.
Implementation Notes
Branch-by-branch, smallest to largest. Add safe_unwrap! macro in propchain-traits.
Files or modules likely to be affected
Every contracts/**/src/lib.rs.
Dependencies
None.
Difficulty level
MEDIUM.
Estimated effort
L (~1–2 engineer-weeks).