# FixedStrikeOptionTeller: create can be invoked when block.timestamp == expiry but exercise reverts

FixedStrikeOptionTeller allows minting options when block.timestamp equals expiry, but exercise reverts at that same timestamp, leaving freshly minted options unusable.

- Payout: Contest reward
- Severity: medium
- Program: Bond
- Credited: Oxhunter526
- Disclosed: 2023-06-26
- Write-up quality: 6/10
- Original: https://github.com/sherlock-audit/2023-06-bond-judging/issues/91
- Library page: https://bugbountylibrary.com/r/sherlock%3A2023-06-bond%3AM-8
- Tags: domain:web3 impact:funds-loss kind:contest platform:sherlock sev:medium tech:solidity technique:source-review vuln:business-logic

**Target:** FixedStrikeOptionTeller / OTLM claimRewards option minting
**Root cause:** create uses `uint256(expiry) < block.timestamp` while exercise uses `uint48(block.timestamp) >= expiry`, so at block.timestamp == expiry options can be minted but not exercised.
**Steps:**
1. Call OTLM.claimRewards (or claimNextEpochRewards) at block.timestamp == expiry, which invokes FixedStrikeOptionTeller.create and mints option tokens.
2. Attempt to exercise the freshly minted options in the same transaction/block; exercise reverts with Teller_OptionExpired due to `>=` check.
3. Attempt reclaim; receiver lacks the token balance so reclaim is impossible.
**How found:** Code reading comparing the boundary operators in create (`<`) versus exercise (`>=`) for the expiry timestamp.
**Insight:** When auditing time-gated logic, diff the comparison operators across all functions sharing a deadline; a `<` vs `>=` mismatch at the exact boundary can strand minted assets.
