-
Notifications
You must be signed in to change notification settings - Fork 0
/
cache_validator_state.go
46 lines (41 loc) · 1.26 KB
/
cache_validator_state.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// Copyright (C) 2019-2021, Dijets Inc, All rights reserved.
// See the file LICENSE for licensing terms.
package platformvm
import (
"time"
"github.com/lasthyphen/DijetsNetworkBinary/utils/timer/mockable"
)
type ValidatorState interface {
CurrentStakerChainState() currentStakerChainState
PendingStakerChainState() pendingStakerChainState
}
// getNextStakerChangeTime returns the next time that a staker set change should
// occur.
func getNextStakerChangeTime(vs ValidatorState) (time.Time, error) {
earliest := mockable.MaxTime
currentStakers := vs.CurrentStakerChainState()
if currentStakers := currentStakers.Stakers(); len(currentStakers) > 0 {
nextStakerToRemove := currentStakers[0]
staker, ok := nextStakerToRemove.UnsignedTx.(TimedTx)
if !ok {
return time.Time{}, errWrongTxType
}
endTime := staker.EndTime()
if endTime.Before(earliest) {
earliest = endTime
}
}
pendingStakers := vs.PendingStakerChainState()
if pendingStakers := pendingStakers.Stakers(); len(pendingStakers) > 0 {
nextStakerToAdd := pendingStakers[0]
staker, ok := nextStakerToAdd.UnsignedTx.(TimedTx)
if !ok {
return time.Time{}, errWrongTxType
}
startTime := staker.StartTime()
if startTime.Before(earliest) {
earliest = startTime
}
}
return earliest, nil
}