Skip to content

Commit 541440d

Browse files
committed
CCIP - add price reader interfaces to ChainAccessor and move some generic types
1 parent bcc18fd commit 541440d

12 files changed

Lines changed: 1649 additions & 207 deletions

File tree

pkg/loop/internal/pb/ccipocr3/chainaccessor.pb.go

Lines changed: 482 additions & 81 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/loop/internal/pb/ccipocr3/chainaccessor.proto

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@ service ChainAccessor {
3030
rpc GetExpectedNextSequenceNumber(GetExpectedNextSequenceNumberRequest) returns (GetExpectedNextSequenceNumberResponse);
3131
rpc GetTokenPriceUSD(GetTokenPriceUSDRequest) returns (GetTokenPriceUSDResponse);
3232
rpc GetFeeQuoterDestChainConfig(GetFeeQuoterDestChainConfigRequest) returns (GetFeeQuoterDestChainConfigResponse);
33+
34+
// USDCMessageReader methods
35+
rpc MessagesByTokenID(MessagesByTokenIDRequest) returns (MessagesByTokenIDResponse);
36+
37+
// PriceReader methods
38+
rpc GetFeedPricesUSD(GetFeedPricesUSDRequest) returns (GetFeedPricesUSDResponse);
39+
rpc GetFeeQuoterTokenUpdates(GetFeeQuoterTokenUpdatesRequest) returns (GetFeeQuoterTokenUpdatesResponse);
3340
}
3441

3542
// AllAccessors request/response messages
@@ -337,4 +344,39 @@ message FeeQuoterDestChainConfig {
337344
uint32 gas_price_staleness_threshold = 19;
338345
bool enforce_out_of_order = 15;
339346
bytes chain_family_selector = 16; // [4]byte in Go
347+
}
348+
349+
// USDCMessageReader request/response messages
350+
message MessagesByTokenIDRequest {
351+
uint64 source_chain_selector = 1;
352+
uint64 dest_chain_selector = 2;
353+
map<string, RampTokenAmount> tokens = 3; // key is MessageTokenID string representation
354+
}
355+
356+
message MessagesByTokenIDResponse {
357+
map<string, bytes> messages = 1; // key is MessageTokenID string representation, value is message bytes
358+
}
359+
360+
// PriceReader request/response messages
361+
message GetFeedPricesUSDRequest {
362+
repeated string tokens = 1; // UnknownEncodedAddress
363+
}
364+
365+
message GetFeedPricesUSDResponse {
366+
map<string, BigInt> prices = 1; // key is UnknownEncodedAddress, value is price
367+
}
368+
369+
message GetFeeQuoterTokenUpdatesRequest {
370+
repeated string tokens = 1; // UnknownEncodedAddress
371+
uint64 chain_selector = 2;
372+
}
373+
374+
message GetFeeQuoterTokenUpdatesResponse {
375+
map<string, TimestampedBig> token_updates = 1; // key is UnknownEncodedAddress
376+
}
377+
378+
// Helper message types
379+
message MessageTokenID {
380+
uint64 seq_nr = 1;
381+
int32 index = 2;
340382
}

pkg/loop/internal/pb/ccipocr3/chainaccessor_grpc.pb.go

Lines changed: 118 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/loop/internal/relayer/pluginprovider/ext/ccipocr3/chainaccessor.go

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,51 @@ func (c *chainAccessorClient) GetFeeQuoterDestChainConfig(ctx context.Context, d
290290
return pbToFeeQuoterDestChainConfigDetailed(resp.Config), nil
291291
}
292292

