查询SOLANA地址的所有交易
在这个教程中,我们将学习如何使用 JavaScript 和 Solana Web3.js 库或 JSON-RPC API 获取 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
。
查看文档以了解有关每个函数和响应对象的更多信息:
- getSignaturesForAddress 函数
getSignaturesForAddress
返回的数组中的ConfirmedSignatureInfo 对象- getParsedTransaction 函数
- getParsedTransactions 函数
getTransaction
和getTransactions
函数返回的 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翻译整理,转载请标明出处