The current deployment targets the M2 (External Testnet) milestone on Ethereum Sepolia.
These assumptions reflect testnet conditions and may evolve as the protocol progresses toward
M3 (Mainnet Ready). Do not use this deployment with real funds.
Business Assumptions
B1. Collateral Token
B1. Collateral Token
The protocol uses a USDC-like ERC-20 token with 6 decimals as its sole collateral currency.
On Sepolia testnet, this is a mock USDC contract deployed alongside the protocol. In production,
the protocol will use canonical USDC or an equivalent USD-denominated stablecoin.Key properties assumed of the collateral token:
- Standard ERC-20 interface with
transfer,transferFrom, andapprove - 6 decimal precision
- No rebasing, fee-on-transfer, or other non-standard mechanics
- Sufficient liquidity and price stability (1:1 USD peg)
B2. Settlement Currency
B2. Settlement Currency
All settlement is denominated and executed in USDC. The protocol is a non-deliverable FX forward
product — there is no physical delivery of EUR. There is no EURC token or EUR-denominated
collateral involved.PnL is calculated in USD terms (using the EUR/USD exchange rate) and settled entirely in USDC
between the trader’s margin account and the liquidity pool.
B3. Multiple Positions Per Trader
B3. Multiple Positions Per Trader
Each trader may hold multiple open forward contracts concurrently. Positions are fully independent
under the isolated margin model:
- Each position has its own locked margin, entry price (strike), and fixing timestamp
- The entry price is set at open time using
OracleForward(t_open, FixingTimeUtc)plus pricing adjustments (spread, premium/discount), and is stored immutably - Liquidation of one position does not affect others
- Bad debt on one position is absorbed by the pool, not cross-marginalized
Technical Assumptions
T1. Forward Price Source
T1. Forward Price Source
The protocol requires an authoritative forward price
OracleForward(t, FixingTimeUtc) for EUR/USD
that can be obtained for any maturity timestamp FixingTimeUtc at the current time t.The current implementation derives forward prices as follows:- Spot price: Sourced from the Pyth Network EUR/USD price feed onchain
- Forward prices: Computed off-chain by the Publisher service using interest-rate parity
(covered interest rate parity formula applied to EUR and USD benchmark rates) and submitted
onchain via
OracleModule.publishForwardRound() - Safeguards: Onchain checks enforce price movement limits, deviation bounds vs. spot, and minimum update spacing to prevent erroneous or manipulated prices
The forward price formula uses covered interest rate parity:
F(t, T) = S(t) * (1 + r_USD * tau) / (1 + r_EUR * tau) where tau = (T - t) in year
fractions, r_USD and r_EUR are the respective risk-free rates, and S(t) is the current
spot rate.T2. Fixing and Maturity Time Rule
T2. Fixing and Maturity Time Rule
Onchain maturity settlement is anchored to a specific fixing time on business days:
- Fixing time: 16:00 UTC (configurable via
fixingHourUtc,fixingMinuteUtc,fixingSecondUtc) - Maturity calculation:
FixingTimeUtc = NextBusinessDayAt16UTC(OpenTime + TenorSeconds[tenor])wheretenoris one of the supported durations (1D, 1W, 1M, or TEST_60S on testnet) - Business day definition (M2): Monday through Friday. Weekends are excluded. There is no holiday calendar — all weekdays are treated as business days.
- Weekend roll: If the raw maturity falls on Saturday, it rolls +2 days to Monday. Sunday rolls +1 day to Monday.
T3. Pricing Adjustments
T3. Pricing Adjustments
Two pricing adjustments modify the raw forward price:
- Premium/Discount Adjustment (
PremiumDiscountAdj): Applied to incentivize pool exposure rebalancing. When the pool is skewed long, short positions receive a favorable adjustment, and vice versa. Controlled bypremiumDiscountAdjBpsandbaseSpreadBpsin Config. - Early termination pricing: Positions closed before maturity use
OracleForward + PremiumDiscountAdj + TerminationFee, whereOracleForwardis the current forward for the same maturity timestamp as the position. TheTerminationFeecompensates the pool for the early unwind.
T4. Weekend Pricing
T4. Weekend Pricing
The oracle module supports a distinct “weekend mode” pricing policy that can affect how forward
prices are treated when markets are closed. This mechanism accounts for the fact that FX spot
markets are closed on weekends, so price feeds may become stale.On Sepolia testnet, weekend mode can be disabled to allow continuous testing without interruption.
T5. Entry Price Immutability
T5. Entry Price Immutability
Each position’s entry price (strike) is determined at open time and stored immutably:This price never changes for the lifetime of the position. All PnL calculations (unrealized
during the position’s life, and realized at settlement) reference this fixed entry price against
the current or fixing price. This makes position economics fully deterministic from the moment
of opening.
Operational Assumptions
O1. Off-Chain Keeper Network
O1. Off-Chain Keeper Network
Liquidations and batch settlements are executed by an off-chain Keeper service that monitors
onchain state and submits transactions when conditions are met:
- Liquidation: The Keeper continuously monitors position equity against maintenance margin.
When
equity < maintenanceMargin, it callsSettlementEngine.liquidate(). - Settlement: After maturity and fixing price recording, the Keeper calls
SettlementEngine.batchSettle()to process matured positions.
O2. Withdrawal Restrictions
O2. Withdrawal Restrictions
Withdrawals from the liquidity pool may be locked or utilization-limited to prevent bank-run
dynamics while the risk model is being validated:
- Utilization cap (
maxUtilizationBps): LPs cannot withdraw if it would push pool utilization (total notional / total assets) above the configured cap - Future consideration: Additional time-lock or queue-based withdrawal mechanisms may be introduced in later milestones
Assumption Dependencies
The following table summarizes which protocol components depend on each assumption:| Assumption | Depends On | If Violated |
|---|---|---|
| B1. USDC collateral | MarginAccounts, PoolVault | Token incompatibility, precision errors |
| B2. USD settlement | SettlementEngine, PnL math | N/A (fundamental design constraint) |
| T1. Forward price source | OracleModule, Publisher | Positions cannot be opened or priced |
| T2. Business day rule | DateTime library, PositionManager | Incorrect fixing timestamps |
| O1. Keeper availability | SettlementEngine | Delayed settlements and liquidations |
| O2. Withdrawal limits | PoolVault | Potential liquidity shortfall |