Skip to content

Commit c8b62ee

Browse files
committed
CCIP - add price reader interfaces to ChainAccessor and move some generic types
1 parent 3bfa348 commit c8b62ee

12 files changed

Lines changed: 1655 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

@@ -498,3 +543,62 @@ func (s *chainAccessorServer) GetFeeQuoterDestChainConfig(ctx context.Context, r
498543
Config: feeQuoterDestChainConfigToPb(config),
499544
}, nil
500545
}
546+
547+
// USDCMessageReader server methods
548+
func (s *chainAccessorServer) MessagesByTokenID(ctx context.Context, req *ccipocr3pb.MessagesByTokenIDRequest) (*ccipocr3pb.MessagesByTokenIDResponse, error) {
549+
tokens, err := pbToMessageTokenIDMap(req.Tokens)
550+
if err != nil {
551+
return nil, err
552+
}
553+
554+
messages, err := s.impl.MessagesByTokenID(
555+
ctx,
556+
ccipocr3.ChainSelector(req.SourceChainSelector),
557+
ccipocr3.ChainSelector(req.DestChainSelector),
558+
tokens,
559+
)
560+
if err != nil {
561+
return nil, err
562+
}
563+
564+
return &ccipocr3pb.MessagesByTokenIDResponse{
565+
Messages: messagesByTokenIDToPb(messages),
566+
}, nil
567+
}
568+
569+
// PriceReader server methods
570+
func (s *chainAccessorServer) GetFeedPricesUSD(ctx context.Context, req *ccipocr3pb.GetFeedPricesUSDRequest) (*ccipocr3pb.GetFeedPricesUSDResponse, error) {
571+
var tokens []ccipocr3.UnknownEncodedAddress
572+
for _, tokenStr := range req.Tokens {
573+
tokens = append(tokens, ccipocr3.UnknownEncodedAddress(tokenStr))
574+
}
575+
576+
prices, err := s.impl.GetFeedPricesUSD(ctx, tokens)
577+
if err != nil {
578+
return nil, err
579+
}
580+
581+
return &ccipocr3pb.GetFeedPricesUSDResponse{
582+
Prices: tokenPriceMapToPb(prices),
583+
}, nil
584+
}
585+
586+
func (s *chainAccessorServer) GetFeeQuoterTokenUpdates(ctx context.Context, req *ccipocr3pb.GetFeeQuoterTokenUpdatesRequest) (*ccipocr3pb.GetFeeQuoterTokenUpdatesResponse, error) {
587+
var tokens []ccipocr3.UnknownEncodedAddress
588+
for _, tokenStr := range req.Tokens {
589+
tokens = append(tokens, ccipocr3.UnknownEncodedAddress(tokenStr))
590+
}
591+
592+
updates, err := s.impl.GetFeeQuoterTokenUpdates(
593+
ctx,
594+
tokens,
595+
ccipocr3.ChainSelector(req.ChainSelector),
596+
)
597+
if err != nil {
598+
return nil, err
599+
}
600+
601+
return &ccipocr3pb.GetFeeQuoterTokenUpdatesResponse{
602+
TokenUpdates: tokenUpdatesToPb(updates),
603+
}, nil
604+
}

0 commit comments

Comments
 (0)