DODO 文档中心

子图数据(GraphQL)

子图数据(GraphQL)

介绍#

The Graph 与 GraphQL#

The Graph 是一个去中心化的协议,用于对区块链的数据进行索引和查询,最初应用于 Ethereum。这意味着它提供了一种从区块链中检索特定数据的简单方式,符合 web3 原则并具备去中心化与可靠性的优势。

GraphQL 是 The Graph 使用的底层查询语言。传统的 RESTful API 调用与 GraphQL 调用有什么区别?主要区别在于传统的 API 需要开发者为用户检索特定数据而创建具体的端点。如果用户需要更多信息,可能需要进行多次 API 调用,甚至数百次,才能获取所需数据。使用 The Graph(GraphQL)时,开发者只需一次创建灵活的模式(schema),即可进行一次调用。

有关 The Graph 及其底层 GraphQL 的更多信息,请参阅 GraphQL Introduction

如果在应用中使用 GraphQL 数据,我们建议使用功能丰富的库,例如 Apollo 或像 GraphQL-Request 这样的轻量实现。

DODO Subgraph#

要查看子图的源代码,请参考我们的 GitHub 仓库

DODOEX#

对 DODO 的智能路由交易数据、流动性池数据、流动性池交易数据、流动性池 TVL 数据以及众筹池数据进行索引。

如要查看子图开发介绍,请参考 Subgraph Project Introduction

其他链的子图如果使用 The Graph 服务,可以在这里搜索:https://thegraph.com/explorer?search=dodo&orderBy=Query+Count&orderDirection=desc 如果使用 DODO 的自托管子图,只需将 chainId 替换为其他链的目标值即可。

ChainNameChainId
moonriver1285
aurora1313161554
avax43114
optimism10
............

ERC20Token#

索引在 DODO 上创建的代币相关的数据。 数据应用页面: https://app.dodoex.io/dev/erc20?network=mainnet

DODO Ming V3#

索引在 DODO 上创建的矿池相关的数据。 数据应用页面: https://app.dodoex.io/dev/pool?network=mainnet

Query Examples#

使用 The Graph Subgraph Studio#

你需要使用钱包注册并将 GRT 代币作为查询费用存入。然后,将 [api-key] 替换为你自己的密钥。

subgraph2
curl 'https://gateway.thegraph.com/api/[api-key]/subgraphs/id/GxV9XL6Wnjz75z919NPNdrLhEkqDR99PweUY3oh7Lh94' \
  -H 'content-type: application/json' \
  --data-raw '{"query":"{\n  dodoZoos(first: 5) {\n    id\n    pairCount\n    tokenCount\n    crowdpoolingCount\n  }\n}"}' \
  --compressed

使用 DODO 自托管子图#

你需要在 DODO 开发者平台 注册账户并申请 API Key。将 ${your_id} 替换为你的 ID,将 ${apikey} 替换为你的 API Key。

curl -i -X POST \
   -H "Content-Type:application/json" \
   -H "User-Agent:DODO-${your_id}" \
   -d \
'{
    "query": "{\n  dodoZoos(first: 5) {\n    id\n    pairCount\n    tokenCount\n    crowdpoolingCount\n  }\n}"
}' \
 'https://api.dodoex.io/subgraph/graphql?chainId=1&schemaName=dodoex&apikey=${apikey}'

查询最近的前 10 笔交易记录,包括智能路由订单。#

{
  orderHistories(first:10, orderBy: timestamp, orderDirection: desc){
    id
    hash
    block
    from
    to
    fromToken{
      id
      symbol
    }
    toToken{
      id
      symbol
    }
    amountIn
    amountOut
    timestamp
  }
}

查询用于流动性池的交换记录。#

{
  swaps(where:{pair:"0xc9f93163c99695c6526b799ebca2207fdf7d61ad"},first:10){
    hash
    from
    to
### 查询最近更新的矿池

```javascript
{
  pairs(first:100,where:{type_not:"VIRTUAL"}, orderBy:updatedAt, orderDirection:  desc){
    id
    type
    baseToken{
      id
    }
    quoteToken{
      id
    }
    baseReserve
    quoteReserve
    updatedAt
  }
}

基于日频和小时维度检索矿池状态#

{
  pairDayDatas(first:100, where: {date_gt: 1684113421},orderBy:date,orderDirection:desc){
    date
    volumeBase
    volumeQuote
    feeBase
    feeQuote
    baseToken{
      symbol
    }
    quoteToken{
      symbol
    }
  }
}

查询用户流动性提供数据#

{
  liquidityPositions{
    id
    pair{
      id
      baseSymbol
      quoteSymbol
    }
    user{
      id
    }
    lpToken{
      id
      symbol
    }
    liquidityTokenBalance
    liquidityTokenInMining
    updatedAt
  }
}

查询用户信息#

{
  user(id:"0x8982a82a77eaf1cd6f490b67ad982304ecc590af"){
    id
    txCount
    tradingRewardRecieved
  }
}

查询众筹池日数据#

{
  crowdPoolingDayDatas{
    date
    crowdPooling {
      id
      creator
      baseToken{
        symbol
      }
      quoteToken{
        symbol
      }
    }
    investedQuote
    investCount
    newcome
    poolQuote
  }
}

常见问题#

如何从子图获取最新更新的数据?#

您可以使用参数 first:10、orderBy: timestamp、orderDirection: desc,以按时间戳降序检索最新更新的数据。