# Contract addresses

The canonical source of truth for deployed contract addresses is the [`publish/{chain}/prod/versions.json`](https://github.com/dhedge/V2-Public/tree/master/publish) file in the contracts repo. This page summarizes the contracts you are most likely to need and points you at that source.

**Don't hard-code addresses from stale docs.** Governance can swap implementations via proxy upgrades, and new chains are added periodically. Read the deployment data at build time or at runtime.

## Core contracts per chain

Most Chamber deployments share this core set; a few contracts ship only where the feature is enabled. Contract names are stable across chains; only the addresses differ.

| Contract           | Role                                                                                                                        |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------- |
| `PoolFactory`      | Creates new vaults; owns the Guard System registry; exposes `getAssetGuard()` and `getContractGuard()` view functions       |
| `PoolLogic`        | Implementation contract for every vault. Handles `deposit`, `withdraw*`, `execTransaction`                                  |
| `PoolManagerLogic` | Implementation contract for every vault's manager/permissions surface. Handles `changeAssets`, fee settings, privacy toggle |
| `AssetHandler`     | Central pricing registry. Resolves USD value for every supported asset                                                      |
| `EasySwapperV2`    | Convenience contract for simplified deposit/swap routing                                                                    |
| `Governance`       | Admin contract that registers new contract and asset guards                                                                 |

## Where to get addresses

**Source of truth:** the [`publish/`](https://github.com/dhedge/V2-Public/tree/master/publish) directory in the contracts repo.

* `publish/ethereum/prod/versions.json`
* `publish/ovm/prod/versions.json` (Optimism)
* `publish/polygon/prod/versions.json`
* `publish/base/prod/versions.json`
* `publish/arbitrum/prod/versions.json`
* `publish/hyperevm/prod/versions.json`
* `publish/plasma/prod/versions.json`

Each file is a JSON object containing the full set of contract addresses, asset configurations, and guard registrations for that chain. If you're using the [SDK](/build/sdk.md), these are wired in for you — you shouldn't need to read them directly unless you're doing raw contract calls.

## Vault addresses

Every vault is a `PoolLogic` proxy deployed by the `PoolFactory`. Vault addresses are not listed here — they are created over time by managers. Discover vaults via:

* [**Subgraph**](/build/subgraph.md) — the most ergonomic way to list vaults, filter by chain, manager, or denomination asset.
* **App UI** — vault discovery via search and leaderboard.
* **Factory events** — the `PoolFactory.FundCreated` event logs every new vault.

## Guard addresses

Contract guards and asset guards are not hard-coded in the SDK or docs. Resolve them at runtime:

```solidity
// Is this protocol callable from a vault?
address guard = PoolFactory(factory).getContractGuard(targetProtocol);
require(guard != address(0), "not whitelisted");

// Is this asset supported?
address assetGuard = PoolFactory(factory).getAssetGuard(asset);
require(assetGuard != address(0), "asset not supported");
```

Or from TypeScript via the SDK, which wraps these calls.

## Upgrades and proxies

`PoolLogic` and `PoolManagerLogic` are implementation contracts behind per-vault proxies. Implementation upgrades apply to every vault immediately. Upgrades are `onlyOwner` on the factory, which is controlled by Chamber governance. See [Governance](/governance-and-token/overview.md) for the current custody arrangement.

## See also

* [Deployment matrix](/build/deployment-matrix.md) — which chains ship with which features
* [Guard system](/build/guard-system.md) — how to enumerate supported protocols and assets
* [SDK](/build/sdk.md) — the typed wrapper over these contracts


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.chamberfi.com/build/contract-addresses.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
