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

# 池与流动性

> DEX 池与流动性数据的查询示例

本文介绍用于 DEX 池子与流动性分析的 Cube：

* **DEXPoolEvents**（DWD）— 流动性添加/移除事件，含逐事件储备与价格
* **DEXPools**（DWS）— 池子**快照**（当前流动性与价格，定期刷新）
* **TokenSupplyUpdates**（DWD）— 代币供应量、市值与 FDV 更新

<Note>
  示例使用 **Solana** 与 **EVM** [链分组](/cn/graphql/schema/chain-groups)：`Solana { ... }` 用于 Solana，`EVM(network: eth | bsc | polygon) { ... }` 用于 EVM 链（含 Polygon）。
</Note>

***

## 如何获取某代币的流动性池？

在快照中查找将某代币列为 **token A** 的 DEX 池子。若资产仅作为 token B 出现，需用 `tokenB` 再查一次（或使用 `where`）；需要**事件级**行与完整交易对上下文时，请用 **DEXPoolEvents**。

```graphql theme={null}
query {
  Solana {
    DEXPools(
      limit: {count: 10}
      tokenA: {is: "TOKEN_ADDRESS"}
    ) {
      Pool {
        Address
        ProgramAddress
        TokenAAddress
        TokenBAddress
        LiquidityUSD
        PriceAtoB
        PriceBtoA
        LastUpdated
      }
    }
  }
}
```

