DEX API 使用手册:从入门到精通获取链上交易数据

·

一站式解锁DeFi全视角数据,开发者也能复刻交易技巧

如果你正在为 去中心化交易所 找实时链上数据接口,亦或想把 交易对波动大户动向最新成交额 通通抓回来做自己的看板,那么本篇文章就是为你写的。我们将围绕 DEX API 的两大核心接口(DEXTrades 与 DEXTradeByTokens),分场景拆解 5 大典型查询,并穿插实用 FAQ 与可一键复用的代码片段,帮你快速落地。


一、DEX API 的两大接口速览

接口作用适合场景
DEXTrades按交易维度聚合研究单条交易、回溯成交明细
DEXTradeByTokens按代币维度聚合拉出某地址或代币对的整体买卖盘

两段式数据模式让你既能“看见森林”,亦能“数清树木”,对于做 流动性监控套利机器人实时价格看板 都十分友好。


二、快速 get:以太坊上全部 DEX 概览

想一眼看清链上有多少去中心化交易所在跑,只需要下面这段 GraphQL。它会返回“协议家族名、独立买方、独立卖方、买单数量”四大关键指标,帮你筛出 真正活跃的交易场景

query DexMarkets($network: evm_network) {
  EVM(network: $network) {
    DEXTradeByTokens {
      Trade {
        Dex { ProtocolFamily }
      }
      buyers:  uniq(of: Trade_Buyer)
      sellers: uniq(of: Trade_Sender)
      count(if: {Trade: {Side: {Type: {is: buy}}}})
    }
  }
}

# 变量示例
{"network": "eth"}

👉 想直观对比 Uniswap、Curve、SushiSwap 谁的买方更多?点这里立即体验


三、锁定单一 DEX:Uniswap 深度统计

当你只看 Uniswap 这一条赛道,需求瞬间升级:每小时成交量、活跃买卖地址数量、代币覆盖数……以下查询把时间粒度和币种维度都拆出来,自动按时间升序返回,完美匹配你的 收益率统计脚本

query DexMarkets($network: evm_network, $market: String) {
  EVM(network: $network) {
    DEXTradeByTokens(
      orderBy: {ascendingByField: "Block_Time"}
      where: {Trade: {Dex: {ProtocolFamily: {is: $market}}}}
    ) {
      Block { Time(interval: {count: 1, in: hours}) }
      trades:  count
      buyers:  uniq(of: Trade_Buyer)
      sellers: uniq(of: Trade_Sender)
      tokens:  uniq(of: Trade_Currency_SmartContract)
    }
  }
}

# 变量示例
{"market": "Uniswap", "network": "eth"}

四、速览某 DEX 的 200 个最热门交易对

多数交易员上来就问:“3 小时内,Uniswap 上哪些币对波动最大?”下面的拉取帮你列出 近 3 小时 USD 成交额 Top 200,并给出 10 分钟、1 小时、3 小时 三维价差参考,方便快速判断 短线套利空间

query DexMarkets($network: evm_network, $market: String,
                 $time_10min_ago: DateTime, $time_1h_ago: DateTime, $time_3h_ago: DateTime) {
  EVM(network: $network) {
    DEXTradeByTokens(
      orderBy: {descendingByField: "usd"}
      where: {Trade: {Dex: {ProtocolFamily: {is: $market}}},
              Block: {Time: {after: $time_3h_ago}}}
      limit: {count: 200}
    ) {
      Trade {
        Currency  { Symbol Name SmartContract Fungible }
        Side {
          Currency { Symbol Name SmartContract }
        }
        price_usd:  PriceInUSD(maximum: Block_Number)
        price_last: Price(maximum: Block_Number)
        price_10min_ago: Price(maximum: Block_Number,
                               if: {Block: {Time: {before: $time_10min_ago}}})
        price_1h_ago: Price(maximum: Block_Number,
                            if: {Block: {Time: {before: $time_1h_ago}}})
        price_3h_ago: PriceInUSD(minimum: Block_Number)
      }
      usd:   sum(of: Trade_AmountInUSD)
      count
    }
  }
}

