# Morpho Blue \[Distribute Morpho Blue lending yield, one market per Vehicle]

:::info
Railnet connects Morpho Blue through the **`MorphoBlueVehicle`** adapter.
:::

A Morpho Blue market pairs one loan token with one collateral token, one oracle, one LTV and one rate model. Nothing else can affect it.

## At a glance

| | |
|---|---|
| **Protocol** | [Morpho Blue](https://morpho.org), isolated lending markets |
| **Yield** | Borrower interest on that single market |
| **Vehicle** | `MorphoBlueVehicle` (native adapter) |
| **Flows** | Instant both ways, redeems bounded by idle liquidity |
| **Deposit assets** | The market's loan token, one Vehicle per market |
| **Status** | Live |

## How Railnet integrates it

A Vehicle is scoped to one market: it supplies the loan token on deposit and withdraws on redeem, both synchronously, so a Query settles in one transaction. `maxDeposit` is the account's balance, as these markets have no supply cap; `maxRedeem` is bounded by idle liquidity, the lesser of `totalSupply − totalBorrow` and Morpho's own loan-token balance, which keeps the view flash-loan safe. `totalAssets()` converts accounted supply shares through `expectedMarketBalances`, so accrued interest counts and donations cannot move the share price.

## Considerations

* High utilization bounds `maxRedeem` until borrowers repay or new suppliers arrive; read the live value.
* Choosing a market is choosing its collateral and oracle, and its parameters are immutable. See [Risk management](/strategies/risk-management).
* The rate moves with utilization, so quote it live. The Vehicle is not upgradeable.
* Morpho incentives sit outside the supply rate; your Conduit decides where they go ([Rewards](/conduits/rewards)).

## Spawn parameters

`morpho` is the Morpho Blue singleton and `marketId` is the market; the deposit asset is that market's loan token. Put a Conduit on it: see [Quick start](/conduits/quick-start), then [Integrate a Conduit](/developers/integrate-conduit).

```solidity [Solidity]
MorphoBlueVehicleFactory.SpawnParams memory params = MorphoBlueVehicleFactory.SpawnParams({
    morpho: MORPHO_BLUE,
    marketId: MARKET_ID,
    accessControl: accessControl,
    feeManager: FeeManager(address(0)),            // address(0) for none
    modulesManager: ModulesManager(address(0)),
    querySalt: bytes32(0),
    deploymentSalt: keccak256("morpho-cbbtc-usdc"),
    forbiddenAddresses: new address[](0),
    initialExpectedSupply: 0.8e18,                 // 18 decimals, 1 USDC seed
    queryRegistry: queryRegistry
});

MorphoBlueVehicle vehicle = factory.spawn(params);
```

## Live deployments

On Ethereum mainnet:

| Vehicle | Address |
|---|---|
| `$MORPHOBLUE-1-cbBTC-USDC` | [0x7166b7434a2c02a4646f5d4e5ef469132728a500](https://etherscan.io/address/0x7166b7434a2c02a4646f5d4e5ef469132728a500) |
| `$MORPHOBLUE-2-WBTC-USDC` | [0xccd978c8e33db72e81a30059fa5efce1e8c5dc0c](https://etherscan.io/address/0xccd978c8e33db72e81a30059fa5efce1e8c5dc0c) |
| `$MORPHOBLUE-3-wstETH-USDC` | [0x174a416b01c77b248e44af401c237cce9d8686d3](https://etherscan.io/address/0x174a416b01c77b248e44af401c237cce9d8686d3) |
| `$MORPHOBLUE-4-mF-ONE-USDC` | [0xdaf6efd0ba6466dc2dbe467049f99331876fd2b8](https://etherscan.io/address/0xdaf6efd0ba6466dc2dbe467049f99331876fd2b8) |
| `$MORPHOBLUE-5-syrupUSDC-USDC` | [0x0915f06d2241f5102e2ca7d066d695ad88ed93f1](https://etherscan.io/address/0x0915f06d2241f5102e2ca7d066d695ad88ed93f1) |

Factory: [0xFebD3ca7e01285e27299c7001307a3D64186Aa49](https://etherscan.io/address/0xFebD3ca7e01285e27299c7001307a3D64186Aa49). Railnet's test Conduit sits on a Morpho Blue Vehicle for USDC/USDe on Base, at `0xcf1f211e04b1cbe452e78dac94e9d5db40a00ed3`.

## Next steps

<Cards>
  <Card title="Integrate a Conduit" description="Build against the test Conduit." icon="plug" to="/developers/integrate-conduit" />

  <Card title="Quick start" description="Specify your Conduit." icon="rocket" to="/conduits/quick-start" />
</Cards>
