2019-06-28 13:11:27 -07:00
|
|
|
package keeper
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/tendermint/tendermint/crypto/secp256k1"
|
|
|
|
dbm "github.com/tendermint/tendermint/libs/db"
|
|
|
|
"github.com/tendermint/tendermint/libs/log"
|
|
|
|
|
|
|
|
abci "github.com/tendermint/tendermint/abci/types"
|
|
|
|
tmtypes "github.com/tendermint/tendermint/types"
|
|
|
|
|
|
|
|
"github.com/cosmos/cosmos-sdk/codec"
|
|
|
|
"github.com/cosmos/cosmos-sdk/store"
|
|
|
|
"github.com/cosmos/cosmos-sdk/x/auth"
|
2019-07-29 08:27:01 -07:00
|
|
|
authexported "github.com/cosmos/cosmos-sdk/x/auth/exported"
|
2019-06-28 13:11:27 -07:00
|
|
|
"github.com/cosmos/cosmos-sdk/x/bank"
|
|
|
|
"github.com/cosmos/cosmos-sdk/x/params"
|
2019-07-02 09:24:13 -07:00
|
|
|
"github.com/cosmos/cosmos-sdk/x/supply/internal/types"
|
2019-06-28 13:11:27 -07:00
|
|
|
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
|
|
)
|
|
|
|
|
2019-07-06 12:42:06 -07:00
|
|
|
// nolint: deadcode unused
|
|
|
|
var (
|
|
|
|
multiPerm = "multiple permissions account"
|
|
|
|
randomPerm = "random permission"
|
2019-07-16 07:02:36 -07:00
|
|
|
holder = "holder"
|
2019-07-06 12:42:06 -07:00
|
|
|
)
|
|
|
|
|
2019-06-28 13:11:27 -07:00
|
|
|
// nolint: deadcode unused
|
|
|
|
// create a codec used only for testing
|
|
|
|
func makeTestCodec() *codec.Codec {
|
|
|
|
var cdc = codec.New()
|
|
|
|
|
|
|
|
bank.RegisterCodec(cdc)
|
|
|
|
auth.RegisterCodec(cdc)
|
|
|
|
types.RegisterCodec(cdc)
|
|
|
|
sdk.RegisterCodec(cdc)
|
|
|
|
codec.RegisterCrypto(cdc)
|
|
|
|
|
|
|
|
return cdc
|
|
|
|
}
|
|
|
|
|
|
|
|
// nolint: deadcode unused
|
|
|
|
func createTestInput(t *testing.T, isCheckTx bool, initPower int64, nAccs int64) (sdk.Context, auth.AccountKeeper, Keeper) {
|
|
|
|
|
|
|
|
keyAcc := sdk.NewKVStoreKey(auth.StoreKey)
|
|
|
|
keyParams := sdk.NewKVStoreKey(params.StoreKey)
|
|
|
|
tkeyParams := sdk.NewTransientStoreKey(params.TStoreKey)
|
|
|
|
keySupply := sdk.NewKVStoreKey(types.StoreKey)
|
|
|
|
|
|
|
|
db := dbm.NewMemDB()
|
|
|
|
ms := store.NewCommitMultiStore(db)
|
|
|
|
ms.MountStoreWithDB(keyAcc, sdk.StoreTypeIAVL, db)
|
|
|
|
ms.MountStoreWithDB(keySupply, sdk.StoreTypeIAVL, db)
|
|
|
|
ms.MountStoreWithDB(keyParams, sdk.StoreTypeIAVL, db)
|
|
|
|
ms.MountStoreWithDB(tkeyParams, sdk.StoreTypeTransient, db)
|
|
|
|
err := ms.LoadLatestVersion()
|
|
|
|
require.Nil(t, err)
|
|
|
|
|
|
|
|
ctx := sdk.NewContext(ms, abci.Header{ChainID: "supply-chain"}, isCheckTx, log.NewNopLogger())
|
|
|
|
ctx = ctx.WithConsensusParams(
|
|
|
|
&abci.ConsensusParams{
|
|
|
|
Validator: &abci.ValidatorParams{
|
|
|
|
PubKeyTypes: []string{tmtypes.ABCIPubKeyTypeEd25519},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
)
|
|
|
|
cdc := makeTestCodec()
|
|
|
|
|
2019-07-31 08:39:02 -07:00
|
|
|
blacklistedAddrs := make(map[string]bool)
|
|
|
|
|
2019-06-28 13:11:27 -07:00
|
|
|
pk := params.NewKeeper(cdc, keyParams, tkeyParams, params.DefaultCodespace)
|
|
|
|
ak := auth.NewAccountKeeper(cdc, keyAcc, pk.Subspace(auth.DefaultParamspace), auth.ProtoBaseAccount)
|
2019-07-31 08:39:02 -07:00
|
|
|
bk := bank.NewBaseKeeper(ak, pk.Subspace(bank.DefaultParamspace), bank.DefaultCodespace, blacklistedAddrs)
|
2019-06-28 13:11:27 -07:00
|
|
|
|
|
|
|
valTokens := sdk.TokensFromConsensusPower(initPower)
|
|
|
|
|
|
|
|
initialCoins := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, valTokens))
|
|
|
|
createTestAccs(ctx, int(nAccs), initialCoins, &ak)
|
|
|
|
|
2019-07-06 12:42:06 -07:00
|
|
|
maccPerms := map[string][]string{
|
2019-07-16 07:02:36 -07:00
|
|
|
holder: nil,
|
2019-07-22 08:26:42 -07:00
|
|
|
types.Minter: {types.Minter},
|
|
|
|
types.Burner: {types.Burner},
|
|
|
|
multiPerm: {types.Minter, types.Burner, types.Staking},
|
|
|
|
randomPerm: {"random"},
|
2019-07-06 12:42:06 -07:00
|
|
|
}
|
|
|
|
keeper := NewKeeper(cdc, keySupply, ak, bk, DefaultCodespace, maccPerms)
|
2019-06-28 13:11:27 -07:00
|
|
|
totalSupply := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, valTokens.MulRaw(nAccs)))
|
|
|
|
keeper.SetSupply(ctx, types.NewSupply(totalSupply))
|
|
|
|
|
|
|
|
return ctx, ak, keeper
|
|
|
|
}
|
|
|
|
|
|
|
|
// nolint: unparam deadcode unused
|
2019-07-29 08:27:01 -07:00
|
|
|
func createTestAccs(ctx sdk.Context, numAccs int, initialCoins sdk.Coins, ak *auth.AccountKeeper) (accs []authexported.Account) {
|
2019-06-28 13:11:27 -07:00
|
|
|
for i := 0; i < numAccs; i++ {
|
|
|
|
privKey := secp256k1.GenPrivKey()
|
|
|
|
pubKey := privKey.PubKey()
|
|
|
|
addr := sdk.AccAddress(pubKey.Address())
|
|
|
|
acc := auth.NewBaseAccountWithAddress(addr)
|
|
|
|
acc.Coins = initialCoins
|
|
|
|
acc.PubKey = pubKey
|
|
|
|
acc.AccountNumber = uint64(i)
|
|
|
|
ak.SetAccount(ctx, &acc)
|
|
|
|
}
|
|
|
|
return
|
2019-07-06 12:42:06 -07:00
|
|
|
}
|