Solana 查询交易接口
交易相关接口在 Solana 上可以实现多种操作,包括获取交易手续费、获取交易详细信息以及发送交易。
1. 获取交易手续费
getFeeForMessage 接口用于预估特定交易的手续费。
您需要提供一个序列化后的交易消息 RawTransaction 作为参数,然后节点会根据当前情况估算出执行这个交易所需的手续费。
我们在命令行中,通过 curl 命令发送 POST 请求到 Solana 的 RPC 接口。
curl https://api.devnet.solana.com -X POST -H "Content-Type: application/json" -d '
{
"id":1,
"jsonrpc":"2.0",
"method":"getFeeForMessage",
"params":[
"AQABAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAA",
{
"commitment":"processed"
}
]
}
'
返回结果:
{
"jsonrpc": "2.0",
"result": {
"context": {
"apiVersion": "1.16.3",
"slot": 209111155
},
"value": null
},
"id": 1
}
2. 获取交易详细信息
getTransaction 接口允许您获取特定交易的详细信息,包括交易的执行情况、费用、指令信息等。
我们在命令行中,通过 curl 命令发送 POST 请求到 Solana 的 RPC 接口。
curl https://api.devnet.solana.com -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"id": 1,
"method": "getTransaction",
"params": [
"2o9qCEhwKi8w7hTFQJTLwMBZPFH8qM3iNd9rprtdY6XShyrpsqkWt4Df3Zgsxv6y4nbRe4SDgU8KMvuMfs7HxVhp",
"jsonParsed"
]
}
'
返回结果:
{
"jsonrpc": "2.0",
"result": {
"blockTime": 1674954447,
"meta": {
"computeUnitsConsumed": 12481,
"err": null,
"fee": 5000,
"innerInstructions": [],
"logMessages": [
"Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s invoke [1]",
"Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s consumed 2633 of 600000 compute units",
"Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s success",
"Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s invoke [1]",
"Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s consumed 5562 of 597367 compute units",
"Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s success",
"Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s invoke [1]",
"Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s consumed 4286 of 591805 compute units",
"Program gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s success"
],
"postBalances": [
420164575000,
23942400,
23942400,
23942400,
1169280,
1141440
],
"postTokenBalances": [],
"preBalances": [
420164580000,
23942400,
23942400,
23942400,
1169280,
1141440
],
"preTokenBalances": [],
"rewards": [],
"status": {
"Ok": null
}
},
"slot": 192074782,
"transaction": {
"message": {
"accountKeys": [
{
"pubkey": "vir55LvSEGcY55ny876GycLmFCxMXTkoRg7RxDvKiw5",
"signer": true,
"source": "transaction",
"writable": true
},
{
"pubkey": "8PugCXTAHLM9kfLSQWe2njE5pzAgUdpPk3Nx5zSm7BD3",
"signer": false,
"source": "transaction",
"writable": true
},
{
"pubkey": "EfnLcrwxCgwALc5vXr4cwPZMVcmotZAuqmHa8afG8zJe",
"signer": false,
"source": "transaction",
"writable": true
},
{
"pubkey": "6Ukmvns6Uyf3nRVj3ErDBgx7BiZRNJrLyXe1nGQ7CUHA",
"signer": false,
"source": "transaction",
"writable": true
},
{
"pubkey": "SysvarC1ock11111111111111111111111111111111",
"signer": false,
"source": "transaction",
"writable": false
},
{
"pubkey": "gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s",
"signer": false,
"source": "transaction",
"writable": false
}
],
"instructions": [
{
"accounts": [
"vir55LvSEGcY55ny876GycLmFCxMXTkoRg7RxDvKiw5",
"8PugCXTAHLM9kfLSQWe2njE5pzAgUdpPk3Nx5zSm7BD3",
"SysvarC1ock11111111111111111111111111111111"
],
"data": "6mJFQCt94hG4CKNYKgVcwiF4v7AWo54Dz3XinKUG6Qm1DDhhmspAST",
"programId": "gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s",
"stackHeight": null
},
{
"accounts": [
"vir55LvSEGcY55ny876GycLmFCxMXTkoRg7RxDvKiw5",
"EfnLcrwxCgwALc5vXr4cwPZMVcmotZAuqmHa8afG8zJe",
"SysvarC1ock11111111111111111111111111111111"
],
"data": "6mJFQCt94hG4CKNYKgVcwigC7XswHjekyj7J1dQmjsHsoqHjydqXoV",
"programId": "gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s",
"stackHeight": null
},
{
"accounts": [
"vir55LvSEGcY55ny876GycLmFCxMXTkoRg7RxDvKiw5",
"6Ukmvns6Uyf3nRVj3ErDBgx7BiZRNJrLyXe1nGQ7CUHA",
"SysvarC1ock11111111111111111111111111111111"
],
"data": "6mJFQCt94hG4CKNYKgVcwcojsn834cy7vrPD6ksi4ri42uvkGeVMkb",
"programId": "gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s",
"stackHeight": null
}
],
"recentBlockhash": "sS5jHAvxaXfowtGCvg4dWc9QjzeZ1dJS5GonshyDsEq"
},
"signatures": [
"2o9qCEhwKi8w7hTFQJTLwMBZPFH8qM3iNd9rprtdY6XShyrpsqkWt4Df3Zgsxv6y4nbRe4SDgU8KMvuMfs7HxVhp"
]
}
},
"id": 1
}
以下是接口返回结果的解释:
blockTime: 交易发生的区块时间戳。meta: 交易的元数据信息,包括计算单元消耗、费用、指令信息等。computeUnitsConsumed: 计算单元消耗,表示交易执行时消耗的计算资源。fee: 交易费用,单位为 Sol。innerInstructions: 内部指令信息,如果交易包含了内部指令,则会显示在这里。logMessages: 日志信息,记录了交易执行过程中的日志消息。postBalances: 执行交易后的账户余额信息。preBalances: 执行交易前的账户余额信息。rewards: 奖励信息,记录了交易执行过程中的奖励情况。status: 交易执行状态,通常为Ok或其他错误信息。
slot: 交易所在的区块槽位信息。transaction: 交易详细信息,包括交易的消息、签名等。message: 交易的消息信息,包括账户关键信息、指令信息等。signatures: 交易的签名信息。
通过这些信息,您可以详细了解特定交易的执行情况、费用情况以及相关指令信息,有助于进行交易记录的审查和分析。
3. 发送交易
发送交易通过 sendTransaction 接口。这个接口里面需要对 Transaction 对象做编码,所以不做演示。
在 Javascript/rust 的 SDK 中发送交易会比较直观。
除了发送请求外,还可以通过模拟请求来判断是否可能执行成功,接口为 simulateTransaction。