# Total Supply is not guaranteed and is not deterministic.

Backd Minter applies stale inflation rate across decay boundary, letting total supply exceed the 268435456 token cap.

- Payout: Contest reward
- Severity: high
- Program: Backd
- Credited: Picodes
- Disclosed: 2022-07-19
- Write-up quality: 6/10
- Original: https://github.com/code-423n4/2022-05-backd-findings/issues/46
- Library page: https://bugbountylibrary.com/r/c4%3A2022-05-backd%3AH-02
- Tags: domain:web3 impact:integrity kind:contest platform:code4rena sev:high tech:solidity technique:source-review vuln:accounting-error vuln:business-logic

**Target:** Minter.sol tokenomics inflation update
**Root cause:** _executeInflationRateUpdate applies the current inflation rate over the whole elapsed period before checking decay, so a stale higher rate is used across the decay boundary, over-inflating totalAvailableToNow.
**Steps:**
1. Read Minter.sol _executeInflationRateUpdate: totalAvailableToNow += currentTotalInflation * (block.timestamp - lastEvent) before decay check.
2. Note decay triggers only when block.timestamp >= lastInflationDecay + _INFLATION_DECAY_PERIOD.
3. Avoid calling mint/executeInflationRateUpdate across the decay point so the pre-decay rate spans the boundary.
4. Observe totalAvailableToNow grows beyond the documented 268435456 cap.
**How found:** Compared README tokenomics invariant (supply capped at 268435456) against code ordering in _executeInflationRateUpdate, spotting the rate update precedes the decay check.
**Exploitation:** No attacker action needed; any lapse in calling executeInflationRateUpdate around the decay point causes the stale rate to be applied, minting more than the intended cap.
**Insight:** When a contract enforces a cap via time-based rate decay, check whether the rate is applied over the full elapsed interval before the decay boundary is evaluated; split the interval at the boundary.
