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
。