---
title: Contracts and addresses
section: reference
order: 1
audience: integrators
sources:
  - docs/MAINNET-RUNBOOK.md:194-290
  - src/ParameterizedVault.sol:25-164
  - src/CDPVault.sol:274-328
  - src/ImdUSD.sol:19-75
  - src/SwarmFeed.sol:26-156
  - src/SwarmRelay.sol:37-134
  - src/Treasury.sol:36-323
  - src/WorkOracleFactory.sol:29-38
  - src/SwarmWorkOracle.sol:50-232
  - src/SharePriceFeed.sol:36-93
  - src/UsdPriceFeed.sol:23-96
---

# Contracts and addresses

`ParameterizedVault` is the launch vault for imdUSD, a dollar-denominated collateralised debt position (CDP) stablecoin. A position records collateral and debt for an account. Start with [What is imdUSD](../overview/what-is-imdusd.md) for the overview and naming homage.

The inventory follows the runbook's section 6. An address placeholder is not deployment evidence. Discover constructor-created contracts through the vault's getters and verify reciprocal links before integrating.

| Contract | Address | Created by; role | Fixed links and governed values |
|---|---|---|---|
| `SwarmRelay` | (waiting for mainnet launch) | Deployment prerequisite; forwards attestations and can bundle marking or liquidation. | No owner, configuration setter or upgrade path. Each call names its targets. |
| `Treasury` — standalone prerequisite | (waiting for mainnet launch) | Runbook deployment prerequisite, intended for the source-level fee-recipient reference. | Creator is fixed as `vault`. A creator without `parameters()` leaves its reserve register unavailable. Withdrawals use the source-pinned operator. This is not the vault's revenue Treasury. |
| `WorkOracleFactory` | (waiting for mainnet launch) | Deployment prerequisite; `create(maxAge_)` constructs a work oracle for its caller. | Permissionless creation, no governor or mutable configuration. Factory identity used by the vault is source-pinned. |
| `PriceFeed` | (waiting for mainnet launch) | Deployer; attested window-median IMD/ETH price. | Inherits `SwarmFeed`; signer, relayer, data chain, answer type and question policy are source-pinned. Maximum age and deviation bound are immutable constructor inputs, both (under consideration). |
| `NhiFeed` | (waiting for mainnet launch) | Deployer; attested network health index. | Same authority pattern as `PriceFeed`, with its own fixed question. Maximum age and deviation bound are (under consideration), immutable after construction. |
| `SpotFeed` | (waiting for mainnet launch) | Deployer; attested closing-block IMD/ETH price, used for the agreement guard. | Same authority pattern; distinct question and deployment. Maximum age and deviation bound are (under consideration), immutable after construction. |
| `ParameterizedVault` | (waiting for mainnet launch) | Deployer; positions, issuance, repayment, liquidation and redemption. | Immutable collateral, stablecoin, work oracle, primary/NHI/spot feeds, `parameters`, `treasury`, `usdPriceFeed`. Economics read from its own `Parameters`; no upgrade or feed-replacement path. |
| `ImdUSD` | (waiting for mainnet launch) | Vault constructor when `stablecoin_` is the zero-address sentinel; imdUSD ERC-20. | Vault binding is permanent; only that vault mints and burns. Name and symbol are imdUSD, with 18 decimals. No governor, pause or upgrade. The one-time deferred `setVault` path is not used by constructor creation. |
| `Parameters` | (waiting for mainnet launch) | `ParameterizedVault` constructor; bounded economic configuration. | Linked vault has no setter. Source-pinned governor and hard limits; delayed changes listed in [Parameters](../governance/parameters.md). |
| `Treasury` — vault-created reserve | (waiting for mainnet launch) | `ParameterizedVault` constructor; receives protocol revenue and supplies reserve collateral for redemption. | Creator is the vault; its `Parameters` governs reserve listings, feeds and retained-value factors. Operator withdrawals have no timelock. `feeRecipient()` returns this Treasury. |
| `UsdPriceFeed` | (waiting for mainnet launch) | `ParameterizedVault` constructor; combines its primary IMD/ETH price with Chainlink ETH/USD. | Immutable `imdEthFeed`; source-pinned `ETH_USD` and maximum age, (under consideration). No setter or governor. |
| `SharePriceFeed` | (waiting for mainnet launch) | Explicit deployment by the deployer if the runbook's share-pricing plan is used; adapts an ERC-4626 share conversion and underlying feed. | Immutable `shareVault` and `assetFeed`; no governance or setter. The vault constructor does not create or install it. |
| `SwarmWorkOracle` | (waiting for mainnet launch) | `WorkOracleFactory.create` when the vault receives `WORK_ORACLE_SENTINEL`; attested tally roots and work rights. | Immutable consumer vault, signer, relayer, question and identity-adapter reference; immutable maximum age, (under consideration). `wage()` reads the vault's governed parameters. |

## Constructor and read-back boundaries

`ParameterizedVault(address imdToken_, address stablecoin_, address oracle_, address priceFeed_, address nhiFeed_, address spotFeed_)` takes six contract references. The primary, health and spot feeds must be distinct deployed contracts. The collateral must have code and differ from a supplied stablecoin. A supplied work oracle must answer `mintingRights(address)`; if it exposes a well-formed `vault()`, that getter must name this vault. The sentinel factory path creates the reciprocal link during construction.

`parameters().vault()`, `treasury().vault()` and `stablecoin().vault()` must identify the vault. `oracle().vault()` identifies it for `SwarmWorkOracle`. All these addresses are (waiting for mainnet launch). No follow-up transaction is needed to bind the constructor-created contracts.

## Share pricing is a separate integration decision

`SharePriceFeed.latestValue()` multiplies `convertToAssets(1e18)` by the underlying feed value and divides by the fixed-point scale. Its output is USD per 1e18 raw share units. `Treasury.reserveValueOf`, however, expects USD per whole token and divides balances by the listed token's decimals. Those conventions coincide only for a token with 18 decimals; a direct listing of a differently scaled share feed needs normalization.

The vault does not wrap deposits, unwrap redemption payouts or automatically substitute `SharePriceFeed` for its primary price. Its own `UsdPriceFeed` multiplies the supplied primary by ETH/USD, so passing an already dollar-denominated share feed there would also require a denomination review.

TODO(collateral-integration): Resolve the runbook's share-collateral and share-reserve plan against the vault's IMD pricing and the Treasury's whole-token valuation; publish verified wiring and normalization before describing share collateral as deployed.

See [Oracle and question binding](./oracle-and-question-binding.md) for external price dependencies, [Vault functions](./vault-functions.md) for the callable surface, and [Risks](../economics/risks-and-open-questions.md) for authority assumptions.
