Skip to content

Rebase Flow

Trigger: A material real-world event shifts market probability on one active position, widening the gap between modeled and market NAV. Caller: Governance (operator)

Purpose

A rebase is a controlled, downward adjustment of a position's entry price. It acknowledges market reality without fully writing off the position — used when the outcome is still uncertain but the current model is overstating value.

Steps

  1. Material event occurs affecting one market's probability (e.g., key evidence emerges, odds shift significantly).

  2. Operator observes that positionMarketValue(slotIndex) has dropped materially below positionModeledValue(slotIndex).

  3. Operator selects a new entry price that:

  4. Is at or above the current market price: newEntryPrice >= adapter.currentPrice()
  5. Is below the current modeled price: newEntryPrice <= _modeledPrice(position)

  6. Operator calls vault.rebasePosition(slotIndex, newEntryPrice, newMaturity).

  7. Vault enforces constraints on-chain:

    require(newEntryPrice <= _modeledPrice(position));
    require(newEntryPrice >= adapter.currentPrice() || newEntryPrice == 0);
    require(
        block.timestamp >= position.lastRebase + 7 days
        || newEntryPrice == 0    // cooldown waived for zero (write-off via rebase)
    );
    

  8. Position struct updated:

  9. entryPrice = newEntryPrice
  10. maturity = newMaturity
  11. lastRebase = block.timestamp

  12. PositionRebased(slot, oldEntryPrice, newEntryPrice, newMaturity) emitted.

  13. Accrual restarts from the new lower base. The modeled price starts from newEntryPrice and accrues linearly to $1.00 over the remaining duration.

  14. Aggregate modeled NAV recalculates — the gap may narrow enough to unpause the system.

Constraints in Detail

Constraint Rule Rationale
Downward only newEntryPrice ≤ _modeledPrice(position) Prevents using rebase to inflate NAV
At or above market newEntryPrice ≥ adapter.currentPrice() Prevents rebasing to an impossible level below current market
Zero exception newEntryPrice == 0 bypasses both constraints above Allows write-off path via rebase
7-day cooldown block.timestamp ≥ lastRebase + 7 days Prevents serial rapid rebases that could systematically drain modeled NAV
Cooldown waived for zero Zero-price rebase always allowed Write-offs are time-sensitive

Rebase vs. Write-Off

Use Rebase When Use Write-Off When
Outcome still uncertain — YES possible but not certain Outcome is certain — YES will resolve
Market price has dropped but position has residual value NO shares are effectively worthless
Gap can be partially closed by adjusting the model Full position should be zeroed immediately

Effect on the System

After a rebase: - aggModeledNAV decreases (lower entry price → smaller modeled value) - aggMarketNAV is unchanged (market price is unchanged) - Gap may narrow (if the rebase brings modeled below the pause threshold) - Gap may remain above 1500 bps — system stays paused - Share price drops proportionally to the modeled NAV decrease