-
Notifications
You must be signed in to change notification settings - Fork 168
/
ballot.go
72 lines (58 loc) · 1.79 KB
/
ballot.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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package keeper
import (
"sort"
"github.com/umee-network/umee/x/oracle/types"
sdk "github.com/cosmos/cosmos-sdk/types"
)
// OrganizeBallotByDenom collects all oracle votes for the current vote period,
// categorized by the votes' denom parameter.
func (k Keeper) OrganizeBallotByDenom(
ctx sdk.Context,
validatorClaimMap map[string]types.Claim,
) (votes map[string]types.ExchangeRateBallot) {
votes = map[string]types.ExchangeRateBallot{}
// collect aggregate votes
aggregateHandler := func(voterAddr sdk.ValAddress, vote types.AggregateExchangeRateVote) bool {
// organize ballot only for the active validators
claim, ok := validatorClaimMap[vote.Voter]
if ok {
power := claim.Power
for _, tuple := range vote.ExchangeRateTuples {
tmpPower := power
votes[tuple.Denom] = append(
votes[tuple.Denom],
types.NewVoteForTally(tuple.ExchangeRate, tuple.Denom, voterAddr, tmpPower),
)
}
}
return false
}
k.IterateAggregateExchangeRateVotes(ctx, aggregateHandler)
// sort created ballots
for denom, ballot := range votes {
sort.Sort(ballot)
votes[denom] = ballot
}
return votes
}
// ClearBallots clears all tallied prevotes and votes from the store.
func (k Keeper) ClearBallots(ctx sdk.Context, votePeriod uint64) {
// clear all aggregate prevotes
k.IterateAggregateExchangeRatePrevotes(
ctx,
func(voterAddr sdk.ValAddress, aggPrevote types.AggregateExchangeRatePrevote) bool {
if ctx.BlockHeight() > int64(aggPrevote.SubmitBlock+votePeriod) {
k.DeleteAggregateExchangeRatePrevote(ctx, voterAddr)
}
return false
},
)
// clear all aggregate votes
k.IterateAggregateExchangeRateVotes(
ctx,
func(voterAddr sdk.ValAddress, _ types.AggregateExchangeRateVote) bool {
k.DeleteAggregateExchangeRateVote(ctx, voterAddr)
return false
},
)
}