# 变量示例(时间戳可按需替换)
{"market": "Uniswap", "network": "eth",
 "time_10min_ago": "2024-09-22T13:21:39Z",
 "time_1h_ago":    "2024-09-22T12:31:39Z",
 "time_3h_ago":    "2024-09-22T10:31:39Z"}
}

👉 想一次拿到最新龙虎榜?立刻查看更多高收益交易对


五、追踪“鲸鱼”动向:Top Trader 排行榜

抓出近 7 天或 24 小时内成交总额最大的 100 个地址,就相当于帮你锁定 潜在鲸鱼。按下面的示例直接跑,你会拿到每个 Trader 的地址、成交总额、名义币对,可直接喂给 风控系统跟单策略

query DexMarkets($network: evm_network, $market: String) {
  EVM(network: $network) {
    DEXTradeByTokens(
      orderBy: {descendingByField: "volumeUsd"}
      limit: {count: 100}
      where: {Trade: {Dex: {ProtocolFamily: {is: $market}}}}
    ) {
      Trade {
        Buyer
        Dex {
          OwnerAddress
          ProtocolFamily
          ProtocolName
        }
        Currency  { SmartContract Symbol Name }
        Side {
          Currency { SmartContract Symbol Name }
        }
      }
      volumeUsd: sum(of: Trade_Side_AmountInUSD)
    }
  }
}

# 变量示例
{"market": "Uniswap", "network": "eth"}

六、最新成交价连续拉取

机器人需要“滴答”级价格?沿用以下查询,可秒级拉取 最新 50 笔交易,字段覆盖买卖方向、交易哈希、美元价、原生价格、区块时间,非常适合做 滑点监控实时 TV 屏

query LatestTrades($network: evm_network, $market: String) {
  EVM(network: $network) {
    DEXTradeByTokens(
      orderBy: {descending: Block_Time}
      limit: {count: 50}
      where: {Trade: {Dex: {ProtocolFamily: {is: $market}}}}
    ) {
      Block { Time }
      Transaction { Hash }
      Trade {
        Dex {
          OwnerAddress
          ProtocolFamily
          ProtocolName
        }
        AmountInUSD
        Price
        Amount
        Side {
          Type
          Currency { Symbol SmartContract Name }
          AmountInUSD
          Amount
        }
        Currency { Symbol SmartContract Name }
      }
    }
  }
}

# 变量示例
{"market": "Uniswap", "network": "eth"}

七、常见问题(FAQ)

Q1:DEXTrades 与 DEXTradeByTokens 到底怎么选?
A:若你关心“每条交易明细”,用 DEXTrades;若要统计“代币维度”聚合,比如总成交额、买家数,用 DEXTradeByTokens 会更高效。

Q2:接口频率限制是多少?
A:公开端点默认 30 req/min,企业密钥可提升到 500 req/min,并支持 WebSocket 流式推送来获取 实时价格流动性变化

Q3:想要 Polygon 或 BSC 的数据该怎么改?
A:统一把变量里的 "network": "eth" 改为 "matic""bsc" 即可,字段结构与字段名不变,零成本迁移。

Q4:如何同时拿到买盘与卖盘数量?
A:在查询里用 count(if: {Trade: {Side: {Type: {is: buy}}}})count(if: {Trade: {Side: {Type: {is: sell}}}}) 各写一条即可。

Q5:返回值只有合约地址看不懂怎么办?
A:你可先用 [Token Symbol Lookup API] 反向解析,或在同一请求里加 Currency { Symbol Name },提前映射为人类可读名称。

Q6:GraphQL IDE 为什么报错 “Type mismatch”?
A:通常是时间戳格式不对,务必使用 ISO 8601,例如:2024-09-22T10:31:39Z,且保持 UTC 时区。


八、立即行动:把数据搬进你的策略

读完这篇,你已经拥有了监控 去中心化交易所 所需的全部利器。从宏观的 全链 DEX 市场总览,到微观的 最新 50 笔成交 乃至 鲸鱼追踪,DEX API 都能“一键到账”。把今天展示的 5 段代码存进脚本仓库,配合定时器或消息队列,每天睁开眼就能获得最新的链上数据雷达。

祝你用数据提前洞察,每一次波动都不错过。