From aba62bd2ed21ba2f900d29d673ee884fa3a29faa Mon Sep 17 00:00:00 2001 From: Silas Lenihan Date: Wed, 3 Jun 2026 14:12:31 -0400 Subject: [PATCH] PLEX-2773/generate client pb --- go.mod | 2 +- go.sum | 4 +-- .../v2/chain-capabilities/solana/client.pb.go | 13 +++++++-- pkg/chains/solana/solana.pb.go | 14 +++++++-- pkg/chains/solana/solana.proto | 1 + pkg/loop/internal/relayer/solana.go | 5 ++-- .../internal/relayerset/relayerset_test.go | 6 ++-- pkg/loop/internal/relayerset/solana.go | 2 +- pkg/types/mocks/solana_service.go | 29 ++++++++++--------- pkg/types/relayer.go | 10 +++---- 10 files changed, 55 insertions(+), 31 deletions(-) diff --git a/go.mod b/go.mod index 464a076887..aad64bc391 100644 --- a/go.mod +++ b/go.mod @@ -45,7 +45,7 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.100 github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260528204832-58c7145c53f8 github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20251024234028-0988426d98f4 - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260602131523-5168ac1ba014 + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260603162809-d3f4a3c7b58a github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260205130626-db2a2aab956b github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0 diff --git a/go.sum b/go.sum index 9569e9934c..9c07e6d64b 100644 --- a/go.sum +++ b/go.sum @@ -262,8 +262,8 @@ github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.202605282 github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260528204832-58c7145c53f8/go.mod h1:HmUyH2oD9m+GRpKq7q3vuRnm1F2Uczf/Nd1v3ipMSK8= github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20251024234028-0988426d98f4 h1:GCzrxDWn3b7jFfEA+WiYRi8CKoegsayiDoJBCjYkneE= github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20251024234028-0988426d98f4/go.mod h1:HHGeDUpAsPa0pmOx7wrByCitjQ0mbUxf0R9v+g67uCA= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260602131523-5168ac1ba014 h1:4rxcbbe1qe1yR+HcclvOi/e0CFLcBLfx2fgiWxBMMZ4= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260602131523-5168ac1ba014/go.mod h1:vTFHTCbLui4Vn8fTmAadfE3rdnvfrDwOmMujmW857D0= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260603162809-d3f4a3c7b58a h1:3FVh/0WPoh0DgB+qtn6vAhtzuj+bWqnfe3MWQcc2JGs= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260603162809-d3f4a3c7b58a/go.mod h1:vTFHTCbLui4Vn8fTmAadfE3rdnvfrDwOmMujmW857D0= github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b h1:QuI6SmQFK/zyUlVWEf0GMkiUYBPY4lssn26nKSd/bOM= github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b/go.mod h1:qSTSwX3cBP3FKQwQacdjArqv0g6QnukjV4XuzO6UyoY= github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260205130626-db2a2aab956b h1:36knUpKHHAZ86K4FGWXtx8i/EQftGdk2bqCoEu/Cha8= diff --git a/pkg/capabilities/v2/chain-capabilities/solana/client.pb.go b/pkg/capabilities/v2/chain-capabilities/solana/client.pb.go index 3120d05d97..c6bc2ed97c 100644 --- a/pkg/capabilities/v2/chain-capabilities/solana/client.pb.go +++ b/pkg/capabilities/v2/chain-capabilities/solana/client.pb.go @@ -2953,6 +2953,7 @@ type FilterLogTriggerRequest struct { ContractIdlJson []byte `protobuf:"bytes,4,opt,name=contract_idl_json,json=contractIdlJson,proto3" json:"contract_idl_json,omitempty"` Subkeys []*SubkeyConfig `protobuf:"bytes,5,rep,name=subkeys,proto3" json:"subkeys,omitempty"` CpiFilterConfig *CPIFilterConfig `protobuf:"bytes,6,opt,name=cpi_filter_config,json=cpiFilterConfig,proto3,oneof" json:"cpi_filter_config,omitempty"` + IncludeReverted bool `protobuf:"varint,7,opt,name=include_reverted,json=includeReverted,proto3" json:"include_reverted,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3029,6 +3030,13 @@ func (x *FilterLogTriggerRequest) GetCpiFilterConfig() *CPIFilterConfig { return nil } +func (x *FilterLogTriggerRequest) GetIncludeReverted() bool { + if x != nil { + return x.IncludeReverted + } + return false +} + type Log struct { state protoimpl.MessageState `protogen:"open.v1"` ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` // Chain identifier @@ -3557,7 +3565,7 @@ const file_capabilities_blockchain_solana_v1alpha_client_proto_rawDesc = "" + "\x0fCPIFilterConfig\x12!\n" + "\fdest_address\x18\x01 \x01(\fR\vdestAddress\x12\x1f\n" + "\vmethod_name\x18\x02 \x01(\fR\n" + - "methodName\"\xe2\x02\n" + + "methodName\"\x8d\x03\n" + "\x17FilterLogTriggerRequest\x12\x12\n" + "\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n" + "\aaddress\x18\x02 \x01(\fR\aaddress\x12\x1d\n" + @@ -3565,7 +3573,8 @@ const file_capabilities_blockchain_solana_v1alpha_client_proto_rawDesc = "" + "event_name\x18\x03 \x01(\tR\teventName\x12*\n" + "\x11contract_idl_json\x18\x04 \x01(\fR\x0fcontractIdlJson\x12N\n" + "\asubkeys\x18\x05 \x03(\v24.capabilities.blockchain.solana.v1alpha.SubkeyConfigR\asubkeys\x12h\n" + - "\x11cpi_filter_config\x18\x06 \x01(\v27.capabilities.blockchain.solana.v1alpha.CPIFilterConfigH\x00R\x0fcpiFilterConfig\x88\x01\x01B\x14\n" + + "\x11cpi_filter_config\x18\x06 \x01(\v27.capabilities.blockchain.solana.v1alpha.CPIFilterConfigH\x00R\x0fcpiFilterConfig\x88\x01\x01\x12)\n" + + "\x10include_reverted\x18\a \x01(\bR\x0fincludeRevertedB\x14\n" + "\x12_cpi_filter_config\"\xd4\x02\n" + "\x03Log\x12\x19\n" + "\bchain_id\x18\x01 \x01(\tR\achainId\x12\x1b\n" + diff --git a/pkg/chains/solana/solana.pb.go b/pkg/chains/solana/solana.pb.go index 9ca5294269..a9c263669a 100644 --- a/pkg/chains/solana/solana.pb.go +++ b/pkg/chains/solana/solana.pb.go @@ -3733,6 +3733,7 @@ type QueryTrackedLogsRequest struct { state protoimpl.MessageState `protogen:"open.v1"` FilterQuery []*Expression `protobuf:"bytes,1,rep,name=filterQuery,proto3" json:"filterQuery,omitempty"` // filter tree LimitAndSort *chain_common.LimitAndSort `protobuf:"bytes,2,opt,name=limit_and_sort,json=limitAndSort,proto3" json:"limit_and_sort,omitempty"` // paging + FilterName string `protobuf:"bytes,3,opt,name=filter_name,json=filterName,proto3" json:"filter_name,omitempty"` // registered filter name for query scoping unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3781,6 +3782,13 @@ func (x *QueryTrackedLogsRequest) GetLimitAndSort() *chain_common.LimitAndSort { return nil } +func (x *QueryTrackedLogsRequest) GetFilterName() string { + if x != nil { + return x.FilterName + } + return "" +} + type QueryTrackedLogsReply struct { state protoimpl.MessageState `protogen:"open.v1"` Logs []*Log `protobuf:"bytes,1,rep,name=logs,proto3" json:"logs,omitempty"` @@ -4362,10 +4370,12 @@ const file_solana_proto_rawDesc = "" + "\x04data\x18\t \x01(\fR\x04data\x12!\n" + "\fsequence_num\x18\n" + " \x01(\x03R\vsequenceNum\x12\x14\n" + - "\x05error\x18\v \x01(\tR\x05error\"\x9b\x01\n" + + "\x05error\x18\v \x01(\tR\x05error\"\xbc\x01\n" + "\x17QueryTrackedLogsRequest\x129\n" + "\vfilterQuery\x18\x01 \x03(\v2\x17.loop.solana.ExpressionR\vfilterQuery\x12E\n" + - "\x0elimit_and_sort\x18\x02 \x01(\v2\x1f.loop.chain.common.LimitAndSortR\flimitAndSort\"=\n" + + "\x0elimit_and_sort\x18\x02 \x01(\v2\x1f.loop.chain.common.LimitAndSortR\flimitAndSort\x12\x1f\n" + + "\vfilter_name\x18\x03 \x01(\tR\n" + + "filterName\"=\n" + "\x15QueryTrackedLogsReply\x12$\n" + "\x04logs\x18\x01 \x03(\v2\x10.loop.solana.LogR\x04logs\"P\n" + "\x1aRegisterLogTrackingRequest\x122\n" + diff --git a/pkg/chains/solana/solana.proto b/pkg/chains/solana/solana.proto index 39f8f935b3..3133a197ec 100644 --- a/pkg/chains/solana/solana.proto +++ b/pkg/chains/solana/solana.proto @@ -450,6 +450,7 @@ message Log { message QueryTrackedLogsRequest { repeated Expression filterQuery = 1; // filter tree loop.chain.common.LimitAndSort limit_and_sort = 2; // paging + string filter_name = 3; // registered filter name for query scoping } message QueryTrackedLogsReply { diff --git a/pkg/loop/internal/relayer/solana.go b/pkg/loop/internal/relayer/solana.go index 172d946c1c..d497cfac9d 100644 --- a/pkg/loop/internal/relayer/solana.go +++ b/pkg/loop/internal/relayer/solana.go @@ -74,7 +74,7 @@ func (sc *SolClient) UnregisterLogTracking(ctx context.Context, filterName strin return net.WrapRPCErr(err) } -func (sc *SolClient) QueryTrackedLogs(ctx context.Context, filterQuery []query.Expression, limitAndSort query.LimitAndSort) ([]*solana.Log, error) { +func (sc *SolClient) QueryTrackedLogs(ctx context.Context, filterQuery []query.Expression, limitAndSort query.LimitAndSort, filterName string) ([]*solana.Log, error) { pExprs, err := solpb.ConvertExpressionsToProto(filterQuery) if err != nil { return nil, net.WrapRPCErr(err) @@ -88,6 +88,7 @@ func (sc *SolClient) QueryTrackedLogs(ctx context.Context, filterQuery []query.E pReq := &solpb.QueryTrackedLogsRequest{ FilterQuery: pExprs, LimitAndSort: protoLimitAndSort, + FilterName: filterName, } pResp, err := sc.grpcClient.QueryTrackedLogs(ctx, pReq) @@ -308,7 +309,7 @@ func (s *solServer) QueryTrackedLogs(ctx context.Context, req *solpb.QueryTracke return nil, net.WrapRPCErr(err) } - logs, err := s.impl.QueryTrackedLogs(ctx, dExprs, ls) + logs, err := s.impl.QueryTrackedLogs(ctx, dExprs, ls, req.GetFilterName()) if err != nil { return nil, net.WrapRPCErr(err) } diff --git a/pkg/loop/internal/relayerset/relayerset_test.go b/pkg/loop/internal/relayerset/relayerset_test.go index 548521e741..1709eadca5 100644 --- a/pkg/loop/internal/relayerset/relayerset_test.go +++ b/pkg/loop/internal/relayerset/relayerset_test.go @@ -896,12 +896,14 @@ func Test_RelayerSet_SolanaService(t *testing.T) { {BlockNumber: 2, LogIndex: 5}, } + filterName := "query-filter" + expLimitAndSort := query.NewLimitAndSort(query.CountLimit(10), query.SortByTimestamp{}) mockSol.EXPECT(). - QueryTrackedLogs(mock.Anything, filterExpr, expLimitAndSort). + QueryTrackedLogs(mock.Anything, filterExpr, expLimitAndSort, filterName). Return(expected, nil) - out, err := sol.QueryTrackedLogs(ctx, filterExpr, expLimitAndSort) + out, err := sol.QueryTrackedLogs(ctx, filterExpr, expLimitAndSort, filterName) require.NoError(t, err) require.Len(t, out, 2) require.Equal(t, int64(2), out[1].BlockNumber) diff --git a/pkg/loop/internal/relayerset/solana.go b/pkg/loop/internal/relayerset/solana.go index e6dfbf1ca2..ab0decff59 100644 --- a/pkg/loop/internal/relayerset/solana.go +++ b/pkg/loop/internal/relayerset/solana.go @@ -175,7 +175,7 @@ func (ss *solServer) QueryTrackedLogs(ctx context.Context, req *solpb.QueryTrack return nil, net.WrapRPCErr(err) } - logs, err := solService.QueryTrackedLogs(ctx, dExprs, ls) + logs, err := solService.QueryTrackedLogs(ctx, dExprs, ls, req.GetFilterName()) if err != nil { return nil, net.WrapRPCErr(err) } diff --git a/pkg/types/mocks/solana_service.go b/pkg/types/mocks/solana_service.go index 36e5ac0024..cfd7648378 100644 --- a/pkg/types/mocks/solana_service.go +++ b/pkg/types/mocks/solana_service.go @@ -611,9 +611,9 @@ func (_c *SolanaService_GetTransaction_Call) RunAndReturn(run func(context.Conte return _c } -// QueryTrackedLogs provides a mock function with given fields: ctx, filterQuery, limitAndSort -func (_m *SolanaService) QueryTrackedLogs(ctx context.Context, filterQuery []query.Expression, limitAndSort query.LimitAndSort) ([]*solana.Log, error) { - ret := _m.Called(ctx, filterQuery, limitAndSort) +// QueryTrackedLogs provides a mock function with given fields: ctx, filterQuery, limitAndSort, filterName +func (_m *SolanaService) QueryTrackedLogs(ctx context.Context, filterQuery []query.Expression, limitAndSort query.LimitAndSort, filterName string) ([]*solana.Log, error) { + ret := _m.Called(ctx, filterQuery, limitAndSort, filterName) if len(ret) == 0 { panic("no return value specified for QueryTrackedLogs") @@ -621,19 +621,19 @@ func (_m *SolanaService) QueryTrackedLogs(ctx context.Context, filterQuery []que var r0 []*solana.Log var r1 error - if rf, ok := ret.Get(0).(func(context.Context, []query.Expression, query.LimitAndSort) ([]*solana.Log, error)); ok { - return rf(ctx, filterQuery, limitAndSort) + if rf, ok := ret.Get(0).(func(context.Context, []query.Expression, query.LimitAndSort, string) ([]*solana.Log, error)); ok { + return rf(ctx, filterQuery, limitAndSort, filterName) } - if rf, ok := ret.Get(0).(func(context.Context, []query.Expression, query.LimitAndSort) []*solana.Log); ok { - r0 = rf(ctx, filterQuery, limitAndSort) + if rf, ok := ret.Get(0).(func(context.Context, []query.Expression, query.LimitAndSort, string) []*solana.Log); ok { + r0 = rf(ctx, filterQuery, limitAndSort, filterName) } else { if ret.Get(0) != nil { r0 = ret.Get(0).([]*solana.Log) } } - if rf, ok := ret.Get(1).(func(context.Context, []query.Expression, query.LimitAndSort) error); ok { - r1 = rf(ctx, filterQuery, limitAndSort) + if rf, ok := ret.Get(1).(func(context.Context, []query.Expression, query.LimitAndSort, string) error); ok { + r1 = rf(ctx, filterQuery, limitAndSort, filterName) } else { r1 = ret.Error(1) } @@ -650,13 +650,14 @@ type SolanaService_QueryTrackedLogs_Call struct { // - ctx context.Context // - filterQuery []query.Expression // - limitAndSort query.LimitAndSort -func (_e *SolanaService_Expecter) QueryTrackedLogs(ctx interface{}, filterQuery interface{}, limitAndSort interface{}) *SolanaService_QueryTrackedLogs_Call { - return &SolanaService_QueryTrackedLogs_Call{Call: _e.mock.On("QueryTrackedLogs", ctx, filterQuery, limitAndSort)} +// - filterName string +func (_e *SolanaService_Expecter) QueryTrackedLogs(ctx interface{}, filterQuery interface{}, limitAndSort interface{}, filterName interface{}) *SolanaService_QueryTrackedLogs_Call { + return &SolanaService_QueryTrackedLogs_Call{Call: _e.mock.On("QueryTrackedLogs", ctx, filterQuery, limitAndSort, filterName)} } -func (_c *SolanaService_QueryTrackedLogs_Call) Run(run func(ctx context.Context, filterQuery []query.Expression, limitAndSort query.LimitAndSort)) *SolanaService_QueryTrackedLogs_Call { +func (_c *SolanaService_QueryTrackedLogs_Call) Run(run func(ctx context.Context, filterQuery []query.Expression, limitAndSort query.LimitAndSort, filterName string)) *SolanaService_QueryTrackedLogs_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].([]query.Expression), args[2].(query.LimitAndSort)) + run(args[0].(context.Context), args[1].([]query.Expression), args[2].(query.LimitAndSort), args[3].(string)) }) return _c } @@ -666,7 +667,7 @@ func (_c *SolanaService_QueryTrackedLogs_Call) Return(_a0 []*solana.Log, _a1 err return _c } -func (_c *SolanaService_QueryTrackedLogs_Call) RunAndReturn(run func(context.Context, []query.Expression, query.LimitAndSort) ([]*solana.Log, error)) *SolanaService_QueryTrackedLogs_Call { +func (_c *SolanaService_QueryTrackedLogs_Call) RunAndReturn(run func(context.Context, []query.Expression, query.LimitAndSort, string) ([]*solana.Log, error)) *SolanaService_QueryTrackedLogs_Call { _c.Call.Return(run) return _c } diff --git a/pkg/types/relayer.go b/pkg/types/relayer.go index dc5c0f459e..f5738e5758 100644 --- a/pkg/types/relayer.go +++ b/pkg/types/relayer.go @@ -250,11 +250,11 @@ type SolanaService interface { // noop guaranteed when filterName doesn't exist UnregisterLogTracking(ctx context.Context, filterName string) error - // QueryTrackedLogs retrieves logs from the log storage based on the provided - // query expression, sorting, and confidence level. It only returns logs that were - // collected through previously registered log filters. + // QueryTrackedLogs retrieves logs from log storage based on the provided query + // expression and sorting. When filterName is non-empty, results are scoped to + // that registered filter; an empty filterName queries across all filters (legacy). QueryTrackedLogs(ctx context.Context, filterQuery []query.Expression, - limitAndSort query.LimitAndSort) ([]*solana.Log, error) + limitAndSort query.LimitAndSort, filterName string) ([]*solana.Log, error) // GetLatestLPBlock retrieves current LatestBlock from cache perspective GetLatestLPBlock(ctx context.Context) (*solana.LPBlock, error) @@ -573,7 +573,7 @@ func (uss *UnimplementedSolanaService) RegisterLogTracking(ctx context.Context, func (uss *UnimplementedSolanaService) UnregisterLogTracking(ctx context.Context, filterName string) error { return status.Errorf(codes.Unimplemented, "method UnregisterLogTracking not implemented") } -func (uss *UnimplementedSolanaService) QueryTrackedLogs(ctx context.Context, filterQuery []query.Expression, limitAndSort query.LimitAndSort) ([]*solana.Log, error) { +func (uss *UnimplementedSolanaService) QueryTrackedLogs(ctx context.Context, filterQuery []query.Expression, limitAndSort query.LimitAndSort, filterName string) ([]*solana.Log, error) { return nil, status.Errorf(codes.Unimplemented, "method QueryTrackedLogs not implemented") } func (uss *UnimplementedSolanaService) GetBalance(ctx context.Context, req solana.GetBalanceRequest) (*solana.GetBalanceReply, error) {