首页 > 解决方案 > Uniswap 的 GraphQL 接收到不正确的 ReserveUSD 值

问题描述

我在 graphQL 上使用 Uniswap API 来尝试接收 Uniswap 上每个令牌对的保留数据。按照他们网站上的指示,可以生成所有正确配对符号的列表,但由于某种原因,储备和价格数据非常不正确(唯一正确的数据是符号)。ReserveUSD 价值应为数千 - 数百万,具体取决于货币对,并在其网站上定义为“以美元金额存储的货币对中的总流动性金额”。当我实际检索数据时,对于一些实际上有很多 ReserveUSD 的货币对,reserveUSD 的值非常低。

query_one = """{
  pairs(first: 1000, orderBy: reserveUSD, orderDirection: asc) {
    id
    token0 {
      symbol
    }
    token1 {
      symbol
    }
    reserveUSD
    token0Price
    token1Price
  }
}"""
query_two = """{
  pairs(first: 1000, skip: 1000, orderBy: reserveUSD, orderDirection: asc) {
    id
    token0 {
      symbol
    }
    token1 {
      symbol
    }
    reserveUSD
    token0Price
    token1Price
  }
}"""

edges_dict = {}
price_dict = {}
id_dict = {}

url = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2'

obj_one = requests.post(url, json = {"query": query_one})#"{\n  pairs(first: 10, where: {reserveUSD_gt: \"1000000\", volumeUSD_gt: \"50000\"}, orderBy: reserveUSD, orderDirection: desc) {\n    id\n    token0 {\n      id\n      symbol\n    }\n    token1 {\n      id\n      symbol\n    }\n    reserveUSD\n    volumeUSD\n  }\n}\n","variables":None}) 
json_data_one = json.loads(obj_one.text)

obj_two = requests.post(url, json = {"query": query_two})#"{\n  pairs(first: 10, where: {reserveUSD_gt: \"1000000\", volumeUSD_gt: \"50000\"}, orderBy: reserveUSD, orderDirection: desc) {\n    id\n    token0 {\n      id\n      symbol\n    }\n    token1 {\n      id\n      symbol\n    }\n    reserveUSD\n    volumeUSD\n  }\n}\n","variables":None}) 
json_data_two = json.loads(obj_two.text)

for pair in json_data_one['data']['pairs']:
  key = (pair['token0']['symbol'], pair['token1']['symbol'])
  edges_dict[key] = float(pair['reserveUSD'])
  price_dict[pair['token0']['symbol']] = float(pair['token0Price'])
  price_dict[pair['token1']['symbol']] = float(pair['token1Price'])

for pair in json_data_two['data']['pairs']:
  key = (pair['token0']['symbol'], pair['token1']['symbol'])
  edges_dict[key] = float(pair['reserveUSD'])
  price_dict[pair['token0']['symbol']] = float(pair['token0Price'])
  price_dict[pair['token1']['symbol']] = float(pair['token1Price'])

*两次查询的原因是要获得所有 1900+ 个结果,因为第一个查询只能检索前 1000 对,而第二个查询跳过前 1000 个并可以检索其余的。

标签: pythonjsongraphqlblockchainethereum

解决方案


推荐阅读