btc、usdt 根据交易hash如何得到交易明细和手续费
V刘晨曦
发表于 2022-12-20 00:43:20
85
0
0
1.在自己的钱包节点上根据txId获取交易明细
2.通过原始交易递归计算手续费: 公式[ 手续费 sum(vin)- sum(vout) ]
要求:
需要对utxo有一定的了解~~~
直接low代码:' l* y5 h$ m: ? Y1 L- H, q8 \- d
//交易信息
public class BtcTransactionInfo implements Serializable {
8 q: k9 }- I) Y( \) }7 ~% S
private static final long serialVersionUID = 1L;& f! y L' ~4 D u, l' ]
7 I# l/ ?( b) p. s
private String txId;9 R; A6 t1 D% d' Q3 v
private String hash;3 J8 [8 U: t; [' }8 p
private String blockheight;
private String blockweight;
private String blockconfirmations;7 ^5 F" @& K7 `( Z$ Y- C: B
private String blockversion;% b d4 f7 x4 E. S' M
private String previousblockhash;$ V( _ e9 A, [2 [
private String nextblockhash;
private String version;5 f: M% c3 M. U9 W! V. h, k5 W
private String size;; ^3 ]/ Q3 U/ h3 g- N
private String vsize;
private String locktime;" @- X+ _3 y' F# Z8 N) k2 F1 M
private String hex;3 X6 r* Q9 U. @5 O, T" n
private String blockhash;
private String confirmations;$ V c/ ]; ?2 y+ f
private String time;
private String blocktime;% E* J1 V6 V9 @* l7 Q& }
private BigDecimal amount;
private BigDecimal free;5 U8 s! W) f [2 p/ Y* p$ ^
private String from;6 N. |, p/ W0 l5 v( A
private String to;' V/ u3 @3 K' k# n$ w6 u
( Q/ a0 f. v" S' ]0 y7 t
}
//根据交易的txid调用钱包api获取相应信息
public Object getrawTransactionByTxIdFromWallet(String txId) throws CoinException {
BtcTransactionInfo tranc = new BtcTransactionInfo();
try {+ w4 _7 n, M- v. s
//调用原始交易接口
Map transaction = (Map) btService.getTrawtransaction(txId, 1);2 L0 |* s' P9 ~. S$ `6 q# P: e& D
JSONObject info = JSONObject.parseObject(JSON.toJSONString(transaction));
String blockHash = info.getString("blockhash");! v2 i& y% Z U4 {9 X' S) Z4 D. z
/*block*/1 [) M/ Q$ [. }
//调用根据blockhash 获取块信息接口
Map blockInfo = (Map)btService.getblock(blockHash);
JSONObject block = JSONObject.parseObject(JSON.toJSONString(blockInfo));
tranc.setBlockconfirmations(block.getString("confirmations"));
tranc.setBlocktime(block.getString("time"));5 L' C8 P+ u, f Z
tranc.setBlockversion(block.getString("version"));
tranc.setBlockheight(block.getString("height"));! {, w# T* E& C; x+ g
tranc.setBlockweight(block.getString("weight"));0 w4 m, d# J- n* S
tranc.setPreviousblockhash(block.getString("previousblockhash"));
tranc.setNextblockhash(block.getString("nextblockhash"));
tranc.setTxId(info.getString("txid"));
tranc.setHash(info.getString("hash"));
tranc.setVersion(info.getString("version"));
tranc.setSize(info.getString("size"));
tranc.setVsize(info.getString("vsize"));
tranc.setLocktime(info.getString("locktime"));0 w4 Y6 U6 W8 P3 T, j, S8 X c
tranc.setHex(info.getString("hex"));% S: c5 P/ A+ v7 W/ S
tranc.setBlockhash(blockHash);9 T8 B: g8 Q% b) K+ c- a; {7 l
tranc.setConfirmations(info.getString("confirmations"));" b+ W y3 ` L% `
tranc.setTime(info.getString("time"));- F( H4 ~, F0 r4 k. i5 a, S
tranc.setBlocktime(info.getString("blocktime"));' ^! d) L1 f9 b/ n! U1 a
1 z7 V+ F5 B- q/ z) j) l Z* `
JSONArray vins = JSONArray.parseArray(info.getString("vin"));: X9 t* m H$ q$ y3 n0 [
double sumvin = 0 ;2 i1 C, v0 A1 w) G+ x$ a8 T& _
List formAddress = new ArrayList();* ~1 j; {6 a6 m0 b+ o% ?
for (int i = 0,len = vins.size(); i
成为第一个吐槽的人