Skip to content

Commit 7b4378c

Browse files
author
sheldon
committed
fix random error
1 parent c835543 commit 7b4378c

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

modules/random/keeper/service.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package keeper
22

33
import (
44
"encoding/hex"
5-
"math/rand"
6-
"time"
75

86
"github.com/tidwall/gjson"
97

@@ -37,9 +35,15 @@ func (k Keeper) RequestService(ctx sdk.Context, consumer sdk.AccAddress, service
3735
if coins := k.bankKeeper.SpendableCoins(ctx, consumer); !coins.IsAllGTE(serviceFeeCap) {
3836
return nil, sdkerrors.ErrInsufficientFee
3937
}
38+
prng := types.MakePRNG(
39+
ctx.BlockHeader().LastBlockId.Hash,
40+
ctx.BlockHeader().Time.UnixNano(),
41+
consumer, nil, true)
42+
provider, err := sdk.AccAddressFromBech32(bindings[prng.Intn(len(bindings))].Provider)
43+
if err != nil {
44+
return nil, err
45+
}
4046

41-
rand.Seed(time.Now().UnixNano())
42-
provider, _ := sdk.AccAddressFromBech32(bindings[rand.Intn(len(bindings))].Provider)
4347
timeout := k.serviceKeeper.GetParams(ctx).MaxRequestTimeout
4448

4549
return k.serviceKeeper.CreateRequestContext(

modules/random/types/rng.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package types
33
import (
44
"crypto/sha256"
55
"math/big"
6+
"math/rand"
67

78
sdk "github.com/cosmos/cosmos-sdk/types"
89
)
@@ -59,6 +60,11 @@ func (p PRNG) GetRand() *big.Rat {
5960
return random
6061
}
6162

63+
func (p PRNG) Intn(n int) int {
64+
rnd := rand.New(rand.NewSource(p.GetRand().Denom().Int64()))
65+
return rnd.Intn(n)
66+
}
67+
6268
// SHA256 wraps sha256.Sum256 with result converted to slice
6369
func SHA256(data []byte) []byte {
6470
sum := sha256.Sum256(data)

0 commit comments

Comments
 (0)