293+
// USDCMessageReader methods
294+
func (c *chainAccessorClient) MessagesByTokenID(ctx context.Context, source, dest ccipocr3.ChainSelector, tokens map[ccipocr3.MessageTokenID]ccipocr3.RampTokenAmount) (map[ccipocr3.MessageTokenID]ccipocr3.Bytes, error) {
295+
resp, err := c.grpc.MessagesByTokenID(ctx, &ccipocr3pb.MessagesByTokenIDRequest{
296+
SourceChainSelector: uint64(source),
297+
DestChainSelector: uint64(dest),
298+
Tokens: messageTokenIDMapToPb(tokens),
299+
})
300+
if err != nil {
301+
return nil, err
302+
}
303+
return pbToMessagesByTokenID(resp.Messages)
304+
}
305+
306+
// PriceReader methods
307+
func (c *chainAccessorClient) GetFeedPricesUSD(ctx context.Context, tokens []ccipocr3.UnknownEncodedAddress) (ccipocr3.TokenPriceMap, error) {
308+
var tokenStrs []string
309+
for _, token := range tokens {
310+
tokenStrs = append(tokenStrs, string(token))
311+
}
312+
313+
resp, err := c.grpc.GetFeedPricesUSD(ctx, &ccipocr3pb.GetFeedPricesUSDRequest{
314+
Tokens: tokenStrs,
315+
})
316+
if err != nil {
317+
return nil, err
318+
}
319+
return pbToTokenPriceMap(resp.Prices), nil
320+
}
321+
322+
func (c *chainAccessorClient) GetFeeQuoterTokenUpdates(ctx context.Context, tokens []ccipocr3.UnknownEncodedAddress, chain ccipocr3.ChainSelector) (map[ccipocr3.UnknownEncodedAddress]ccipocr3.TimestampedBig, error) {
323+
var tokenStrs []string
324+
for _, token := range tokens {
325+
tokenStrs = append(tokenStrs, string(token))
326+
}
327+
328+
resp, err := c.grpc.GetFeeQuoterTokenUpdates(ctx, &ccipocr3pb.GetFeeQuoterTokenUpdatesRequest{
329+
Tokens: tokenStrs,
330+
ChainSelector: uint64(chain),
331+
})
332+
if err != nil {
333+
return nil, err
334+
}
335+
return pbToTokenUpdates(resp.TokenUpdates), nil
336+
}
337+
293338
// Server implementation
294339
var _ ccipocr3pb.ChainAccessorServer = (*chainAccessorServer)(nil)
295340

@@ -555,3 +600,62 @@ func (s *chainAccessorServer) GetFeeQuoterDestChainConfig(ctx context.Context, r
555600
Config: feeQuoterDestChainConfigToPb(config),
556601
}, nil
557602
}
603+
604+
// USDCMessageReader server methods
605+
func (s *chainAccessorServer) MessagesByTokenID(ctx context.Context, req *ccipocr3pb.MessagesByTokenIDRequest) (*ccipocr3pb.MessagesByTokenIDResponse, error) {
606+
tokens, err := pbToMessageTokenIDMap(req.Tokens)
607+
if err != nil {
608+
return nil, err
609+
}
610+
611+
messages, err := s.impl.MessagesByTokenID(
612+
ctx,
613+
ccipocr3.ChainSelector(req.SourceChainSelector),
614+
ccipocr3.ChainSelector(req.DestChainSelector),
615+
tokens,
616+
)
617+
if err != nil {
618+
return nil, err
619+
}
620+
621+
return &ccipocr3pb.MessagesByTokenIDResponse{
622+
Messages: messagesByTokenIDToPb(messages),
623+
}, nil
624+
}
625+
626+
// PriceReader server methods
627+
func (s *chainAccessorServer) GetFeedPricesUSD(ctx context.Context, req *ccipocr3pb.GetFeedPricesUSDRequest) (*ccipocr3pb.GetFeedPricesUSDResponse, error) {
628+
var tokens []ccipocr3.UnknownEncodedAddress
629+
for _, tokenStr := range req.Tokens {
630+
tokens = append(tokens, ccipocr3.UnknownEncodedAddress(tokenStr))
631+
}
632+
633+
prices, err := s.impl.GetFeedPricesUSD(ctx, tokens)
634+
if err != nil {
635+
return nil, err
636+
}
637+
638+
return &ccipocr3pb.GetFeedPricesUSDResponse{
639+
Prices: tokenPriceMapToPb(prices),
640+
}, nil
641+
}
642+
643+
func (s *chainAccessorServer) GetFeeQuoterTokenUpdates(ctx context.Context, req *ccipocr3pb.GetFeeQuoterTokenUpdatesRequest) (*ccipocr3pb.GetFeeQuoterTokenUpdatesResponse, error) {
644+
var tokens []ccipocr3.UnknownEncodedAddress
645+
for _, tokenStr := range req.Tokens {
646+
tokens = append(tokens, ccipocr3.UnknownEncodedAddress(tokenStr))
647+
}
648+
649+
updates, err := s.impl.GetFeeQuoterTokenUpdates(
650+
ctx,
651+
tokens,
652+
ccipocr3.ChainSelector(req.ChainSelector),
653+
)
654+
if err != nil {
655+
return nil, err
656+
}
657+
658+
return &ccipocr3pb.GetFeeQuoterTokenUpdatesResponse{
659+
TokenUpdates: tokenUpdatesToPb(updates),
660+
}, nil
661+
}

0 commit comments

Comments
 (0)