Skip to content

Commit 3b0ca62

Browse files
committed
feat(chainsync): allow not fetching past active events
1 parent db8405e commit 3b0ca62

File tree

4 files changed

+81
-71
lines changed

4 files changed

+81
-71
lines changed

rolling-shutter/medley/chainsync/options.go

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type options struct {
2828
logger log.Logger
2929
runner service.Runner
3030
syncStart *number.BlockNumber
31+
fetchActivesAtSyncStart bool
3132
privKey *ecdsa.PrivateKey
3233

3334
handlerShutterState event.ShutterStateHandler
@@ -91,12 +92,13 @@ func (o *options) apply(ctx context.Context, c *Client) error {
9192
return err
9293
}
9394
c.kssync = &syncer.KeyperSetSyncer{
94-
Client: client,
95-
Contract: c.KeyperSetManager,
96-
Log: c.log,
97-
StartBlock: o.syncStart,
98-
Handler: o.handlerKeyperSet,
99-
DisableEventWatcher: true,
95+
Client: client,
96+
Contract: c.KeyperSetManager,
97+
Log: c.log,
98+
StartBlock: o.syncStart,
99+
Handler: o.handlerKeyperSet,
100+
FetchActiveAtStartBlock: o.fetchActivesAtSyncStart,
101+
DisableEventWatcher: true,
100102
}
101103
if o.handlerKeyperSet != nil {
102104
c.services = append(c.services, c.kssync)
@@ -108,26 +110,28 @@ func (o *options) apply(ctx context.Context, c *Client) error {
108110
return err
109111
}
110112
c.epksync = &syncer.EonPubKeySyncer{
111-
Client: client,
112-
Log: c.log,
113-
KeyBroadcast: c.KeyBroadcast,
114-
KeyperSetManager: c.KeyperSetManager,
115-
Handler: o.handlerEonPublicKey,
116-
StartBlock: o.syncStart,
117-
DisableEventWatcher: true,
113+
Client: client,
114+
Log: c.log,
115+
KeyBroadcast: c.KeyBroadcast,
116+
KeyperSetManager: c.KeyperSetManager,
117+
Handler: o.handlerEonPublicKey,
118+
StartBlock: o.syncStart,
119+
FetchActiveAtStartBlock: o.fetchActivesAtSyncStart,
120+
DisableEventWatcher: true,
118121
}
119122
if o.handlerEonPublicKey != nil {
120123
c.services = append(c.services, c.epksync)
121124
syncedServices = append(syncedServices, c.epksync)
122125
}
123126

124127
c.sssync = &syncer.ShutterStateSyncer{
125-
Client: client,
126-
Contract: c.KeyperSetManager,
127-
Log: c.log,
128-
Handler: o.handlerShutterState,
129-
StartBlock: o.syncStart,
130-
DisableEventWatcher: true,
128+
Client: client,
129+
Contract: c.KeyperSetManager,
130+
Log: c.log,
131+
Handler: o.handlerShutterState,
132+
StartBlock: o.syncStart,
133+
FetchActiveAtStartBlock: o.fetchActivesAtSyncStart,
134+
DisableEventWatcher: true,
131135
}
132136
if o.handlerShutterState != nil {
133137
c.services = append(c.services, c.sssync)
@@ -169,11 +173,21 @@ func defaultOptions() *options {
169173
ethClient: nil,
170174
logger: noopLogger,
171175
runner: nil,
176+
fetchActivesAtSyncStart: true,
172177
syncStart: number.NewBlockNumber(nil),
173178
}
174179
}
175180

176-
func WithSyncStartBlock(blockNumber *number.BlockNumber) Option {
181+
func WithNoFetchActivesBeforeStart() Option {
182+
return func(o *options) error {
183+
o.fetchActivesAtSyncStart = false
184+
return nil
185+
}
186+
}
187+
188+
func WithSyncStartBlock(
189+
blockNumber *number.BlockNumber,
190+
) Option {
177191
if blockNumber == nil {
178192
blockNumber = number.NewBlockNumber(nil)
179193
}

rolling-shutter/medley/chainsync/syncer/eonpubkey.go

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,14 @@ import (
1818
var _ ManualFilterHandler = &EonPubKeySyncer{}
1919

2020
type EonPubKeySyncer struct {
21-
Client client.EthereumClient
22-
Log log.Logger
23-
KeyBroadcast *bindings.KeyBroadcastContract
24-
KeyperSetManager *bindings.KeyperSetManager
25-
StartBlock *number.BlockNumber
26-
Handler event.EonPublicKeyHandler
27-
DisableEventWatcher bool
21+
Client client.EthereumClient
22+
Log log.Logger
23+
KeyBroadcast *bindings.KeyBroadcastContract
24+
KeyperSetManager *bindings.KeyperSetManager
25+
StartBlock *number.BlockNumber
26+
Handler event.EonPublicKeyHandler
27+
FetchActiveAtStartBlock bool
28+
DisableEventWatcher bool
2829

2930
keyBroadcastCh chan *bindings.KeyBroadcastContractEonKeyBroadcast
3031
}
@@ -76,15 +77,18 @@ func (s *EonPubKeySyncer) Start(ctx context.Context, runner service.Runner) erro
7677
}
7778
s.StartBlock.SetUint64(latest)
7879
}
79-
pubKs, err := s.getInitialPubKeys(ctx)
80-
if err != nil {
81-
return err
82-
}
83-
for _, k := range pubKs {
84-
err := s.Handler(ctx, k)
80+
81+
if s.FetchActiveAtStartBlock {
82+
pubKs, err := s.getInitialPubKeys(ctx)
8583
if err != nil {
8684
return err
8785
}
86+
for _, k := range pubKs {
87+
err := s.Handler(ctx, k)
88+
if err != nil {
89+
return err
90+
}
91+
}
8892
}
8993

9094
watchOpts := &bind.WatchOpts{

rolling-shutter/medley/chainsync/syncer/keyperset.go

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ type KeyperSetSyncer struct {
3030
StartBlock *number.BlockNumber
3131
Handler event.KeyperSetHandler
3232
// disable this when the QueryAndHandle manual polling should be used:
33-
DisableEventWatcher bool
33+
FetchActiveAtStartBlock bool
34+
DisableEventWatcher bool
3435

3536
keyperAddedCh chan *bindings.KeyperSetManagerKeyperSetAdded
3637
}
@@ -87,18 +88,21 @@ func (s *KeyperSetSyncer) Start(ctx context.Context, runner service.Runner) erro
8788
Start: s.StartBlock.ToUInt64Ptr(),
8889
Context: ctx,
8990
}
90-
initial, err := s.getInitialKeyperSets(ctx)
91-
if err != nil {
92-
return err
93-
}
94-
for _, ks := range initial {
95-
err = s.Handler(ctx, ks)
91+
92+
if s.FetchActiveAtStartBlock {
93+
initial, err := s.getInitialKeyperSets(ctx)
9694
if err != nil {
97-
s.Log.Error(
98-
"handler for `NewKeyperSet` errored for initial sync",
99-
"error",
100-
err.Error(),
101-
)
95+
return err
96+
}
97+
for _, ks := range initial {
98+
err = s.Handler(ctx, ks)
99+
if err != nil {
100+
s.Log.Error(
101+
"handler for `NewKeyperSet` errored for initial sync",
102+
"error",
103+
err.Error(),
104+
)
105+
}
102106
}
103107
}
104108
s.keyperAddedCh = make(chan *bindings.KeyperSetManagerKeyperSetAdded, channelSize)

rolling-shutter/medley/chainsync/syncer/shutterstate.go

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@ import (
1717
var _ ManualFilterHandler = &ShutterStateSyncer{}
1818

1919
type ShutterStateSyncer struct {
20-
Client client.EthereumClient
21-
Contract *bindings.KeyperSetManager
22-
StartBlock *number.BlockNumber
23-
Log log.Logger
24-
Handler event.ShutterStateHandler
25-
DisableEventWatcher bool
20+
Client client.EthereumClient
21+
Contract *bindings.KeyperSetManager
22+
StartBlock *number.BlockNumber
23+
Log log.Logger
24+
Handler event.ShutterStateHandler
25+
FetchActiveAtStartBlock bool
26+
DisableEventWatcher bool
2627

2728
pausedCh chan *bindings.KeyperSetManagerPaused
2829
unpausedCh chan *bindings.KeyperSetManagerUnpaused
@@ -153,26 +154,20 @@ func (s *ShutterStateSyncer) watchPaused(ctx context.Context) error {
153154
Context: nil,
154155
}
155156

156-
stateAtStartBlock, err := s.GetShutterState(ctx, opts)
157-
if err != nil {
158-
// XXX: this will fail everything, do we want that?
159-
return err
157+
if s.FetchActiveAtStartBlock {
158+
stateAtStartBlock, err := s.GetShutterState(ctx, opts)
159+
if err != nil {
160+
// XXX: this will fail everything, do we want that?
161+
return err
162+
}
163+
s.handle(ctx, stateAtStartBlock)
160164
}
161-
s.handle(ctx, stateAtStartBlock)
162-
lastState := stateAtStartBlock
163165
for {
164166
select {
165167
case unpaused, ok := <-s.unpausedCh:
166168
if !ok {
167169
return nil
168170
}
169-
if lastState.Active {
170-
s.Log.Warn(
171-
"state/event mismatch, but continue handler",
172-
"new-event", "Unpaused",
173-
"last-state", "active",
174-
)
175-
}
176171
block := unpaused.Raw.BlockNumber
177172
ev := &event.ShutterState{
178173
Active: true,
@@ -183,13 +178,6 @@ func (s *ShutterStateSyncer) watchPaused(ctx context.Context) error {
183178
if !ok {
184179
return nil
185180
}
186-
if !lastState.Active {
187-
s.Log.Warn(
188-
"state/event mismatch, but continue handler",
189-
"new-event", "Paused",
190-
"last-state", "inactive",
191-
)
192-
}
193181
block := paused.Raw.BlockNumber
194182
ev := &event.ShutterState{
195183
Active: false,

0 commit comments

Comments
 (0)