【Web3 探索】如何获取 Uniswap V3 Pool数据?

  • Chainbase
  • 更新于 2023-08-04 17:41
  • 阅读 4390

如何获取 Uniswap 池中的实时数据或历史数据集,包括池地址、总锁定价值(TVL)、代币符号和每日交易次数等信息?

现今,去中心化金融(DeFi)协议变得日益复杂,相互依赖,并且类似于乐高积木结构。作为一个至关重要的去中心化交易协议,Uniswap V3 在这个相互连接的系统中无疑扮演着重要角色。

作为开发者,您可能也希望基于 Uniswap V3 协议构建一个去中心化应用(DApp),例如基于链上的期权协议,如 Panoptic,或者 DeFi 聚合分析平台,如 Defillama。这意味着您需要获取 Uniswap 池中的实时数据或历史数据集,包括池地址、总锁定价值(TVL)、代币符号和每日交易次数等信息。

简介

在本教程中,我们将使用 Chainbase DeFi 数据集来获取 Uniswap V3 池的地址。Chainbase 提供丰富的区块链数据,使开发者能够轻松高效地访问、分析和利用链上数据。

先决条件

  1. Chainbase 上拥有免费账户,并获得 API 密钥。
  2. 一个集成开发环境(IDE)。我们的示例使用 JavaScript,您可以使用 VS Code 作为您的 IDE。
  3. 一个 ERC20 代币的智能合约地址作为输入。

注册并获取 API 密钥

首先,您需要在 Chainbase 上 注册 并获得一个 API 密钥。此密钥将用于对 Chainbase API 的请求进行身份验证。

获取 Uniswap V3 池数据有两种方式。我将逐步指导您如何实现。

通过 RPC 调用获取池数据

首先,创建一个文件夹。

mkdir Chainbase-tutorial

cd Chainbase-toturial

安装必要的依赖项:

npm install ethers @uniswap/v3-core dotenv

打开 Visual Studio Code 并创建一个名为 'uniswapPool.js' 的文件,将以下代码粘贴到其中。此代码连接到一个以太坊提供者,创建 Uniswap V3 工厂合约的实例,并调用 getPool 函数以获取给定代币对的池地址。

const { ethers } = require('ethers')
const { abi: UniswapV3Factory } = require('@uniswap/v3-core/artifacts/contracts/UniswapV3Factory.sol/UniswapV3Factory.json')
require('dotenv').config()

const CHAINBASE_URL = process.env.CHAINBASE_URL

const address0 = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
const address1 = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'
const factoryAddress = '0x1F98431c8aD98523631AE4a59f267346ea31F984'

async function main() {
  const provider = new ethers.JsonRpcProvider(CHAINBASE_URL)

  const factoryContract = new ethers.Contract(
    factoryAddress,
    UniswapV3Factory,
    provider
  )

  const poolAddress = await factoryContract.getPool(address0, address1, 500)
  console.log('poolAddress', poolAddress)

}

main()

另外,创建一个 .env 文件,并将您的 API 密钥粘贴进去。

CHAINBASE_URL=https://ethereum-mainnet.s.chainbase.online/v1/api-key

运行命令。

node uniswapPool.js

您将得到结果。

poolAddress 0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640

通过 Chainbase 数据集获取池数据

您还可以通过我们的 数据集 获取更多特定的池数据。

以下是一个示例 GraphQL 查询,检索前 5 个流动性池的数据,包括它们的标识符、名称、创建块号、输入代币符号、锁定的总价值(USD)、累积交换次数以及每个池中交换的信息。

query UniV3Pool {
  liquidityPools(orderBy: totalValueLockedUSD, first: 5, orderDirection: desc) {
    id
    name
    createdBlockNumber
    inputTokens {
      symbol
    }
    totalValueLockedUSD
    cumulativeSwapCount
    swaps(first: 5, orderBy: timestamp, orderDirection: desc) {
      hash
      amountIn
      amountOut
    }
  }
}

以下是输出结果。

{
"data": {
"liquidityPools": [
{
"id": "0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640",
"name": "Uniswap V3 USD Coin/Wrapped Ether 0.05%",
"createdBlockNumber": "12376729",
"inputTokens": [
{
"symbol": "USDC"
},
{
"symbol": "WETH"
}
],
"totalValueLockedUSD": "222256778.1147989581618490618581225",
"cumulativeSwapCount": 4934671,
"swaps": [
{
"hash": "0xe4db8619ee5c3213fe971b3973d1d8cf0f9df77528a8b72837514aa2cf9193e2",
"amountIn": "72403717",
"amountOut": "39925865656714033"
},
{
"hash": "0x575d7d1977574f883a1d450303b7cce5dfaeae6b6c6da0c560bb677a83420dfe",
"amountIn": "135657763581",
"amountOut": "74809276525566713204"
},

结论

Chainbase 提供了强大的工具来访问和利用链上数据。通过 Chainbase DeFi

数据集,您可以快速轻松地获取 Uniswap V3 池的地址,使您能够构建更强大、高效的 DeFi 应用程序。

请记住,这是一个通用框架。您还可以使用 GraphQL 来定制您需要的数据,比如检索特定池(例如 USDC/ETH)中的所有交换数据。

祝您编码愉快!

关于 Chainbase

Chainbase 是 Web3 的一体化数据基础设施,允许您以大规模索引、转换和使用链上数据。 通过在一个数据基础设施上利用丰富的链上数据和流式计算技术,Chainbase 自动化了对区块链数据的索引和查询,使开发者能够以更少的工作量实现更多的功能。

想了解更多关于 Chainbase?

请访问我们的网站 chainbase.com,注册一个 免费账户,并查阅我们的 文档

网站 | 博客 | Twitter | Discord | Link3

文章来源:How to Get Uniswap V3 Pool data by Chainbase Dataset?

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Chainbase
Chainbase
0x7C46...d02D
Chainbase 是领先的 Web3 数据基础设施,帮助开发者轻松访问加密数据,并支持对数据的大规模索引、转换和使用。