GTokenTool全网最好的代币发行工具平台
当前位置:首页 >> solana教程 >> 如何在 Solana 上获取事务日志

如何在 Solana 上获取事务日志

admin solana教程 63

是否需要提取与钱包相关的所有交易?想要查看与糖果机相关的所有铸币交易?或者查看 NFT 的交易历史记录?Solana 的getSignaturesForAddress方法是一种多功能工具,可让您轻而易举地获取交易历史记录。

将要做

在本指南中,您将深入了解 Solana 交易的激动人心的世界!您将构建一个简单的脚本,可以查询地址(钱包、programid、代币铸造等)并找到与其相关的所有交易历史记录。 

你需要

  • Nodejs(16.15 或更高版本)

  • Yarn安装

  • Solana web3

  • 熟悉 Solana 上的基本交易。

  • JavaScript 知识

让我们开始吧!

设置您的环境

在终端中创建一个新的项目目录和文件log.js:

mkdir get_sol_tx
cd get_sol_tx
echo > log.js

安装 Solana web3 依赖项:

yarn init -y
yarn add @solana/web3.js@1

或者

npm init -y
npm install --save @solana/web3.js@1

在所选的代码编辑器中打开log.js ,在第 1 行,需要@solana/web3.js并将其存储在常量中,**solanaWeb3:
**

const solanaWeb3 = require('@solana/web3.js');
用于简化调试的日志


声明您想要搜索的地址:

const searchAddress = 'YOUR_ADDRESS_HERE'; //example 'vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg'

注意:这可以是 Solana 上的任何有效地址(例如,钱包地址、铸币地址、程序地址)。如果您还没有,可以使用“vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg”作为示例。

好了,我们准备开始做饭了!

建立与 QuickNode RPC 的

要在 Solana 上构建,您需要一个 API 端点来连接网络。欢迎您使用公共节点或部署和管理自己的基础设施;但是,如果您希望响应时间加快 8 倍,您可以将繁重的工作留给我们。


我们将在 Solana Devnet 下启动我们的节点,但您可以启动满足您需求的节点。复制 HTTP 提供程序链接:

新节点

导航回log.js并创建一个常量端点并为其分配您的 QuickNode url。在下一行中,将此常量作为Connection函数的参数传入,并将其存储在另一个名为solanaConnection的常量中:

const endpoint = 'https://example.solana-devnet.quiknode.pro/000000/';
const solanaConnection = new solanaWeb3.Connection(endpoint);

太棒了!您已准备好构建搜索功能。

创建交易查询

getSignaturesForAddress方法将在此完成大量繁重的工作。其工作原理如下: 

它将接受两个参数: 

  • 搜索地址(必填):您要查询的公钥

  • 选项(可选):包含 3 个可选条目的对象: 

    • before:在特定交易签名之前开始向后搜索

    • after:在特定交易签名之后开始向前搜索

    • 限制:返回的最大交易数量(请注意,最大值和默认值为 1,000)

它将返回一个ConfirmedSignatureInfo数组的 Promise ,该数组是包含关键交易信息的类型对象: 

  • 签名(交易ID), 

  • slot 和 blockTime(查看交易何时被处理), 

  • err(如果有错误),以及 

  • 备忘录(如果与交易相关的任何备忘录)

定义一个新的异步函数getTransactions ,它接受两个参数:address和numTx。 

在我们的函数内部,对solanaConnection的新实例调用getSignaturesForAddress方法,并将输出保存到变量transactionList中:

const getTransactions = async(address, numTx) => {
   const pubKey = new solanaWeb3.PublicKey(address);
   let transactionList = await solanaConnection.getSignaturesForAddress(pubKey, {limit:numTx});
}

这应该会给我们一个符合我们搜索条件的所有交易历史记录的数组。让我们以一种易于阅读的方式记录结果。 

在getTransactions中,创建一个forEach循环来记录有关每个交易的信息: 

const getTransactions = async(address, numTx) => {
   const pubKey = new solanaWeb3.PublicKey(address);
   let transactionList = await solanaConnection.getSignaturesForAddress(pubKey, {limit:numTx});
   transactionList.forEach((transaction, i) => {
       const date = new Date(transaction.blockTime*1000);
       console.log(`Transaction No: ${i+1}`);
       console.log(`Signature: ${transaction.signature}`);
       console.log(`Time: ${date}`);
       console.log(`Status: ${transaction.confirmationStatus}`);
       console.log(("-").repeat(20));
   })
}

运行你的代码!

如果一切设置正确,您应该能够调用您的函数并查看一些结果!将其添加到log.js的底部: 

getTransactions(searchAddress,3);

现在在你的终端输入: 

node log.js

你应该看到类似这样的内容: 

交易搜索

哇!很简单,对吧?请随意尝试几个不同的钱包、一个 NFT 铸币地址和一个 Candy Machine ID。你可以看到该方法应该会产生类似的结果,这使得它对于许多不同的应用程序来说非常方便。 

恭喜!您已成功获取交易......您可以在这里停下来,但如果您想了解我们还能用该交易签名做什么,请继续阅读

解析交易

因此,我们获得了一些有关交易历史的有用基本信息,但是每笔交易做了什么?我们可以使用 Solana 的getParsedTransaction方法来为我们提供大量额外的详细信息。 

getParsedTransaction方法将接受已确认或最终确定的交易签名并返回ParsedTransactionWithMeta对象: 

yarn init -y
yarn add @solana/web3.js@1
0

这里隐藏着大量信息,我们不会在本入门指南中介绍,但我们想举一个例子来说明如何与这些对象进行交互。 

在getTransactions函数中,我们声明两个新变量:signatureList和transactionDetails 。我们将通过映射transactionList来生成签名列表,并将调用这些签名进入getParsedTransactions来生成每个交易的详细信息:

yarn init -y
yarn add @solana/web3.js@1
1

当我们的 promise 返回时,transactionDetails将产生一个ParsedTransactionWithMeta对象数组。让我们尝试在其中找到一些有用的信息。 

假设我们有兴趣找到与给定交易交互的所有程序或智能合约。在我们原始的forEach循环中,在日期声明之后,让我们创建一个新变量transactionInstructions: 

yarn init -y
yarn add @solana/web3.js@1
2

这将使用我们的索引i来查找循环中正在查询的同一交易的详细交易信息。由于每个交易可以有多个指令或程序迭代,因此我们需要另一个循环来获取交易中的每个程序交互。在我们的循环内部,在我们的确认状态日志之后,添加以下内容:

yarn init -y
yarn add @solana/web3.js@1
3

我们在这里所做的是,对于每个交易,查看每个交易指令并记录程序名称(如果存在)和程序 ID。 

最终的函数看起来应该是这样的: 

yarn init -y
yarn add @solana/web3.js@1
4

现在,再次运行脚本。在终端中输入: 

node log.js

你应该看到类似这样的内容:

交易搜索第 2 部分

我们的交易结果现在包括与我们交互的不同程序的详细信息! 

作者:GTokenTool一键发币平台

交流群:https://t.me/+Kz4u3xoDpFo3ZWY1

同类推荐