@@ -1017,7 +1017,7 @@ public List<Object> decodeEvent(String abi, String eventName, EventLog log)
1017
1017
params =
1018
1018
ContractCodecTools .decodeJavaObject (inputObject , log .getData (), isWasm );
1019
1019
}
1020
- List <String > topics = log . getTopics ( );
1020
+ List <String > topics = decodeIndexedEvent ( log , abiDefinition );
1021
1021
return this .mergeEventParamsAndTopics (abiDefinition , params , topics );
1022
1022
} catch (Exception e ) {
1023
1023
logger .error (" exception in decodeEventToObject : {}" , e .getMessage ());
@@ -1029,6 +1029,30 @@ public List<Object> decodeEvent(String abi, String eventName, EventLog log)
1029
1029
throw new ContractCodecException (errorMsg );
1030
1030
}
1031
1031
1032
+ public List <String > decodeIndexedEvent (EventLog log , ABIDefinition abiDefinition )
1033
+ throws ClassNotFoundException {
1034
+ List <ABIObject > eventIndexedObject =
1035
+ ABIObjectFactory .createEventIndexedObject (abiDefinition );
1036
+ List <String > topics = new ArrayList <>();
1037
+ if (!log .getTopics ().isEmpty ()) {
1038
+ topics .add (log .getTopics ().get (0 ));
1039
+ for (int i = 1 ; i < log .getTopics ().size (); i ++) {
1040
+ ABIObject indexedObject = eventIndexedObject .get (i - 1 );
1041
+ if (indexedObject .isDynamic ()) {
1042
+ topics .add (log .getTopics ().get (i ));
1043
+ } else {
1044
+ List <String > objects =
1045
+ contractCodecJsonWrapper .decode (
1046
+ indexedObject , Hex .decode (log .getTopics ().get (i )), isWasm );
1047
+ if (!objects .isEmpty ()) {
1048
+ topics .add (objects .get (0 ));
1049
+ }
1050
+ }
1051
+ }
1052
+ }
1053
+ return topics ;
1054
+ }
1055
+
1032
1056
public List <Object > decodeEventByTopic (String abi , String eventTopic , EventLog log )
1033
1057
throws ContractCodecException {
1034
1058
ContractABIDefinition contractABIDefinition = this .abiDefinitionFactory .loadABI (abi );
@@ -1040,7 +1064,7 @@ public List<Object> decodeEventByTopic(String abi, String eventTopic, EventLog l
1040
1064
if (!log .getData ().equals ("0x" )) {
1041
1065
params = ContractCodecTools .decodeJavaObject (inputObject , log .getData (), isWasm );
1042
1066
}
1043
- List <String > topics = log . getTopics ( );
1067
+ List <String > topics = decodeIndexedEvent ( log , abiDefinition );
1044
1068
return this .mergeEventParamsAndTopics (abiDefinition , params , topics );
1045
1069
} catch (Exception e ) {
1046
1070
logger .error (" exception in decodeEventByTopicToObject : {}" , e .getMessage ());
@@ -1078,7 +1102,7 @@ public List<String> decodeEventToString(String abi, String eventName, EventLog l
1078
1102
contractCodecJsonWrapper .decode (
1079
1103
inputObject , Hex .decode (log .getData ()), isWasm );
1080
1104
}
1081
- List <String > topics = log . getTopics ( );
1105
+ List <String > topics = decodeIndexedEvent ( log , abiDefinition );
1082
1106
return this .mergeEventParamsAndTopicsToString (abiDefinition , params , topics );
1083
1107
} catch (Exception e ) {
1084
1108
logger .error (" exception in decodeEventToString : {}" , e .getMessage ());
@@ -1103,7 +1127,7 @@ public List<String> decodeEventByTopicToString(String abi, String eventTopic, Ev
1103
1127
contractCodecJsonWrapper .decode (
1104
1128
inputObject , Hex .decode (log .getData ()), isWasm );
1105
1129
}
1106
- List <String > topics = log . getTopics ( );
1130
+ List <String > topics = decodeIndexedEvent ( log , abiDefinition );
1107
1131
return this .mergeEventParamsAndTopicsToString (abiDefinition , params , topics );
1108
1132
} catch (Exception e ) {
1109
1133
logger .error (" exception in decodeEventByTopicToString : {}" , e .getMessage ());
0 commit comments