-
Notifications
You must be signed in to change notification settings - Fork 51
/
test_common.go
40 lines (33 loc) · 1 KB
/
test_common.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
package keeper
import (
"math/rand"
sdk "github.com/cosmos/cosmos-sdk/types"
staking "github.com/cosmos/cosmos-sdk/x/staking/types"
)
// RandomValidator returns a random validator given access to the keeper and ctx.
func RandomValidator(r *rand.Rand, k Keeper, ctx sdk.Context) (staking.Validator, bool) {
vals := k.stakingKeeper.GetAllValidators(ctx)
if len(vals) == 0 {
return staking.Validator{}, false
}
i := r.Intn(len(vals))
return vals[i], true
}
// RandomDelegator returns a random delegator address given access to the keeper and ctx.
func RandomDelegator(r *rand.Rand, k Keeper, ctx sdk.Context) (sdk.AccAddress, bool) {
val, ok := RandomValidator(r, k, ctx)
if !ok {
return nil, false
}
valAddr, err := sdk.ValAddressFromBech32(val.OperatorAddress)
if err != nil {
panic(err)
}
dels := k.stakingKeeper.GetValidatorDelegations(ctx, valAddr)
i := r.Intn(len(dels))
delAddr, err := sdk.AccAddressFromBech32(dels[i].DelegatorAddress)
if err != nil {
panic(err)
}
return delAddr, true
}