btc、usdt 根据交易hash如何得到交易明细和手续费
V刘晨曦
发表于 2022-12-20 00:43:20
160
0
0
1.在自己的钱包节点上根据txId获取交易明细2 z0 J3 c8 @3 \
2.通过原始交易递归计算手续费: 公式[ 手续费 sum(vin)- sum(vout) ]; n% D% u1 s# m) k; T7 e) a
要求:: c6 H4 D0 b2 Z3 J1 V7 s3 X
需要对utxo有一定的了解~~~
直接low代码:
//交易信息: F5 r7 M8 \# }1 K% J
public class BtcTransactionInfo implements Serializable {$ T" Q# s Y, p4 v
5 ~! y: h6 N b5 q+ N7 h
private static final long serialVersionUID = 1L;
6 U0 N) `0 \/ M/ n6 O; @
private String txId;/ p, f) Z# x; G( H& d2 n
private String hash;( R. u) f: G) C9 f4 t
private String blockheight;
private String blockweight;: C) `$ ~# Y* C5 p0 W& {
private String blockconfirmations;
private String blockversion;% D' k6 O: r1 y3 w( K$ J2 a
private String previousblockhash;
private String nextblockhash;
private String version;7 E T7 N! K0 \. a: p+ _+ K
private String size;
private String vsize;* a- L( b% N7 I* s& h/ O
private String locktime;1 h+ b8 e+ D6 w3 o3 W4 Z
private String hex;
private String blockhash;
private String confirmations;, z2 D/ ^0 l5 ^ ^
private String time;
private String blocktime;1 u( h0 r6 w6 z( \4 W5 D* t$ ]
private BigDecimal amount;
private BigDecimal free;
private String from;
private String to;0 n+ u( M2 p/ p
/ E. P9 X* T% Y, s3 k) }
}" Y0 I$ Q" B: |- P" g7 V
//根据交易的txid调用钱包api获取相应信息( k/ \+ F; ]8 [$ c* F
public Object getrawTransactionByTxIdFromWallet(String txId) throws CoinException {
BtcTransactionInfo tranc = new BtcTransactionInfo();" M Q7 P" m+ ~- b' \. {
try {1 t, {! X) [& B4 P* o5 Z; P1 T4 }
//调用原始交易接口
Map transaction = (Map) btService.getTrawtransaction(txId, 1);
JSONObject info = JSONObject.parseObject(JSON.toJSONString(transaction));1 m; O0 V' t9 z- ~! m6 z
String blockHash = info.getString("blockhash");& q3 e7 L( l }
/*block*/
//调用根据blockhash 获取块信息接口
Map blockInfo = (Map)btService.getblock(blockHash);
JSONObject block = JSONObject.parseObject(JSON.toJSONString(blockInfo));/ U, f7 T& C3 O' }
tranc.setBlockconfirmations(block.getString("confirmations"));. c9 o6 e( ^5 @& L1 M" O
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"));: r3 N" F# z K# b* H' x p
tranc.setTxId(info.getString("txid"));
tranc.setHash(info.getString("hash"));, O6 } m5 s3 N/ Y2 W! O' v
tranc.setVersion(info.getString("version"));
tranc.setSize(info.getString("size"));
tranc.setVsize(info.getString("vsize"));* C4 S9 \* a/ u9 Y- l% u+ N
tranc.setLocktime(info.getString("locktime"));/ ]& c. v2 J [ E) y
tranc.setHex(info.getString("hex"));( E, e# m- ~; n3 [8 A5 _; I, }) |# _
tranc.setBlockhash(blockHash);6 X w. P% i: O+ A
tranc.setConfirmations(info.getString("confirmations"));8 Q* Y; h7 e" U [ j4 c
tranc.setTime(info.getString("time"));% x* ]' ]9 O( Y9 o A
tranc.setBlocktime(info.getString("blocktime"));. x+ I% N& o: {; q. A; ^$ r
4 k9 }0 c* V" w' \" I0 \2 c
JSONArray vins = JSONArray.parseArray(info.getString("vin"));
double sumvin = 0 ;% Q) w! D8 o3 u4 H8 I+ Y8 o
List formAddress = new ArrayList();
for (int i = 0,len = vins.size(); i
成为第一个吐槽的人