From 8757e07a34f1419478709a22b8d2f5dd21f3d9df Mon Sep 17 00:00:00 2001 From: Awbrey Hughlett Date: Tue, 21 Jan 2025 09:24:45 -0600 Subject: [PATCH] add events source interface --- pkg/solana/chainreader/chain_reader.go | 23 ++++++++++---------- pkg/solana/chainreader/chain_reader_test.go | 2 +- pkg/solana/chainreader/event_read_binding.go | 18 ++++++++------- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/pkg/solana/chainreader/chain_reader.go b/pkg/solana/chainreader/chain_reader.go index e0d52560e..4f3747eb3 100644 --- a/pkg/solana/chainreader/chain_reader.go +++ b/pkg/solana/chainreader/chain_reader.go @@ -22,7 +22,7 @@ import ( "github.com/smartcontractkit/chainlink-solana/pkg/solana/logpoller" ) -type EventSourcer interface { +type EventsReader interface { FilteredLogs(context.Context, []query.Expression, query.LimitAndSort, string) ([]logpoller.Log, error) } @@ -34,14 +34,13 @@ type ContractReaderService struct { // provided dependencies lggr logger.Logger client MultipleAccountGetter - events EventSourcer + events EventsReader // internal values - bindings namespaceBindings - lookup *lookup - parsed *codec.ParsedTypes - codec types.RemoteCodec - codecWithoutModifiers types.RemoteCodec + bindings namespaceBindings + lookup *lookup + parsed *codec.ParsedTypes + codec types.RemoteCodec // service state management wg sync.WaitGroup @@ -58,7 +57,7 @@ func NewContractReaderService( lggr logger.Logger, dataReader MultipleAccountGetter, cfg config.ContractReader, - events EventSourcer, + events EventsReader, ) (*ContractReaderService, error) { svc := &ContractReaderService{ lggr: logger.Named(lggr, ServiceName), @@ -327,7 +326,7 @@ func (s *ContractReaderService) init(namespaces map[string]config.ChainContractR return fmt.Errorf("unexpected type %T from IDL definition for event read: %q, with chainSpecificName: %q, of type: %q", eventIDlDef, genericName, read.ChainSpecificName, read.ReadType) } - if err = s.addEventRead(namespace, genericName, nameSpaceDef.IDL, eventIDlDef, read); err != nil { + if err = s.addEventRead(namespace, genericName, nameSpaceDef.IDL, eventIDlDef, read, s.events); err != nil { return err } default: @@ -371,9 +370,10 @@ func (s *ContractReaderService) addAccountRead( func (s *ContractReaderService) addEventRead( namespace, genericName string, - idl codec.IDL, - idlType codec.IdlEvent, + _ codec.IDL, + _ codec.IdlEvent, readDefinition config.ReadDefinition, + events EventsReader, ) error { // TODO: set log poller filter @@ -381,6 +381,7 @@ func (s *ContractReaderService) addEventRead( namespace, genericName, readDefinition.IndexedFields, + events, )) return nil diff --git a/pkg/solana/chainreader/chain_reader_test.go b/pkg/solana/chainreader/chain_reader_test.go index b59787b1c..77b72a200 100644 --- a/pkg/solana/chainreader/chain_reader_test.go +++ b/pkg/solana/chainreader/chain_reader_test.go @@ -601,7 +601,7 @@ type chainReaderInterfaceTester struct { conf config.ContractReader address []string reader *wrappedTestChainReader - eventSource chainreader.EventSourcer + eventSource chainreader.EventsReader } func (r *chainReaderInterfaceTester) GetAccountBytes(i int) []byte { diff --git a/pkg/solana/chainreader/event_read_binding.go b/pkg/solana/chainreader/event_read_binding.go index a6aba4214..167129123 100644 --- a/pkg/solana/chainreader/event_read_binding.go +++ b/pkg/solana/chainreader/event_read_binding.go @@ -17,10 +17,6 @@ import ( "github.com/smartcontractkit/chainlink-solana/pkg/solana/logpoller" ) -type EventsReader interface { - FilteredLogs(context.Context, []query.Expression, query.LimitAndSort, string) ([]logpoller.Log, error) -} - type eventReadBinding struct { namespace, genericName string codec types.RemoteCodec @@ -28,14 +24,19 @@ type eventReadBinding struct { key solana.PublicKey remapper remapHelper indexedSubkeys map[string]string - reader EventsReader + events EventsReader } -func newEventReadBinding(namespace, genericName string, indexedSubkeys map[string]string) *eventReadBinding { +func newEventReadBinding( + namespace, genericName string, + indexedSubkeys map[string]string, + events EventsReader, +) *eventReadBinding { binding := &eventReadBinding{ namespace: namespace, genericName: genericName, indexedSubkeys: indexedSubkeys, + events: events, } binding.remapper = remapHelper{binding.remapPrimitive} @@ -85,7 +86,7 @@ func (b *eventReadBinding) QueryKey( itemType := strings.Join([]string{b.namespace, b.genericName}, ".") - logs, err := b.reader.FilteredLogs(ctx, filter.Expressions, limitAndSort, itemType) + logs, err := b.events.FilteredLogs(ctx, filter.Expressions, limitAndSort, itemType) if err != nil { return nil, err } @@ -126,6 +127,7 @@ func (b *eventReadBinding) encodeComparator(comparator *primitives.Comparator) ( itemType := strings.Join([]string{b.namespace, b.genericName, comparator.Name}, ".") for idx, comp := range comparator.ValueComparators { + // need to do a transform and then extract the value for the subkey newValue, err := b.modifier.TransformToOnChain(comp.Value, itemType) if err != nil { return query.Expression{}, err @@ -150,7 +152,7 @@ func (b *eventReadBinding) decodeLogsIntoSequences( Head: types.Head{ Height: fmt.Sprint(logs[idx].BlockNumber), Hash: solana.PublicKey(logs[idx].BlockHash).Bytes(), - Timestamp: uint64(logs[idx].BlockTimestamp.Unix()), + Timestamp: uint64(logs[idx].BlockTimestamp.Unix()), //nolint:gosec }, }