cosmos-sdk/x/stake/test_common.go

164 lines
5.1 KiB
Go
Raw Normal View History

2018-01-25 12:11:58 -08:00
package stake
import (
"encoding/hex"
"testing"
"github.com/stretchr/testify/require"
2018-01-25 12:11:58 -08:00
abci "github.com/tendermint/abci/types"
2018-01-25 12:11:58 -08:00
crypto "github.com/tendermint/go-crypto"
2018-03-17 11:18:04 -07:00
oldwire "github.com/tendermint/go-wire"
dbm "github.com/tendermint/tmlibs/db"
2018-01-25 12:11:58 -08:00
2018-03-17 11:18:04 -07:00
"github.com/cosmos/cosmos-sdk/examples/basecoin/types"
"github.com/cosmos/cosmos-sdk/store"
2018-01-25 12:11:58 -08:00
sdk "github.com/cosmos/cosmos-sdk/types"
2018-03-17 11:18:04 -07:00
"github.com/cosmos/cosmos-sdk/wire"
"github.com/cosmos/cosmos-sdk/x/auth"
"github.com/cosmos/cosmos-sdk/x/bank"
2018-01-25 12:11:58 -08:00
)
2018-01-25 13:11:40 -08:00
func subspace(prefix []byte) (start, end []byte) {
2018-02-02 08:51:08 -08:00
end = make([]byte, len(prefix))
copy(end, prefix)
2018-01-25 13:11:40 -08:00
end[len(end)-1]++
2018-02-02 08:51:08 -08:00
return prefix, end
2018-01-25 13:11:40 -08:00
}
2018-03-17 11:18:04 -07:00
// custom tx codec
// TODO: use new go-wire
func makeTestCodec() *wire.Codec {
const msgTypeSend = 0x1
const msgTypeIssue = 0x2
const msgTypeDeclareCandidacy = 0x3
const msgTypeEditCandidacy = 0x4
const msgTypeDelegate = 0x5
const msgTypeUnbond = 0x6
var _ = oldwire.RegisterInterface(
struct{ sdk.Msg }{},
oldwire.ConcreteType{bank.SendMsg{}, msgTypeSend},
oldwire.ConcreteType{bank.IssueMsg{}, msgTypeIssue},
oldwire.ConcreteType{MsgDeclareCandidacy{}, msgTypeDeclareCandidacy},
oldwire.ConcreteType{MsgEditCandidacy{}, msgTypeEditCandidacy},
oldwire.ConcreteType{MsgDelegate{}, msgTypeDelegate},
oldwire.ConcreteType{MsgUnbond{}, msgTypeUnbond},
)
const accTypeApp = 0x1
var _ = oldwire.RegisterInterface(
struct{ sdk.Account }{},
oldwire.ConcreteType{&types.AppAccount{}, accTypeApp},
)
cdc := wire.NewCodec()
// cdc.RegisterInterface((*sdk.Msg)(nil), nil)
// bank.RegisterWire(cdc) // Register bank.[SendMsg,IssueMsg] types.
// crypto.RegisterWire(cdc) // Register crypto.[PubKey,PrivKey,Signature] types.
return cdc
}
func paramsNoInflation() Params {
return Params{
InflationRateChange: sdk.ZeroRat,
InflationMax: sdk.ZeroRat,
InflationMin: sdk.ZeroRat,
GoalBonded: sdk.NewRat(67, 100),
2018-03-20 14:21:18 -07:00
MaxValidators: 100,
2018-03-17 11:18:04 -07:00
BondDenom: "fermion",
}
}
// hogpodge of all sorts of input required for testing
2018-03-20 14:21:18 -07:00
func createTestInput(t *testing.T, sender sdk.Address, isCheckTx bool, initCoins int64) (sdk.Context, sdk.AccountMapper, Keeper) {
2018-02-02 08:38:40 -08:00
db := dbm.NewMemDB()
2018-03-17 11:18:04 -07:00
keyStake := sdk.NewKVStoreKey("stake")
2018-03-20 14:21:18 -07:00
keyMain := keyStake //sdk.NewKVStoreKey("main") //TODO fix multistore
ms := store.NewCommitMultiStore(db)
2018-03-17 11:18:04 -07:00
ms.MountStoreWithDB(keyStake, sdk.StoreTypeIAVL, db)
2018-02-02 08:38:40 -08:00
err := ms.LoadLatestVersion()
require.Nil(t, err)
ctx := sdk.NewContext(ms, abci.Header{ChainID: "foochainid"}, isCheckTx, nil)
2018-03-17 11:18:04 -07:00
cdc := makeTestCodec()
accountMapper := auth.NewAccountMapperSealed(
keyMain, // target store
&auth.BaseAccount{}, // prototype
)
ck := bank.NewCoinKeeper(accountMapper)
2018-03-20 14:21:18 -07:00
keeper := NewKeeper(ctx, cdc, keyStake, ck)
2018-03-22 09:00:45 -07:00
//params := paramsNoInflation()
params := keeper.GetParams(ctx)
2018-03-19 08:53:20 -07:00
// fill all the addresses with some coins
for _, addr := range addrs {
ck.AddCoins(ctx, addr, sdk.Coins{{params.BondDenom, initCoins}})
}
2018-03-20 14:21:18 -07:00
return ctx, accountMapper, keeper
2018-01-25 12:11:58 -08:00
}
func newPubKey(pk string) (res crypto.PubKey) {
pkBytes, err := hex.DecodeString(pk)
if err != nil {
panic(err)
}
//res, err = crypto.PubKeyFromBytes(pkBytes)
var pkEd crypto.PubKeyEd25519
copy(pkEd[:], pkBytes[:])
return pkEd.Wrap()
2018-01-25 12:11:58 -08:00
}
var pks = []crypto.PubKey{
2018-03-17 11:18:04 -07:00
newPubKey("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AFB50"),
2018-01-25 12:11:58 -08:00
newPubKey("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AFB51"),
newPubKey("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AFB52"),
newPubKey("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AFB53"),
newPubKey("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AFB54"),
newPubKey("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AFB55"),
newPubKey("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AFB56"),
newPubKey("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AFB57"),
newPubKey("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AFB58"),
newPubKey("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AFB59"),
2018-03-17 11:18:04 -07:00
}
// for incode address generation
func testAddr(addr string) sdk.Address {
2018-03-19 08:53:20 -07:00
res, err := sdk.GetAddress(addr)
2018-03-17 11:18:04 -07:00
if err != nil {
panic(err)
}
return res
}
// dummy addresses used for testing
var addrs = []sdk.Address{
2018-03-19 08:53:20 -07:00
testAddr("A58856F0FD53BF058B4909A21AEC019107BA6160"),
testAddr("A58856F0FD53BF058B4909A21AEC019107BA6161"),
testAddr("A58856F0FD53BF058B4909A21AEC019107BA6162"),
testAddr("A58856F0FD53BF058B4909A21AEC019107BA6163"),
testAddr("A58856F0FD53BF058B4909A21AEC019107BA6164"),
testAddr("A58856F0FD53BF058B4909A21AEC019107BA6165"),
testAddr("A58856F0FD53BF058B4909A21AEC019107BA6166"),
testAddr("A58856F0FD53BF058B4909A21AEC019107BA6167"),
testAddr("A58856F0FD53BF058B4909A21AEC019107BA6168"),
testAddr("A58856F0FD53BF058B4909A21AEC019107BA6169"),
2018-01-25 12:11:58 -08:00
}
// XXX TODO remove this dep
2018-03-20 14:21:18 -07:00
func candidatesFromAddrs(ctx sdk.Context, keeper Keeper, addrs []crypto.Address, amts []int64) {
2018-03-17 15:13:42 -07:00
for i := 0; i < len(amts); i++ {
2018-03-20 14:21:18 -07:00
c := Candidate{
2018-01-25 12:11:58 -08:00
Status: Unbonded,
PubKey: pks[i],
Address: addrs[i],
2018-02-23 05:13:55 -08:00
Assets: sdk.NewRat(amts[i]),
Liabilities: sdk.NewRat(amts[i]),
2018-01-25 12:11:58 -08:00
}
2018-03-20 14:21:18 -07:00
keeper.setCandidate(ctx, c)
2018-01-25 12:11:58 -08:00
}
}