Market state and fees
Do not hard-code the illustrative mint fees from the product fees page (~0.25% / ~1%). Read on-chain state from the market minter and stability pool manager.

Views to poll (minter)
| View | Meaning |
|---|---|
collateralRatio() | Collateral value ÷ ha (pegged) value. Rebalance when this is below the manager threshold (often documented as ~130% — read rebalanceThreshold()). Distinct from mint-time 100% efficiency (ha+hs NAV ≈ collateral). |
leverageRatio() | Current Sail leverage (capped at 20x). |
peggedTokenPrice() / leveragedTokenPrice() | See Pricing. |
mintPeggedTokenIncentiveRatio() (and redeem / leveraged siblings) | Signed fee/discount; 1 ether = disallow. |
peggedTokenBalance() / leveragedTokenBalance() / collateralTokenBalance() | Accounting balances for this minter. |
config() | Incentive Config (CR bands and ratios). Decode against the Harbor Config struct in source — do not assume a stable ABI offset without regenerating from the live implementation. |
*DryRun(...) | Full quote for a size — Mint and redeem. |
Stability pool manager
| View | Meaning |
|---|---|
rebalanceThreshold() | CR below which rebalance() is allowed |
rebalanceBountyRatio() | Keeper bounty as a ratio of liquidation proceeds |
Call rebalance(bountyReceiver, minPeggedLiquidated) only when CR is below threshold. Details: Stability pool manager, Rebalance flow.
Per-market parameters
Fee bands and exact rebalance thresholds are per minter / manager, not global constants. Until each market page lists a snapshot table:
eth_callconfig()andrebalanceThreshold()on that market’s contracts.- Cache in your indexer; refresh on
updateConfig/ threshold-setting events (owner-only).
Incident / risk context: fxUSD–ETH Sail rebalance remediation, Risk considerations.
Protocol revenue (off-chain split)
On-chain mint/redeem fees accrue via feeReceiver. How Harbor allocates protocol revenue (pools / TIDE / Yield Share) is documented in TIDE tokenomics — that waterfall is not the same as the minter incentive ratio for a single tx.