> ## Documentation Index
> Fetch the complete documentation index at: https://docs.yieldpoint.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Contracts

> Deployed YieldPoint contract addresses, plus the contract layer organization and inheritance chains.

YieldPoint deploys on Base (hub) and two spoke chains (Avalanche and Katana). Contract state lives on the hub; spoke chains hold tokens and interact with the hub via LayerZero messages. This page lists the deployed addresses for each chain, then walks through the contract architecture: layer organization, vault inheritance, the LayerZero integration, and a reference table of the key contracts.

## Deployed addresses

<Note>
  The `UTY` contract on both Avalanche and Katana uses the same address as `UTY` on Base. Similarly for `yUTY`. This is intentional — YieldPoint used `CREATE3` to produce identical addresses across EVM chains for contracts deployed with the same deployer and salt, so you can hard-code one address per token and route by chain ID.
</Note>

### Base (hub)

* **Chain ID:** `8453`
* **LayerZero EID:** `30184`

| Contract                           | Address                                      | Notes                                                                                     |
| ---------------------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------- |
| `UTY vault`                        | `0xBA515304d8153c4b162dC79f867E152DF9c127eb` | ERC-7540 async vault. Deposit USDC to mint UTY 1:1.                                       |
| `UTY adapter` (`ShareOFTAdapter`)  | `0xC6fE7C5010621Ab3CA5F4C018fAd632f78b4D3f1` | Lockbox adapter for cross-chain UTY transfers.                                            |
| `yUTY vault`                       | `0xBa515EEd0119aCB7CFE8fAb3ACD6b362f3ed5319` | ERC-7540 async vault for yUTY shares.                                                     |
| `yUTY adapter` (`ShareOFTAdapter`) | `0xCfD564bbf4e50A248835aCe8Ca889f73217162d4` | Lockbox adapter for cross-chain yUTY transfers.                                           |
| `yUTY composer`                    | `0x2eF787561f3A79371Ee1165B7BeE6dc6ffB09832` | Hub-side cross-chain message handler for yUTY deposits and redemptions from spoke chains. |
| `USDC` (external)                  | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` | USDC on Base. The underlying asset for UTY.                                               |

Base is the hub chain — all vault state, share price, and withdrawal queue management lives here. UTY is minted and redeemed directly on Base; cross-chain UTY operations go through the adapter. yUTY is minted and redeemed on Base (either directly or via cross-chain composer calls from spokes).

### Avalanche (spoke)

* **Chain ID:** `43114`
* **LayerZero EID:** `30106`

| Contract                  | Address                                      | Notes                                                                                                                                     |
| ------------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `UTY OFT`                 | `0xBA515304d8153c4b162dC79f867E152DF9c127eb` | Mint/burn OFT on Avalanche. Same address as the Base UTY vault via CREATE3.                                                               |
| `yUTY OFT`                | `0xBa515EEd0119aCB7CFE8fAb3ACD6b362f3ed5319` | Mint/burn OFT on Avalanche. Same address as the Base yUTY vault via CREATE3.                                                              |
| `yUTY VaultInterface`     | `0x110d9c781D30A99f61154b5d696772AcC941a7FC` | Spoke-side proxy for cross-chain yUTY deposits and redemptions. Charges flat fees on cross-chain calls.                                   |
| `yUTY composer` (hub ref) | `0x2eF787561f3A79371Ee1165B7BeE6dc6ffB09832` | LayerZero peer reference — same address as the hub composer on Base. Not deployed on Avalanche; listed as the cross-chain routing target. |

#### Avalanche flat fees

| Fee                    | Value       | Raw uint256 (18 decimals) |
| ---------------------- | ----------- | ------------------------- |
| `depositFlatFee` (UTY) | `0.14 UTY`  | `140000000000000000`      |
| `redeemFlatFee` (yUTY) | `0.21 yUTY` | `210000000000000000`      |

Fees are charged by the spoke `yUTY VaultInterface` on cross-chain deposit and redeem calls. They cover the per-message LayerZero gas cost for spoke-to-hub and hub-to-spoke routing. The fees are held as token balances in the `VaultInterface` contract and swept periodically by the operations role.

### Katana (spoke)

* **Chain ID:** `747474`
* **LayerZero EID:** `30375`

| Contract                  | Address                                      | Notes                                                                                                                                  |
| ------------------------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `UTY OFT`                 | `0xBA515304d8153c4b162dC79f867E152DF9c127eb` | Mint/burn OFT on Katana. Same address as the Base UTY vault via CREATE3.                                                               |
| `yUTY OFT`                | `0xBa515EEd0119aCB7CFE8fAb3ACD6b362f3ed5319` | Mint/burn OFT on Katana. Same address as the Base yUTY vault via CREATE3.                                                              |
| `yUTY VaultInterface`     | `0x4e1a5a4279241f197b307d69bC23fc5aE2461caC` | Spoke-side proxy for cross-chain yUTY deposits and redemptions. Charges flat fees on cross-chain calls.                                |
| `yUTY composer` (hub ref) | `0x2eF787561f3A79371Ee1165B7BeE6dc6ffB09832` | LayerZero peer reference — same address as the hub composer on Base. Not deployed on Katana; listed as the cross-chain routing target. |

#### Katana flat fees

| Fee                    | Value       | Raw uint256 (18 decimals) |
| ---------------------- | ----------- | ------------------------- |
| `depositFlatFee` (UTY) | `0.14 UTY`  | `140000000000000000`      |
| `redeemFlatFee` (yUTY) | `0.21 yUTY` | `210000000000000000`      |

Fees are charged by the spoke `yUTY VaultInterface` on cross-chain deposit and redeem calls, same pattern as Avalanche.

*Addresses sourced from the YieldPoint contracts repo at commit `730f599e` on 2026-04-07. Re-sync when the contracts repo deploys new addresses.*

## Architectural layers

The YieldPoint contracts are organized into four architectural layers plus a LayerZero integration column. Each layer depends on the layer below it: Examples extend Extensions, which extend Core, which implements Interfaces. The LayerZero column sits in parallel with its own internal structure.

<Tree>
  <Tree.Folder name="Examples (deployable)" defaultOpen>
    <Tree.File name="UTY" />

    <Tree.File name="yUTY" />
  </Tree.Folder>

  <Tree.Folder name="Extensions (mixins)" defaultOpen>
    <Tree.File name="UTYAsyncVaultV1Custodian" />

    <Tree.File name="UTYAsyncVaultV1Instant" />

    <Tree.File name="UTYAsyncVaultV1Ethena" />

    <Tree.File name="ERC20AuthorizationUpgradeable" />

    <Tree.File name="PausableWithPauserAuth" />
  </Tree.Folder>

  <Tree.Folder name="Core (abstract base)" defaultOpen>
    <Tree.File name="UTYAsyncVaultV1" />
  </Tree.Folder>

  <Tree.Folder name="Interfaces">
    <Tree.File name="IUTYAsyncVaultV1" />

    <Tree.File name="IERC7540" />

    <Tree.File name="IERC7575Minimal" />

    <Tree.File name="IStakedUSDeCooldown" />
  </Tree.Folder>

  <Tree.Folder name="LayerZero integration" defaultOpen>
    <Tree.File name="ShareOFTAdapter" />

    <Tree.File name="UTYVaultComposer" />

    <Tree.File name="OFTExtended" />

    <Tree.File name="UTYVaultInterface" />
  </Tree.Folder>
</Tree>

The layers are listed in dependency order — top to bottom matches the dependency direction. Test mocks are not part of the runtime dependency graph and are omitted from this view.

## Vault inheritance

### UTYAsyncVaultV1 (abstract base)

The base vault inherits from seven upgradeable OpenZeppelin and YieldPoint contracts:

* `ERC4626Upgradeable`
* `ERC20AuthorizationUpgradeable` (EIP-3009)
* `Ownable2StepUpgradeable`
* `AccessControlEnumerableUpgradeable`
* `UUPSUpgradeable`
* `ReentrancyGuardUpgradeable`
* `PausableUpgradeable`

### UTY vault configuration

`UTY` extends `UTYAsyncVaultV1` with two extensions plus an override:

* `UTYAsyncVaultV1Custodian` — adds the custodian sweep, `totalManagedAssets` tracking, `totalAssets()` override, and emergency write-down via `reduceTotalManagedAssets()`
* `UTYAsyncVaultV1Instant` — adds the instant redemption path below a configurable threshold
* `donate()` is overridden to revert

<Warning>
  **Why `donate()` reverts for UTY.** The UTY vault maintains a strict 1:1 peg with USDC. In a standard ERC-4626 vault, anyone can call `donate()` to add assets without minting shares, which increases the exchange rate for all shareholders. For UTY, this would break the 1:1 guarantee — if someone donated 1000 USDC, existing UTY holders would suddenly have shares worth more than 1 USDC each. By reverting on `donate()`, the UTY vault ensures the exchange rate can never deviate from 1.0. This is intentional and critical to UTY's design as a stablecoin, not a yield-bearing token. (The yUTY vault, by contrast, allows donations — this increases the exchange rate for existing shareholders, which is the desired behavior for a yield vault.)
</Warning>

### yUTY vault configuration

`yUTY` extends `UTYAsyncVaultV1` directly, without the custodian or instant extensions:

* Async ERC-7540 vault without the `UTYAsyncVaultV1Instant` extension
* 18-decimal shares (no decimals offset; inflation defense via seed deposit)

## LayerZero contracts

The LayerZero integration layer splits between hub-side and spoke-side contracts.

### Hub-side (Base)

* `ShareOFTAdapter` — OFT adapter wrapping the vault's share token. Uses the lockbox model: tokens sent cross-chain are locked in the adapter, not burned. Inherits `PausableWithPauserAuth` for bridge-level pause control.
* `UTYVaultComposer` — handles incoming cross-chain `lzCompose` messages, executes vault operations on behalf of the caller, and manages refund recovery for failed composes. Extends `VaultComposerSyncPatched` (the YieldPoint patched version of the LayerZero base composer) and `Ownable2Step`.

### Spoke-side (Avalanche, Katana)

* `OFTExtended` — the UTY and yUTY token representation on spoke chains. Mint/burn model: tokens arriving from the hub are minted, tokens leaving are burned. Extends `OFTUpgradeable`, `ERC20AuthorizationUpgradeable`, and `Ownable2StepUpgradeable`.
* `UTYVaultInterface` — the spoke-chain proxy that makes yUTY deposits and redemptions feel local to a user on Avalanche or Katana. Charges flat fees on cross-chain calls (see [Tokens and fees](/protocol/architecture/tokens-and-fees)). Uses `AccessControl`, ERC-7201 namespaced storage, and maintains a per-user pending-claims counter that prevents double-spending of claim credits.

## Key contracts

| Contract                        | Purpose                                                                 | Deployment     |
| ------------------------------- | ----------------------------------------------------------------------- | -------------- |
| `UTYAsyncVaultV1`               | Base vault implementation (abstract)                                    | Hub only       |
| `UTYAsyncVaultV1Custodian`      | Custodian sweep + `fundRedemptions` extension                           | Hub only       |
| `UTYAsyncVaultV1Instant`        | Instant redemption extension                                            | Hub only (UTY) |
| `PausableWithPauserAuth`        | Bridge-level pause (ERC-7201 namespaced)                                | Hub only       |
| `ERC20AuthorizationUpgradeable` | EIP-3009 implementation                                                 | All chains     |
| `UTYVaultComposer`              | Cross-chain message handler + refund recovery                           | Hub only       |
| `UTYVaultInterface`             | Spoke vault proxy + access control + flat fees + pending-claims counter | Spoke chains   |
| `OFTExtended`                   | Extended OFT token (UTY/yUTY on spokes)                                 | Spoke chains   |
| `ShareOFTAdapter`               | Hub OFT lockbox + bridge-level pause                                    | Hub only       |

## Example contracts

YieldPoint ships two concrete vault implementations ready for deployment:

| Contract | Description                                                               | Extends                                                                 |
| -------- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| `UTY`    | Unity stablecoin vault (1:1 USDC peg, custodian sweep)                    | `UTYAsyncVaultV1`, `UTYAsyncVaultV1Instant`, `UTYAsyncVaultV1Custodian` |
| `yUTY`   | Yield-bearing vault shares for UTY (async ERC-7540, no instant extension) | `UTYAsyncVaultV1`                                                       |

Both contracts hardcode their names and symbols. Bonding period, deposit caps, and other parameters are configured per vault after deployment.
