Deploys markets using split-code CREATE2 (because FiraMarket exceeds the 24KB EVM contract size limit). Markets are keyed by BT + scalarRoot + initialAnchor + lnFeeRateRoot — creating the same combination twice reverts.
Functionality
Market creation
The factory validates that the BT comes from the registered YieldContractFactory and is not expired, then deploys the market using the split-code pattern (bytecode is split across two storage contracts and concatenated at deploy time).
Fee management
The factory stores:
Treasury address — Receives reserve fees from swaps
Reserve fee percent — Portion of swap fees sent to treasury
Router-specific fee overrides — Must be strictly less than the market's base fee
getMarketConfig(market, router) is called by the market on every readState to load treasury, fee overrides, and reserve percent. This means fee changes take effect on the next trade without redeployment.
Duplicate prevention
Markets are uniquely identified by their BT address and curve parameters. Attempting to create a duplicate reverts.