> ## 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.

# 结算者机器人

> 运行 Geode 的无许可结算服务——通过批量处理和执行签名意图赚取费用。

## 什么是结算者？

结算者是一个链下服务，从用户收集签名的交易意图，按池分批，并在 GeodeHook 合约上调用 `geodeSettleBatch()`。作为回报，结算者从协议中赚取结算费用和 Gas 报销。

<Info>
  **结算是无许可的** — 任何人都可以运行结算者。给定结算窗口中第一个提交的有效批次赢得费用。
</Info>

## 架构

```
用户签署意图 (Permit2)          结算者机器人
        │                     ┌─────────────────────┐
        └──── POST /intents ──►  意图队列            │
                              │  (按池分组)           │
                              │       │              │
  索引器 (indexer.geode.ag)   │  每 2 秒             │
        │                     │       │              │
        └──── GET /tokens ───►│  自动发现池           │
              (每 30 秒)      │       ▼              │
                              │  geodeSettleBatch()  │
                              │       │              │
                              │  ┌────┴────┐         │
                              │  ▼         ▼         │
                              │ 费用    Gas 报销      │
                              │ (0.1%)  (来自盈余)    │
                              └─────────────────────┘
```

## 快速开始

<Steps>
  <Step title="克隆仓库">
    ```bash theme={null}
    git clone https://github.com/Geode-vAMM/geode-settler.git
    cd geode-settler
    ```
  </Step>

  <Step title="安装依赖">
    ```bash theme={null}
    npm install
    ```

    结算者只有三个依赖：`express`、`ethers` 和 `cors`。
  </Step>

  <Step title="配置环境">
    ```bash theme={null}
    cp .env.example .env
    ```

    编辑 `.env` 并设置：

    * `SETTLER_PRIVATE_KEY` — 您的结算者钱包私钥
    * `HOOK_ADDRESS` — 已部署的 GeodeHook 合约地址
    * `RPC_URL` — 您的以太坊 JSON-RPC 端点
  </Step>

  <Step title="启动结算者">
    ```bash theme={null}
    npm start
    ```

    结算者将打印配置，启动结算循环，并在端口 3003 上监听意图。
  </Step>
</Steps>

## 配置

| 变量                    | 必需 | 默认值                     | 描述                           |
| --------------------- | -- | ----------------------- | ---------------------------- |
| `SETTLER_PRIVATE_KEY` | ✅  | —                       | 结算者钱包的私钥。必须有 ETH 用于 Gas。     |
| `HOOK_ADDRESS`        | ⚠️ | —                       | 已部署的 GeodeHook 地址。没有则禁用自动结算。 |
| `RPC_URL`             | 否  | `http://localhost:8545` | JSON-RPC 端点                  |
| `SETTLE_INTERVAL_MS`  | 否  | `2000`                  | 检查待处理意图的频率（毫秒）               |
| `PORT`                | 否  | `3003`                  | HTTP API 端口                  |

<Warning>
  **永远不要提交您的 `.env` 文件。** 结算者的私钥控制着持有 ETH 的钱包。在生产环境中使用环境变量或密钥管理器。
</Warning>

## API 参考

### 提交意图

```
POST /intents
Content-Type: application/json
```

### 查看待处理意图

```
GET /intents/:poolId
```

### 强制结算

```
POST /settle/:poolId
```

### 列出池

```
GET /pools
```

### 健康检查

```
GET /health
```

## 经济学

<CardGroup cols={2}>
  <Card title="结算费用" icon="coins">
    **每个已成交意图输入金额的 0.1%。** 在路由前扣除——结算者直接从 PoolManager 取得未路由的费用存款。
  </Card>

  <Card title="Gas 报销" icon="gas-pump">
    **Gas 成本 × 1.5，每批次上限 0.01 ETH。** 从池的累积直接交换费用盈余中提取。
  </Card>
</CardGroup>

## 源代码

* **GitHub**: [Geode-vAMM/geode-settler](https://github.com/Geode-vAMM/geode-settler)
* **依赖**: `express`, `ethers v6`, `cors`
* **运行时**: Node.js ≥ 18
