Skip to main content

Addresses and ABIs

Machine-readable address JSON and ABI JSON ship under this docs site’s static integrator package. Market pages remain the human source of truth for proxies; bind to the proxy, not a historical implementation.

Availability: @harbor/sdk 0.2.0 is installable from GitHub (npm install github:baofinance/harbor-sdk#f7dcd51853bf1efa083d3149b3b90dc710525f1a). Address and ABI JSON below are docs-hosted from static/integrators/. npm registry publication of the SDK (and a future ABI npm package) is pending. There is no public REST/WebSocket API.

Published package (mainnet v1)

ArtifactURL (docs host)
Manifest/integrators/manifest.json
Addresses/integrators/addresses/mainnet-v1.json
Minter ABI/integrators/abis/Minter.json
ERC-20 ABI/integrators/abis/ERC20.json
Stability pool ABI/integrators/abis/StabilityPool.json
Stability pool manager ABI/integrators/abis/StabilityPoolManager.json
Genesis ABI/integrators/abis/Genesis.json
Harbor price aggregator ABI/integrators/abis/HarborPriceAggregator.json
Wrapped price oracle ABI/integrators/abis/WrappedPriceOracle.json

Local paths in this repo: static/integrators/…. The thin SDK (@harbor/sdk) vendors the same address map and core ABIs.

HarborPriceAggregator.json and WrappedPriceOracle.json currently publish the same Harbor view fragment (latestAnswer / getPrice). Use either name; prefer HarborPriceAggregator for aggregators and WrappedPriceOracle when matching minter IWrappedPriceOracle naming.

StabilityPoolManager.json is intentionally narrow: MINTER + Harvested for harvest-event indexing. It does not expose the full pool registry or harvest entry points — use the market’s manager address with a full forge ABI (or expand this artifact later) if you need those calls.

Each market entry includes status:

StatusMeaning
liveDeployed mainnet markets (ETH / BTC / EUR / USD families with addresses published here)
coming-soonReserved for stacks that are not yet address-complete in this package
relaunch-pendingGOLD / SILVER / MCAP — do not treat as active product

Address field notes

FieldMeaning
wrappedCollateralTokenToken the minter holds / pulls (e.g. fxSAVE, wstETH)
underlyingCollateralTokenUnwrap / zap input when it differs from wrapped (e.g. stETH under wstETH)
collateralTokenApp/config alias for the collateral the UI labels — often equals wrapped or underlying depending on market; prefer wrappedCollateralToken + underlyingCollateralToken for integrations
Zap / optional keysgenesisZap, peggedTokenZap, leveragedTokenZap may be omitted or empty when unused
Zero address (0x000…0)Historical placeholder (e.g. unused rebalancePool*) — not a deployed contract; treat as absent

Missing keys vs 0x000…0: consumers should treat absent keys and zero addresses as “not deployed / not used” unless a market page says otherwise.

startBlock: integer when known; null when the deployment block is unknown (e.g. some relaunch-pending or USD entries). Consumers must handle null explicitly — do not treat it as block 0.

Market id key order

Canonical integrator keys prefer <index>-<collateral> (e.g. eth-fxusd, btc-steth, usd-steth). Some live keys still use <collateral>-<index> (e.g. steth-eur, steth-gold) because they mirror harbor-app today.

Follow-up for harbor-app: normalize app marketIds to the same index-collateral order as this address book (or the reverse — one order everywhere), then publish aliases for every renamed former key. Until then, use marketIdAliases and the per-market page keys; do not invent a third spelling.

Market id aliases: app steth-usd / wbtc-usd ↔ integrator JSON usd-steth / usd-wbtc (marketIdAliases in mainnet-v1.json).

Other address sources

SourceUse
Per-market tech pages, e.g. haETH / fxUSDHuman lookup: minter, tokens, pools, oracle, zaps
Generic CREATE3 registryProxy keys and salts
deployments/mainnet/harbor_v1.state.jsonFull deployment inventory (proxies / implementations)
Zap contractsGenesis / minter zap addresses
Harbor SwapRouting registry (Yield / keepers)
Price oracle inventoriesAggregator addresses (prefer market-wired on the pair page when inventory lists an alias)

ABI notes

  • Prefer the published JSON above over random explorer copies; always verify against the implementation behind the UUPS proxy.
  • Minter surface used by integrators / SDK: mint* / redeem* (+ *DryRun), peggedTokenPrice, leveragedTokenPrice, collateralRatio, leverageRatio, config.
  • Aggregators expose Harbor-shaped latestAnswer() (four uint256s, 18 decimals) — not AggregatorV3 latestRoundData. See Pricing and Oracle adapters.
  • Full forge artifacts may later replace this docs-hosted package via npm; the URL layout and field names are intended to stay stable.

Version matrix (Ethereum mainnet)

Split live product from the Harbor Yield branch (not mainnet UX yet):

SurfaceLive mainnet todayYield / pre-prod (harbor-yield)
MinterMinter_v2 proxies (Sail mint fix)Minter_v3 on yield branch
Stability poolv1 / v2 compounding balancesStabilityPool_v3 ERC-20 shares (hp…)
Stability pool managerv1 (two immutable pools)v2 with yield hooks
Price aggregatorsv3 proxy / v4 immutable (see pair page)Yield peg oracles as needed
Compounder / hyCompounder_v1 (ERC-4626), HarborYield_v1 (ERC-7575) — hy / ERC-7575

Do not assume ERC-20 pool shares or hy doors on live markets.

  • Function reference: Minter
  • Consumer guide: SDK