From c15097958cbdd27943c474052b4bf89c845c2673 Mon Sep 17 00:00:00 2001 From: Chunkai Yang Date: Fri, 22 Mar 2024 17:45:49 -0400 Subject: [PATCH] Add Router to CCIP Offramp interface (#420) * Get router from offramp * fix ctx --- pkg/loop/internal/ccip/offramp.go | 20 + pkg/loop/internal/ccip/test/offramp.go | 18 + pkg/loop/internal/ccip/test/offramp_test.go | 6 + pkg/loop/internal/pb/ccip/offramp.pb.go | 591 +++++++++++-------- pkg/loop/internal/pb/ccip/offramp.proto | 8 + pkg/loop/internal/pb/ccip/offramp_grpc.pb.go | 37 ++ pkg/types/ccip/offramp.go | 4 + 7 files changed, 429 insertions(+), 255 deletions(-) diff --git a/pkg/loop/internal/ccip/offramp.go b/pkg/loop/internal/ccip/offramp.go index 0c993f82e..25660a92f 100644 --- a/pkg/loop/internal/ccip/offramp.go +++ b/pkg/loop/internal/ccip/offramp.go @@ -227,6 +227,15 @@ func (o *OffRampReaderGRPCClient) GetTokens(ctx context.Context) (cciptypes.OffR return offRampTokens(resp.Tokens), nil } +// GetRouter i[github.com/smartcontractkit/chainlink-common/pkg/types/ccip.OffRampReader] +func (o *OffRampReaderGRPCClient) GetRouter(ctx context.Context) (cciptypes.Address, error) { + resp, err := o.client.GetRouter(ctx, &emptypb.Empty{}) + if err != nil { + return cciptypes.Address(""), err + } + return cciptypes.Address(resp.Router), nil +} + // OffchainConfig i[github.com/smartcontractkit/chainlink-common/pkg/types/ccip.OffRampReader] func (o *OffRampReaderGRPCClient) OffchainConfig(ctx context.Context) (cciptypes.ExecOffchainConfig, error) { resp, err := o.client.OffchainConfig(ctx, &emptypb.Empty{}) @@ -244,6 +253,7 @@ func (o *OffRampReaderGRPCClient) OnchainConfig(ctx context.Context) (cciptypes. } return cciptypes.ExecOnchainConfig{ PermissionLessExecutionThresholdSeconds: resp.Config.PermissionlessExecThresholdSeconds.AsDuration(), + Router: cciptypes.Address(resp.Config.Router), }, nil } @@ -375,6 +385,15 @@ func (o *OffRampReaderGRPCServer) GetTokens(ctx context.Context, req *emptypb.Em return &ccippb.GetTokensResponse{Tokens: offRampTokensToPB(tokens)}, nil } +// GetRouter implements ccippb.OffRampReaderServer. +func (o *OffRampReaderGRPCServer) GetRouter(ctx context.Context, req *emptypb.Empty) (*ccippb.GetRouterResponse, error) { + router, err := o.impl.GetRouter(ctx) + if err != nil { + return nil, err + } + return &ccippb.GetRouterResponse{Router: string(router)}, nil +} + // OffchainConfig implements ccippb.OffRampReaderServer. func (o *OffRampReaderGRPCServer) OffchainConfig(ctx context.Context, req *emptypb.Empty) (*ccippb.OffchainConfigResponse, error) { config, err := o.impl.OffchainConfig(ctx) @@ -392,6 +411,7 @@ func (o *OffRampReaderGRPCServer) OnchainConfig(ctx context.Context, req *emptyp } pbConfig := ccippb.ExecOnchainConfig{ PermissionlessExecThresholdSeconds: durationpb.New(config.PermissionLessExecutionThresholdSeconds), + Router: string(config.Router), } return &ccippb.OnchainConfigResponse{Config: &pbConfig}, nil } diff --git a/pkg/loop/internal/ccip/test/offramp.go b/pkg/loop/internal/ccip/test/offramp.go index 298c3856d..42c7105cf 100644 --- a/pkg/loop/internal/ccip/test/offramp.go +++ b/pkg/loop/internal/ccip/test/offramp.go @@ -147,6 +147,9 @@ var OffRampReader = staticOffRamp{ ccip.Address("key1"): ccip.Address("value1"), }, }, + + // GetRouter test data + getRouterResponse: ccip.Address("getRouterResponse"), }, } @@ -187,6 +190,8 @@ type staticOffRampConfig struct { getTokensResponse ccip.OffRampTokens + getRouterResponse ccip.Address + offchainConfigResponse ccip.ExecOffchainConfig onchainConfigResponse ccip.ExecOnchainConfig @@ -294,6 +299,11 @@ func (s staticOffRamp) GetTokens(ctx context.Context) (ccip.OffRampTokens, error return s.getTokensResponse, nil } +// GetRouter implements OffRampEvaluator. +func (s staticOffRamp) GetRouter(ctx context.Context) (ccip.Address, error) { + return s.getRouterResponse, nil +} + // OffchainConfig implements OffRampEvaluator. func (s staticOffRamp) OffchainConfig(ctx context.Context) (ccip.ExecOffchainConfig, error) { return s.offchainConfigResponse, nil @@ -439,6 +449,14 @@ func (s staticOffRamp) Evaluate(ctx context.Context, other ccip.OffRampReader) e return fmt.Errorf("expected getTokens %v but got %v", s.getTokensResponse, getTokens) } + getRouter, err := other.GetRouter(ctx) + if err != nil { + return fmt.Errorf("failed to get getRouter: %w", err) + } + if getRouter != s.getRouterResponse { + return fmt.Errorf("expected getRouter %s but got %s", s.getRouterResponse, getRouter) + } + offchainConfig, err := other.OffchainConfig(ctx) if err != nil { return fmt.Errorf("failed to get offchainConfig: %w", err) diff --git a/pkg/loop/internal/ccip/test/offramp_test.go b/pkg/loop/internal/ccip/test/offramp_test.go index d319bc9c4..40e16169d 100644 --- a/pkg/loop/internal/ccip/test/offramp_test.go +++ b/pkg/loop/internal/ccip/test/offramp_test.go @@ -205,6 +205,12 @@ func roundTripOffRampTests(ctx context.Context, t *testing.T, client *ccip.OffRa assert.Equal(t, OffRampReader.getTokensResponse, tokens) }) + t.Run("GetRouter", func(t *testing.T) { + router, err := client.GetRouter(ctx) + require.NoError(t, err) + assert.Equal(t, OffRampReader.getRouterResponse, router) + }) + t.Run("OffchainConfig", func(t *testing.T) { config, err := client.OffchainConfig(ctx) require.NoError(t, err) diff --git a/pkg/loop/internal/pb/ccip/offramp.pb.go b/pkg/loop/internal/pb/ccip/offramp.pb.go index 0586a3ef7..f5f627070 100644 --- a/pkg/loop/internal/pb/ccip/offramp.pb.go +++ b/pkg/loop/internal/pb/ccip/offramp.pb.go @@ -1035,6 +1035,55 @@ func (x *GetTokensResponse) GetTokens() *OffRampTokens { return nil } +// GetRouterResponse returns the router address. It is a gRPC adapter for the return values of +// [github.com/smartcontractkit/chainlink-common/pkg/types/ccip/OffRampReader.GetRouter] +type GetRouterResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Router string `protobuf:"bytes,1,opt,name=router,proto3" json:"router,omitempty"` +} + +func (x *GetRouterResponse) Reset() { + *x = GetRouterResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_offramp_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetRouterResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetRouterResponse) ProtoMessage() {} + +func (x *GetRouterResponse) ProtoReflect() protoreflect.Message { + mi := &file_offramp_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetRouterResponse.ProtoReflect.Descriptor instead. +func (*GetRouterResponse) Descriptor() ([]byte, []int) { + return file_offramp_proto_rawDescGZIP(), []int{20} +} + +func (x *GetRouterResponse) GetRouter() string { + if x != nil { + return x.Router + } + return "" +} + // ExecutionStateChangeWithTxMeta is a gRPC adapter for the struct // [github.com/smartcontractkit/chainlink-common/pkg/types/ccip/ExecutionStateChangeWithTxMeta] type ExecutionStateChangeWithTxMeta struct { @@ -1049,7 +1098,7 @@ type ExecutionStateChangeWithTxMeta struct { func (x *ExecutionStateChangeWithTxMeta) Reset() { *x = ExecutionStateChangeWithTxMeta{} if protoimpl.UnsafeEnabled { - mi := &file_offramp_proto_msgTypes[20] + mi := &file_offramp_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1062,7 +1111,7 @@ func (x *ExecutionStateChangeWithTxMeta) String() string { func (*ExecutionStateChangeWithTxMeta) ProtoMessage() {} func (x *ExecutionStateChangeWithTxMeta) ProtoReflect() protoreflect.Message { - mi := &file_offramp_proto_msgTypes[20] + mi := &file_offramp_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1075,7 +1124,7 @@ func (x *ExecutionStateChangeWithTxMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecutionStateChangeWithTxMeta.ProtoReflect.Descriptor instead. func (*ExecutionStateChangeWithTxMeta) Descriptor() ([]byte, []int) { - return file_offramp_proto_rawDescGZIP(), []int{20} + return file_offramp_proto_rawDescGZIP(), []int{21} } func (x *ExecutionStateChangeWithTxMeta) GetExecutionStateChange() *ExecutionStateChange { @@ -1106,7 +1155,7 @@ type ExecutionStateChange struct { func (x *ExecutionStateChange) Reset() { *x = ExecutionStateChange{} if protoimpl.UnsafeEnabled { - mi := &file_offramp_proto_msgTypes[21] + mi := &file_offramp_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1119,7 +1168,7 @@ func (x *ExecutionStateChange) String() string { func (*ExecutionStateChange) ProtoMessage() {} func (x *ExecutionStateChange) ProtoReflect() protoreflect.Message { - mi := &file_offramp_proto_msgTypes[21] + mi := &file_offramp_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1132,7 +1181,7 @@ func (x *ExecutionStateChange) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecutionStateChange.ProtoReflect.Descriptor instead. func (*ExecutionStateChange) Descriptor() ([]byte, []int) { - return file_offramp_proto_rawDescGZIP(), []int{21} + return file_offramp_proto_rawDescGZIP(), []int{22} } func (x *ExecutionStateChange) GetSeqNum() uint64 { @@ -1166,7 +1215,7 @@ type ExecOffchainConfig struct { func (x *ExecOffchainConfig) Reset() { *x = ExecOffchainConfig{} if protoimpl.UnsafeEnabled { - mi := &file_offramp_proto_msgTypes[22] + mi := &file_offramp_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1179,7 +1228,7 @@ func (x *ExecOffchainConfig) String() string { func (*ExecOffchainConfig) ProtoMessage() {} func (x *ExecOffchainConfig) ProtoReflect() protoreflect.Message { - mi := &file_offramp_proto_msgTypes[22] + mi := &file_offramp_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1192,7 +1241,7 @@ func (x *ExecOffchainConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecOffchainConfig.ProtoReflect.Descriptor instead. func (*ExecOffchainConfig) Descriptor() ([]byte, []int) { - return file_offramp_proto_rawDescGZIP(), []int{22} + return file_offramp_proto_rawDescGZIP(), []int{23} } func (x *ExecOffchainConfig) GetDestOptimisticConfirmations() uint32 { @@ -1238,12 +1287,13 @@ type ExecOnchainConfig struct { unknownFields protoimpl.UnknownFields PermissionlessExecThresholdSeconds *durationpb.Duration `protobuf:"bytes,1,opt,name=permissionless_exec_threshold_seconds,json=permissionlessExecThresholdSeconds,proto3" json:"permissionless_exec_threshold_seconds,omitempty"` // time.Duration + Router string `protobuf:"bytes,2,opt,name=router,proto3" json:"router,omitempty"` // Address } func (x *ExecOnchainConfig) Reset() { *x = ExecOnchainConfig{} if protoimpl.UnsafeEnabled { - mi := &file_offramp_proto_msgTypes[23] + mi := &file_offramp_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1256,7 +1306,7 @@ func (x *ExecOnchainConfig) String() string { func (*ExecOnchainConfig) ProtoMessage() {} func (x *ExecOnchainConfig) ProtoReflect() protoreflect.Message { - mi := &file_offramp_proto_msgTypes[23] + mi := &file_offramp_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1269,7 +1319,7 @@ func (x *ExecOnchainConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecOnchainConfig.ProtoReflect.Descriptor instead. func (*ExecOnchainConfig) Descriptor() ([]byte, []int) { - return file_offramp_proto_rawDescGZIP(), []int{23} + return file_offramp_proto_rawDescGZIP(), []int{24} } func (x *ExecOnchainConfig) GetPermissionlessExecThresholdSeconds() *durationpb.Duration { @@ -1279,6 +1329,13 @@ func (x *ExecOnchainConfig) GetPermissionlessExecThresholdSeconds() *durationpb. return nil } +func (x *ExecOnchainConfig) GetRouter() string { + if x != nil { + return x.Router + } + return "" +} + // OffRampStaticConfig is a gRPC adapter for the struct // [github.com/smartcontractkit/chainlink-common/pkg/types/ccip/OffRampStaticConfig] type OffRampStaticConfig struct { @@ -1297,7 +1354,7 @@ type OffRampStaticConfig struct { func (x *OffRampStaticConfig) Reset() { *x = OffRampStaticConfig{} if protoimpl.UnsafeEnabled { - mi := &file_offramp_proto_msgTypes[24] + mi := &file_offramp_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1310,7 +1367,7 @@ func (x *OffRampStaticConfig) String() string { func (*OffRampStaticConfig) ProtoMessage() {} func (x *OffRampStaticConfig) ProtoReflect() protoreflect.Message { - mi := &file_offramp_proto_msgTypes[24] + mi := &file_offramp_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1323,7 +1380,7 @@ func (x *OffRampStaticConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use OffRampStaticConfig.ProtoReflect.Descriptor instead. func (*OffRampStaticConfig) Descriptor() ([]byte, []int) { - return file_offramp_proto_rawDescGZIP(), []int{24} + return file_offramp_proto_rawDescGZIP(), []int{25} } func (x *OffRampStaticConfig) GetCommitStore() string { @@ -1383,7 +1440,7 @@ type OffRampTokens struct { func (x *OffRampTokens) Reset() { *x = OffRampTokens{} if protoimpl.UnsafeEnabled { - mi := &file_offramp_proto_msgTypes[25] + mi := &file_offramp_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1396,7 +1453,7 @@ func (x *OffRampTokens) String() string { func (*OffRampTokens) ProtoMessage() {} func (x *OffRampTokens) ProtoReflect() protoreflect.Message { - mi := &file_offramp_proto_msgTypes[25] + mi := &file_offramp_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1409,7 +1466,7 @@ func (x *OffRampTokens) ProtoReflect() protoreflect.Message { // Deprecated: Use OffRampTokens.ProtoReflect.Descriptor instead. func (*OffRampTokens) Descriptor() ([]byte, []int) { - return file_offramp_proto_rawDescGZIP(), []int{25} + return file_offramp_proto_rawDescGZIP(), []int{26} } func (x *OffRampTokens) GetDestinationTokens() []string { @@ -1560,191 +1617,200 @@ var file_offramp_proto_rawDesc = []byte{ 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x4f, 0x66, 0x66, 0x52, 0x61, 0x6d, 0x70, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x73, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x1e, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x54, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x61, - 0x0a, 0x16, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x14, 0x65, 0x78, 0x65, + 0x65, 0x6e, 0x73, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x2b, 0x0a, 0x11, 0x47, + 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x22, 0xbb, 0x01, 0x0a, 0x1e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x12, 0x36, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x54, 0x78, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x06, 0x74, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x22, 0x4d, 0x0a, 0x14, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x06, 0x73, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, - 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, - 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x22, 0xd4, 0x02, 0x0a, 0x12, 0x45, 0x78, 0x65, - 0x63, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x42, 0x0a, 0x1d, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, 0x74, - 0x69, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1b, 0x64, 0x65, 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, - 0x6d, 0x69, 0x73, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x67, 0x61, 0x73, - 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x62, 0x61, - 0x74, 0x63, 0x68, 0x47, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x3e, 0x0a, 0x1c, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, - 0x72, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x18, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x42, 0x6f, 0x6f, 0x73, 0x74, - 0x50, 0x65, 0x72, 0x57, 0x61, 0x69, 0x74, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x4d, 0x0a, 0x15, 0x69, - 0x6e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x65, 0x78, - 0x70, 0x69, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x69, 0x6e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x43, 0x0a, 0x10, 0x72, 0x6f, - 0x6f, 0x74, 0x5f, 0x73, 0x6e, 0x6f, 0x6f, 0x7a, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0e, 0x72, 0x6f, 0x6f, 0x74, 0x53, 0x6e, 0x6f, 0x6f, 0x7a, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, - 0x81, 0x01, 0x0a, 0x11, 0x45, 0x78, 0x65, 0x63, 0x4f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6c, 0x0a, 0x25, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x74, 0x68, 0x72, - 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x22, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x45, - 0x78, 0x65, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x53, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x73, 0x22, 0xed, 0x01, 0x0a, 0x13, 0x4f, 0x66, 0x66, 0x52, 0x61, 0x6d, 0x70, 0x53, - 0x74, 0x61, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x25, - 0x0a, 0x0e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x6f, 0x6e, 0x5f, - 0x72, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x6e, 0x52, 0x61, - 0x6d, 0x70, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x6f, 0x66, 0x66, 0x5f, 0x72, - 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x4f, - 0x66, 0x66, 0x52, 0x61, 0x6d, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x72, 0x6d, 0x5f, 0x70, 0x72, - 0x6f, 0x78, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72, 0x6d, 0x50, 0x72, - 0x6f, 0x78, 0x79, 0x22, 0x8d, 0x02, 0x0a, 0x0d, 0x4f, 0x66, 0x66, 0x52, 0x61, 0x6d, 0x70, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x11, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x64, 0x0a, 0x10, 0x64, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x4f, 0x66, 0x66, 0x52, - 0x61, 0x6d, 0x70, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, - 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x1a, - 0x42, 0x0a, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, - 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x32, 0xb9, 0x0c, 0x0a, 0x0d, 0x4f, 0x66, 0x66, 0x52, 0x61, 0x6d, 0x70, 0x52, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, - 0x33, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x54, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x61, 0x0a, 0x16, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x6f, + 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, + 0x63, 0x69, 0x70, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x14, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x36, + 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x54, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x06, + 0x74, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x22, 0x4d, 0x0a, 0x14, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x17, + 0x0a, 0x07, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x06, 0x73, 0x65, 0x71, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x69, 0x6e, 0x61, + 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x22, 0xd4, 0x02, 0x0a, 0x12, 0x45, 0x78, 0x65, 0x63, 0x4f, 0x66, + 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, 0x1d, + 0x64, 0x65, 0x73, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, 0x74, 0x69, 0x63, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x1b, 0x64, 0x65, 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x26, 0x0a, 0x0f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x67, 0x61, 0x73, 0x5f, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x62, 0x61, 0x74, 0x63, 0x68, + 0x47, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x3e, 0x0a, 0x1c, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x5f, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x77, + 0x61, 0x69, 0x74, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x18, + 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, + 0x57, 0x61, 0x69, 0x74, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x4d, 0x0a, 0x15, 0x69, 0x6e, 0x66, 0x6c, + 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x13, 0x69, 0x6e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x43, 0x0a, 0x10, 0x72, 0x6f, 0x6f, 0x74, 0x5f, + 0x73, 0x6e, 0x6f, 0x6f, 0x7a, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x72, 0x6f, + 0x6f, 0x74, 0x53, 0x6e, 0x6f, 0x6f, 0x7a, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x99, 0x01, 0x0a, + 0x11, 0x45, 0x78, 0x65, 0x63, 0x4f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x6c, 0x0a, 0x25, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, + 0x6f, 0x6c, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x22, 0x70, 0x65, + 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x45, 0x78, 0x65, 0x63, + 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x22, 0xed, 0x01, 0x0a, 0x13, 0x4f, 0x66, 0x66, + 0x52, 0x61, 0x6d, 0x70, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x17, + 0x0a, 0x07, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x6f, 0x6e, 0x52, 0x61, 0x6d, 0x70, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x76, 0x5f, + 0x6f, 0x66, 0x66, 0x5f, 0x72, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x70, 0x72, 0x65, 0x76, 0x4f, 0x66, 0x66, 0x52, 0x61, 0x6d, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x61, + 0x72, 0x6d, 0x5f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x61, 0x72, 0x6d, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x22, 0x8d, 0x02, 0x0a, 0x0d, 0x4f, 0x66, 0x66, + 0x52, 0x61, 0x6d, 0x70, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x64, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x64, + 0x0a, 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, + 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, + 0x2e, 0x4f, 0x66, 0x66, 0x52, 0x61, 0x6d, 0x70, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x2e, 0x44, + 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x6f, 0x6f, 0x6c, 0x1a, 0x42, 0x0a, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x32, 0x8a, 0x0d, 0x0a, 0x0d, 0x4f, 0x66, 0x66, + 0x52, 0x61, 0x6d, 0x70, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x45, + 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x12, 0x33, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, - 0x15, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x33, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x44, - 0x65, 0x63, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6c, 0x6f, + 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, + 0x70, 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x33, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x8d, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, - 0x12, 0x36, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, - 0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2d, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x4f, - 0x66, 0x66, 0x52, 0x61, 0x6d, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x59, 0x0a, 0x0e, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2d, 0x2e, 0x6c, - 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, - 0x63, 0x63, 0x69, 0x70, 0x2e, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, - 0x0d, 0x4f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x4f, - 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x11, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, - 0x63, 0x65, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x30, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x47, 0x61, 0x73, 0x50, - 0x72, 0x69, 0x63, 0x65, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x2c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, - 0x70, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, 0x0a, 0x17, 0x43, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x36, 0x2e, 0x6c, 0x6f, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x34, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x45, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8d, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x36, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x47, 0x65, + 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, + 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, + 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2d, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, - 0x63, 0x69, 0x70, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x6c, 0x6f, 0x6f, - 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, - 0x69, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6c, 0x6f, + 0x63, 0x69, 0x70, 0x2e, 0x4f, 0x66, 0x66, 0x52, 0x61, 0x6d, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x0c, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x2e, 0x6c, + 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, + 0x63, 0x63, 0x69, 0x70, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, + 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x0e, 0x4f, 0x66, 0x66, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x2d, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0d, 0x4f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, - 0x63, 0x69, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x5b, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2e, 0x2e, 0x6c, 0x6f, 0x6f, - 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, - 0x69, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x1c, - 0x47, 0x65, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x6f, 0x44, 0x65, 0x73, 0x74, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x3b, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x6f, 0x44, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, + 0x63, 0x69, 0x70, 0x2e, 0x4f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x11, 0x47, + 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x28, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x30, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x05, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, - 0x4f, 0x5a, 0x4d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6d, - 0x61, 0x72, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6b, 0x69, 0x74, 0x2f, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, - 0x70, 0x6b, 0x67, 0x2f, 0x6c, 0x6f, 0x6f, 0x70, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2f, 0x70, 0x62, 0x2f, 0x63, 0x63, 0x69, 0x70, 0x3b, 0x63, 0x63, 0x69, 0x70, 0x70, 0x62, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, + 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x0e, + 0x47, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x2c, + 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, + 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6c, + 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, + 0x63, 0x63, 0x69, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x6f, + 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, 0x0a, + 0x17, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x36, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x11, 0x47, 0x65, + 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x2f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x30, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, + 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x2e, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, + 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x75, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x6f, + 0x44, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x3b, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x63, 0x63, 0x69, + 0x70, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x6f, 0x44, 0x65, 0x73, + 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x28, 0x2e, + 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x62, + 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x09, 0x47, 0x65, 0x74, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x28, + 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x62, 0x2e, 0x63, 0x63, 0x69, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x05, 0x43, 0x6c, + 0x6f, 0x73, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0x4f, 0x5a, 0x4d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6d, 0x61, 0x72, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, + 0x74, 0x6b, 0x69, 0x74, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6c, 0x6f, 0x6f, 0x70, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x62, 0x2f, 0x63, 0x63, 0x69, 0x70, 0x3b, + 0x63, 0x63, 0x69, 0x70, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1759,7 +1825,7 @@ func file_offramp_proto_rawDescGZIP() []byte { return file_offramp_proto_rawDescData } -var file_offramp_proto_msgTypes = make([]protoimpl.MessageInfo, 28) +var file_offramp_proto_msgTypes = make([]protoimpl.MessageInfo, 29) var file_offramp_proto_goTypes = []interface{}{ (*EncodeExecutionReportRequest)(nil), // 0: loop.internal.pb.ccip.EncodeExecutionReportRequest (*EncodeExecutionReportResponse)(nil), // 1: loop.internal.pb.ccip.EncodeExecutionReportResponse @@ -1781,68 +1847,71 @@ var file_offramp_proto_goTypes = []interface{}{ (*GetStaticConfigResponse)(nil), // 17: loop.internal.pb.ccip.GetStaticConfigResponse (*GetSourceToDestTokensMappingResponse)(nil), // 18: loop.internal.pb.ccip.GetSourceToDestTokensMappingResponse (*GetTokensResponse)(nil), // 19: loop.internal.pb.ccip.GetTokensResponse - (*ExecutionStateChangeWithTxMeta)(nil), // 20: loop.internal.pb.ccip.ExecutionStateChangeWithTxMeta - (*ExecutionStateChange)(nil), // 21: loop.internal.pb.ccip.ExecutionStateChange - (*ExecOffchainConfig)(nil), // 22: loop.internal.pb.ccip.ExecOffchainConfig - (*ExecOnchainConfig)(nil), // 23: loop.internal.pb.ccip.ExecOnchainConfig - (*OffRampStaticConfig)(nil), // 24: loop.internal.pb.ccip.OffRampStaticConfig - (*OffRampTokens)(nil), // 25: loop.internal.pb.ccip.OffRampTokens - nil, // 26: loop.internal.pb.ccip.GetSourceToDestTokensMappingResponse.TokenMappingsEntry - nil, // 27: loop.internal.pb.ccip.OffRampTokens.DestinationPoolEntry - (*ExecutionReport)(nil), // 28: loop.internal.pb.ccip.ExecutionReport - (*TokenPoolRateLimit)(nil), // 29: loop.internal.pb.ccip.TokenPoolRateLimit - (*TxMeta)(nil), // 30: loop.internal.pb.ccip.TxMeta - (*durationpb.Duration)(nil), // 31: google.protobuf.Duration - (*emptypb.Empty)(nil), // 32: google.protobuf.Empty + (*GetRouterResponse)(nil), // 20: loop.internal.pb.ccip.GetRouterResponse + (*ExecutionStateChangeWithTxMeta)(nil), // 21: loop.internal.pb.ccip.ExecutionStateChangeWithTxMeta + (*ExecutionStateChange)(nil), // 22: loop.internal.pb.ccip.ExecutionStateChange + (*ExecOffchainConfig)(nil), // 23: loop.internal.pb.ccip.ExecOffchainConfig + (*ExecOnchainConfig)(nil), // 24: loop.internal.pb.ccip.ExecOnchainConfig + (*OffRampStaticConfig)(nil), // 25: loop.internal.pb.ccip.OffRampStaticConfig + (*OffRampTokens)(nil), // 26: loop.internal.pb.ccip.OffRampTokens + nil, // 27: loop.internal.pb.ccip.GetSourceToDestTokensMappingResponse.TokenMappingsEntry + nil, // 28: loop.internal.pb.ccip.OffRampTokens.DestinationPoolEntry + (*ExecutionReport)(nil), // 29: loop.internal.pb.ccip.ExecutionReport + (*TokenPoolRateLimit)(nil), // 30: loop.internal.pb.ccip.TokenPoolRateLimit + (*TxMeta)(nil), // 31: loop.internal.pb.ccip.TxMeta + (*durationpb.Duration)(nil), // 32: google.protobuf.Duration + (*emptypb.Empty)(nil), // 33: google.protobuf.Empty } var file_offramp_proto_depIdxs = []int32{ - 28, // 0: loop.internal.pb.ccip.EncodeExecutionReportRequest.report:type_name -> loop.internal.pb.ccip.ExecutionReport - 28, // 1: loop.internal.pb.ccip.DecodeExecutionReportResponse.report:type_name -> loop.internal.pb.ccip.ExecutionReport - 20, // 2: loop.internal.pb.ccip.GetExecutionStateChangesResponse.execution_state_changes:type_name -> loop.internal.pb.ccip.ExecutionStateChangeWithTxMeta - 22, // 3: loop.internal.pb.ccip.OffchainConfigResponse.config:type_name -> loop.internal.pb.ccip.ExecOffchainConfig - 23, // 4: loop.internal.pb.ccip.OnchainConfigResponse.config:type_name -> loop.internal.pb.ccip.ExecOnchainConfig - 29, // 5: loop.internal.pb.ccip.CurrentRateLimiterStateResponse.rate_limiter:type_name -> loop.internal.pb.ccip.TokenPoolRateLimit - 24, // 6: loop.internal.pb.ccip.GetStaticConfigResponse.config:type_name -> loop.internal.pb.ccip.OffRampStaticConfig - 26, // 7: loop.internal.pb.ccip.GetSourceToDestTokensMappingResponse.token_mappings:type_name -> loop.internal.pb.ccip.GetSourceToDestTokensMappingResponse.TokenMappingsEntry - 25, // 8: loop.internal.pb.ccip.GetTokensResponse.tokens:type_name -> loop.internal.pb.ccip.OffRampTokens - 21, // 9: loop.internal.pb.ccip.ExecutionStateChangeWithTxMeta.execution_state_change:type_name -> loop.internal.pb.ccip.ExecutionStateChange - 30, // 10: loop.internal.pb.ccip.ExecutionStateChangeWithTxMeta.tx_meta:type_name -> loop.internal.pb.ccip.TxMeta - 31, // 11: loop.internal.pb.ccip.ExecOffchainConfig.inflight_cache_expiry:type_name -> google.protobuf.Duration - 31, // 12: loop.internal.pb.ccip.ExecOffchainConfig.root_snooze_time:type_name -> google.protobuf.Duration - 31, // 13: loop.internal.pb.ccip.ExecOnchainConfig.permissionless_exec_threshold_seconds:type_name -> google.protobuf.Duration - 27, // 14: loop.internal.pb.ccip.OffRampTokens.destination_pool:type_name -> loop.internal.pb.ccip.OffRampTokens.DestinationPoolEntry + 29, // 0: loop.internal.pb.ccip.EncodeExecutionReportRequest.report:type_name -> loop.internal.pb.ccip.ExecutionReport + 29, // 1: loop.internal.pb.ccip.DecodeExecutionReportResponse.report:type_name -> loop.internal.pb.ccip.ExecutionReport + 21, // 2: loop.internal.pb.ccip.GetExecutionStateChangesResponse.execution_state_changes:type_name -> loop.internal.pb.ccip.ExecutionStateChangeWithTxMeta + 23, // 3: loop.internal.pb.ccip.OffchainConfigResponse.config:type_name -> loop.internal.pb.ccip.ExecOffchainConfig + 24, // 4: loop.internal.pb.ccip.OnchainConfigResponse.config:type_name -> loop.internal.pb.ccip.ExecOnchainConfig + 30, // 5: loop.internal.pb.ccip.CurrentRateLimiterStateResponse.rate_limiter:type_name -> loop.internal.pb.ccip.TokenPoolRateLimit + 25, // 6: loop.internal.pb.ccip.GetStaticConfigResponse.config:type_name -> loop.internal.pb.ccip.OffRampStaticConfig + 27, // 7: loop.internal.pb.ccip.GetSourceToDestTokensMappingResponse.token_mappings:type_name -> loop.internal.pb.ccip.GetSourceToDestTokensMappingResponse.TokenMappingsEntry + 26, // 8: loop.internal.pb.ccip.GetTokensResponse.tokens:type_name -> loop.internal.pb.ccip.OffRampTokens + 22, // 9: loop.internal.pb.ccip.ExecutionStateChangeWithTxMeta.execution_state_change:type_name -> loop.internal.pb.ccip.ExecutionStateChange + 31, // 10: loop.internal.pb.ccip.ExecutionStateChangeWithTxMeta.tx_meta:type_name -> loop.internal.pb.ccip.TxMeta + 32, // 11: loop.internal.pb.ccip.ExecOffchainConfig.inflight_cache_expiry:type_name -> google.protobuf.Duration + 32, // 12: loop.internal.pb.ccip.ExecOffchainConfig.root_snooze_time:type_name -> google.protobuf.Duration + 32, // 13: loop.internal.pb.ccip.ExecOnchainConfig.permissionless_exec_threshold_seconds:type_name -> google.protobuf.Duration + 28, // 14: loop.internal.pb.ccip.OffRampTokens.destination_pool:type_name -> loop.internal.pb.ccip.OffRampTokens.DestinationPoolEntry 0, // 15: loop.internal.pb.ccip.OffRampReader.EncodeExecutionReport:input_type -> loop.internal.pb.ccip.EncodeExecutionReportRequest 2, // 16: loop.internal.pb.ccip.OffRampReader.DecodeExecutionReport:input_type -> loop.internal.pb.ccip.DecodeExecutionReportRequest 4, // 17: loop.internal.pb.ccip.OffRampReader.GetExecutionStateChanges:input_type -> loop.internal.pb.ccip.GetExecutionStateChangesRequest - 32, // 18: loop.internal.pb.ccip.OffRampReader.Address:input_type -> google.protobuf.Empty + 33, // 18: loop.internal.pb.ccip.OffRampReader.Address:input_type -> google.protobuf.Empty 7, // 19: loop.internal.pb.ccip.OffRampReader.ChangeConfig:input_type -> loop.internal.pb.ccip.ChangeConfigRequest - 32, // 20: loop.internal.pb.ccip.OffRampReader.OffchainConfig:input_type -> google.protobuf.Empty - 32, // 21: loop.internal.pb.ccip.OffRampReader.OnchainConfig:input_type -> google.protobuf.Empty - 32, // 22: loop.internal.pb.ccip.OffRampReader.GasPriceEstimator:input_type -> google.protobuf.Empty + 33, // 20: loop.internal.pb.ccip.OffRampReader.OffchainConfig:input_type -> google.protobuf.Empty + 33, // 21: loop.internal.pb.ccip.OffRampReader.OnchainConfig:input_type -> google.protobuf.Empty + 33, // 22: loop.internal.pb.ccip.OffRampReader.GasPriceEstimator:input_type -> google.protobuf.Empty 12, // 23: loop.internal.pb.ccip.OffRampReader.GetSenderNonce:input_type -> loop.internal.pb.ccip.GetSenderNonceRequest - 32, // 24: loop.internal.pb.ccip.OffRampReader.CurrentRateLimiterState:input_type -> google.protobuf.Empty + 33, // 24: loop.internal.pb.ccip.OffRampReader.CurrentRateLimiterState:input_type -> google.protobuf.Empty 15, // 25: loop.internal.pb.ccip.OffRampReader.GetExecutionState:input_type -> loop.internal.pb.ccip.GetExecutionStateRequest - 32, // 26: loop.internal.pb.ccip.OffRampReader.GetStaticConfig:input_type -> google.protobuf.Empty - 32, // 27: loop.internal.pb.ccip.OffRampReader.GetSourceToDestTokensMapping:input_type -> google.protobuf.Empty - 32, // 28: loop.internal.pb.ccip.OffRampReader.GetTokens:input_type -> google.protobuf.Empty - 32, // 29: loop.internal.pb.ccip.OffRampReader.Close:input_type -> google.protobuf.Empty - 1, // 30: loop.internal.pb.ccip.OffRampReader.EncodeExecutionReport:output_type -> loop.internal.pb.ccip.EncodeExecutionReportResponse - 3, // 31: loop.internal.pb.ccip.OffRampReader.DecodeExecutionReport:output_type -> loop.internal.pb.ccip.DecodeExecutionReportResponse - 5, // 32: loop.internal.pb.ccip.OffRampReader.GetExecutionStateChanges:output_type -> loop.internal.pb.ccip.GetExecutionStateChangesResponse - 6, // 33: loop.internal.pb.ccip.OffRampReader.Address:output_type -> loop.internal.pb.ccip.OffRampAddressResponse - 8, // 34: loop.internal.pb.ccip.OffRampReader.ChangeConfig:output_type -> loop.internal.pb.ccip.ChangeConfigResponse - 9, // 35: loop.internal.pb.ccip.OffRampReader.OffchainConfig:output_type -> loop.internal.pb.ccip.OffchainConfigResponse - 10, // 36: loop.internal.pb.ccip.OffRampReader.OnchainConfig:output_type -> loop.internal.pb.ccip.OnchainConfigResponse - 11, // 37: loop.internal.pb.ccip.OffRampReader.GasPriceEstimator:output_type -> loop.internal.pb.ccip.GasPriceEstimatorResponse - 13, // 38: loop.internal.pb.ccip.OffRampReader.GetSenderNonce:output_type -> loop.internal.pb.ccip.GetSenderNonceResponse - 14, // 39: loop.internal.pb.ccip.OffRampReader.CurrentRateLimiterState:output_type -> loop.internal.pb.ccip.CurrentRateLimiterStateResponse - 16, // 40: loop.internal.pb.ccip.OffRampReader.GetExecutionState:output_type -> loop.internal.pb.ccip.GetExecutionStateResponse - 17, // 41: loop.internal.pb.ccip.OffRampReader.GetStaticConfig:output_type -> loop.internal.pb.ccip.GetStaticConfigResponse - 18, // 42: loop.internal.pb.ccip.OffRampReader.GetSourceToDestTokensMapping:output_type -> loop.internal.pb.ccip.GetSourceToDestTokensMappingResponse - 19, // 43: loop.internal.pb.ccip.OffRampReader.GetTokens:output_type -> loop.internal.pb.ccip.GetTokensResponse - 32, // 44: loop.internal.pb.ccip.OffRampReader.Close:output_type -> google.protobuf.Empty - 30, // [30:45] is the sub-list for method output_type - 15, // [15:30] is the sub-list for method input_type + 33, // 26: loop.internal.pb.ccip.OffRampReader.GetStaticConfig:input_type -> google.protobuf.Empty + 33, // 27: loop.internal.pb.ccip.OffRampReader.GetSourceToDestTokensMapping:input_type -> google.protobuf.Empty + 33, // 28: loop.internal.pb.ccip.OffRampReader.GetTokens:input_type -> google.protobuf.Empty + 33, // 29: loop.internal.pb.ccip.OffRampReader.GetRouter:input_type -> google.protobuf.Empty + 33, // 30: loop.internal.pb.ccip.OffRampReader.Close:input_type -> google.protobuf.Empty + 1, // 31: loop.internal.pb.ccip.OffRampReader.EncodeExecutionReport:output_type -> loop.internal.pb.ccip.EncodeExecutionReportResponse + 3, // 32: loop.internal.pb.ccip.OffRampReader.DecodeExecutionReport:output_type -> loop.internal.pb.ccip.DecodeExecutionReportResponse + 5, // 33: loop.internal.pb.ccip.OffRampReader.GetExecutionStateChanges:output_type -> loop.internal.pb.ccip.GetExecutionStateChangesResponse + 6, // 34: loop.internal.pb.ccip.OffRampReader.Address:output_type -> loop.internal.pb.ccip.OffRampAddressResponse + 8, // 35: loop.internal.pb.ccip.OffRampReader.ChangeConfig:output_type -> loop.internal.pb.ccip.ChangeConfigResponse + 9, // 36: loop.internal.pb.ccip.OffRampReader.OffchainConfig:output_type -> loop.internal.pb.ccip.OffchainConfigResponse + 10, // 37: loop.internal.pb.ccip.OffRampReader.OnchainConfig:output_type -> loop.internal.pb.ccip.OnchainConfigResponse + 11, // 38: loop.internal.pb.ccip.OffRampReader.GasPriceEstimator:output_type -> loop.internal.pb.ccip.GasPriceEstimatorResponse + 13, // 39: loop.internal.pb.ccip.OffRampReader.GetSenderNonce:output_type -> loop.internal.pb.ccip.GetSenderNonceResponse + 14, // 40: loop.internal.pb.ccip.OffRampReader.CurrentRateLimiterState:output_type -> loop.internal.pb.ccip.CurrentRateLimiterStateResponse + 16, // 41: loop.internal.pb.ccip.OffRampReader.GetExecutionState:output_type -> loop.internal.pb.ccip.GetExecutionStateResponse + 17, // 42: loop.internal.pb.ccip.OffRampReader.GetStaticConfig:output_type -> loop.internal.pb.ccip.GetStaticConfigResponse + 18, // 43: loop.internal.pb.ccip.OffRampReader.GetSourceToDestTokensMapping:output_type -> loop.internal.pb.ccip.GetSourceToDestTokensMappingResponse + 19, // 44: loop.internal.pb.ccip.OffRampReader.GetTokens:output_type -> loop.internal.pb.ccip.GetTokensResponse + 20, // 45: loop.internal.pb.ccip.OffRampReader.GetRouter:output_type -> loop.internal.pb.ccip.GetRouterResponse + 33, // 46: loop.internal.pb.ccip.OffRampReader.Close:output_type -> google.protobuf.Empty + 31, // [31:47] is the sub-list for method output_type + 15, // [15:31] is the sub-list for method input_type 15, // [15:15] is the sub-list for extension type_name 15, // [15:15] is the sub-list for extension extendee 0, // [0:15] is the sub-list for field type_name @@ -2096,7 +2165,7 @@ func file_offramp_proto_init() { } } file_offramp_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExecutionStateChangeWithTxMeta); i { + switch v := v.(*GetRouterResponse); i { case 0: return &v.state case 1: @@ -2108,7 +2177,7 @@ func file_offramp_proto_init() { } } file_offramp_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExecutionStateChange); i { + switch v := v.(*ExecutionStateChangeWithTxMeta); i { case 0: return &v.state case 1: @@ -2120,7 +2189,7 @@ func file_offramp_proto_init() { } } file_offramp_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExecOffchainConfig); i { + switch v := v.(*ExecutionStateChange); i { case 0: return &v.state case 1: @@ -2132,7 +2201,7 @@ func file_offramp_proto_init() { } } file_offramp_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExecOnchainConfig); i { + switch v := v.(*ExecOffchainConfig); i { case 0: return &v.state case 1: @@ -2144,7 +2213,7 @@ func file_offramp_proto_init() { } } file_offramp_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OffRampStaticConfig); i { + switch v := v.(*ExecOnchainConfig); i { case 0: return &v.state case 1: @@ -2156,6 +2225,18 @@ func file_offramp_proto_init() { } } file_offramp_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OffRampStaticConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_offramp_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OffRampTokens); i { case 0: return &v.state @@ -2174,7 +2255,7 @@ func file_offramp_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_offramp_proto_rawDesc, NumEnums: 0, - NumMessages: 28, + NumMessages: 29, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/loop/internal/pb/ccip/offramp.proto b/pkg/loop/internal/pb/ccip/offramp.proto index 2fcc6f47b..1310d5e39 100644 --- a/pkg/loop/internal/pb/ccip/offramp.proto +++ b/pkg/loop/internal/pb/ccip/offramp.proto @@ -24,6 +24,7 @@ service OffRampReader { rpc GetStaticConfig(google.protobuf.Empty) returns (GetStaticConfigResponse) {} rpc GetSourceToDestTokensMapping(google.protobuf.Empty) returns (GetSourceToDestTokensMappingResponse) {} rpc GetTokens(google.protobuf.Empty) returns (GetTokensResponse) {} + rpc GetRouter(google.protobuf.Empty) returns (GetRouterResponse) {} rpc Close(google.protobuf.Empty) returns (google.protobuf.Empty) {} } @@ -152,6 +153,12 @@ message GetTokensResponse { OffRampTokens tokens = 1; // []Address } +// GetRouterResponse returns the router address. It is a gRPC adapter for the return values of +// [github.com/smartcontractkit/chainlink-common/pkg/types/ccip/OffRampReader.GetRouter] +message GetRouterResponse { + string router = 1; +} + // ExecutionStateChangeWithTxMeta is a gRPC adapter for the struct // [github.com/smartcontractkit/chainlink-common/pkg/types/ccip/ExecutionStateChangeWithTxMeta] message ExecutionStateChangeWithTxMeta { @@ -180,6 +187,7 @@ message ExecOffchainConfig { // [github.com/smartcontractkit/chainlink-common/pkg/types/ccip/ExecOnchainConfig] message ExecOnchainConfig { google.protobuf.Duration permissionless_exec_threshold_seconds = 1; // time.Duration + string router = 2; // Address } // OffRampStaticConfig is a gRPC adapter for the struct diff --git a/pkg/loop/internal/pb/ccip/offramp_grpc.pb.go b/pkg/loop/internal/pb/ccip/offramp_grpc.pb.go index 7ae843582..c67c72f5c 100644 --- a/pkg/loop/internal/pb/ccip/offramp_grpc.pb.go +++ b/pkg/loop/internal/pb/ccip/offramp_grpc.pb.go @@ -34,6 +34,7 @@ const ( OffRampReader_GetStaticConfig_FullMethodName = "/loop.internal.pb.ccip.OffRampReader/GetStaticConfig" OffRampReader_GetSourceToDestTokensMapping_FullMethodName = "/loop.internal.pb.ccip.OffRampReader/GetSourceToDestTokensMapping" OffRampReader_GetTokens_FullMethodName = "/loop.internal.pb.ccip.OffRampReader/GetTokens" + OffRampReader_GetRouter_FullMethodName = "/loop.internal.pb.ccip.OffRampReader/GetRouter" OffRampReader_Close_FullMethodName = "/loop.internal.pb.ccip.OffRampReader/Close" ) @@ -55,6 +56,7 @@ type OffRampReaderClient interface { GetStaticConfig(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*GetStaticConfigResponse, error) GetSourceToDestTokensMapping(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*GetSourceToDestTokensMappingResponse, error) GetTokens(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*GetTokensResponse, error) + GetRouter(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*GetRouterResponse, error) Close(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) } @@ -192,6 +194,15 @@ func (c *offRampReaderClient) GetTokens(ctx context.Context, in *emptypb.Empty, return out, nil } +func (c *offRampReaderClient) GetRouter(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*GetRouterResponse, error) { + out := new(GetRouterResponse) + err := c.cc.Invoke(ctx, OffRampReader_GetRouter_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *offRampReaderClient) Close(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) { out := new(emptypb.Empty) err := c.cc.Invoke(ctx, OffRampReader_Close_FullMethodName, in, out, opts...) @@ -219,6 +230,7 @@ type OffRampReaderServer interface { GetStaticConfig(context.Context, *emptypb.Empty) (*GetStaticConfigResponse, error) GetSourceToDestTokensMapping(context.Context, *emptypb.Empty) (*GetSourceToDestTokensMappingResponse, error) GetTokens(context.Context, *emptypb.Empty) (*GetTokensResponse, error) + GetRouter(context.Context, *emptypb.Empty) (*GetRouterResponse, error) Close(context.Context, *emptypb.Empty) (*emptypb.Empty, error) mustEmbedUnimplementedOffRampReaderServer() } @@ -269,6 +281,9 @@ func (UnimplementedOffRampReaderServer) GetSourceToDestTokensMapping(context.Con func (UnimplementedOffRampReaderServer) GetTokens(context.Context, *emptypb.Empty) (*GetTokensResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetTokens not implemented") } +func (UnimplementedOffRampReaderServer) GetRouter(context.Context, *emptypb.Empty) (*GetRouterResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetRouter not implemented") +} func (UnimplementedOffRampReaderServer) Close(context.Context, *emptypb.Empty) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Close not implemented") } @@ -537,6 +552,24 @@ func _OffRampReader_GetTokens_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _OffRampReader_GetRouter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(emptypb.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OffRampReaderServer).GetRouter(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: OffRampReader_GetRouter_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OffRampReaderServer).GetRouter(ctx, req.(*emptypb.Empty)) + } + return interceptor(ctx, in, info, handler) +} + func _OffRampReader_Close_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(emptypb.Empty) if err := dec(in); err != nil { @@ -618,6 +651,10 @@ var OffRampReader_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetTokens", Handler: _OffRampReader_GetTokens_Handler, }, + { + MethodName: "GetRouter", + Handler: _OffRampReader_GetRouter_Handler, + }, { MethodName: "Close", Handler: _OffRampReader_Close_Handler, diff --git a/pkg/types/ccip/offramp.go b/pkg/types/ccip/offramp.go index 08d77c595..0008fab13 100644 --- a/pkg/types/ccip/offramp.go +++ b/pkg/types/ccip/offramp.go @@ -44,6 +44,8 @@ type OffRampReader interface { GetTokens(ctx context.Context) (OffRampTokens, error) + GetRouter(ctx context.Context) (Address, error) + Close() error } @@ -92,12 +94,14 @@ type ExecOffchainConfig struct { type ExecOnchainConfig struct { PermissionLessExecutionThresholdSeconds time.Duration + Router Address } func (c ExecOnchainConfig) Validate() error { if c.PermissionLessExecutionThresholdSeconds == 0 { return errors.New("must set PermissionLessExecutionThresholdSeconds") } + // skipping validation for Router, it could be set to 0 address return nil }