Skip to content

Commit 754f8c8

Browse files
Merge pull request #624 from shutter-network/fix/compatibility-for-previous-eons
Fix: compatibility for previous eons
2 parents a473e3e + 9b57450 commit 754f8c8

File tree

4 files changed

+236
-70
lines changed

4 files changed

+236
-70
lines changed

rolling-shutter/keyperimpl/shutterservice/handlers.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ type DecryptionKeySharesHandler struct {
2222
dbpool *pgxpool.Pool
2323
}
2424

25-
// TODO: problem in using direct api is it has decryption trigger api and shutdown api??
26-
2725
func (h *DecryptionKeySharesHandler) MessagePrototypes() []p2pmsg.Message {
2826
return []p2pmsg.Message{&p2pmsg.DecryptionKeyShares{}}
2927
}

rolling-shutter/keyperimpl/shutterservice/keyper.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,6 @@ func (kpr *Keyper) initRegistrySyncer(ctx context.Context) error {
171171
return err
172172
}
173173

174-
// TODO: need to update go module after contract is finalized
175174
kpr.registrySyncer = &RegistrySyncer{
176175
Contract: contract,
177176
DBPool: kpr.dbpool,

rolling-shutter/keyperimpl/shutterservice/newblock.go

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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

9396
func (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

128146
func (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

Comments
 (0)