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

# Quick start

> Deploy your first Conduit in minutes

A Conduit wraps an existing strategy (Multi-Vehicle or Vehicle) with your own ERC20 share token, fee structure, and access control. This guide walks you through deploying one using the ConduitFactory already deployed on each supported chain.

## Before you begin

You need a strategy to wrap and an External Access Control (EAC) contract. Fee Manager and AccountList are optional.

| Prerequisite                            | Required | How to get it                                                                                                 |
| --------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------- |
| **Strategy** (Multi-Vehicle or Vehicle) | Yes      | [Use a Strategy](/conduits/use-a-strategy) or [Wrap a yield source](/developers/vehicles/wrap-existing-vault) |
| **External Access Control (EAC)**       | Yes      | [Deploy an EAC](/conduits/compliance#deploy-and-configure-access-control) — your central permission contract  |
| **Fee Manager**                         | No       | [Deploy a Fee Manager](/conduits/configure-fees#deploy-the-fee-manager) — or pass `address(0)` for no fees    |
| **AccountList**                         | No       | [Set up compliance](/conduits/compliance) — or pass `address(0)` for permissionless access                    |

<Tip>
  **Already completed [Use a Strategy](/conduits/use-a-strategy)?** You already have an EAC and a Strategy-level Fee Manager deployed. You can optionally deploy a separate Fee Manager for your Conduit — see [Configure fees](/conduits/configure-fees). Skip to [Choose your configuration](#choose-your-configuration).
</Tip>

<Note>
  **Starting fresh?** At minimum, deploy an EAC before proceeding — it's a single transaction. See [Compliance — Deploy and configure access control](/conduits/compliance#deploy-and-configure-access-control).
</Note>

## Choose your configuration

Before deploying, decide on three key parameters:

<AccordionGroup>
  <Accordion title="FeeManager — your fee structure">
    Deploy a FeeManager to collect fees on your Conduit. You can configure:

    * **Management fee** — annualized, prorated by time elapsed
    * **Performance fee** — charged on gains above a high water mark
    * **Deposit fee** — deducted from shares received
    * **Redeem fee** — deducted from assets received

    Set to `address(0)` if you don't need fees. To deploy a Fee Manager, see [Configure fees](/conduits/configure-fees#deploy-the-fee-manager).
  </Accordion>

  <Accordion title="AccountList — compliance and access control">
    Deploy an AccountList to control who can deposit, withdraw, and hold shares:

    * **Allowlist mode** — only approved addresses can interact
    * **Blocklist mode** — all addresses except blocked ones can interact
    * **Sanctions integration** — connect to Chainalysis or similar oracles via `ISanctionsList`

    Set to `address(0)` for permissionless access. To deploy an AccountList, see [Compliance](/conduits/compliance).
  </Accordion>

  <Accordion title="TransferMode — share transferability">
    Choose how your Conduit's ERC20 shares can be transferred:

    | Mode             | Behavior                                                             |
    | ---------------- | -------------------------------------------------------------------- |
    | `ACCOUNT_LIST`   | Enforces AccountList rules on transfers (recommended for compliance) |
    | `ALLOW_TRANSFER` | Permissionless — anyone can send or receive shares                   |
    | `BLOCK_TRANSFER` | Only mint and burn — no user-to-user transfers                       |
  </Accordion>
</AccordionGroup>

## Deploy the Conduit

<Steps>
  <Step title="Get the ConduitFactory address">
    Railnet deploys a ConduitFactory on each supported chain. Look up factory addresses in [Supported protocols](/developers/vehicles/supported-protocols).

    <CodeGroup>
      ```solidity Solidity theme={null}
      ConduitFactory factory = ConduitFactory(CONDUIT_FACTORY_ADDRESS);
      ```

      ```typescript TypeScript theme={null}
      // Coming soon
      ```
    </CodeGroup>
  </Step>

  <Step title="Configure spawn parameters">
    Define your Conduit's configuration. The `vehicle` parameter accepts any STEAM-compliant contract — a Multi-Vehicle or a Vehicle. The initial deposit amount is read from the [AssetRegistry](/developers/contracts/asset-registry) — it is not passed here.

    <CodeGroup>
      ```solidity Solidity theme={null}
      ConduitFactory.SpawnParams memory params = ConduitFactory.SpawnParams({
          name: "Platform USDC Yield",           // Your branded share token name
          symbol: "pUSDCy",                       // Your branded share token symbol
          vehicle: IVehicle(MULTI_VEHICLE_ADDRESS), // The strategy to distribute
          feeManager: IFeeManager(feeManagerAddress), // address(0) for no fees
          accountList: IAccountList(accountListAddress), // address(0) for permissionless
          ownerRegistry: IOwnerRegistry(address(0)),
          accessControl: accessControl,           // Your EAC contract
          transferMode: ConduitStructs.TransferMode.ACCOUNT_LIST,
          initialExpectedSupply: 1e6,
          depositAsset: IERC20(USDC_ADDRESS),
          querySalt: bytes32(0),
          deploymentSalt: keccak256("platform-conduit-v1")
      });
      ```

      ```typescript TypeScript theme={null}
      // Coming soon
      ```
    </CodeGroup>
  </Step>

  <Step title="Approve and spawn">
    Look up the initial deposit amount in the AssetRegistry, approve the factory, then spawn the Conduit.

    <CodeGroup>
      ```solidity Solidity theme={null}
      // Read the configured initial deposit from the AssetRegistry
      uint256 initialDeposit = assetRegistry.getInitialDepositAmount(USDC_ADDRESS);

      // Approve the factory to spend it
      IERC20(USDC_ADDRESS).approve(address(factory), initialDeposit);

      // Spawn the Conduit
      Conduit conduit = Conduit(
          address(factory.spawn(params, keccak256("deployment-salt")))
      );
      ```

      ```typescript TypeScript theme={null}
      // Coming soon
      ```
    </CodeGroup>

    <Note>
      The initial deposit protects against inflation attacks by bootstrapping the share supply. The initial shares are burned automatically. See [Asset registry](/developers/contracts/asset-registry) for initial deposit sizing guidance.
    </Note>
  </Step>

  <Step title="Finalize (async strategies only)">
    For sync yield sources, the Conduit is enabled immediately after spawning. For async yield sources (or strategies wrapping async sources), wait for the initial deposit to settle, then finalize:

    <CodeGroup>
      ```solidity Solidity theme={null}
      // Call after the initial deposit has settled
      factory.finalizeConduitDeposit(address(conduit));
      ```

      ```typescript TypeScript theme={null}
      // Coming soon
      ```
    </CodeGroup>
  </Step>
</Steps>

## Verify deployment

After deployment, confirm the Conduit is operational:

<CodeGroup>
  ```solidity Solidity theme={null}
  // Check the Conduit is enabled
  require(conduit.isEnabled(), "Conduit not enabled");

  // Verify the underlying strategy
  address vehicle = address(conduit.getVehicle());
  require(vehicle == MULTI_VEHICLE_ADDRESS, "Wrong vehicle");

  // Check the asset
  address asset = conduit.asset();
  require(asset == USDC_ADDRESS, "Wrong asset");
  ```

  ```typescript TypeScript theme={null}
  // Coming soon
  ```
</CodeGroup>

## Next steps

<CardGroup cols={2}>
  <Card title="Deposits & withdrawals" icon="arrow-right-arrow-left" href="/conduits/deposits-and-withdrawals">
    Process deposits and withdrawals through your Conduit.
  </Card>

  <Card title="Compliance & access control" icon="lock" href="/conduits/compliance">
    Configure roles and permissions for your Conduit.
  </Card>

  <Card title="Configure fees & revenue" icon="percent" href="/conduits/configure-fees">
    Set up fee structures and revenue distribution.
  </Card>

  <Card title="Supported protocols" icon="list-check" href="/developers/vehicles/supported-protocols">
    Look up deployed factory and infrastructure addresses per chain.
  </Card>
</CardGroup>
