本文介绍了如何使用Syve的DEX价格数据和钱包追踪API构建以太坊钱包性能分析应用程序。该应用允许用户输入钱包地址,并分析交易性能指标,如每种交易代币的盈亏。文章提供了详细的步骤,包括环境搭建、代码实现和API调用方法,以便开发者能够快速构建和理解该应用。
在本指南中,我们将引导你使用 Syve 的 DEX 价格数据和钱包追踪 API 构建一个以太坊钱包性能分析应用。此应用程序允许用户输入钱包地址,并分析每个交易代币的交易表现指标,例如盈亏。该应用程序利用来自区块链的数据,提供对已实现和未实现表现指标的洞察。
Syve 的 DEX 价格数据和钱包追踪 API 提供了全面的工具,用于分析去中心化交易所的钱包表现和代币价格数据。这些 API 使开发人员能够轻松获取钱包交易活动的详细指标和历史价格数据。
DEX 价格数据和钱包追踪 API 中提供了以下方法:
v1/getWalletLatestTotalPerformance
:提供钱包的总体交易表现指标,例如总盈亏。v1/getWalletLatestPerformancePerToken
:检索特定钱包交易的每个代币的关键交易表现指标。v1/getPriceHistoricalOHLC
:以 OHLCV(开盘价-最高价-最低价-收盘价-成交量)格式获取历史 DEX 价格数据。在本指南中,我们将主要使用 v1/getWalletLatestTotalPerformance
和 v1/getWalletLatestPerformancePerToken
方法来构建我们的钱包表现分析应用程序。
v1/getWalletLatestTotalPerformance
方法返回包含以下指标的对象:
指标 | 描述 |
---|---|
first_trade_timestamp |
钱包进行的第一笔交易的时间戳。 |
last_trade_timestamp |
钱包进行的最新交易的时间戳。 |
pnl |
钱包的总盈亏。 |
realized_investment |
对已平仓交易的投资金额。 |
realized_profit |
来自已平仓交易的利润。 |
realized_return |
来自已平仓交易的投资回报率。 |
realized_value |
基于已平仓交易的投资组合价值。 |
total_buy_volume |
购买的代币总交易量。 |
total_buys |
购买交易的总数。 |
total_investment |
所有交易的总投资金额。 |
total_profit |
来自所有交易的总利润。 |
total_return |
总投资回报率。 |
total_sell_volume |
出售的代币总交易量。 |
total_sells |
出售交易的总数。 |
total_tokens_traded |
交易的唯一代币的数量。 |
total_trades |
交易总数(购买 + 出售)。 |
total_value |
投资组合的当前价值。 |
unrealized_investment |
对仍在进行的交易的投资金额。 |
unrealized_profit |
来自仍在进行的交易的利润。 |
unrealized_return |
来自仍在进行的交易的投资回报率。 |
unrealized_value |
基于仍在进行的交易的投资组合价值。 |
wallet_address |
被分析的钱包地址。 |
win_rate |
产生利润的交易的百分比。 |
v1/getWalletLatestPerformancePerToken
方法返回一个对象数组,每个对象包含特定代币的指标:
指标 | 描述 |
---|---|
avg_buy_price |
购买代币的平均价格。 |
avg_sell_price |
出售代币的平均价格(如果适用)。 |
current_price |
代币的当前市场价格。 |
first_trade_timestamp |
涉及代币的第一笔交易的时间戳。 |
last_trade_timestamp |
涉及代币的最新交易的时间戳。 |
pnl |
代币的盈亏。 |
realized_investment |
对涉及该代币的已平仓交易的投资金额。 |
realized_profit |
来自涉及该代币的已平仓交易的利润。 |
realized_return |
来自涉及该代币的已平仓交易的投资回报率(如果适用)。 |
realized_value |
涉及该代币的已平仓交易的价值。 |
token_address |
被分析的代币地址。 |
token_name |
代币的名称。 |
token_symbol |
代币的符号。 |
total_buy_amount |
购买的代币总数量。 |
total_buy_volume |
购买的代币总交易量。 |
total_buys |
代币的购买交易总数。 |
total_investment |
对代币的总投资金额。 |
total_profit |
来自涉及代币的交易的总利润。 |
total_return |
代币的总投资回报率(如果适用)。 |
total_sell_amount |
出售的代币总数量。 |
total_sell_volume |
出售的代币总交易量。 |
total_sells |
代币的出售交易总数。 |
total_trades |
涉及代币的交易总数。 |
total_value |
代币持仓的当前价值。 |
trading_balance |
持有的代币的当前余额。 |
unrealized_investment |
对涉及该代币的未平仓交易的投资金额。 |
unrealized_profit |
来自涉及该代币的未平仓交易的利润。 |
unrealized_return |
来自涉及该代币的未平仓交易的投资回报率(如果适用)。 |
unrealized_value |
未平仓交易的价值。 |
Syve 有一套详细的方法来计算利润、损失和其他表现指标。有关这些计算的更多详细信息,请参阅 Syve 关于盈亏指标的博客。
本节将指导你完成钱包性能分析应用程序中使用的组件和逻辑。我们将介绍应用程序如何与 Syve 的 API 交互以及处理检索到的数据。
这就是应用程序的外观;现在,让我们了解详细信息。
该应用程序使用 React、TypeScript 和 Tailwind CSS 构建。下面,我们描述了主要组件背后的逻辑:
API 调用:提交后,应用程序会同时向 QuickNode 的端点发出两个 API 调用:
显示:处理后的数据分为两个主要部分显示:
要获取钱包交易表现数据,你需要向 QuickNode 以太坊端点发出 RPC 调用。
以下代码 ( api.ts
) 演示了如何设置一个函数来向 QuickNode 端点发出 RPC 调用,并使用可用方法来获取钱包表现数据:
我们将在下一节中构建项目。目前,无需采取任何操作;此代码段仅用于解释。
api.ts 文件
import axios from "axios";
import { OverallStats } from "../interfaces/OverallStats";
import { TokenPerformanceResult } from "../interfaces/TokenPerformance";
const QUICKNODE_ENDPOINT = import.meta.env.VITE_QUICKNODE_ENDPOINT as string;
const makeRpcCall = async (method: string, params: any) => {
const response = await axios.post(
QUICKNODE_ENDPOINT,
{
method,
params,
id: 1,
jsonrpc: "2.0",
},
{
headers: {
"Content-Type": "application/json",
},
}
);
if (response.data.error) {
throw new Error(response.data.error.message);
}
return response.data.result;
};
export const getWalletLatestTotalPerformance = async (
walletAddress: string
): Promise<OverallStats> => {
const result = await makeRpcCall("v1/getWalletLatestTotalPerformance", {
wallet_address: walletAddress,
max_size_ok: "true",
});
return result as OverallStats;
};
export const getWalletLatestPerformancePerToken = async (
walletAddress: string
): Promise<TokenPerformanceResult> => {
const result = await makeRpcCall("v1/getWalletLatestPerformancePerToken", {
wallet_address: walletAddress,
max_size_ok: "true",
});
return result as TokenPerformanceResult;
};
Axios 设置:代码使用 axios
库向 QuickNode 端点发出 HTTP POST 请求。
环境变量:QUICKNODE_ENDPOINT
常量存储你的 QuickNode 端点的 URL,该 URL 从环境变量中获取。
RPC 调用函数:makeRpcCall
函数是一个可重用的函数,用于执行到端点的实际 RPC 调用。它将方法名称和参数作为参数,并发送包含这些详细信息的 POST 请求。
导出的函数:
getWalletLatestTotalPerformance
:此函数调用 v1/getWalletLatestTotalPerformance
方法,以获取给定钱包地址的总体交易表现指标。getWalletLatestPerformancePerToken
:此函数调用 v1/getWalletLatestPerformancePerToken
方法,以检索钱包交易的每个代币的表现指标。现在我们了解了应用程序的工作逻辑,让我们继续开发!
要构建钱包性能分析应用程序,你需要设置你的开发环境。这包括安装必要的工具和依赖项,以及配置你的 QuickNode 访问。
在开始之前,请确保你的系统上安装了 Node.js。如果还没有安装,请从官方网站下载并安装。Node.js 附带 npm (Node Package Manager),你将使用它来安装其他依赖项。
接下来,如果你还没有全局安装 TypeScript 和 ts-node,请全局安装它们:
npm install -g typescript ts-node
在你开始之前,请注意,DEX 价格数据和钱包追踪 API 是付费插件。请在此处查看详细信息,并根据你的需求比较计划。
使用 DEX 价格数据和钱包追踪 API 设置你的以太坊端点非常简单。如果你尚未注册,可以在此处创建一个帐户。
登录后,导航到 Endpoints 页面,然后单击 Create an endpoint。选择 Ethereum mainnet,然后单击 Next。系统将提示你配置插件。激活 DEX Price Data & Wallet Tracking API。之后,只需单击 Create Endpoint。
如果你已经有一个没有插件的以太坊端点,请转到你的以太坊端点内的 Add-ons 页面,选择 DEX Price Data & Wallet Tracking API,然后激活它。
准备好端点后,复制 HTTP Provider 链接并妥善保管,因为你将在下一节中需要它。
我们在 我们的 GitHub 仓库 上提供了一个即用型解决方案,可以快速上手。请按照以下步骤克隆和设置示例应用程序:
git clone https://github.com/quiknode-labs/qn-guide-examples.git
cd sample-dapps/ethereum-dex-trade-performance-analyzer
npm install
.env.example
重命名为 .env
,并将占位符替换为你的 QuickNode 以太坊端点 URLVITE_QUICKNODE_ENDPOINT="YOUR_QUICKNODE_ENDPOINT_URL"
npm run dev
在浏览器中打开 http://localhost:5173/ 以查看应用程序
输入你要分析的以太坊地址(即 Vitalik 的地址 0xd8da6bf26964af9d7eed9e03e53415d37aa96045
),并浏览显示的总体统计数据和代币特定表现指标
之后,你将看到一个类似于下图的屏幕。
总体表现 | 代币特定表现 |
---|---|
![]() |
![]() |
恭喜!你已成功设置并浏览了钱包性能分析应用程序。使用 Syve 的 DEX 价格数据和钱包追踪 API 构建钱包性能分析应用程序,展示了开发人员可以多么容易地创建有价值的工具。这些 API 提供的灵活性和全面数据使开发人员能够探索各种应用程序,这些应用程序可以为用户提供有关其交易活动的可行见解。
以下是一些增强钱包性能分析应用程序的功能和用户体验的想法:
v1/getPriceHistoricalOHLC
方法提供更详细的历史数据分析,以显示价格趋势和波动性。如果你有任何问题,请随时使用我们在 Discord 上的专用频道,或使用下面的表格提供反馈。请关注我们的 Twitter 和我们的 Telegram 公告频道,以随时了解最新信息。
如果你有任何反馈或对新主题的请求,请 告诉我们。我们很乐意听取你的意见。
- 原文链接: quicknode.com/guides/mar...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!