Skip to content

Commit f546d1d

Browse files
committed
[CAL][5] - implement LatestMsgSeqNum
1 parent 8bf7dd6 commit f546d1d

File tree

2 files changed

+64
-52
lines changed

2 files changed

+64
-52
lines changed

pkg/chainaccessor/legacy_accessor.go

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,64 @@ func (l *LegacyAccessor) MsgsBetweenSeqNums(
170170
return msgs, nil
171171
}
172172

173-
func (l *LegacyAccessor) LatestMsgSeqNum(ctx context.Context, dest cciptypes.ChainSelector) (cciptypes.SeqNum, error) {
174-
// TODO(NONEVM-1865): implement
175-
panic("implement me")
173+
func (l *LegacyAccessor) LatestMsgSeqNum(
174+
ctx context.Context,
175+
destChainSelector cciptypes.ChainSelector,
176+
) (cciptypes.SeqNum, error) {
177+
lggr := logutil.WithContextValues(ctx, l.lggr)
178+
179+
seq, err := l.contractReader.ExtendedQueryKey(
180+
ctx,
181+
consts.ContractNameOnRamp,
182+
query.KeyFilter{
183+
Key: consts.EventNameCCIPMessageSent,
184+
Expressions: []query.Expression{
185+
query.Comparator(consts.EventAttributeSourceChain, primitives.ValueComparator{
186+
Value: l.chainSelector,
187+
Operator: primitives.Eq,
188+
}),
189+
query.Comparator(consts.EventAttributeDestChain, primitives.ValueComparator{
190+
Value: destChainSelector,
191+
Operator: primitives.Eq,
192+
}),
193+
query.Confidence(primitives.Finalized),
194+
},
195+
},
196+
query.LimitAndSort{
197+
SortBy: []query.SortBy{
198+
query.NewSortBySequence(query.Desc),
199+
},
200+
Limit: query.Limit{Count: 1},
201+
},
202+
&cciptypes.SendRequestedEvent{},
203+
)
204+
if err != nil {
205+
return 0, fmt.Errorf("failed to query onRamp: %w", err)
206+
}
207+
208+
lggr.Debugw("queried latest message from source",
209+
"numMsgs", len(seq),
210+
"sourceChainSelector", l.chainSelector,
211+
)
212+
if len(seq) > 1 {
213+
return 0, fmt.Errorf("more than one message found for the latest message query")
214+
}
215+
if len(seq) == 0 {
216+
return 0, nil
217+
}
218+
219+
item := seq[0]
220+
msg, ok := item.Data.(*cciptypes.SendRequestedEvent)
221+
if !ok {
222+
return 0, fmt.Errorf("failed to cast %v to SendRequestedEvent", item.Data)
223+
}
224+
225+
if err := ValidateSendRequestedEvent(msg, l.chainSelector, destChainSelector,
226+
cciptypes.NewSeqNumRange(msg.Message.Header.SequenceNumber, msg.Message.Header.SequenceNumber)); err != nil {
227+
return 0, fmt.Errorf("message invalid msg %v: %w", msg, err)
228+
}
229+
230+
return msg.SequenceNumber, nil
176231
}
177232

178233
func (l *LegacyAccessor) GetExpectedNextSequenceNumber(

pkg/reader/ccip.go

Lines changed: 6 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -533,62 +533,19 @@ func (r *ccipChainReader) MsgsBetweenSeqNums(
533533
func (r *ccipChainReader) LatestMsgSeqNum(
534534
ctx context.Context, chain cciptypes.ChainSelector) (cciptypes.SeqNum, error) {
535535
lggr := logutil.WithContextValues(ctx, r.lggr)
536-
if err := validateReaderExistence(r.contractReaders, chain); err != nil {
536+
if err := validateAccessorExistence(r.accessors, chain); err != nil {
537537
return 0, err
538538
}
539539

540-
seq, err := r.contractReaders[chain].ExtendedQueryKey(
541-
ctx,
542-
consts.ContractNameOnRamp,
543-
query.KeyFilter{
544-
Key: consts.EventNameCCIPMessageSent,
545-
Expressions: []query.Expression{
546-
query.Comparator(consts.EventAttributeSourceChain, primitives.ValueComparator{
547-
Value: chain,
548-
Operator: primitives.Eq,
549-
}),
550-
query.Comparator(consts.EventAttributeDestChain, primitives.ValueComparator{
551-
Value: r.destChain,
552-
Operator: primitives.Eq,
553-
}),
554-
query.Confidence(primitives.Finalized),
555-
},
556-
},
557-
query.LimitAndSort{
558-
SortBy: []query.SortBy{
559-
query.NewSortBySequence(query.Desc),
560-
},
561-
Limit: query.Limit{Count: 1},
562-
},
563-
&cciptypes.SendRequestedEvent{},
564-
)
540+
seqNum, err := r.accessors[chain].LatestMsgSeqNum(ctx, r.destChain)
565541
if err != nil {
566-
return 0, fmt.Errorf("failed to query onRamp: %w", err)
567-
}
568-
569-
lggr.Debugw("queried latest message from source",
570-
"numMsgs", len(seq), "sourceChainSelector", chain)
571-
if len(seq) > 1 {
572-
return 0, fmt.Errorf("more than one message found for the latest message query")
573-
}
574-
if len(seq) == 0 {
575-
return 0, nil
576-
}
577-
578-
item := seq[0]
579-
msg, ok := item.Data.(*cciptypes.SendRequestedEvent)
580-
if !ok {
581-
return 0, fmt.Errorf("failed to cast %v to SendRequestedEvent", item.Data)
582-
}
583-
584-
if err := chainaccessor.ValidateSendRequestedEvent(msg, chain, r.destChain,
585-
cciptypes.NewSeqNumRange(msg.Message.Header.SequenceNumber, msg.Message.Header.SequenceNumber)); err != nil {
586-
return 0, fmt.Errorf("message invalid msg %v: %w", msg, err)
542+
return 0, fmt.Errorf("failed to call accessor LatestMsgSeqNum, source chain: %d, dest chain: %d: %w",
543+
chain, r.destChain, err)
587544
}
588545

589546
lggr.Infow("chain reader returning latest onramp sequence number",
590-
"seqNum", msg.Message.Header.SequenceNumber, "sourceChainSelector", chain)
591-
return msg.SequenceNumber, nil
547+
"seqNum", seqNum, "sourceChainSelector", chain)
548+
return seqNum, nil
592549
}
593550

594551
// GetExpectedNextSequenceNumber implements CCIP.

0 commit comments

Comments
 (0)