@@ -138,14 +138,9 @@ func buildEventsCodec() (types.RemoteCodec, error) {
138
138
if err := json .Unmarshal ([]byte (eventCfg .idl ), & codecIDL ); err != nil {
139
139
return nil , fmt .Errorf ("unexpected error: invalid CCIP OffRamp IDL, error: %w" , err )
140
140
}
141
-
142
- idlDef , err := codec .FindDefinitionFromIDL (codec .ChainConfigTypeInstructionDef , eventName , codecIDL )
141
+ eventIdl , err := extractEventIDL (eventName , codecIDL )
143
142
if err != nil {
144
- return nil , err
145
- }
146
- eventIdl , isOk := idlDef .(codec.IdlEvent )
147
- if ! isOk {
148
- return nil , fmt .Errorf ("unexpected type from IDL definition for event read: %q" , eventName )
143
+ return nil , fmt .Errorf ("failed to extract event IDL: %w" , err )
149
144
}
150
145
entry , err := codec .CreateCodecEntry (eventIdl , eventName , codecIDL , nil )
151
146
if err != nil {
@@ -162,6 +157,18 @@ func buildEventsCodec() (types.RemoteCodec, error) {
162
157
return codec , nil
163
158
}
164
159
160
+ func extractEventIDL (eventName string , codecIDL codec.IDL ) (codec.IdlEvent , error ) {
161
+ idlDef , err := codec .FindDefinitionFromIDL (codec .ChainConfigTypeInstructionDef , eventName , codecIDL )
162
+ if err != nil {
163
+ return codec.IdlEvent {}, err
164
+ }
165
+ eventIdl , isOk := idlDef .(codec.IdlEvent )
166
+ if ! isOk {
167
+ return codec.IdlEvent {}, fmt .Errorf ("unexpected type from IDL definition for event read: %q" , eventName )
168
+ }
169
+ return eventIdl , nil
170
+ }
171
+
165
172
// registerFilterIfNotExists registers a filter for the given event if it doesn't already exist.
166
173
func (a * SolanaAccessor ) registerFilterIfNotExists (
167
174
ctx context.Context ,
@@ -173,15 +180,25 @@ func (a *SolanaAccessor) registerFilterIfNotExists(
173
180
Retention : & defaultCCIPLogsRetention ,
174
181
}
175
182
176
- eventIDL := logpollertypes.EventIdl {}
183
+ var codecIDL codec.IDL
184
+ if err := json .Unmarshal ([]byte (filterConfig .idl ), & codecIDL ); err != nil {
185
+ return fmt .Errorf ("unexpected error: invalid CCIP OffRamp IDL, error: %w" , err )
186
+ }
187
+
188
+ eventIdl , err := extractEventIDL (eventName , codecIDL )
189
+ if err != nil {
190
+ return fmt .Errorf ("failed to extract event IDL: %w" , err )
191
+ }
192
+
193
+ lpEventIDL := logpollertypes.EventIdl {Event : eventIdl , Types : codecIDL .Types }
177
194
178
195
subKeyPaths := processSubKeyPaths (filterConfig )
179
196
180
197
filter := logpollertypes.Filter {
181
198
Address : logpollertypes .PublicKey (address ),
182
199
EventName : eventName ,
183
200
EventSig : logpollertypes .NewEventSignatureFromName (eventName ),
184
- EventIdl : eventIDL ,
201
+ EventIdl : lpEventIDL ,
185
202
SubkeyPaths : subKeyPaths ,
186
203
StartingBlock : conf .GetStartingBlock (),
187
204
Retention : conf .GetRetention (),
0 commit comments