# FiraMarketFactory

{% hint style="info" %}
**Source:** `src/fira_bonding/core/Market/v3/FiraMarketFactory.sol`
{% endhint %}

## Contract summary

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.
