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

# Protocol and Contracts

<Tabs>
  <Tab title="Protocol">
    The Ctrl Launchpad is built around Uniswap V4 hooks. Its four main components/contracts are highlighted below:

    <Frame>
      <img src="https://mintcdn.com/ctrl-83235111/FIvFj983NGFB_1_6/images/tg_image_762924618-1.png?fit=max&auto=format&n=FIvFj983NGFB_1_6&q=85&s=e8a0e504c1598639bb92c249fbaf56dc" alt="Tg Image 762924618" width="4068" height="2160" data-path="images/tg_image_762924618-1.png" />
    </Frame>

    <CardGroup cols={2}>
      <Card title="CtrlV4Factory" icon="sparkles">
        Deploys CtrlToken, initializes the PoolManager market, creates the launch position, and handles an optional initial buy.
      </Card>

      <Card title="CtrlLaunchRouter" icon="route">
        Routes exact-input buys and sells with recipient, beneficiary, referrer, minimum-output, and deadline parameters.
      </Card>

      <Card title="Ctrl hook" icon="webhook">
        Attributes each trade, allocates fees, tracks paired principal, and recognizes graduation.
      </Card>

      <Card title="CtrlFeeVault" icon="landmark">
        Keeps creator, referral, protocol, and graduation-bounty balances separate until an eligible wallet claims.
      </Card>
    </CardGroup>

    ## Contract flow at a glance

    <Steps>
      <Step title="Launch">
        CtrlV4Factory deploys the token, initializes the PoolManager market, and creates the launch position.
      </Step>

      <Step title="Trade">
        Buyers and sellers execute through CtrlLaunchRouter or a compatible universal router.
      </Step>

      <Step title="Attribute">
        The Ctrl hook resolves the token, beneficiary, and optional registered referrer.
      </Step>

      <Step title="Allocate">
        The hook divides the native-ETH fee and records each balance in CtrlFeeVault.
      </Step>

      <Step title="Claim">
        Creators, referrers, graduation winners, and the treasury withdraw only their assigned balances.
      </Step>
    </Steps>

    <Tip>
      Assigned balances in CtrlFeeVault remain claimable only by their credited recipients. A future hook upgrade cannot redirect an allocation that the vault has already assigned.
    </Tip>
  </Tab>

  <Tab title="Contract addresses">
    | Contract                            | Address                                                                                                                                             | Immutable?                                                        |
    | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
    | **CtrlV4Factory**                   | [0x66d8623fbbe3c01e0cc6c63f9258435d1bb801a0](https://robinhoodchain.blockscout.com/address/0x66d8623FBBe3C01E0cc6c63F9258435D1bb801a0)              | Non-upgradeable code. Owner can pause future launches             |
    | **CtrlLaunchHookV2 proxy**          | [0x0B209BAeC82093d1bBc5c4Aa44b6C591bF3428CC](https://robinhoodchain.blockscout.com/address/0x0B209BAeC82093d1bBc5c4Aa44b6C591bF3428CC?tab=contract) | Proxy address is fixed. implementation is upgradeable             |
    | **CtrlLaunchHookV2 implementation** | [0xc897570c27AF50603A08490C8621e3d0EFfa4b27](https://robinhoodchain.blockscout.com/address/0xc897570c27AF50603A08490C8621e3d0EFfa4b27)              | Replaceable by Safe wallet                                        |
    | **CtrlLaunchRouter**                | [0x936eed62da1a4e7a7fb1fabfe2e10c4bcbd7b322](https://robinhoodchain.blockscout.com/address/0x936eED62da1a4e7A7fb1fABFe2e10C4bCbD7B322)              | Yes                                                               |
    | **CtrlPositionLocker**              | [0x1eFe83337744F5e84fD51b01BD4e57fD013454d3](https://robinhoodchain.blockscout.com/address/0x1eFe83337744F5e84fD51b01BD4e57fD013454d3)              | Yes                                                               |
    | **CtrlFeeVault**                    | [0xADa4794e5Ac54Df44C9608b23C14684458Af7367](https://robinhoodchain.blockscout.com/address/0xADa4794e5Ac54Df44C9608b23C14684458Af7367)              | Yes                                                               |
    | **CtrlReferralRegistry**            | [0xf412ed814fe5821910cfede4910f7231c51d9ec5](https://robinhoodchain.blockscout.com/address/0xF412eD814fe5821910CFEDE4910f7231c51D9EC5?tab=contract) | Yes. Referrers may update their own future payout                 |
    | **CtrlHookProxyCreate2Deployer**    | 0x241e7937c85cc77f98d64366a3d6058e4f5d68a6                                                                                                          | Yes; no protocol role after deployment                            |
    | **CtrlToken**                       | Per launch                                                                                                                                          | Yes; ownerless with PoolId set once                               |
    | **Uniswap V4 PoolManager**          | [0x8366a39CC670B4001A1121B8F6A443A643e40951](https://robinhoodchain.blockscout.com/address/0x8366a39CC670B4001A1121B8F6A443A643e40951)              | [External dependency](https://developers.uniswap.org/deployments) |
    | **Uniswap V4 PositionManager**      | [0x58daec3116aae6D93017bAAea7749052E8a04fA7](https://robinhoodchain.blockscout.com/address/0x58daec3116aae6D93017bAAea7749052E8a04fA7)              | [External dependency](https://developers.uniswap.org/deployments) |
    | **Permit2**                         | [0x000000000022D473030F116dDEE9F6B43aC78BA3](https://robinhoodchain.blockscout.com/address/0x000000000022D473030F116dDEE9F6B43aC78BA3)              | [External dependency](https://developers.uniswap.org/deployments) |

    <Info>
      Uniswap V4 pools do not have standalone pool contract addresses. Record each launched token address and canonical PoolId instead.
    </Info>
  </Tab>
</Tabs>
