@@ -28,9 +28,21 @@ const maxTxPointerAge = 2
28
28
var errZeroTxPointerAge = errors .New ("tx pointer has age 0" )
29
29
30
30
func (kpr * Keyper ) processNewSlot (ctx context.Context , slot slotticker.Slot ) error {
31
+ return kpr .maybeTriggerDecryption (ctx , slot .Number )
32
+ }
33
+
34
+ // maybeTriggerDecryption triggers decryption for the given slot if
35
+ // - it hasn't been triggered for this slot before and
36
+ // - the keyper is part of the corresponding keyper set.
37
+ func (kpr * Keyper ) maybeTriggerDecryption (ctx context.Context , slot uint64 ) error {
38
+ if kpr .latestTriggeredSlot != nil && slot <= * kpr .latestTriggeredSlot {
39
+ return nil
40
+ }
41
+ kpr .latestTriggeredSlot = & slot
42
+
31
43
fmt .Println ("" )
32
44
fmt .Println ("" )
33
- fmt .Println (slot . Number )
45
+ fmt .Println (slot )
34
46
fmt .Println ("" )
35
47
fmt .Println ("" )
36
48
@@ -39,20 +51,20 @@ func (kpr *Keyper) processNewSlot(ctx context.Context, slot slotticker.Slot) err
39
51
if err != nil {
40
52
return errors .Wrap (err , "failed to query synced until from db" )
41
53
}
42
- if syncedUntil .Slot >= int64 (slot . Number ) {
54
+ if syncedUntil .Slot >= int64 (slot ) {
43
55
// If we already synced the block for slot n before this slot has started on our clock,
44
56
// either the previous block proposer proposed early (ie is malicious) or our clocks are
45
57
// out of sync. In any case, it does not make sense to produce keys as the block has
46
58
// already been built, so we return an error.
47
- return errors .Errorf ("processing slot %d for which a block has already been processed" , slot . Number )
59
+ return errors .Errorf ("processing slot %d for which a block has already been processed" , slot )
48
60
}
49
61
nextBlock := syncedUntil .BlockNumber + 1
50
62
51
63
queries := obskeyper .New (kpr .dbpool )
52
64
keyperSet , err := queries .GetKeyperSet (ctx , nextBlock )
53
65
if err == pgx .ErrNoRows {
54
66
log .Debug ().
55
- Uint64 ("slot" , slot . Number ).
67
+ Uint64 ("slot" , slot ).
56
68
Int64 ("block-number" , nextBlock ).
57
69
Msg ("skipping slot as no keyper set has been found for it" )
58
70
return nil
@@ -64,7 +76,7 @@ func (kpr *Keyper) processNewSlot(ctx context.Context, slot slotticker.Slot) err
64
76
return kpr .triggerDecryption (ctx , slot , nextBlock , & keyperSet )
65
77
}
66
78
log .Debug ().
67
- Uint64 ("slot" , slot . Number ).
79
+ Uint64 ("slot" , slot ).
68
80
Int64 ("block-number" , nextBlock ).
69
81
Int64 ("keyper-set-index" , keyperSet .KeyperConfigIndex ).
70
82
Str ("address" , kpr .config .GetAddress ().Hex ()).
@@ -134,7 +146,7 @@ func (kpr *Keyper) getTxPointer(ctx context.Context, eon int64, slot int64, keyp
134
146
135
147
func (kpr * Keyper ) triggerDecryption (
136
148
ctx context.Context ,
137
- slot slotticker. Slot ,
149
+ slot uint64 ,
138
150
nextBlock int64 ,
139
151
keyperSet * obskeyper.KeyperSet ,
140
152
) error {
@@ -147,10 +159,10 @@ func (kpr *Keyper) triggerDecryption(
147
159
}
148
160
eon := eonStruct .Eon
149
161
150
- txPointer , err := kpr .getTxPointer (ctx , eon , int64 (slot . Number ), keyperSet .KeyperConfigIndex )
162
+ txPointer , err := kpr .getTxPointer (ctx , eon , int64 (slot ), keyperSet .KeyperConfigIndex )
151
163
if err == errZeroTxPointerAge {
152
164
log .Warn ().
153
- Uint64 ("slot" , slot . Number ).
165
+ Uint64 ("slot" , slot ).
154
166
Int64 ("block-number" , nextBlock ).
155
167
Int64 ("eon" , eon ).
156
168
Int64 ("tx-pointer" , txPointer ).
@@ -166,7 +178,7 @@ func (kpr *Keyper) triggerDecryption(
166
178
}
167
179
err = gnosisKeyperDB .SetCurrentDecryptionTrigger (ctx , gnosisdatabase.SetCurrentDecryptionTriggerParams {
168
180
Eon : eon ,
169
- Slot : int64 (slot . Number ),
181
+ Slot : int64 (slot ),
170
182
TxPointer : txPointer ,
171
183
IdentitiesHash : computeIdentitiesHash (identityPreimages ),
172
184
})
@@ -179,7 +191,7 @@ func (kpr *Keyper) triggerDecryption(
179
191
}
180
192
event := broker .NewEvent (& trigger )
181
193
log .Debug ().
182
- Uint64 ("slot" , slot . Number ).
194
+ Uint64 ("slot" , slot ).
183
195
Uint64 ("block-number" , uint64 (nextBlock )).
184
196
Int ("num-identities" , len (trigger .IdentityPreimages )).
185
197
Int64 ("tx-pointer" , txPointer ).
@@ -190,7 +202,7 @@ func (kpr *Keyper) triggerDecryption(
190
202
}
191
203
192
204
func (kpr * Keyper ) getDecryptionIdentityPreimages (
193
- ctx context.Context , slot slotticker. Slot , eon int64 , txPointer int64 ,
205
+ ctx context.Context , slot uint64 , eon int64 , txPointer int64 ,
194
206
) ([]identitypreimage.IdentityPreimage , error ) {
195
207
identityPreimages := []identitypreimage.IdentityPreimage {}
196
208
@@ -243,13 +255,13 @@ func transactionSubmittedEventToIdentityPreimage(
243
255
return identitypreimage .IdentityPreimage (buf .Bytes ()), nil
244
256
}
245
257
246
- func makeSlotIdentityPreimage (slot slotticker. Slot ) identitypreimage.IdentityPreimage {
258
+ func makeSlotIdentityPreimage (slot uint64 ) identitypreimage.IdentityPreimage {
247
259
// 32 bytes of zeros plus the block number as big endian (ie starting with lots of zeros as well)
248
260
// this ensures the block identity preimage is always alphanumerically before any transaction
249
261
// identity preimages.
250
262
var buf bytes.Buffer
251
263
buf .Write (common .BigToHash (common .Big0 ).Bytes ())
252
- buf .Write (common .BigToHash (new (big.Int ).SetUint64 (slot . Number )).Bytes ())
264
+ buf .Write (common .BigToHash (new (big.Int ).SetUint64 (slot )).Bytes ())
253
265
254
266
return identitypreimage .IdentityPreimage (buf .Bytes ())
255
267
}
0 commit comments