Skip to main content

Harbor Yield

Status: In progress (not live mainnet UX)
Repos: baofinance/harbor-yield (+ foundation on harbor PR #33)
Product overview: Harbor Yield (hyTOKENS)
Integrator standards: hy / ERC-7575

Harbor Yield is the mid-term yield stack on top of stability pools. Product framing uses three participation levels; this page tracks the contract surface. Authoritative design: doc/design.md, integrations: doc/integrations.md.

Deposit and rebalance rules (shared with product)

These rules apply at every level that touches a stability pool (or its Compounder):

RuleDetail
Mint / acquireUsers can mint haTokens and/or hsTokens, or acquire them via a market
Pool deposit (live mainnet v1/v2)Only haTokens into the collateral or Sail pool → compounding internal balance (no ERC-20 pool share)
Pool deposit (SP_v3 / pre-prod)Same ha-only rule; receive rebasing hp… ERC-20 shares — not live UX yet
Compounder depositERC-4626 deposit() takes haXXX (asset() = pegged token). Optional depositStabilityPool wraps an existing pool position — pre-prod
Pool yieldBoth pools accrue concentrated collateral yield / harvest + revenue share on haToken deposits
Rebalance payoutCollateral pool → wrapped collateral (e.g. fxSAVE / wstETH); Sail pool → hsTokens (deposited haTokens are burned). hsTokens do not earn concentrated yield on their own

Product UX: Harbor Yield. Live pool behaviour: Stability pool.

Three participation levels

This docs site uses product-facing Levels 1–3. The design doc numbers the same stack 0–2. Mapping:

Product (this site)Design docComponent
Level 1Level 0Raw stability pool
Level 2Level 1Compounder (Compounder_v1, hc…) — ERC-4626
Level 3Level 2HarborYield / hyTOKENERC-7575 share + doors
LevelUser flowContracts / shares
1Mint/buy ha/hs → deposit haTokens into collateral or Sail stability pool → claim rewards yourselfLive: SP v1/v2 compounding balances. SP_v3 hp… shares = yield branch only
2Deposit haXXX via ERC-4626 → hc…Compounder_v1 per pool
3Deposit via ERC-7575 door (wrappedCollateral or equivalent asset) → hyXXXHarborYield_v1 + HarborYieldEntry_v1
  • Level 1 (stability pools) is live on Ethereum mainnet. Levels 2 and 3 ship with Harbor Yield.
  • Compounder and HarborYield are siblings over the same pools — neither holds the other. HY holds StabilityPool positions directly plus peg-equivalent ERC-4626 vaults.
  • Sail Compounders remain available at level 2; HY baskets focus on collateral-pool holdings + equivalents (see design doc for registration).

Layer model (contracts)

LevelComponentShare / assetRole
1Stability pools (live v1/v2; → v3 on yield branch)Live: compounding balances. hp… ERC-20 shares = v3-only / pre-prodBase yield / rebalance; manual claim
2CompounderNon-rebasing ERC-4626 hc…; asset = haXXXUsable per-pool compounding
3HarborYieldERC-7575 share hy… + per-holding doorsMulti-holding basket; doors reuse ERC-4626 mutations without a separate door ERC-20
Harbor SwapRouting support for level 3 (compound / redistribute), not a yield tier

Three levels, two sibling automation products.

Foundation contracts (harbor yield branch)

PR #33 widens the data envelope and adds yield-facing hooks on the core stack:

ContractVersion on branchNotes
StabilityPoolv3ERC-20 pool shares (Solady + EIP-2612); floor clamps; clamp-then-fee withdrawals; still haToken deposits
StabilityPoolManagerv2Manager updates for v3 pools / compounding flows
Minterv3Mint/redeem ha / hs + fee paths aligned with yield consumers

Upgrade path (mainnet)

FieldValue
Scriptsscript/Deploy_StabilityPool_v3_mainnet.s.sol, script/UpgradeStabilityPool_v2_v3/
StateContinues to use BaoFactory CREATE3 + harbor_v1.state.json patterns
Live statusTreat as pre-production until upgrades are executed

Level 2 / 3 product contracts (harbor-yield)

ContractStandardRole
Compounder_v1ERC-4626One pool; compound() claims/routes rewards into that pool
HarborYield_v1ERC-7575 share (+ ERC-20)Peg basket; holds pools directly + equivalent vaults; vault(asset), redeemProportional, compound
HarborYieldEntry_v1ERC-7575 vault (ERC-4626 minus ERC-20)One door per holding; share() → hyXXX; door asset = wrappedCollateral or equivalent asset
WstETH_ERC4626_v1ERC-4626 adapterThin wrap so non-vault yield sources can be HY holdings
FieldValue
Collateral Compounder compound()Claims wCOLn → mint ha when fees allow → redeposit
Sail Compounder compound()Compounds harvest wCOLn only; does not value illiquid hs rebalance receipts
HY compound()Prices every destination end-to-end (swap + take); cheapest wins; water-fills; refusal-tolerant
hy entry/exitERC-7575 doors — not a single ERC-4626 asset() on hyXXX
Harbor Swap useDirect routes on hot path; Velora (primary) / 1inch (optional) on redistribute

Deploy phasing still tracks Swap’s consumer/yield vault phase after Minter_v3 / SP_v3 / oracles / swap registry.

See also

ResourceUse for
Harbor Yield (product)Three levels, UX
hy / ERC-7575Integrator standards surface
Harbor SwapRegistry, DEX executors, Velora
Stability poolLive v1/v2 pool behaviour (level 1)
Coverage auditPR / branch checklist
Zap contractsSeparate Maiden Voyage convenience (not HY)