1
1
package org .tron .common .logsfilter .capsule ;
2
2
3
- import com .alibaba .fastjson .JSON ;
4
- import com .alibaba .fastjson .JSONArray ;
5
- import com .alibaba .fastjson .JSONObject ;
6
3
import java .util .List ;
7
4
import lombok .Getter ;
8
5
import lombok .Setter ;
9
6
import org .apache .commons .lang3 .ArrayUtils ;
10
7
import org .pf4j .util .StringUtils ;
11
8
import org .spongycastle .util .encoders .Hex ;
12
9
import org .tron .common .crypto .Hash ;
13
- import org .tron .common .logsfilter .ContractEventParserJson ;
10
+ import org .tron .common .logsfilter .ContractEventParserAbi ;
14
11
import org .tron .common .logsfilter .EventPluginLoader ;
15
12
import org .tron .common .logsfilter .FilterQuery ;
16
13
import org .tron .common .logsfilter .trigger .ContractEventTrigger ;
19
16
import org .tron .common .runtime .vm .DataWord ;
20
17
import org .tron .common .runtime .vm .LogInfo ;
21
18
import org .tron .core .config .args .Args ;
19
+ import org .tron .protos .Protocol .SmartContract .ABI ;
22
20
23
21
public class ContractTriggerCapsule extends TriggerCapsule {
24
22
@@ -39,58 +37,39 @@ public void processTrigger() {
39
37
ContractTrigger event ;
40
38
boolean isEvent = false ;
41
39
LogInfo logInfo = contractTrigger .getLogInfo ();
42
- JSONObject abi = null ;
43
- JSONArray entrys = null ;
44
- String abiString = contractTrigger .getAbiString ();
45
-
46
- Object abiObj = JSON .parse (abiString );
47
- if (abiObj instanceof JSONObject ) {
48
- abi = (JSONObject ) abiObj ;
49
- entrys = abi .getJSONArray ("entrys" );
50
- }
51
-
40
+ ABI abi = contractTrigger .getAbi ();
52
41
List <DataWord > topics = logInfo .getTopics ();
53
42
54
43
String eventSignature = "" ;
55
44
String eventSignatureFull = "fallback()" ;
56
45
String entryName = "" ;
57
- JSONObject entryObj = new JSONObject () ;
46
+ ABI . Entry eventEntry = null ;
58
47
59
- if (entrys != null && topics != null && !topics .isEmpty () && ! ArrayUtils
60
- .isEmpty (topics .get (0 ).getData ()) && Args .getInstance ().getStorage ()
48
+ if (abi != null && abi . getEntrysCount () > 0 && topics != null && !topics .isEmpty ()
49
+ && ! ArrayUtils .isEmpty (topics .get (0 ).getData ()) && Args .getInstance ().getStorage ()
61
50
.isContractParseSwitch ()) {
62
51
String logHash = topics .get (0 ).toString ();
63
- for (int i = 0 ; i < entrys .size (); i ++) {
64
- JSONObject entry = entrys .getJSONObject (i );
65
-
66
- String funcType = entry .getString ("type" );
67
- Boolean anonymous = entry .getBoolean ("anonymous" );
68
- if (funcType == null || !"event" .equalsIgnoreCase (funcType )) {
69
- continue ;
70
- }
71
52
72
- if (anonymous != null && anonymous ) {
53
+ for (ABI .Entry entry : abi .getEntrysList ()) {
54
+ if (entry .getType () != ABI .Entry .EntryType .Event || entry .getAnonymous ()) {
73
55
continue ;
74
56
}
75
57
76
- String signature = entry .getString ( "name" ) + "(" ;
77
- String signatureFull = entry .getString ( "name" ) + "(" ;
58
+ String signature = entry .getName ( ) + "(" ;
59
+ String signatureFull = entry .getName ( ) + "(" ;
78
60
StringBuilder signBuilder = new StringBuilder ();
79
61
StringBuilder signFullBuilder = new StringBuilder ();
80
- JSONArray inputs = entry .getJSONArray ("inputs" );
81
- if (inputs != null ) {
82
- for (int j = 0 ; j < inputs .size (); j ++) {
83
- if (signBuilder .length () > 0 ) {
84
- signBuilder .append ("," );
85
- signFullBuilder .append ("," );
86
- }
87
- String type = inputs .getJSONObject (j ).getString ("type" );
88
- String name = inputs .getJSONObject (j ).getString ("name" );
89
- signBuilder .append (type );
90
- signFullBuilder .append (type );
91
- if (StringUtils .isNotNullOrEmpty (name )) {
92
- signFullBuilder .append (" " ).append (name );
93
- }
62
+ for (ABI .Entry .Param param : entry .getInputsList ()) {
63
+ if (signBuilder .length () > 0 ) {
64
+ signBuilder .append ("," );
65
+ signFullBuilder .append ("," );
66
+ }
67
+ String type = param .getType ();
68
+ String name = param .getName ();
69
+ signBuilder .append (type );
70
+ signFullBuilder .append (type );
71
+ if (StringUtils .isNotNullOrEmpty (name )) {
72
+ signFullBuilder .append (" " ).append (name );
94
73
}
95
74
}
96
75
signature += signBuilder .toString () + ")" ;
@@ -99,8 +78,8 @@ public void processTrigger() {
99
78
if (sha3 .equals (logHash )) {
100
79
eventSignature = signature ;
101
80
eventSignatureFull = signatureFull ;
102
- entryName = entry .getString ( "name" );
103
- entryObj = entry ;
81
+ entryName = entry .getName ( );
82
+ eventEntry = entry ;
104
83
isEvent = true ;
105
84
break ;
106
85
}
@@ -120,9 +99,9 @@ public void processTrigger() {
120
99
byte [] data = logInfo .getClonedData ();
121
100
122
101
((ContractEventTrigger ) event )
123
- .setTopicMap (ContractEventParserJson .parseTopics (topicList , entryObj ));
102
+ .setTopicMap (ContractEventParserAbi .parseTopics (topicList , eventEntry ));
124
103
((ContractEventTrigger ) event )
125
- .setDataMap (ContractEventParserJson .parseEventData (data , topicList , entryObj ));
104
+ .setDataMap (ContractEventParserAbi .parseEventData (data , topicList , eventEntry ));
126
105
} else {
127
106
if (!EventPluginLoader .getInstance ().isContractLogTriggerEnable ()) {
128
107
return ;
@@ -135,8 +114,9 @@ public void processTrigger() {
135
114
RawData rawData = new RawData (logInfo .getAddress (), logInfo .getTopics (), logInfo .getData ());
136
115
137
116
event .setRawData (rawData );
138
- event .setAbiString (contractTrigger .getAbiString ());
139
117
118
+ event .setLatestSolidifiedBlockNumber (contractTrigger .getLatestSolidifiedBlockNumber ());
119
+ event .setRemoved (contractTrigger .isRemoved ());
140
120
event .setUniqueId (contractTrigger .getUniqueId ());
141
121
event .setTransactionId (contractTrigger .getTransactionId ());
142
122
event .setContractAddress (contractTrigger .getContractAddress ());
0 commit comments