本文介绍了如何利用 QuickNode 的 Base DeFi Power bundle 在 Base 网络上构建一个 DEX 聚合器 dApp。
在去中心化金融(DeFi)领域,用户经常面临一些挑战,例如不准确的 gas 估算,这可能导致交易失败或延迟,以及跨 DEX 的复杂集成,这使得在多个去中心化交易所中导航以获得最佳交易路线变得困难。
为了解决这些问题,我们将指导你在 Base 网络上构建一个 DEX 聚合器 dApp。此应用程序将利用 QuickNode 的 Base DeFi Power 套件,其中包括以下附加组件,以实现优化的交易、实时的 gas 估计和全面的钱包洞察。
Base DeFi 套件 是一个开发者工具包,用于在 Base 区块链上构建强大的应用程序。这些附加组件解决了常见的开发者痛点:
开发者挑战 | 通过 Base DeFi 套件的解决方案 |
---|---|
不可预测或过高的 gas 费用 | Gas 估算 API 提供准确、实时的 gas 预测 |
复杂的多 DEX 集成 | OpenOcean v4 API 聚合流动性并优化路由 |
Base DeFi 套件旨在彼此无缝协作。以下是它们如何协同工作:
让我们设置并构建应用程序!
首先,克隆 QuickNode 的 qn-guide-examples 存储库,然后进入该项目的目录并安装依赖项。
git clone https://github.com/quiknode-labs/qn-guide-examples.git
cd qn-guide-examples/sample-dapps/base-dex-aggregator
npm install
为了使应用程序正常工作,你需要配置 (1) 应用程序中的 RPC URL 以指向启用了 Base DeFi Power 套件附加组件的 QuickNode 端点,(2) 加上你的 WalletConnect 项目 ID。
为了与 Base 网络通信并使用 Gas 估算 API 和 OpenOcean v4 Swap API 等附加组件,你需要配置 QuickNode Base 端点。这是你要连接到的 Base 节点的 URL。
为了轻松地在你的应用程序中支持不同的钱包,你需要获取 WalletConnect 项目 ID。此标识符通过 WalletConnect 协议实现安全的多钱包连接。
你可以通过在 WalletConnect Cloud 上注册来获得 WalletConnect 项目 ID。
将 .env.sample
复制到 .env
并使用你的 QuickNode 端点 URL 和 WalletConnect 项目 ID 更新以下变量:
VITE_WALLETCONNECT_PROJECT_ID="YOUR_WALLETCONNECT_PROJECT_ID"
VITE_QUICKNODE_ENDPOINT_URL="YOUR_QUICKNODE_ENDPOINT_URL"
作为最后一步,在开发模式下运行应用程序:
npm run dev
此命令以开发模式启动应用程序,并启用热重载以简化调试。
打开你的浏览器并导航到 http://localhost:5173 以与 dApp 交互。
现在,让我们探索 Base DeFi 套件如何为这个 dApp 提供支持。
该应用程序的核心是用 React 和 Tailwind CSS 构建的现代 swap 界面。关键组件包括:
在 src/lib/wagmi.ts
中,我们使用 connectkit 的默认配置配置 Wagmi,以使用带有你的 QuickNode 端点的 Base 链:
src/lib/wagmi.ts
import { base } from 'wagmi/chains'
import { createConfig, http } from 'wagmi'
import { QUICKNODE_ENDPOINT_URL, WALLETCONNECT_PROJECT_ID } from './constants'
import { getDefaultConfig } from 'connectkit'
export const config = createConfig(
getDefaultConfig({
// Your dApps chains
// 你的 dApp 链
chains: [base],
transports: {
// RPC URL for each chain
// 每个链的 RPC URL
[base.id]: http(QUICKNODE_ENDPOINT_URL),
},
// Required API Keys
// 必需的 API 密钥
walletConnectProjectId: WALLETCONNECT_PROJECT_ID,
// Required App Info
// 必需的应用程序信息
appName: 'Base DEX Aggregator',
})
)
如果 gas 费用不可预测,可能会让用户感到沮丧。Gas 估算 API ( sentio_gasPrice
) 提供不同置信度级别的实时 gas 价格估算。
在 src/hooks/useGasEstimate.ts
中,应用程序调用 fetchGasEstimates
函数来获取 gas 估算。此函数使用 Axios 向具有 sentio_gasPrice
方法的 QuickNode 端点发出 POST 请求,并返回 gas 估算。
来自 src/hooks/useGasEstimate.ts 的代码片段
// Function to fetch gas estimates on demand
// 用于按需获取 gas 估计的函数
const fetchGasEstimatesNow = useCallback(async () => {
try {
setIsLoadingGas(true)
const estimates = await fetchGasEstimates()
setGasEstimates(estimates)
} catch (err) {
setError(
err instanceof Error ? err : new Error('Failed to load gas estimates')
)
console.error('Error fetching gas estimates:', err)
} finally {
setIsLoadingGas(false)
}
}, [])
OpenOcean v4 Swap API 是应用程序代币交易背后的引擎,它聚合来自多个 Base DEX 的流动性,以找到最佳路线。
OpenOcean v4 API 的 tokenList
端点返回 API 支持的代币列表。在此应用程序中,我们将使用它来填充代币下拉列表。
来自 src/context/TokenContext.tsx 的代码片段
// Fetch new token list if cache is invalid
// 如果缓存无效,则获取新的代币列表
const tokenList = await fetchTokenList()
cachedTokens = tokenList
lastFetchTime = now
const sortedTokens = sortTokensByPopularity(tokenList)
setTokens(sortedTokens)
OpenOcean v4 API 的 quote
端点返回 swap 交易的报价。它需要输入和输出代币地址、数量和 gas 价格作为参数。API 返回估计的输出量、最小输出量和价格影响。
来自 src/hooks/useSwapQuote.ts 的代码片段
// Fetch swap quotes from OpenOcean API
// 从 OpenOcean API 获取 swap 报价
const quoteData = await fetchSwapQuote({
inTokenAddress: fromToken.address,
outTokenAddress: toToken.address,
amount,
gasPrice,
})
setQuote(quoteData)
由于 API 可能会根据 swap 参数返回不同的路由和每个路由的详细信息,我们将在 UI 中显示这些路由。
OpenOcean v4 API 的 swap
端点准备 swap 交易。它接收输入代币地址、输出代币地址、数量、滑点和 gas 价格作为参数。然后,交易数据用于创建交易请求。
来自 src/components/SwapCard.tsx 的代码片段
const swapData = await executeSwap({
inTokenAddress: fromToken.address,
outTokenAddress: toToken.address,
amount: amount,
slippage: '1',
gasPrice: selectedGasPrice.toString(),
userAddress: address,
})
const txRequest = {
to: swapData.to,
data: swapData.data,
value: BigInt(swapData.value),
gasPrice: BigInt(swapData.gasPrice),
}
sendTransaction(txRequest) // Send the transaction
// 发送交易
可以根据需要使用新功能扩展此应用程序或与附加服务集成,例如引入新的 DEX、添加其他分析或通过更复杂的前端增强用户体验。有了这个基础,你就可以在 Base 网络上构建并利用其较低的费用和可扩展性。
既然你已经构建了一个可用的 DEX 聚合器,以下是进一步发展它的一些方法:
尝试这些想法并扩展你的 dApp 的功能!
在本指南中,我们介绍了使用 QuickNode 的 Base DeFi Power 套件在 Base 网络上构建 DEX 聚合器 dApp 的过程。通过集成 Gas 估算 API 和 OpenOcean v4 Swap API,你现在拥有一个功能齐全的应用程序,可以执行代币 swap 并估计 gas 费用。
有关更多灵感,请查看 如何在 Base 上使用 MEV 保护构建 Telegram 交易机器人 指南,该指南还演示了如何使用 Base DeFi Power 套件构建交易机器人。
- 原文链接: quicknode.com/guides/mar...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!