深入解析去中心化交易所 API 数据获取方法

·

在区块链数据领域,去中心化交易所(DEX)的交易数据是开发者、研究员和交易员的重要信息来源。通过专业的 API,我们可以高效获取这些数据,为分析、决策和工具开发提供支持。

本文将详细介绍几种核心的 DEX 数据查询方法,帮助您快速上手并应用于实际场景。

什么是 DEX API?

DEX API 提供了访问去中心化交易所链上交易数据的接口,主要包括两种类型:

两者在数据结构和应用场景上有所不同,选择时需根据具体需求决定。

获取以太坊网络所有 DEX 信息

以下查询可用于获取选定网络中所有去中心化交易所的基本信息,包括协议家族、买方和卖方数量以及交易计数。

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"
}

此查询返回的数据包括每个 DEX 的独立买家和卖家数量,以及买入类型的交易总数。

获取特定 DEX 统计数据

若要获取某个特定去中心化交易所在选定网络上的详细统计数据,可使用以下查询:

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 的所有交易对

了解一个去中心化交易所上所有交易对的情况对于市场分析至关重要。以下查询可获取特定 DEX 上所有交易对的详细信息:

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"
}

此查询返回交易对的详细价格信息,包括当前价格、不同时间点的历史价格以及交易量数据。

👉 查看实时 DEX 数据工具

获取 DEX 上的顶级交易者

识别去中心化交易所上的活跃交易者对于市场行为分析非常有价值。以下查询可获取特定 DEX 上的顶级交易者:

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"
}

此查询按 USD 交易量降序排列,返回前 100 名交易者的详细信息及其交易量数据。

获取 DEX 上的最新交易

实时监控去中心化交易所上的最新交易活动对于许多应用场景都很重要:

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"
}

此查询返回指定 DEX 上最近的 50 笔交易,包含完整的交易细节和时间戳信息。

👉 获取更多区块链数据分析方法

常见问题

DEXTrades 和 DEXTradeByTokens API 有什么区别?

DEXTrades API 提供单笔交易的详细数据,适合需要分析特定交易场景的应用。DEXTradeByTokens 则按代币对聚合数据,更适合市场分析和统计用途。

这些 API 支持哪些区块链网络?

这些 API 支持多种以太坊虚拟机兼容网络,包括以太坊主网、BSC、Polygon 等。只需在查询参数中指定相应的网络标识符即可。

如何获取实时的 DEX 交易数据?

通过 Latest Trades 查询可以获取最近的交易数据。对于真正的实时数据流,需要考虑使用 WebSocket 连接或轮询机制频繁查询最新区块。

这些查询是否需要认证?

大多数基本的 DEX 数据查询不需要特殊认证,但可能有速率限制。对于高频或商业用途,建议查看相应平台的认证要求。

能否获取历史某一时间段的 DEX 数据?

可以,通过调整查询中的时间过滤参数,可以获取特定时间段内的历史交易数据,支持分钟级、小时级和自定义时间范围。

如何处理返回的大量数据?

对于返回大量数据的查询,建议使用分页机制或增加过滤条件限制结果集大小。大多数 API 都支持 limit 和 offset 参数来控制数据量。

掌握这些 DEX API 查询方法,您将能够高效获取和分析去中心化交易所的链上数据,为区块链应用开发和市场研究提供有力支持。