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

# GeodeFactory.sol

> 无许可代币发行工厂——在单笔交易中部署 ERC20、配置永久联合曲线并初始化 v4 池。

## 概述

`GeodeFactory` 处理一笔交易的代币发行。它部署 `GeodeToken` ERC20，将全部供应量铸造给 Hook，初始化 v4 池为空壳，配置 Hook，并注册永久联合曲线——全部原子化完成。

## 不可变量

```solidity theme={null}
IPoolManager public immutable poolManager;
GeodeHook public immutable hook;
Currency public immutable weth;
```

## 发行参数

```solidity theme={null}
struct LaunchParams {
    string name;                    // 代币名称
    string symbol;                  // 代币符号
    uint256 totalSupply;            // 总供应量（18 位小数）
    uint256 virtualTokenReserve;    // Vt（>= totalSupply）
    uint256 virtualEthReserve;      // Ve（起始价格 = Ve / Vt）
    uint24 deployerRoyaltyBps;      // 部署者盈余份额（最大 50%）
    uint256 batchInterval;          // 结算间隔区块数
    uint24 directSwapFeeBps;        // 直接交换费用
    uint256 settlementFeeBps;       // 每意图结算费用
    uint256 maxBatchSize;           // 每侧最大意图数
    int24 tickSpacing;              // 池 tick 间距
}
```

## 发行流程

### `launch()`

```solidity theme={null}
function launch(LaunchParams calldata params)
    external returns (address tokenAddress, PoolId poolId)
```

<Steps>
  <Step title="验证">
    * `totalSupply > 0`
    * `virtualTokenReserve > 0` 且 `virtualEthReserve > 0`
    * `deployerRoyaltyBps <= 5000`（最大 50%）
    * `virtualTokenReserve >= totalSupply`（全部代币给曲线）
  </Step>

  <Step title="部署 ERC20">
    ```solidity theme={null}
    GeodeToken token = new GeodeToken(
        params.name, params.symbol,
        params.totalSupply, address(hook)
    );
    ```

    全部供应量铸造给 Hook 合约。
  </Step>

  <Step title="确定货币排序">
    Uniswap v4 要求 `address(currency0) < address(currency1)`。WETH 始终是 currency0。
  </Step>

  <Step title="构建池键并初始化">
    池在 v4 中初始化为 `sqrtPriceAtTick(0)` — 没有流动性的空壳。Hook 处理所有定价。
  </Step>

  <Step title="配置 Hook">
    调用 `hook.geodeInitializePool(key, config)` 配置曲线参数。
  </Step>

  <Step title="注册发行">
    调用 `hook.registerLaunch()` 设置永久 `LaunchState` 追踪。
  </Step>

  <Step title="初始化价格信标">
    初始化第二个 v4 池（相同代币对，无 Hook），以曲线起始价格。零流动性——社区成员可以有机地添加 LP。
  </Step>
</Steps>

## 事件

```solidity theme={null}
event TokenLaunched(
    PoolId indexed poolId,
    address indexed deployer,
    address indexed tokenAddress,
    string name, string symbol,
    uint256 totalSupply,
    uint256 virtualTokenReserve, uint256 virtualEthReserve,
    uint24 deployerRoyaltyBps
);
```

## 源代码

<Card title="GeodeFactory.sol" icon="github" href="https://github.com/Geode-vAMM/geodex/blob/main/contracts/src/GeodeFactory.sol">
  在 GitHub 上查看完整源代码（约 230 行）。
</Card>
