查询SOLANA地址的所有交易

在这个教程中,我们将学习如何使用 JavaScript 和 Solana Web3.js 库或 JSON-RPC API 获取 Solana 网络上某个指定地址的所有交易。

查询SOLANA地址的所有交易
一键发币: SOL | BNB | ETH | BASE | Blast | ARB | OP | POLYGON | AVAX | FTM | OK

在这个教程中,我们将学习如何使用 JavaScript 和 Solana Web3.js 库或 JSON-RPC API 获取 Solana 网络上某个地址的所有交易。

1、使用 Solana Web3.js 获取交易数据

要获取某个地址的所有交易,我们有 2 个选择,要么使用 Solana Web3.js,要么使用 Solana JSON-RPC API。

要执行这两项操作,请首先安装 Solana Web3.js 库:

npm install @solana/web3.js

然后使用它来获取与区块链交互的 URL,并创建与所需网络(主网、开发网或测试网)的连接:

import { clusterApiUrl, Connection } from '@solana/web3.js'

// you can also pass 'testnet' or 'devnet' here
const URL = clusterApiUrl('mainnet-beta');

const connection = new Connection(URL)

如果你使用 React,则可以仅使用 useConnection 挂钩,而不是创建与区块链的新连接。

然后你可以调用 getSignaturesForAddress 函数,该函数将返回某个地址在区块链上发送的所有交易的签名列表:

import { PublicKey } from '@solana/web3.js'

const address = new PublicKey("GX6nkQgcXy4xDyuSH9MKjG9nq5KN5ntE3ZUUHSqUrcC8")

const signatures = await connection.getSignaturesForAddress(address)

该函数将你想要获取其签名的地址作为参数作为 PublicKey 对象,并返回带有签名属性的 ConfirmedSignatureInfo 对象数组。

如果你使用 React,则可以使用 useWallet 钩子直接获取所连接钱包的 PublicKey。

然后,使用这些签名,你可以使用 getParsedTransaction 函数获取有关每笔交易的信息。 如果立即获取有关所有交易的更多信息,请使用 getParsedTransactions 函数。

以下是使用 getParsedTransactions 函数的示例:

import { PublicKey } from '@solana/web3.js'

const address = new PublicKey("GX6nkQgcXy4xDyuSH9MKjG9nq5KN5ntE3ZUUHSqUrcC8")

const signaturesRes = await connection.getSignaturesForAddress(address)

const signatures = signaturesRes.map(tx => tx.signature)
const data = await connection.getParsedTransactions(signatures)

或者使用 getParsedTransaction 函数:

import { PublicKey } from '@solana/web3.js'

const address = new PublicKey("GX6nkQgcXy4xDyuSH9MKjG9nq5KN5ntE3ZUUHSqUrcC8")

const signaturesRes = await connection.getSignaturesForAddress(address)

const signatures = signaturesRes.map(tx => tx.signature)
const data = await connection.getParsedTransaction(signatures[0])

两个函数将返回相同类型的数据。 getParsedTransactions 函数将返回 ParsedTransactionWithMeta 数组,而 getParsedTransaction 函数将返回单个 ParsedTransactionWithMeta

查看文档以了解有关每个函数和响应对象的更多信息:

2、使用 JSON-RPC API 获取交易数据

这是一个示例,其中获取了主网上某个地址的所有交易的签名:

import solanaWeb3 from '@solana/web3.js';

const URL = solanaWeb3.clusterApiUrl('mainnet-beta'); // you can also pass 'testnet' or 'devnet' here

const res = await fetch(URL, {
    method: 'POST',
    headers: { 'content-type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: 'get-signatures',
      method: 'getSignaturesForAddress',
      params: [address],
    }),
});

const jsonRes = await res.json();

const signatures = jsonRes.result.map(result => result.signature)

在上面的代码中,我们向上面获得的区块链 URL 发送 API 调用。 这是一个 POST 请求,在 body中,我们传递有关我们想要获取的数据的信息。

JSON-RPC API 的工作方式是它们具有可以调用和发送特定参数的方法。

在本例中,我们要调用名为 getSignaturesForAddress 的方法,以便我们在请求正文中的方法属性中传递该方法。

该方法需要参数中的地址,因此在 params 属性中,我们传递要获取交易的钱包的地址。

因此,在上面的代码中, address 是一个字符串,其中包含你想要获取其交易签名的地址。

body中的 id 属性只是一个标识符,它将出现在 API 调用的响应中,帮助你识别请求和响应。

在该 API 调用的响应中,有一个结果属性,其中包含你在参数中传递的地址所进行的所有交易的所有签名。

以下是从该 API 调用中获得的结果示例:

{
  "jsonrpc": "2.0",
  "result": [
    {
      "err": null,
      "memo": null,
      "signature": "5h6xBEauJ3PK6SWCZ1PGjBvj8vDdWG3KpwATGy1ARAXFSDwt8GFXM7W5Ncn16wmqokgpiKRLuS83KUxyZyv2sUYv",
      "slot": 114,
      "blockTime": null
    }
  ],
  "id": 1
}

在此示例中,只有一个签名,但如果该地址已发送多个交易,则结果中将有多个像这样的对象;如果该地址从未发送过交易,则结果中将有一个空数组。

然后,当你拥有某个地址的所有交易签名的列表时,可以使用该列表通过以下 API 调用来获取每笔交易的详细信息:

const signature = 'the transaction signature here'

const res = await fetch(URL, {
    method: 'POST',
    headers: { 'content-type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: 'get-transaction',
      method: 'getTransaction',
      params: [signature],
    }),
});

const transaction = await res.json();

所以这里的API调用与上面的类似,但是我们调用的方法是 getTransaction,并且在参数中我们传递我们想要获取信息的交易的签名。

结果属性中返回的对象比以前更复杂,可以查看文档以了解所有可用的属性:


原文链接:How to get all the transactions of an address on Solana in JavaScript

DefiPlot翻译整理,转载请标明出处

通过 NowPayments 打赏