btc、usdt 根据交易hash如何得到交易明细和手续费
V刘晨曦
发表于 2022-12-20 00:43:20
57
0
0
1.在自己的钱包节点上根据txId获取交易明细
2.通过原始交易递归计算手续费: 公式[ 手续费 sum(vin)- sum(vout) ]7 i' k9 M7 E- s7 J& n
要求:% k6 x+ J3 i0 i2 |; W
需要对utxo有一定的了解~~~1 l; W0 S! R* B8 g) M, d
直接low代码:
//交易信息- [: E9 [( E; T# `/ A
public class BtcTransactionInfo implements Serializable {$ y v( L) E/ h: E! l9 t" |" ]8 a
' l% t; ?+ Q7 h* q
private static final long serialVersionUID = 1L;
1 a$ C( P2 a: p7 i4 m; D- X
private String txId;% r6 f" }1 x) H
private String hash;) O% Z: R3 \1 g2 P9 ?) s
private String blockheight;! s( I$ M$ g6 D0 Z, K2 W# u; W. E% O
private String blockweight;
private String blockconfirmations; @/ H* @8 U3 i& Q9 r3 j* j1 X" K, G
private String blockversion;
private String previousblockhash;2 A- _) t+ ? m) p
private String nextblockhash;
private String version;$ @9 N; G# l& X- y8 R* k3 |& i
private String size;
private String vsize;3 I2 ^8 _# y2 E0 a$ w6 O
private String locktime;& p1 y* x/ |$ t
private String hex;
private String blockhash;. V* ]) G& G. f+ e, p8 w! S
private String confirmations;! a6 N: j- v: w& Q+ b# f# o) o
private String time;
private String blocktime;) v S( b6 M, G: m" D! m
private BigDecimal amount;. a9 t3 `& B a
private BigDecimal free;
private String from;! _: v* a! C% s" Z8 u
private String to;# h5 U! z0 M; v
}
) i" Q# x* O" h$ }
//根据交易的txid调用钱包api获取相应信息! w3 b( o1 I6 L! t1 J F5 O# g4 u
public Object getrawTransactionByTxIdFromWallet(String txId) throws CoinException {" c9 K( N- X3 _$ w; f G
BtcTransactionInfo tranc = new BtcTransactionInfo();
try {
//调用原始交易接口5 w9 a. r5 c: h" `. v# K. F
Map transaction = (Map) btService.getTrawtransaction(txId, 1);
JSONObject info = JSONObject.parseObject(JSON.toJSONString(transaction));
String blockHash = info.getString("blockhash");' l/ Y) V4 ]: x' X ]. A
/*block*/
//调用根据blockhash 获取块信息接口
Map blockInfo = (Map)btService.getblock(blockHash);6 V" \4 N0 G) }
JSONObject block = JSONObject.parseObject(JSON.toJSONString(blockInfo));
tranc.setBlockconfirmations(block.getString("confirmations"));
tranc.setBlocktime(block.getString("time"));
tranc.setBlockversion(block.getString("version"));# o" Q! ]1 T: N$ \. `2 }
tranc.setBlockheight(block.getString("height"));
tranc.setBlockweight(block.getString("weight"));" W# r/ e& m* L& |. k1 i
tranc.setPreviousblockhash(block.getString("previousblockhash"));+ J" W+ K$ J% g
tranc.setNextblockhash(block.getString("nextblockhash"));5 \* B W+ _% l$ M5 T* B! D
tranc.setTxId(info.getString("txid"));
tranc.setHash(info.getString("hash"));
tranc.setVersion(info.getString("version")); Y! I/ c8 J- Q% d/ v
tranc.setSize(info.getString("size"));
tranc.setVsize(info.getString("vsize"));- f; }, G2 f W6 t( `
tranc.setLocktime(info.getString("locktime"));, @: j6 {5 ]6 X/ h6 g. o
tranc.setHex(info.getString("hex"));
tranc.setBlockhash(blockHash);/ J# C) {4 V& |$ P
tranc.setConfirmations(info.getString("confirmations"));& _/ _( S8 X; V! c
tranc.setTime(info.getString("time"));
tranc.setBlocktime(info.getString("blocktime"));1 b7 A) v3 o+ Q* z5 `1 U% J& R
JSONArray vins = JSONArray.parseArray(info.getString("vin"));6 o+ ]4 ~% _/ p
double sumvin = 0 ;( w0 t6 G4 t0 B8 M2 s' a
List formAddress = new ArrayList();: A6 D% q* g+ [7 s
for (int i = 0,len = vins.size(); i
成为第一个吐槽的人