本文介绍了如何使用 SHYFT 提供的 Solana 交易 API,来追踪 Orca 上 $Booty token 在一小时内的所有交易。通过 SHYFT API 获取涉及 Booty token 的交易,然后筛选出 Orca Whirlpool 上的 "SWAP" 类型的交易,展示给用户,并提供交易量、用户数等数据分析。
流动性池是驱动 DeFi 生态系统的核心技术之一。在去中心化金融(DeFi)平台中,流动性池使用户能够在不依赖中心化交易所等传统中介机构的情况下交易加密货币。相反,流动性由用户提供,他们将他们的加密货币资产存入这些池中。Solana 上的流动性池的一个例子是 Orca Whirlpool。在今天的文章中,我们将深入研究一种在 Orca 上追踪 Booty 代币交换的直观方法。
一个用于追踪 Orca 上的 $booty 代币的仪表板,由 SHYFT API 提供支持
请随时在 GitHub 上查看此项目,如果你喜欢它,请为该仓库添加一些星星。
要开始,我们需要准备一些东西。
x-api-key
是一个身份验证参数,使你可以访问 SHYFT API。
你可以从 SHYFT 网站 获取你自己的 API 密钥。
只需在此处使用你的电子邮件 ID 注册,你就可以免费获得它。如果你已经拥有 SHYFT API 密钥,请跳过此步骤。
我们在这个项目中使用的是 Next JS,但这可以在任何应用程序开发环境中完成。
但是,SHYFT API 如何帮助我构建这个?让我们马上开始吧。
假设我们有一个代币地址(在我们的例子中是 booty 代币地址),并且我们想追踪在特定流动性池(在我们的例子中是 Orca Whirlpool)上一小时内发生的交换数量。我们必须执行以下步骤:
— 我们获取 在特定一小时内直接或间接涉及 booty 代币的所有交易。
— 完成后,我们 从上一步收到的交易集中过滤掉所有“SWAP”类型的交易。 这应该给我们留下一个集合,其中只有“SWAP”类型的交易。
— 然后,我们 迭代先前“SWAP”集合中的每个交易,并且 找出在 Orca Whirlpool 平台上完成的交换。 瞧,最终集合将仅包含来自 Orca 的成功的交换,并且可以以适当的方式呈现给用户。
在第一步中,我们获取所有涉及 Booty 代币的交易。在 Solana 上获取交易有多种方法,但我们将探索一种在 Solana 上获取交易的最便捷方法,即使用 SHYFT API 或使用 SHYFT 自己的 Solana JS SDK。
SHYFT 提供了一套全面的 API,专为 Solana 区块链而设计,其中包括用于 非同质化代币(NFT)、同质化代币(加密货币)、加密钱包 以及 交易 的 API。此外,SHYFT 还提供了一个 JS SDK,对于在 Solana 上构建的开发人员来说,这是一个非常有用的工具。 用于获取 Solana 上特定帐户交易的 API 端点:
GET https://api.shyft.to/sol/v1/transaction/history
所有 SHYFT API 在标头中都接受 x-api-key
参数,该参数用作使用 SHYFT API 的授权参数。你可以从 SHYFT 网站 获取你的免费 API 密钥。此 API 支持分页。
network
:可以是 devnet
、testnet
或 mainnet-beta
。account
:我们尝试获取其交易的帐户地址,在我们的例子中,这将是 Booty 代币地址 bootyA..…sjJ.
。tx_num(optional)
:指示一次要获取的交易数量。before_tx_signature(optional)
:交易按最近交易的顺序获取。此字段接受交易签名,并将获取此交易之前(在时间上)的所有交易。enable_raw
:从此端点返回的所有交易都是来自 Solana 的 “人类可读”的已解析交易。如果将其设置为 true,则原始交易也会与已解析的交易一起返回。成功执行后,返回的响应包含与地址字段中提供的帐户相关的已解析交易数组。 响应具有以下结构。
{
"success": true,
"message": "Transaction history fetched successfully",
"result": [\
"timestamp": "2023-08-22T15:37:38.000Z",\
"fee": 0.000105,\
"fee_payer": "H6ZLTRpVXobSYuNWufG8iqN9dMRQyZkXXSR5nEaeW73r",\
"signers": [\
"H6ZLTRpVXobSYuNWufG8iqN9dMRQyZkXXSR5nEaeW73r"\
],\
"signatures": [\
"43rcisywmVC7JATBi2TRZX4z2jiEjzvi9BaFts1z5rLvpf5RpQ82c7QoQGzKgGpfm33NV3RMp22qTyMcaLEnNDNe"\
],\
"protocol": {\
"address": "9ehXDD5bnhSpFVRf99veikjgq8VajtRH7e3D9aVPLqYd",\
"name": "FOXY_RAFFLE"\
},\
"type": "BUY_TICKETS", //指示交易 R 类型的主要操作\
"status": "Success",\
"actions": [\
{\
"info": {\
"raffle_address": "9BSvwaVkHBjciQ5UshiiguL1ucSqLv2LXDRcKBGf6Bj1",\
"currency": "So11111111111111111111111111111111111111112",\
"ticket_price": 0.245, //每张票的价格\
"tickets": 10, //买方购买的票数\
"buyer": "H6ZLTRpVYobSYuNWufG8iqN9xMRQyZkXXSR5nEaeW73r" //买方\
},\
"source_protocol": {\
"address": "9ehXDD5bnhSpFVRf99veikjgq8VajtRH7e3D9aVPLqYd",\
"name": "FOXY_RAFFLE"\
},\
"type": "BUY_TICKETS"\
},\
{\
"info": {\
"amount": 2.45,\
"sender": "H6ZLTRpVYYuNWufG8iqN9dMRQyZkXXSR5nEaeW73r",\
"receiver_associated_account": "F8tETMLhvLRmXLibEWES5faiHYUFrNJ2AhyRd89Kzz1R",\
"receiver": "9BSvwaVkHBjciQ5UshiiVYubSqLv2LXDRcKBGf6Bj1",\
"token_address": "So11111111111111111111111111111111111111112"\
},\
"source_protocol": {\
"address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",\
"name": "TOKEN_PROGRAM"\
},\
"type": "TOKEN_TRANSFER",\
"parent_protocol": "9ehXDD5bnhSpFVRf99veikjgq8VajtRH7e3D9aVPLqYd"\
},\
{\
"info": {\
"sender": "H6ZLTRpVXobSYVYWufG8iqN9dMRQyZkXXSR5nEaeW73r",\
"receiver": "AxGPdJRvpApHv6CHMQpVYCUdeER5xgfhzXAeJguLSkk",\
"amount": "2.450000000"\
},\
"source_protocol": {\
"address": "11111111111111111111111111111111",\
"name": "SYSTEM_PROGRAM"\
},\
"type": "SOL_TRANSFER"\
}\
]\
}\
]
}
请注意,这是一个示例响应;更详细的文档可以在此处找到。JS SDK 也接受类似的参数,并且仅返回结果作为响应。
SHYFT 的 Solana JS SDK
下一步涉及过滤所有交易,以便我们可以选择与我们的用例相关的交易。首先,我们 遍历我们在上一步中收集的交易列表,并检查“SWAP”类型的交易。 由于从 SHYFT 收到的所有交易都经过预解析并且“人类可读”,因此我们可以直接检查 type
字段是否为 SWAP
。完成后,我们将拥有一个直接或间接涉及 booty 代币的 SWAP
交易数组。
for (let index = 0; index < getTransactions.length; index++) {
const eachTransaction = getTransactions[index];
var txnTimeStamp = new Date(eachTransaction.timestamp);
if (endingTime > txnTimeStamp) {
transactionFetchComplete = true;
break;
}
//checking and filtering SWAP transactions from the transactions received
if (eachTransaction.type === "SWAP")
transactions.push(eachTransaction);
}
现在,我们从先前的 SWAP 交易集中过滤在 Orca Whirlpool 上发生的交易。 由于 SHYFT 的预解析交易,可以通过检查 protocol 字段轻松完成此操作,该字段包含发生交易的协议的名称和帐户地址。
function getOrcaSwaps(transactions, address) {
try {
//filtering transactions from Orca Whirlpool
var orcaTransactions = transactions.filter((eachTxn) => eachTxn.protocol.address === address);
return orcaTransactions;
} catch (error) {
console.log("Some error Occured");
return [];
}
}
我们现在可以 以用户友好的格式在 UI 中显示这些累积的交易。除此之外,我们还可以计算各种见解,例如交换总数、交换总交易量、唯一交换者的数量等。 当用户向流动性池贡献资金时,他们通常会存入加密货币对。感谢 SHYFT 的预解析交易,所有这些信息都可以轻松提取,此外,我们可以识别交易所涉及的特定代币,包括已交换为 booty 代币的代币和已交换为 booty 代币的代币。
解决上述问题的另一种方法是检索在特定一小时内来自 Orca Whirlpool 的所有交易。随后,我们可以继续从收到的交易数组中选出“SWAP”交易。最后,我们可以专门识别和过滤涉及“booty”代币的“SWAP”交易,以获取最终的交易集。然而,重要的是要注意,Orca Whirlpool 是一个非常活跃的可执行帐户,每秒都会发生大量的交易。这意味着与先前说明的方法相比,我们需要处理的交易数量要大得多。
如果你喜欢这篇文章,请随时探索其他关于追踪 cNFT 市场事件 或 在 Solana 上构建 cNFT 的 discord 机器人 的文章。以上项目也可以在 我们的 GitHub 上找到。 非常感谢你的阅读时间,我们真的希望你喜欢使用 SHYFT 进行构建。
- 原文链接: blogs.shyft.to/how-to-tr...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!