<Tip>
  [在 GraphQL IDE 中打开](https://ide.chainstream.io) — 将上方查询粘贴进去即可交互运行，并享受自动补全与 schema 浏览。
</Tip>

<Tip>
  将 `TOKEN_ADDRESS` 替换为代币 mint（Solana）或合约地址（EVM）。再用 `tokenB: {is: "TOKEN_ADDRESS"}` 查询一次，可包含该代币作为报价侧的池子。
</Tip>

<AccordionGroup>
  <Accordion title="关键字段">
    | 字段                    | 说明             |
    | :-------------------- | :------------- |
    | `Pool.Address`        | 流动性池 / 市场地址    |
    | `Pool.ProgramAddress` | DEX 程序或工厂合约地址  |
    | `Pool.TokenAAddress`  | 基础侧代币地址        |
    | `Pool.TokenBAddress`  | 报价侧代币地址        |
    | `Pool.LiquidityUSD`   | 池子总流动性（USD，快照） |
    | `Pool.LastUpdated`    | 该快照行上次更新时间     |
  </Accordion>

  <Accordion title="自定义提示">
    * **按流动性过滤**：添加 `where: {Pool: {LiquidityUSD: {gt: 10000}}}` 筛选超过某 USD 深度的池子
    * **指定 DEX**：添加 `where: {Pool: {ProgramAddress: {is: "DEX_PROGRAM_OR_FACTORY_ADDRESS"}}}`
    * **更多池子**：提高 `count` 以发现该代币的更多池子
    * **逐事件储备**：对 **DEXPoolEvents** 使用 `tokenAddress` / `poolAddress` 与 `orderBy: {descending: Block_Time}` 查看加/减流动性历史
  </Accordion>
</AccordionGroup>

***

## 如何获取某个池子的详情？

按地址读取单个池子的**最新快照**。**DEXPools** 不按行暴露区块时间线 — 历史储备序列请用 **DEXPoolEvents**。

```graphql theme={null}
query {
  Solana {
    DEXPools(
      limit: {count: 1}
      poolAddress: {is: "POOL_ADDRESS"}
    ) {
      Pool {
        Address
        TokenAAddress
        TokenBAddress
        ProgramAddress
        LiquidityUSD
        PriceAtoB
        PriceBtoA
        LastUpdated
      }
    }
  }
}
```

<AccordionGroup>
  <Accordion title="关键字段">
    | 字段                                          | 说明           |
    | :------------------------------------------ | :----------- |
    | `Pool.TokenAAddress` / `Pool.TokenBAddress` | 交易对代币地址      |
    | `Pool.LiquidityUSD`                         | 总流动性（USD，快照） |
    | `Pool.LastUpdated`                          | 该池快照上次刷新时间   |
  </Accordion>

  <Accordion title="自定义提示">
    * **储备历史**：查询 **DEXPoolEvents**，`poolAddress: {is: "POOL_ADDRESS"}` 且 `orderBy: {descending: Block_Time}`
    * **事件时间范围**：在 **DEXPoolEvents** 上添加 `where: {Block: {Time: {since: "2025-03-01T00:00:00Z"}}}` 限定加/减流动性时段
  </Accordion>
</AccordionGroup>

<Info>
  `poolAddress` 选择器按 `Pool.Address` 过滤。**DEXPools**（快照）与 **DEXPoolEvents**（事件）均支持。
</Info>

***

## 如何对池子排序或读取快照流动性？

**DEXPools**（DWS）存储**当前状态**行（通常每隔数分钟刷新）。可用其按 `LiquidityUSD` 对池子排序，并在不扫原始事件的情况下对比各 DEX 程序。

```graphql theme={null}
query {
  Solana {
    DEXPools(
      limit: {count: 20}
      tokenA: {is: "TOKEN_ADDRESS"}
    ) {
      Pool {
        Address
        ProgramAddress
        TokenAAddress
        TokenBAddress
        LiquidityUSD
        LastUpdated
      }
    }
  }
}
```

<AccordionGroup>
  <Accordion title="关键字段">
    | 字段                                          | 说明          |
    | :------------------------------------------ | :---------- |
    | `Pool.Address`                              | 池子地址        |
    | `Pool.ProgramAddress`                       | DEX 程序 / 工厂 |
    | `Pool.TokenAAddress` / `Pool.TokenBAddress` | 交易对代币       |
    | `Pool.LiquidityUSD`                         | 快照流动性（USD）  |
    | `Pool.LastUpdated`                          | 快照新鲜度       |
  </Accordion>

  <Accordion title="自定义提示">
    * **按流动性排序**：客户端按 `LiquidityUSD` 排序，或在 schema 支持时对池快照使用 `orderBy`
    * **活跃池子**：优先选择 `LastUpdated` 较新的池子
    * **对比 DEX**：按 `Pool.ProgramAddress` 分组或过滤
  </Accordion>
</AccordionGroup>

<Tip>
  **DEXPoolEvents**（DWD）适合储备与每笔流动性事件的**时间序列**。**DEXPools**（DWS）针对**最新**池子状态与发现做了优化。
</Tip>

***

## 如何获取代币供应量与市值？

使用 **TokenSupplyUpdates** 获取与供应事件关联的供应量、市值、价格与 FDV。

```graphql theme={null}
query {
  Solana {
    TokenSupplyUpdates(
      limit: {count: 1}
      tokenAddress: {is: "TOKEN_ADDRESS"}
      orderBy: {descending: Block_Time}
    ) {
      TokenSupplyUpdate {
        Currency { MintAddress, Decimals }
        PostBalance
        MarketCapInUSD
        PriceInUSD
        FDVInUSD
        TotalSupply
      }
      Block { Time }
    }
  }
}
```

<AccordionGroup>
  <Accordion title="关键字段">
    | 字段                                       | 说明           |
    | :--------------------------------------- | :----------- |
    | `TokenSupplyUpdate.Currency.MintAddress` | 代币地址         |
    | `TokenSupplyUpdate.Currency.Decimals`    | 代币小数位        |
    | `TokenSupplyUpdate.PostBalance`          | 事件后的当前供应量    |
    | `TokenSupplyUpdate.MarketCapInUSD`       | 市值（USD）      |
    | `TokenSupplyUpdate.PriceInUSD`           | 供应事件发生时的代币价格 |
    | `TokenSupplyUpdate.FDVInUSD`             | 完全稀释估值（FDV）  |
    | `TokenSupplyUpdate.TotalSupply`          | 代币总供应量       |
  </Accordion>

  <Accordion title="自定义提示">
    * **供应历史**：提高 `count` 查看供应量如何随时间变化（铸造/销毁事件）
    * **市值历史**：查询多条供应更新以绘制市值曲线
    * **与价格结合**：将 `PriceInUSD` 与 `TotalSupply` 联用以核对市值计算
  </Accordion>
</AccordionGroup>

<Info>
  本页通过 **TokenSupplyUpdates** 提供与供应相关的市值、价格与 FDV。更多代币指标与汇总见 [OHLC 与统计](/cn/graphql/examples/ohlc-stats)。
</Info>

***

## 多链示例

<Tabs>
  <Tab title="Solana">
    ```graphql theme={null}
    query {
      Solana {
        DEXPools(
          limit: {count: 5}
          tokenA: {is: "TOKEN_ADDRESS"}
        ) {
          Pool { Address, LiquidityUSD, LastUpdated }
        }
      }
    }
    ```
  </Tab>

  <Tab title="Ethereum">
    ```graphql theme={null}
    query {
      EVM(network: eth) {
        DEXPools(
          limit: {count: 5}
          tokenA: {is: "TOKEN_ADDRESS"}
        ) {
          Pool { Address, LiquidityUSD, LastUpdated }
        }
      }
    }
    ```
  </Tab>

  <Tab title="BSC">
    ```graphql theme={null}
    query {
      EVM(network: bsc) {
        DEXPools(
          limit: {count: 5}
          tokenA: {is: "TOKEN_ADDRESS"}
        ) {
          Pool { Address, LiquidityUSD, LastUpdated }
        }
      }
    }
    ```
  </Tab>

  <Tab title="Polygon">
    ```graphql theme={null}
    query {
      EVM(network: polygon) {
        DEXPools(
          limit: {count: 5}
          tokenA: {is: "TOKEN_ADDRESS"}
        ) {
          Pool { Address, LiquidityUSD, LastUpdated }
        }
      }
    }
    ```
  </Tab>
</Tabs>

***

## 后续步骤

<CardGroup cols={2}>
  <Card title="DEX 成交" icon="arrow-right-arrow-left" href="/cn/graphql/examples/dex-trades">
    查询 DEX 交易数据 — 代币成交、钱包活动与头部交易者。
  </Card>

  <Card title="转账" icon="paper-plane" href="/cn/graphql/examples/transfers">
    跟踪钱包之间的链上代币转账。
  </Card>

  <Card title="余额与持币者" icon="wallet" href="/cn/graphql/examples/balance-holders">
    查询钱包余额、余额历史与头部持币者。
  </Card>

  <Card title="OHLC 与统计" icon="chart-candlestick" href="/cn/graphql/examples/ohlc-stats">
    获取 K 线、成交统计、市值与代币元数据。
  </Card>
</CardGroup>
