@@ -79,10 +79,13 @@ func (kpr *Keyper) prepareTimeBasedTriggers(ctx context.Context, block *synceven
7979 return nil , errors .Wrap (err , "failed to query non decrypted identity registered events from db" )
8080 }
8181
82- obsDB := obskeyper .New (kpr .dbpool )
8382 eventsToDecrypt := make ([]servicedatabase.IdentityRegisteredEvent , 0 )
8483 for _ , event := range nonTriggeredEvents {
85- if kpr .shouldTriggerDecryption (ctx , obsDB , event , block ) {
84+ trigger , err := kpr .shouldTriggerDecryption (ctx , event , block )
85+ if err != nil {
86+ return nil , errors .Wrapf (err , "failed to check if should trigger decryption for event %d" , event .Eon )
87+ }
88+ if trigger {
8689 eventsToDecrypt = append (eventsToDecrypt , event )
8790 }
8891 }
@@ -92,37 +95,52 @@ func (kpr *Keyper) prepareTimeBasedTriggers(ctx context.Context, block *synceven
9295
9396func (kpr * Keyper ) shouldTriggerDecryption (
9497 ctx context.Context ,
95- obsDB * obskeyper.Queries ,
9698 event servicedatabase.IdentityRegisteredEvent ,
9799 triggeredBlock * syncevent.LatestBlock ,
98- ) bool {
99- nextBlock := triggeredBlock .Number .Int64 ()
100- keyperSet , err := obsDB .GetKeyperSet (ctx , nextBlock )
100+ ) (bool , error ) {
101+ coreKeyperDB := corekeyperdatabase .New (kpr .dbpool )
102+ isKeyper , err := coreKeyperDB .GetKeyperStateForEon (ctx , corekeyperdatabase.GetKeyperStateForEonParams {
103+ Eon : event .Eon ,
104+ KeyperAddress : []string {kpr .config .GetAddress ().Hex ()},
105+ })
101106 if err != nil {
102107 if err == pgx .ErrNoRows {
103108 log .Info ().
104- Int64 ("block-number" , nextBlock ).
105- Msg ("skipping event as no keyper set has been found for it" )
109+ Int64 ("eon" , event .Eon ).
110+ Msg ("skipping event as no eon has been found for it" )
111+ return false , nil
106112 } else {
107- log . Err (err ). Msgf ( "failed to query keyper set for block %d" , nextBlock )
113+ return false , errors . Wrapf (err , "failed to query keyper state for eon %d" , event . Eon )
108114 }
109- return false
115+ }
116+
117+ eon , err := coreKeyperDB .GetEon (ctx , event .Eon )
118+ if err != nil {
119+ return false , errors .Wrapf (err , "failed to get eon %d" , event .Eon )
120+ }
121+ if eon .ActivationBlockNumber > triggeredBlock .Header .Number .Int64 () {
122+ log .Info ().
123+ Int64 ("eon" , event .Eon ).
124+ Int64 ("block-number" , triggeredBlock .Header .Number .Int64 ()).
125+ Msg ("skipping event as eon activation block number is greater than triggered block number" )
126+ return false , nil
110127 }
111128
112129 if event .Timestamp >= int64 (triggeredBlock .Header .Time ) {
113- return false
130+ return false , nil
114131 }
115132
116133 // don't trigger if we're not part of the keyper set
117- if ! keyperSet . Contains ( kpr . config . GetAddress ()) {
134+ if ! isKeyper {
118135 log .Info ().
119- Int64 ("block-number" , nextBlock ).
120- Int64 ("keyper-set-index" , keyperSet .KeyperConfigIndex ).
136+ Int64 ("eon" , event .Eon ).
137+ Int64 ("block-number" , event .BlockNumber ).
138+ Str ("identity" , string (event .Identity )).
121139 Str ("address" , kpr .config .GetAddress ().Hex ()).
122- Msg ("skipping slot as not part of keyper set" )
123- return false
140+ Msg ("skipping event as not part of keyper set" )
141+ return false , nil
124142 }
125- return true
143+ return true , nil
126144}
127145
128146func (kpr * Keyper ) createTriggersFromIdentityRegisteredEvents (
@@ -131,33 +149,21 @@ func (kpr *Keyper) createTriggersFromIdentityRegisteredEvents(
131149 triggeredBlock * syncevent.LatestBlock ,
132150) ([]epochkghandler.DecryptionTrigger , error ) {
133151 coreKeyperDB := corekeyperdatabase .New (kpr .dbpool )
134-
135152 identityPreimages := make (map [int64 ][]identitypreimage.IdentityPreimage )
136153 lastEonBlock := make (map [int64 ]int64 )
137154 for _ , event := range triggeredEvents {
138- nextBlock := triggeredBlock .Header .Number .Int64 ()
139-
140- eonStruct , err := coreKeyperDB .GetEonForBlockNumber (ctx , nextBlock )
155+ eon , err := coreKeyperDB .GetEon (ctx , event .Eon )
141156 if err != nil {
142- return nil , errors .Wrapf (err , "failed to query eon for block number %d from db" , nextBlock )
143- }
144-
145- if eonStruct .Eon != event .Eon {
146- log .Warn ().
147- Int64 ("eon expected" , eonStruct .Eon ).
148- Int64 ("eon in event" , event .Eon ).
149- Msg ("skipping event as wrong eon passed" )
150-
151- continue
157+ return nil , errors .Wrapf (err , "failed to query eon %d from db" , event .Eon )
152158 }
153159
154160 if identityPreimages [event .Eon ] == nil {
155161 identityPreimages [event .Eon ] = make ([]identitypreimage.IdentityPreimage , 0 )
156162 }
157163 identityPreimages [event .Eon ] = append (identityPreimages [event .Eon ], identitypreimage .IdentityPreimage (event .Identity ))
158164
159- if lastEonBlock [event .Eon ] < event . BlockNumber {
160- lastEonBlock [event .Eon ] = event . BlockNumber
165+ if _ , exists := lastEonBlock [event .Eon ]; ! exists {
166+ lastEonBlock [event .Eon ] = eon . ActivationBlockNumber
161167 }
162168 }
163169
0 commit comments