-
Notifications
You must be signed in to change notification settings - Fork 589
/
init_functions.go
59 lines (48 loc) · 1.78 KB
/
init_functions.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
package simulation
// TODO: Move this entire file to simtypes
import (
"math/rand"
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/simulation"
)
// TODO: Consider adding consensus parameters / simulator params / tendermint params to this.
type InitFunctions struct {
// Why does this take in Numkeys / why isn't this part of the initial state function / config to decide?
RandomAccountFn RandomAccountFn
InitChainFn InitChainFn
}
// TODO: cleanup args in the future, should ideally just be a slice.
func DefaultSimInitFunctions(moduleAccountAddresses map[string]bool) InitFunctions {
return InitFunctions{
RandomAccountFn: WrapRandAccFnForResampling(RandomSimAccounts, moduleAccountAddresses),
}
}
func WrapRandAccFnForResampling(randFn RandomAccountFn, blockList map[string]bool) RandomAccountFn {
// TODO: do resampling
return func(r *rand.Rand, n int) []simulation.Account {
initAccs := randFn(r, n)
cleanedAccs := make([]simulation.Account, 0, n)
for _, acc := range initAccs {
if _, contains := blockList[acc.Address.String()]; !contains {
cleanedAccs = append(cleanedAccs, acc)
}
}
return cleanedAccs
}
}
// RandomAccounts generates n random accounts
func RandomSimAccounts(r *rand.Rand, n int) []simulation.Account {
accs := make([]simulation.Account, n)
for i := 0; i < n; i++ {
// don't need that much entropy for simulation
privkeySeed := make([]byte, 15)
r.Read(privkeySeed)
accs[i].PrivKey = secp256k1.GenPrivKeyFromSecret(privkeySeed)
accs[i].PubKey = accs[i].PrivKey.PubKey()
accs[i].Address = sdk.AccAddress(accs[i].PubKey.Address())
accs[i].ConsKey = ed25519.GenPrivKeyFromSecret(privkeySeed)
}
return accs
}