From 884b82773008014d1bd95e1350abf21764e4d185 Mon Sep 17 00:00:00 2001 From: Sunny Aggarwal Date: Sun, 25 Mar 2018 00:27:23 +0100 Subject: [PATCH] everything but IBC --- x/bank/keeper.go | 16 ++++++++-------- x/staking/handler.go | 13 ++----------- x/staking/keeper.go | 8 ++++++++ x/staking/keeper_test.go | 20 +++++++++++++------- 4 files changed, 31 insertions(+), 26 deletions(-) diff --git a/x/bank/keeper.go b/x/bank/keeper.go index 919867c65d..c32d6a1a45 100644 --- a/x/bank/keeper.go +++ b/x/bank/keeper.go @@ -1,8 +1,6 @@ package bank import ( - "fmt" - sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -25,13 +23,15 @@ func (ck CoinKeeper) SubtractCoins(ctx sdk.Context, addr sdk.Address, amt sdk.Co return amt, sdk.ErrUnknownAddress(addr.String()) } - coins := acc.GetCoins() - newCoins := coins.Minus(amt) - if !newCoins.IsNotNegative() { - return amt, sdk.ErrInsufficientCoins(fmt.Sprintf("%s < %s", coins, amt)) - } + // coins := acc.GetCoins() + // newCoins := coins.Minus(amt) + // if !newCoins.IsNotNegative() { + // return amt, sdk.ErrInsufficientCoins(fmt.Sprintf("%s < %s", coins, amt)) + // } - acc.SetCoins(newCoins) + newCoins := sdk.Coins{} + + // acc.SetCoins(newCoins) ck.am.SetAccount(ctx, acc) return newCoins, nil } diff --git a/x/staking/handler.go b/x/staking/handler.go index 7efc074650..40463cf033 100644 --- a/x/staking/handler.go +++ b/x/staking/handler.go @@ -18,7 +18,7 @@ func (k Keeper) Handler(ctx sdk.Context, msg sdk.Msg) sdk.Result { } func handleBondMsg(ctx sdk.Context, k Keeper, msg BondMsg) sdk.Result { - _, err := k.Bond(ctx, msg.Address, msg.Stake) + power, err := k.Bond(ctx, msg.Address, msg.PubKey, msg.Stake) if err != nil { return err.Result() } @@ -35,16 +35,7 @@ func handleBondMsg(ctx sdk.Context, k Keeper, msg BondMsg) sdk.Result { } func handleUnbondMsg(ctx sdk.Context, k Keeper, msg UnbondMsg) sdk.Result { - pubKey, power, err := k.Unbond(ctx, msg.Address) - if err != nil { - return err.Result() - } - - stake := sdk.Coin{ - Denom: "mycoin", - Amount: power, - } - _, err = k.ck.AddCoins(ctx, msg.Address, sdk.Coins{stake}) + pubKey, _, err := k.Unbond(ctx, msg.Address) if err != nil { return err.Result() } diff --git a/x/staking/keeper.go b/x/staking/keeper.go index b74eebdd23..20be44fbdb 100644 --- a/x/staking/keeper.go +++ b/x/staking/keeper.go @@ -84,5 +84,13 @@ func (k Keeper) Unbond(ctx sdk.Context, addr sdk.Address) (crypto.PubKey, int64, return crypto.PubKey{}, 0, ErrInvalidUnbond() } k.deleteBondInfo(ctx, addr) + + returnedBond := sdk.Coin{stakingToken, bi.Power} + + _, err := k.ck.AddCoins(ctx, addr, []sdk.Coin{returnedBond}) + if err != nil { + return bi.PubKey, bi.Power, err + } + return bi.PubKey, bi.Power, nil } diff --git a/x/staking/keeper_test.go b/x/staking/keeper_test.go index d799638d70..68af68e235 100644 --- a/x/staking/keeper_test.go +++ b/x/staking/keeper_test.go @@ -13,20 +13,23 @@ import ( "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/bank" ) -func setupMultiStore() (sdk.MultiStore, *sdk.KVStoreKey) { +func setupMultiStore() (sdk.MultiStore, *sdk.KVStoreKey, *sdk.KVStoreKey) { db := dbm.NewMemDB() + authKey := sdk.NewKVStoreKey("authkey") capKey := sdk.NewKVStoreKey("capkey") ms := store.NewCommitMultiStore(db) ms.MountStoreWithDB(capKey, sdk.StoreTypeIAVL, db) + ms.MountStoreWithDB(authKey, sdk.StoreTypeIAVL, db) ms.LoadLatestVersion() - return ms, capKey + return ms, authKey, capKey } func TestKeeperGetSet(t *testing.T) { - ms, capKey := setupMultiStore() + ms, _, capKey := setupMultiStore() ctx := sdk.NewContext(ms, abci.Header{}, false, nil) stakeKeeper := NewKeeper(capKey, bank.NewCoinKeeper(nil)) @@ -51,10 +54,13 @@ func TestKeeperGetSet(t *testing.T) { } func TestBonding(t *testing.T) { - ms, capKey := setupMultiStore() + ms, authKey, capKey := setupMultiStore() ctx := sdk.NewContext(ms, abci.Header{}, false, nil) - stakeKeeper := NewKeeper(capKey, bank.NewCoinKeeper(nil)) + + accountMapper := auth.NewAccountMapper(authKey, &auth.BaseAccount{}) + coinKeeper := bank.NewCoinKeeper(accountMapper) + stakeKeeper := NewKeeper(capKey, coinKeeper) addr := sdk.Address([]byte("some-address")) privKey := crypto.GenPrivKeyEd25519() pubKey := privKey.PubKey() @@ -62,10 +68,10 @@ func TestBonding(t *testing.T) { _, _, err := stakeKeeper.Unbond(ctx, addr) assert.Equal(t, err, ErrInvalidUnbond()) - _, err = stakeKeeper.Bond(ctx, addr, pubKey, 10) + _, err = stakeKeeper.Bond(ctx, addr, pubKey, sdk.Coin{"steak", 10}) assert.Nil(t, err) - power, err := stakeKeeper.Bond(ctx, addr, pubKey, 10) + power, err := stakeKeeper.Bond(ctx, addr, pubKey, sdk.Coin{"steak", 10}) assert.Equal(t, int64(20), power) pk, _, err := stakeKeeper.Unbond(ctx, addr)