btc、usdt 根据交易hash如何得到交易明细和手续费
V刘晨曦
发表于 2022-12-20 00:43:20
159
0
0
1.在自己的钱包节点上根据txId获取交易明细
2.通过原始交易递归计算手续费: 公式[ 手续费 sum(vin)- sum(vout) ]- h1 o) Y% r+ h5 R6 E
要求:
需要对utxo有一定的了解~~~5 d) u$ X- K% T$ R' ?9 h7 q/ f Q2 u! y
直接low代码:) X: ?* b' r7 t) [6 ?/ Y
//交易信息
public class BtcTransactionInfo implements Serializable {
private static final long serialVersionUID = 1L;
0 D4 L7 D m: m6 M) @, i, F! `$ U
private String txId;" x. \+ d' P ]# J! T0 E- N9 Y
private String hash;
private String blockheight;$ D* ?0 M6 K- C1 r M+ g
private String blockweight;. @* z ?+ ^- q7 B
private String blockconfirmations;% a3 K' y6 ~; d' E0 L2 L Y) f
private String blockversion;
private String previousblockhash;0 h) N0 }6 {3 l2 ~8 _) V s7 p
private String nextblockhash;
private String version;8 Z! I: K* K. z6 E6 \, ^/ P
private String size;
private String vsize;
private String locktime;/ e8 |" D5 Z B4 G
private String hex;
private String blockhash;
private String confirmations;
private String time;
private String blocktime;* C2 ^6 ?! {0 l7 w, I% |
private BigDecimal amount;! I; s- b1 Z0 r4 c
private BigDecimal free;
private String from;
private String to;" o3 \* c5 _0 m3 w/ |2 F
: K5 F B# j8 s, }1 l" `
5 N$ s9 ^0 P9 W: K/ f4 E+ C
}
% d9 s) @" }4 }/ }1 B
//根据交易的txid调用钱包api获取相应信息+ o8 c2 ]0 Z: C! ]0 T3 `7 s
public Object getrawTransactionByTxIdFromWallet(String txId) throws CoinException {
BtcTransactionInfo tranc = new BtcTransactionInfo();' R- K5 O6 L- `: A! L. `; f3 _
try {
//调用原始交易接口
Map transaction = (Map) btService.getTrawtransaction(txId, 1);5 t; G$ Z' M4 t
JSONObject info = JSONObject.parseObject(JSON.toJSONString(transaction));
String blockHash = info.getString("blockhash");4 f- V1 g2 t3 H' E# ^
/*block*/
//调用根据blockhash 获取块信息接口7 G$ M: I' v4 z- K0 t
Map blockInfo = (Map)btService.getblock(blockHash);
JSONObject block = JSONObject.parseObject(JSON.toJSONString(blockInfo));7 I" a' Q' t1 _7 ]2 d n
tranc.setBlockconfirmations(block.getString("confirmations"));
tranc.setBlocktime(block.getString("time"));
tranc.setBlockversion(block.getString("version"));
tranc.setBlockheight(block.getString("height"));
tranc.setBlockweight(block.getString("weight"));
tranc.setPreviousblockhash(block.getString("previousblockhash"));
tranc.setNextblockhash(block.getString("nextblockhash"));) m! H; V- G: g1 N# M5 {3 p
5 T$ ]) [+ f1 a! w
tranc.setTxId(info.getString("txid"));5 s0 R7 F/ O2 a3 G; B, v
tranc.setHash(info.getString("hash")); X* j; s6 d9 [5 x& ?4 D5 y/ v* y
tranc.setVersion(info.getString("version"));6 P D/ J$ X$ b, l4 [/ H
tranc.setSize(info.getString("size"));/ w7 D5 ^& g+ V; r
tranc.setVsize(info.getString("vsize"));
tranc.setLocktime(info.getString("locktime"));: S# ~) `2 E6 S& d
tranc.setHex(info.getString("hex"));
tranc.setBlockhash(blockHash);
tranc.setConfirmations(info.getString("confirmations"));
tranc.setTime(info.getString("time"));
tranc.setBlocktime(info.getString("blocktime"));
0 T1 |0 _( ~+ X% g
JSONArray vins = JSONArray.parseArray(info.getString("vin"));& X% [+ Y8 U, d$ i. q C
double sumvin = 0 ;
List formAddress = new ArrayList();3 P. }+ Y/ @* |, ~* {
for (int i = 0,len = vins.size(); i
成为第一个吐槽的人