btc、usdt 根据交易hash如何得到交易明细和手续费
V刘晨曦
发表于 2022-12-20 00:43:20
88
0
0
1.在自己的钱包节点上根据txId获取交易明细: G7 R5 b3 d [: q- C
2.通过原始交易递归计算手续费: 公式[ 手续费 sum(vin)- sum(vout) ]
要求:$ r( T% H3 B" T1 T3 ]
需要对utxo有一定的了解~~~
直接low代码:2 Q$ U3 ]* m. d) Q3 i
//交易信息6 c2 q; _7 N' a
public class BtcTransactionInfo implements Serializable {2 @1 p, |8 Q* t
: k' H Y' ~0 ~: P
private static final long serialVersionUID = 1L;, l/ b |6 ?# S0 t* b" d) S
. s' F$ p# M3 \. n- V
private String txId;
private String hash;' h0 t( k+ F, V$ f
private String blockheight;
private String blockweight;3 }+ S3 [- U1 N6 D% \/ \2 v; \2 E9 M+ a
private String blockconfirmations;: C g" \* t B7 y: s
private String blockversion;
private String previousblockhash;
private String nextblockhash;
private String version;: l1 ?1 p( K1 j! |5 ]
private String size;
private String vsize;
private String locktime;1 o: R6 U! G9 W" ~) `2 V# F) Q5 Z
private String hex;
private String blockhash;" _& M( C: _% b
private String confirmations;
private String time;) y. Z6 H) t& a% [2 e* ~ O! j
private String blocktime;
private BigDecimal amount;+ a5 h) ~# f& j4 Z3 P R
private BigDecimal free;
private String from;9 W7 W4 q5 K% {: n7 x/ z
private String to;$ ?% p, b) I+ T" M& T
; o8 a, K# J9 p3 G6 { ~
. c2 ~9 ~7 y5 c! T6 V# o4 v) G
}3 Q8 ` Z: T2 M. ^" P( `
C( ]( z; J; | F6 Z% Y! S& H
//根据交易的txid调用钱包api获取相应信息, c% o9 H5 P$ N
public Object getrawTransactionByTxIdFromWallet(String txId) throws CoinException {) e# h1 Z9 J C" @- A$ {+ y6 {
BtcTransactionInfo tranc = new BtcTransactionInfo();$ a0 s1 v! P, S4 k
try {
//调用原始交易接口
Map transaction = (Map) btService.getTrawtransaction(txId, 1); D0 e5 I7 @2 w$ z4 b
JSONObject info = JSONObject.parseObject(JSON.toJSONString(transaction)); `+ v3 \4 q3 \4 H) G: ~: ~
String blockHash = info.getString("blockhash");
/*block*/0 r9 {, l! U+ {- U# `. b' z" Q
//调用根据blockhash 获取块信息接口
Map blockInfo = (Map)btService.getblock(blockHash);
JSONObject block = JSONObject.parseObject(JSON.toJSONString(blockInfo));
tranc.setBlockconfirmations(block.getString("confirmations"));! Z" B1 p; j6 Q
tranc.setBlocktime(block.getString("time"));9 ]. d$ G3 l( M, H: g! E9 N. c
tranc.setBlockversion(block.getString("version"));
tranc.setBlockheight(block.getString("height"));- F7 r+ d1 r# {( n% ^1 V
tranc.setBlockweight(block.getString("weight"));! ] P1 C0 @9 x! h% \
tranc.setPreviousblockhash(block.getString("previousblockhash"));4 ]" R" r6 D: l9 g& \) |
tranc.setNextblockhash(block.getString("nextblockhash"));9 e% `/ T+ E$ ^
tranc.setTxId(info.getString("txid"));
tranc.setHash(info.getString("hash"));
tranc.setVersion(info.getString("version"));* q4 J) L" e) v& H1 l
tranc.setSize(info.getString("size")); R) p1 _% l, p# r! m8 E% @' d* h3 @- V
tranc.setVsize(info.getString("vsize"));( i5 ~# F% W3 D2 d
tranc.setLocktime(info.getString("locktime"));( A# V3 P2 |- M: Y( L& k0 S; ^
tranc.setHex(info.getString("hex"));
tranc.setBlockhash(blockHash);# G) d. @# W p+ N+ G
tranc.setConfirmations(info.getString("confirmations"));
tranc.setTime(info.getString("time"));4 D( W+ S: P' e5 H" b& P
tranc.setBlocktime(info.getString("blocktime"));, b; J; C" p4 d, d
JSONArray vins = JSONArray.parseArray(info.getString("vin"));% @3 P6 f. F1 c$ ^. n, U
double sumvin = 0 ;
List formAddress = new ArrayList();% z1 b1 l& w b: j$ N3 ~5 f
for (int i = 0,len = vins.size(); i
成为第一个吐槽的人