Skip to content

Commit 730b843

Browse files
committed
Updated solana selector check and added LogPoller event IDL to filter
1 parent 42bc084 commit 730b843

File tree

2 files changed

+37
-9
lines changed

2 files changed

+37
-9
lines changed

pkg/solana/ccip/chainaccessor/event.go

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -138,14 +138,9 @@ func buildEventsCodec() (types.RemoteCodec, error) {
138138
if err := json.Unmarshal([]byte(eventCfg.idl), &codecIDL); err != nil {
139139
return nil, fmt.Errorf("unexpected error: invalid CCIP OffRamp IDL, error: %w", err)
140140
}
141-
142-
idlDef, err := codec.FindDefinitionFromIDL(codec.ChainConfigTypeInstructionDef, eventName, codecIDL)
141+
eventIdl, err := extractEventIDL(eventName, codecIDL)
143142
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)
149144
}
150145
entry, err := codec.CreateCodecEntry(eventIdl, eventName, codecIDL, nil)
151146
if err != nil {
@@ -162,6 +157,18 @@ func buildEventsCodec() (types.RemoteCodec, error) {
162157
return codec, nil
163158
}
164159

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+
165172
// registerFilterIfNotExists registers a filter for the given event if it doesn't already exist.
166173
func (a *SolanaAccessor) registerFilterIfNotExists(
167174
ctx context.Context,
@@ -173,15 +180,25 @@ func (a *SolanaAccessor) registerFilterIfNotExists(
173180
Retention: &defaultCCIPLogsRetention,
174181
}
175182

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}
177194

178195
subKeyPaths := processSubKeyPaths(filterConfig)
179196

180197
filter := logpollertypes.Filter{
181198
Address: logpollertypes.PublicKey(address),
182199
EventName: eventName,
183200
EventSig: logpollertypes.NewEventSignatureFromName(eventName),
184-
EventIdl: eventIDL,
201+
EventIdl: lpEventIDL,
185202
SubkeyPaths: subKeyPaths,
186203
StartingBlock: conf.GetStartingBlock(),
187204
Retention: conf.GetRetention(),

pkg/solana/ccip/provider/provider.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,17 @@ func NewCCIPProvider(lggr logger.Logger, chainSelector ccipocr3.ChainSelector, c
3939
return nil, fmt.Errorf("unexpected chain selector: %d, expect either %d or %d", chainSelector, chainsel.SOLANA_DEVNET.Selector, chainsel.SOLANA_MAINNET.Selector)
4040
}
4141

42+
foundSel := false
43+
for _, solChain := range chainsel.SolanaALL {
44+
if solChain.Selector == uint64(chainSelector) {
45+
foundSel = true
46+
break
47+
}
48+
}
49+
if !foundSel {
50+
return nil, fmt.Errorf("chain selector %d does not match and Solana chain selectors", chainSelector)
51+
}
52+
4253
c := ccipocr3.Codec{
4354
ChainSpecificAddressCodec: codec.NewAddressCodec(),
4455
// TODO move from core repo

0 commit comments

Comments
 (0)