1
zj
2024-10-21 a54e43c6d57c82660d46b24b0720175314960d78
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package project.monitor.etherscan;
 
import java.math.BigInteger;
import java.util.HashMap;
import java.util.Map;
 
import kernel.util.StringUtils;
 
public enum InputMethodEnum {
//    transfer(address,uint256): 0xa9059cbb
//
//    balanceOf(address):0x70a08231
//
//    decimals():0x313ce567
//
//    allowance(address,address): 0xdd62ed3e
//
//    symbol():0x95d89b41
//
//    totalSupply():0x18160ddd
//
//    name():0x06fdde03
//
//    approve(address,uint256):0x095ea7b3
//
//    transferFrom(address,address,uint256): 0x23b872dd
    transfer("transfer", "0xa9059cbb"),
    approve("approve", "0x095ea7b3"),
    transferFrom("transferFrom", "0x23b872dd");
    
    private String name;
    private String code;
 
    private InputMethodEnum(String name, String code) {
        this.name = name;
        this.code = code;
    }
    
    public static InputMethodEnum fromCode(String code) {
        if (!StringUtils.isEmptyString(code)) {
            InputMethodEnum[] var1 = values();
            int var2 = var1.length;
 
            for(int var3 = 0; var3 < var2; ++var3) {
                InputMethodEnum unit = var1[var3];
                if (code.equalsIgnoreCase(unit.code)) {
                    return unit;
                }
            }
        }
 
        return null;
    }
    public static InputMethodEnum fromInput(String input) {
        return fromCode(getMethodFromeInpuData(input));
    }
    public static Map<String,Object> inputValueFromCode(String input){
        if(StringUtils.isEmptyString(input)) {
            return null;
        }
        Map<String,Object> map = new HashMap<String, Object>();
        InputMethodEnum inputMethodEnum = fromCode(getMethodFromeInpuData(input));
        if(inputMethodEnum==null) {
            return null;
        }
        switch (inputMethodEnum) {//其余的暂未解析,等必要时处理
        case approve:
            map.put("method", "approve");
            //授权地址
            map.put("approve_address", getAddressFromInputData(input));
            //授权金额(具体的金额换算根据合约decimal决定)
            map.put("approve_value", new BigInteger(input.substring(74,138),16).longValue());
            break;
        case transfer:
            map.put("method", "transfer");
            //转账地址
            map.put("transfer_to_address", getAddressFromInputData(input));
            //转账金额(具体的金额换算根据合约decimal决定)
            map.put("transfer_value", new BigInteger(input.substring(74,138),16).longValue());
            break;
        case transferFrom:
             map.put("method", "transferFrom");
             //转账发起地址
             map.put("transferfrom_from_address", getAddressFromInputData(input));
             //到账地址
             map.put("transferfrom_to_address", "0x"+input.substring(98,138));
             //转账金额(具体的金额换算根据合约decimal决定)
             map.put("transferfrom_value", new BigInteger(input.substring(138,202),16).longValue());
             break;
        default:
            map.put("method", "");
            break;
        }
        return map;
    }
    public static String getMethodFromeInpuData(String inputData){
        if(StringUtils.isEmptyString(inputData)){
            return null;
        }
        try{
            return inputData.substring(0,10);
        }catch (Exception e){
            return null;
        }
    }
    public static String getAddressFromInputData(String inputData){
        if(StringUtils.isEmptyString(inputData)){
            return null;
        }
        try{
            return "0x"+inputData.substring(34,74);
        }catch (Exception e){
            return null;
        }
    }
}