Skip to content

Commit 9e75a78

Browse files
committed
Add ILogpoller interface and call NewLogPoller() from NewChain()
Note: this will hopefully be renamed to LogPoller later, once we find a better name for the struct. (logPoller, for consistency with evm?) and the PR's this depends on have been merged, to avoid merge conflicts
1 parent 484985c commit 9e75a78

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

pkg/solana/chain.go

+13-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
mn "github.com/smartcontractkit/chainlink-solana/pkg/solana/client/multinode"
2929
"github.com/smartcontractkit/chainlink-solana/pkg/solana/config"
3030
"github.com/smartcontractkit/chainlink-solana/pkg/solana/internal"
31+
"github.com/smartcontractkit/chainlink-solana/pkg/solana/logpoller"
3132
"github.com/smartcontractkit/chainlink-solana/pkg/solana/monitor"
3233
"github.com/smartcontractkit/chainlink-solana/pkg/solana/txm"
3334
)
@@ -37,6 +38,7 @@ type Chain interface {
3738

3839
ID() string
3940
Config() config.Config
41+
LogPoller() logpoller.ILogPoller
4042
TxManager() TxManager
4143
// Reader returns a new Reader from the available list of nodes (if there are multiple, it will randomly select one)
4244
Reader() (client.Reader, error)
@@ -89,6 +91,7 @@ type chain struct {
8991
services.StateMachine
9092
id string
9193
cfg *config.TOMLConfig
94+
lp logpoller.ILogPoller
9295
txm *txm.Txm
9396
balanceMonitor services.Service
9497
lggr logger.Logger
@@ -235,6 +238,7 @@ func newChain(id string, cfg *config.TOMLConfig, ks core.Keystore, lggr logger.L
235238
clientCache: map[string]*verifiedCachedClient{},
236239
}
237240

241+
var lc internal.Loader[client.Reader] = utils.NewLazyLoad(func() (client.Reader, error) { return ch.getClient() })
238242
var tc internal.Loader[client.ReaderWriter] = utils.NewLazyLoad(func() (client.ReaderWriter, error) { return ch.getClient() })
239243
var bc internal.Loader[monitor.BalanceClient] = utils.NewLazyLoad(func() (monitor.BalanceClient, error) { return ch.getClient() })
240244

@@ -303,10 +307,13 @@ func newChain(id string, cfg *config.TOMLConfig, ks core.Keystore, lggr logger.L
303307
return result.Signature(), result.Error()
304308
}
305309

306-
tc = internal.NewLoader[client.ReaderWriter](func() (client.ReaderWriter, error) { return ch.multiNode.SelectRPC() })
307-
bc = internal.NewLoader[monitor.BalanceClient](func() (monitor.BalanceClient, error) { return ch.multiNode.SelectRPC() })
310+
// TODO: Can we just remove these? They nullify the lazy loaders initialized earlier, don't they?
311+
//lc = internal.NewLoader[client.Reader](func() (client.Reader, error) { return ch.multiNode.SelectRPC() })
312+
//tc = internal.NewLoader[client.ReaderWriter](func() (client.ReaderWriter, error) { return ch.multiNode.SelectRPC() })
313+
//bc = internal.NewLoader[monitor.BalanceClient](func() (monitor.BalanceClient, error) { return ch.multiNode.SelectRPC() })
308314
}
309315

316+
ch.lp = logpoller.NewLogPoller(lggr, logpoller.NewORM(ch.ID(), ds, lggr), lc)
310317
ch.txm = txm.NewTxm(ch.id, tc, sendTx, cfg, ks, lggr)
311318
ch.balanceMonitor = monitor.NewBalanceMonitor(ch.id, cfg, lggr, ks, bc)
312319
return &ch, nil
@@ -396,6 +403,10 @@ func (c *chain) Config() config.Config {
396403
return c.cfg
397404
}
398405

406+
func (c *chain) LogPoller() logpoller.ILogPoller {
407+
return c.lp
408+
}
409+
399410
func (c *chain) TxManager() TxManager {
400411
return c.txm
401412
}

pkg/solana/logpoller/log_poller.go

+16-3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/smartcontractkit/chainlink-common/pkg/services"
1111

1212
"github.com/smartcontractkit/chainlink-solana/pkg/solana/client"
13+
"github.com/smartcontractkit/chainlink-solana/pkg/solana/internal"
1314
)
1415

1516
var (
@@ -24,11 +25,18 @@ type ORM interface {
2425
MarkFilterDeleted(ctx context.Context, id int64) (err error)
2526
}
2627

28+
type ILogPoller interface {
29+
Start(context.Context) error
30+
Close() error
31+
RegisterFilter(ctx context.Context, filter Filter) error
32+
UnregisterFilter(ctx context.Context, name string) error
33+
}
34+
2735
type LogPoller struct {
2836
services.StateMachine
2937
lggr logger.SugaredLogger
3038
orm ORM
31-
client client.Reader
39+
client internal.Loader[client.Reader]
3240
collector *EncodedLogCollector
3341

3442
filters *filters
@@ -38,24 +46,29 @@ type LogPoller struct {
3846
wg sync.WaitGroup
3947
}
4048

41-
func NewLogPoller(lggr logger.SugaredLogger, orm ORM, cl client.Reader) *LogPoller {
49+
func NewLogPoller(lggr logger.SugaredLogger, orm ORM, cl internal.Loader[client.Reader]) ILogPoller {
4250
lggr = logger.Sugared(logger.Named(lggr, "LogPoller"))
4351
lp := LogPoller{
4452
orm: orm,
4553
client: cl,
4654
lggr: lggr,
4755
filters: newFilters(lggr, orm),
4856
}
49-
lp.collector = NewEncodedLogCollector(lp.client, lp, lp.lggr)
5057
return &lp
5158
}
5259

5360
func (lp LogPoller) Process(event ProgramEvent) error {
5461
// process stream of events coming from event loader
62+
5563
return nil
5664
}
5765

5866
func (lp *LogPoller) Start(context.Context) error {
67+
cl, err := lp.client.Get()
68+
if err != nil {
69+
return err
70+
}
71+
lp.collector = NewEncodedLogCollector(cl, lp, lp.lggr)
5972
return lp.StartOnce("LogPoller", func() error {
6073
lp.wg.Add(2)
6174
go lp.run()

0 commit comments

Comments
 (0)