# Contracts and verification

> Every contract Floatless uses on each network, with source verification and how to check the savings vault yourself.

Source: https://floatless.xyz/docs/contracts

This page lists the contracts Floatless deployed and the third-party contracts it relies on, on Monad mainnet and Monad testnet. It also covers how the savings vault was deployed, who controls it, and how you can check its configuration yourself.

## Mainnet contracts

These run on Monad mainnet, chain ID 143. Source verified means the explorer holds the contract's source code and has matched it to the code deployed at that address. Monadscan shows the savings vault as a similar match, which means its bytecode matches another Morpho Vault V2 whose source Monadscan already holds. The adapter and the registry are full matches there.

| Contract                                          | Address                                                                                                                  | Source verified                                                                                                                                                                       |
| ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Floatless Savings AUSD, a Morpho Vault V2         | [`0x35277466836C6cdb426F50DDF79db0e043e6bbFe`](https://monadscan.com/address/0x35277466836C6cdb426F50DDF79db0e043e6bbFe) | [Monadscan](https://monadscan.com/address/0x35277466836C6cdb426F50DDF79db0e043e6bbFe#code), [MonadVision](https://monadvision.com/address/0x35277466836C6cdb426F50DDF79db0e043e6bbFe) |
| Morpho Vault V1 adapter for Floatless Savings     | [`0xCe2b239dD33110f7c662Fe69D394DcA65A7fF1ab`](https://monadscan.com/address/0xCe2b239dD33110f7c662Fe69D394DcA65A7fF1ab) | [Monadscan](https://monadscan.com/address/0xCe2b239dD33110f7c662Fe69D394DcA65A7fF1ab#code), [MonadVision](https://monadvision.com/address/0xCe2b239dD33110f7c662Fe69D394DcA65A7fF1ab) |
| Spending-rules registry, `FundingMandateRegistry` | [`0x14077b679274Eb5d8B95c60A5d9E94A68Ea4fDf0`](https://monadscan.com/address/0x14077b679274Eb5d8B95c60A5d9E94A68Ea4fDf0) | [Monadscan](https://monadscan.com/address/0x14077b679274Eb5d8B95c60A5d9E94A68Ea4fDf0#code), [MonadVision](https://monadvision.com/address/0x14077b679274Eb5d8B95c60A5d9E94A68Ea4fDf0) |

The savings vault and its adapter are Morpho's code, created by Morpho's own factories. Floatless owns the vault and configured both, and [Floatless Savings](https://floatless.xyz/docs/floatless-savings) explains what they do for you.

The spending-rules registry is Floatless's own contract, and the app uses it to record your [spending rules](https://floatless.xyz/docs/spending-rules). It holds no money and has no owner or admin. A wallet can only register or revoke its own rules, and registering needs that wallet's signature.

## Third-party contracts on mainnet

| Contract                                           | Address                                                                                                                  | How Floatless uses it                                      |
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------- |
| AUSD, issued by Agora                              | [`0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a`](https://monadscan.com/address/0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a) | The only asset Floatless Savings holds                     |
| Grove x Steakhouse High Yield AUSD, a Morpho vault | [`0x32841A8511D5c2c5b253f45668780B99139e476D`](https://monadscan.com/address/0x32841A8511D5c2c5b253f45668780B99139e476D) | Where Floatless Savings lends every deposit                |
| Morpho `VaultV2Factory`                            | [`0x8B2F922162FBb60A6a072cC784A2E4168fB0bb0c`](https://monadscan.com/address/0x8B2F922162FBb60A6a072cC784A2E4168fB0bb0c) | Created the savings vault                                  |
| Morpho `MorphoVaultV1AdapterFactory`               | [`0x9f3c0999425656fD189C69a8aD68cB64986D644A`](https://monadscan.com/address/0x9f3c0999425656fD189C69a8aD68cB64986D644A) | Created the adapter                                        |
| Morpho adapter registry                            | [`0x6a42f8b46224baA4DbBBc2F860F4675eeA7bd52B`](https://monadscan.com/address/0x6a42f8b46224baA4DbBBc2F860F4675eeA7bd52B) | The only source of adapters the savings vault can ever add |
| USDC, issued by Circle                             | [`0x754704Bc059F8C67012fEd69BC8A327a5aafb603`](https://monadscan.com/address/0x754704Bc059F8C67012fEd69BC8A327a5aafb603) | A stablecoin listed in the mainnet app                     |
| USDT0                                              | [`0xe7cd86e13AC4309349F30B3435a9d337750fC82D`](https://monadscan.com/address/0xe7cd86e13AC4309349F30B3435a9d337750fC82D) | A stablecoin listed in the mainnet app                     |

## Testnet contracts

These run on Monad testnet, chain ID 10143.

| Contract                                          | Address                                                                                                                          | Source verified                                                                                                                                                                                       |
| ------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Spending-rules registry, `FundingMandateRegistry` | [`0x127af791F0807584CaEAe5eDDfd8012972E9a3Da`](https://testnet.monadscan.com/address/0x127af791F0807584CaEAe5eDDfd8012972E9a3Da) | [Monadscan](https://testnet.monadscan.com/address/0x127af791F0807584CaEAe5eDDfd8012972E9a3Da#code), [MonadVision](https://testnet.monadvision.com/address/0x127af791F0807584CaEAe5eDDfd8012972E9a3Da) |
| `AdapterRegistry`                                 | [`0x9704d264DE3EC51401366cD815a193530C105AC8`](https://testnet.monadscan.com/address/0x9704d264DE3EC51401366cD815a193530C105AC8) | [Monadscan](https://testnet.monadscan.com/address/0x9704d264DE3EC51401366cD815a193530C105AC8#code), [MonadVision](https://testnet.monadvision.com/address/0x9704d264DE3EC51401366cD815a193530C105AC8) |
| `FundingVault`                                    | [`0xb179F1661567e494A671E85Af1E7B8CF087E601A`](https://testnet.monadscan.com/address/0xb179F1661567e494A671E85Af1E7B8CF087E601A) | [Monadscan](https://testnet.monadscan.com/address/0xb179F1661567e494A671E85Af1E7B8CF087E601A#code), [MonadVision](https://testnet.monadvision.com/address/0xb179F1661567e494A671E85Af1E7B8CF087E601A) |
| `KuruAdapter`                                     | [`0x0bE9633Cb7beacc399C723dC31011DF16dFCfB55`](https://testnet.monadscan.com/address/0x0bE9633Cb7beacc399C723dC31011DF16dFCfB55) | [Monadscan](https://testnet.monadscan.com/address/0x0bE9633Cb7beacc399C723dC31011DF16dFCfB55#code), [MonadVision](https://testnet.monadvision.com/address/0x0bE9633Cb7beacc399C723dC31011DF16dFCfB55) |

The testnet app records spending rules in this registry, the same way as on mainnet. `AdapterRegistry`, `FundingVault` and `KuruAdapter` are deployed and verified, but the current app and API don't use them. There's no savings vault on testnet, because Morpho isn't deployed there.

`SafeLock` is deployed on mainnet at [`0xFEd7EdE137062CBa02628bBd01A2956D354f3Ca5`](https://monadscan.com/address/0xFEd7EdE137062CBa02628bBd01A2956D354f3Ca5), source-verified on Monadscan and MonadVision. A Chainlink CRE workflow releases its mature locks. See [Proof](https://floatless.xyz/docs/proof#scheduled-release-with-chainlink-cre-on-mainnet). The repository also holds `MorphoVaultAdapter` and `FlexDollarVault`, which aren't deployed on either network.

## Third-party contracts on testnet

| Contract                             | Address                                                                                                                          | How Floatless uses it                                                             |
| ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| aUSDC, Cleanverse's regulated dollar | [`0xaC0893567D43C3E7e6e35a72803df05416C1f20D`](https://testnet.monadscan.com/address/0xaC0893567D43C3E7e6e35a72803df05416C1f20D) | The regulated dollar, which only moves between wallets with a Cleanverse identity |
| USDC, Cleanverse sandbox             | [`0x534b2f3A21130d7a60830c2Df862319e593943A3`](https://testnet.monadscan.com/address/0x534b2f3A21130d7a60830c2Df862319e593943A3) | The USDC that Cleanverse converts 1:1 into aUSDC                                  |
| Cleanverse Access Core               | [`0x8F118338a1fa41E7Fa86Be19A4e8B99Ed58A6EcC`](https://testnet.monadscan.com/address/0x8F118338a1fa41E7Fa86Be19A4e8B99Ed58A6EcC) | Locks deposited USDC and mints the same amount of aUSDC                           |
| Cleanverse A-Pass                    | [`0xbA82D189540CaC9DC6FF46B6837CaC1BFdEC58B9`](https://testnet.monadscan.com/address/0xbA82D189540CaC9DC6FF46B6837CaC1BFdEC58B9) | The identity contract Cleanverse lists for aUSDC                                  |
| AUSD, issued by Agora                | [`0xa9012a055bd4e0eDfF8Ce09f960291C09D5322dC`](https://testnet.monadscan.com/address/0xa9012a055bd4e0eDfF8Ce09f960291C09D5322dC) | Testnet AUSD. The savings preview uses your balance of it                         |
| AUSD faucet                          | [`0xd236c18D274E54FAccC3dd9DDA4b27965a73ee6C`](https://testnet.monadscan.com/address/0xd236c18D274E54FAccC3dd9DDA4b27965a73ee6C) | Gives out testnet AUSD                                                            |
| Kuru router                          | [`0x7EFbE105Ca7415dE98F96622173458ac1c054630`](https://testnet.monadscan.com/address/0x7EFbE105Ca7415dE98F96622173458ac1c054630) | The router that `KuruAdapter` was deployed to call                                |

[Regulated dollars](https://floatless.xyz/docs/regulated-dollars) explains how aUSDC works in Floatless.

## How the savings vault was deployed

The vault went live on October 13, 2026 in three transactions, all sent from the owner key.

| Step                                                           | Transaction                                                                                                        |
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| Create the vault with Morpho's `VaultV2Factory`                | [`0x51af1ce1…3cf499`](https://monadscan.com/tx/0x51af1ce1f465ddb672454e553eaaafd61bed2d7f3be0fe9f7b749402a33cf499) |
| Create the adapter with Morpho's `MorphoVaultV1AdapterFactory` | [`0x03982239…a1913f`](https://monadscan.com/tx/0x039822397c26c98aa6461a87e97ff5c3412f7a4a00e7beb3fb949fab1aa1913f) |
| Apply the whole configuration                                  | [`0x8b7dfc71…5db830`](https://monadscan.com/tx/0x8b7dfc71c6da06a7b28d123e30c5d5cee3cd77cd9c6470146bcb0115185db830) |

The configuration ran as one all-or-nothing transaction, so it either applied in full or not at all. It set up the following.

- The name Floatless Savings AUSD and the share symbol fsAUSD
- The owner as sentinel, and both the owner and the operations key as allocators
- Morpho's adapter registry as the only source of adapters, with the power to change that given up for good
- The one adapter, with a 100,000 AUSD cap
- The 10% performance fee, paid to the owner, and the 0.01% fee for forcing funds out of Morpho
- The adapter as the path for deposits and withdrawals
- A 3-day timelock on all 17 timelocked functions
- Finally, the separate curator key as curator

## Who can change the savings vault

| Role                                                     | Address                                                                                                                  | What it can do                                                                                       |
| -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- |
| Owner, also sentinel, backup allocator and fee recipient | [`0x024Db1faC265D471C2a5eca95AD00C19e3394A07`](https://monadscan.com/address/0x024Db1faC265D471C2a5eca95AD00C19e3394A07) | Replace the curator, cancel any pending change, lower caps, and undo a bad allocator move right away |
| Curator                                                  | [`0x7830200a9D5a4BB821B1C2327B8953f991E8F9C9`](https://monadscan.com/address/0x7830200a9D5a4BB821B1C2327B8953f991E8F9C9) | Propose higher caps or changes to adapters, fees, gates or allocators, each of which waits 3 days    |
| Allocator, the operations key                            | [`0xE1E55cB254feB8CBEA730AAe987777f12d8C5B25`](https://monadscan.com/address/0xE1E55cB254feB8CBEA730AAe987777f12d8C5B25) | Move funds between the vault and its one adapter, and set the liquidity path and maximum rate        |

A sentinel is a Morpho Vault V2 role that can cancel pending changes and lower caps. Every one of the vault's 17 timelocked functions waits 3 days, so adding or removing an adapter, raising a cap, or changing fees, gates or allocators is visible onchain for three days before it can take effect. Savers can leave first, and the owner can cancel the change during that window. Allocator moves and cap cuts aren't timelocked and take effect right away. The three keys are separate, held by the Floatless team, and not yet a multisig.

## Check the savings vault yourself

You need [Foundry](https://getfoundry.sh) and a copy of the [Floatless repository](https://github.com/winsznx/floatless). Run these commands from the repository root. Both only read from Monad mainnet, and neither sends a transaction.

### Read the live configuration

```sh
FLOATLESS_OWNER=0x024Db1faC265D471C2a5eca95AD00C19e3394A07 \
FLOATLESS_CURATOR=0x7830200a9D5a4BB821B1C2327B8953f991E8F9C9 \
FLOATLESS_ALLOCATOR=0xE1E55cB254feB8CBEA730AAe987777f12d8C5B25 \
FLOATLESS_FEE_RECIPIENT=0x024Db1faC265D471C2a5eca95AD00C19e3394A07 \
forge script contracts/script/DeployFloatlessSavings.s.sol:DeployFloatlessSavings \
  --sig "verifyDeployed(address,address)" \
  0x35277466836C6cdb426F50DDF79db0e043e6bbFe 0xCe2b239dD33110f7c662Fe69D394DcA65A7fF1ab \
  --rpc-url https://rpc.monad.xyz
```

`verifyDeployed` reads the live vault and adapter and checks that:

- both came from Morpho's factories, and the vault's asset is AUSD
- the owner, curator, sentinel and allocators are the addresses above
- the vault has exactly one adapter, and it points at the Grove x Steakhouse vault
- the adapter registry is Morpho's, and that setting is locked
- the cap is 100,000 AUSD, the performance fee is 10% to the owner, there's no management fee, and the fee for forcing funds out of Morpho is 0.01%
- no gates are set, every timelocked function waits 3 days, and no setup change is still pending

If anything differs, the script stops with a `Misconfigured` error that names the first setting that doesn't match.

### Run the fork tests

```sh
MONAD_MAINNET_RPC_URL=https://rpc.monad.xyz forge test --match-contract FloatlessSavingsFork -vv
```

This runs `contracts/test/FloatlessSavingsFork.t.sol` against a copy of Monad mainnet at a fixed block, using the live Morpho contracts. Each test deploys a fresh vault with the same script that deployed the real one, then exercises or attacks it. The suite has 12 attack and configuration tests, 4 fuzz tests and 5 invariants. Without `MONAD_MAINNET_RPC_URL`, the tests skip.
