本文介绍了如何利用 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 套件构建交易机器人。
如果你有任何问题,请随时使用我们的 Discord 服务器或使用下面的表格提供反馈。请在 Twitter 和我们的 Telegram 公告频道 上关注我们,以获取最新消息。
如果你有任何反馈或对新主题的要求,请 告诉我们。我们很乐意听取你的意见。
- 原文链接: quicknode.com/guides/mar...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!