[Bank] Remove the unsafe balance changing API (#8473)
* temp commit * setbalance now is internal * remove set balances in genesis * feedback test commit * update tests * fix: genesis panic message * fix not bonded pool * fix(staking): genesis test * fix(simapp): rollback state fix change * fix(staking): genesis large val set test * [Bank Refactor] Frojdi jonathan/remove setsupply (#8491) * init supply in a different way * remove external usage of set supply * change(staking): replace SetSupply with MintCoins in tests * change(evidence): replace SetSupply with MintCoins in tests * change(crisis): remove SetSupply in tests * change(bank): remove set supply from genesis tests * change(bank): remove set supply from keeper tests * change(bank): remove remaining set supply usage from keeper tests * change(bank): remove set supply usage from grpc query and querier tests * change(bank): remove SetSupply from keeper interface Co-authored-by: Frojdi Dymylja <frojdi.dymylja@gmail.com> * remove setbalances from genesis in gov * remove keyring * add init genesis state * change(staking): make genesis checks coherent and add tests * remove setbalances on distribution * fix(staking): genesis tests * [Bank Refactor]: Remove SetBalances usage from the code and tests (#8509) * change(distribution): remove SetBalances usage from keeper tests * add(simapp): FundAccount utility function * chore(staking): use FundAccount in keeper tests * change(staking): remove usage of SetBalance in allocation tests * change(staking): remove usage of SetBalance in delegation tests * change(staking): remove usage of SetBalance in proposal handler tests * change(staking): remove usage of SetBalances in grpc query tests * change(staking): remove usage of SetBalances in operations tests * change(distribution): remove usage of SetBalances in genesis * change(authz): remove usage of SetBalances keeper and operations test * fix(authz): TestKeeperFees failing test * change(slashing): remove SetBalances from expected BankKeeper * change(slashing): remove usage of SetBalances in tests * change(distribution): remove SetBalances from expected BankKeeper * change(genutil): remove usage of SetBalances from tests * change(gov): remove SetBalances from expected BankKeeper * change(gov): remove usage of SetBalances from tests * change(staking): remove usage of SetBalances from slash tests * change(staking): remove SetBalances from expected BankKeeper * change(staking): remove usage of SetBalances from delegation tests * change(staking): remove usage of SetBalances from operations tests * change(staking): remove usage of SetBalances from validator tests * change(bank): remove usage of SetBalances from app tests * change(bank): remove usage of SetBalances from bench tests * change(bank): remove usage of SetBalances from querier tests * change(bank): remove usage of SetBalances from grpc query tests * change(bank): remove usage of SetBalances from operations tests * change(bank): partially remove usage of SetBalances from keeper tests * change(bank): finalize removal of usage of SetBalances from keeper tests * change(auth): remove usage of SetBalances from verify tests * change(auth): partially remove usage of SetBalances from tests * [Bank refactor]: finalize removal of setbalances from auth (#8527) * add tests with is check tx * temp commit * fix test * fix other test and remove setbalances * change(auth): remove usage of SetBalances is vesting tests Co-authored-by: Jonathan Gimeno <jgimeno@gmail.com> * change(types): remove usage of SetBalances in queries * fix(types): pagination tests * [Bank refactor] fix pagination tests (#8550) * fix tests * lint * change(bank): remove SetBalances from keeper public API Co-authored-by: Jonathan Gimeno <jgimeno@gmail.com> Co-authored-by: SaReN <sahithnarahari@gmail.com> * change(bank): remove SubtractCoins from keeper public API * change(ibc/transfer): remove AddCoins from relay tests * change(bank): remove AddCoins from public keeper API * fix imports * remove set balances * fix fee test * remove set balances * fix(staking): remove dependency on minter authorization for staking pools * chore: update CHANGELOG.md * update: x/distribution/keeper/keeper_test.go Co-authored-by: Robert Zaremba <robert@zaremba.ch> * Update simapp/test_helpers.go Co-authored-by: Robert Zaremba <robert@zaremba.ch> * Update x/staking/genesis_test.go Co-authored-by: Robert Zaremba <robert@zaremba.ch> * fix(simapp): FundAccount amount variable name * fix some PR issues Co-authored-by: Frojdi Dymylja <frojdi.dymylja@gmail.com> Co-authored-by: Frojdi Dymylja <33157909+fdymylja@users.noreply.github.com> Co-authored-by: SaReN <sahithnarahari@gmail.com> Co-authored-by: Alessio Treglia <alessio@tendermint.com> Co-authored-by: Robert Zaremba <robert@zaremba.ch>
This commit is contained in:
parent
0bcc402790
commit
abb3dfefa0
@ -42,6 +42,10 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||
|
||||
### API Breaking Changes
|
||||
|
||||
* (x/bank) [\#8473](https://github.com/cosmos/cosmos-sdk/pull/8473) Bank keeper does not expose unsafe balance changing methods such as `SetBalance`, `SetSupply` etc.
|
||||
* (x/staking) [\#8473](https://github.com/cosmos/cosmos-sdk/pull/8473) On genesis init, if non bonded pool and bonded pool balance, coming from the bank module, does not match what is saved in the staking state, the initialization will panic.
|
||||
* (x/gov) [\#8473](https://github.com/cosmos/cosmos-sdk/pull/8473) On genesis init, if the gov module account balance, coming from bank module state, does not match the one in gov module state, the initialization will panic.
|
||||
* (x/distribution) [\#8473](https://github.com/cosmos/cosmos-sdk/pull/8473) On genesis init, if the distribution module account balance, coming from bank module state, does not match the one in distribution module state, the initialization will panic.
|
||||
* (client/keys) [\#8500](https://github.com/cosmos/cosmos-sdk/pull/8500) `InfoImporter` interface is removed from legacy keybase.
|
||||
|
||||
### State Machine Breaking
|
||||
@ -54,7 +58,6 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||
|
||||
### Improvements
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* (x/evidence) [#8461](https://github.com/cosmos/cosmos-sdk/pull/8461) Fix bech32 prefix in evidence validator address conversion
|
||||
|
||||
@ -14,9 +14,12 @@ import (
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
simappparams "github.com/cosmos/cosmos-sdk/simapp/params"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/module"
|
||||
simtypes "github.com/cosmos/cosmos-sdk/types/simulation"
|
||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||
)
|
||||
|
||||
// AppStateFn returns the initial application state using a genesis or the simulation parameters.
|
||||
@ -68,6 +71,57 @@ func AppStateFn(cdc codec.JSONMarshaler, simManager *module.SimulationManager) s
|
||||
appState, simAccs = AppStateRandomizedFn(simManager, r, cdc, accs, genesisTimestamp, appParams)
|
||||
}
|
||||
|
||||
rawState := make(map[string]json.RawMessage)
|
||||
err := json.Unmarshal(appState, &rawState)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
stakingStateBz, ok := rawState[stakingtypes.ModuleName]
|
||||
if !ok {
|
||||
panic("staking genesis state is missing")
|
||||
}
|
||||
|
||||
stakingState := new(stakingtypes.GenesisState)
|
||||
err = cdc.UnmarshalJSON(stakingStateBz, stakingState)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
// compute not bonded balance
|
||||
notBondedTokens := sdk.ZeroInt()
|
||||
for _, val := range stakingState.Validators {
|
||||
if val.Status != stakingtypes.Unbonded {
|
||||
continue
|
||||
}
|
||||
notBondedTokens = notBondedTokens.Add(val.GetTokens())
|
||||
}
|
||||
notBondedCoins := sdk.NewCoin(stakingState.Params.BondDenom, notBondedTokens)
|
||||
// edit bank state to make it have the not bonded pool tokens
|
||||
bankStateBz, ok := rawState[banktypes.ModuleName]
|
||||
// TODO(fdymylja/jonathan): should we panic in this case
|
||||
if !ok {
|
||||
panic("bank genesis state is missing")
|
||||
}
|
||||
bankState := new(banktypes.GenesisState)
|
||||
err = cdc.UnmarshalJSON(bankStateBz, bankState)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
bankState.Balances = append(bankState.Balances, banktypes.Balance{
|
||||
Address: authtypes.NewModuleAddress(stakingtypes.NotBondedPoolName).String(),
|
||||
Coins: sdk.NewCoins(notBondedCoins),
|
||||
})
|
||||
|
||||
// change appState back
|
||||
rawState[stakingtypes.ModuleName] = cdc.MustMarshalJSON(stakingState)
|
||||
rawState[banktypes.ModuleName] = cdc.MustMarshalJSON(bankState)
|
||||
|
||||
// replace appstate
|
||||
appState, err = json.Marshal(rawState)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return appState, simAccs, chainID, genesisTimestamp
|
||||
}
|
||||
}
|
||||
|
||||
@ -27,6 +27,7 @@ import (
|
||||
"github.com/cosmos/cosmos-sdk/types/errors"
|
||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
||||
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||
)
|
||||
|
||||
@ -119,7 +120,6 @@ func SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs
|
||||
delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress(), val.Address.Bytes(), sdk.OneDec()))
|
||||
|
||||
}
|
||||
|
||||
// set validators and delegations
|
||||
stakingGenesis := stakingtypes.NewGenesisState(stakingtypes.DefaultParams(), validators, delegations)
|
||||
genesisState[stakingtypes.ModuleName] = app.AppCodec().MustMarshalJSON(stakingGenesis)
|
||||
@ -130,6 +130,12 @@ func SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs
|
||||
totalSupply = totalSupply.Add(b.Coins.Add(sdk.NewCoin(sdk.DefaultBondDenom, bondAmt))...)
|
||||
}
|
||||
|
||||
// add bonded amount to bonded pool module account
|
||||
balances = append(balances, banktypes.Balance{
|
||||
Address: authtypes.NewModuleAddress(stakingtypes.BondedPoolName).String(),
|
||||
Coins: sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, bondAmt)},
|
||||
})
|
||||
|
||||
// update total supply
|
||||
bankGenesis := banktypes.NewGenesisState(banktypes.DefaultGenesisState().Params, balances, totalSupply, []banktypes.Metadata{})
|
||||
genesisState[banktypes.ModuleName] = app.AppCodec().MustMarshalJSON(bankGenesis)
|
||||
@ -231,21 +237,11 @@ func createIncrementalAccounts(accNum int) []sdk.AccAddress {
|
||||
func AddTestAddrsFromPubKeys(app *SimApp, ctx sdk.Context, pubKeys []cryptotypes.PubKey, accAmt sdk.Int) {
|
||||
initCoins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), accAmt))
|
||||
|
||||
setTotalSupply(app, ctx, accAmt, len(pubKeys))
|
||||
|
||||
// fill all the addresses with some coins, set the loose pool tokens simultaneously
|
||||
for _, pubKey := range pubKeys {
|
||||
saveAccount(app, ctx, sdk.AccAddress(pubKey.Address()), initCoins)
|
||||
for _, pk := range pubKeys {
|
||||
initAccountWithCoins(app, ctx, sdk.AccAddress(pk.Address()), initCoins)
|
||||
}
|
||||
}
|
||||
|
||||
// setTotalSupply provides the total supply based on accAmt * totalAccounts.
|
||||
func setTotalSupply(app *SimApp, ctx sdk.Context, accAmt sdk.Int, totalAccounts int) {
|
||||
totalSupply := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), accAmt.MulRaw(int64(totalAccounts))))
|
||||
prevSupply := app.BankKeeper.GetSupply(ctx)
|
||||
app.BankKeeper.SetSupply(ctx, banktypes.NewSupply(prevSupply.GetTotal().Add(totalSupply...)))
|
||||
}
|
||||
|
||||
// AddTestAddrs constructs and returns accNum amount of accounts with an
|
||||
// initial balance of accAmt in random order
|
||||
func AddTestAddrs(app *SimApp, ctx sdk.Context, accNum int, accAmt sdk.Int) []sdk.AccAddress {
|
||||
@ -262,21 +258,21 @@ func addTestAddrs(app *SimApp, ctx sdk.Context, accNum int, accAmt sdk.Int, stra
|
||||
testAddrs := strategy(accNum)
|
||||
|
||||
initCoins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), accAmt))
|
||||
setTotalSupply(app, ctx, accAmt, accNum)
|
||||
|
||||
// fill all the addresses with some coins, set the loose pool tokens simultaneously
|
||||
for _, addr := range testAddrs {
|
||||
saveAccount(app, ctx, addr, initCoins)
|
||||
initAccountWithCoins(app, ctx, addr, initCoins)
|
||||
}
|
||||
|
||||
return testAddrs
|
||||
}
|
||||
|
||||
// saveAccount saves the provided account into the simapp with balance based on initCoins.
|
||||
func saveAccount(app *SimApp, ctx sdk.Context, addr sdk.AccAddress, initCoins sdk.Coins) {
|
||||
acc := app.AccountKeeper.NewAccountWithAddress(ctx, addr)
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
err := app.BankKeeper.AddCoins(ctx, addr, initCoins)
|
||||
func initAccountWithCoins(app *SimApp, ctx sdk.Context, addr sdk.AccAddress, coins sdk.Coins) {
|
||||
err := app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, coins)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, addr, coins)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -440,3 +436,13 @@ type EmptyAppOptions struct{}
|
||||
func (ao EmptyAppOptions) Get(o string) interface{} {
|
||||
return nil
|
||||
}
|
||||
|
||||
// FundAccount is a utility function that funds an account by minting and sending the coins to the address
|
||||
// TODO(fdymylja): instead of using the mint module account, which has the permission of minting, create a "faucet" account
|
||||
func FundAccount(app *SimApp, ctx sdk.Context, addr sdk.AccAddress, amounts sdk.Coins) error {
|
||||
err := app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, amounts)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return app.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, addr, amounts)
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
"github.com/cosmos/cosmos-sdk/store/prefix"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/address"
|
||||
@ -27,10 +28,11 @@ func (s *paginationTestSuite) TestFilteredPaginations() {
|
||||
balances = append(balances, sdk.NewInt64Coin(denom, 250))
|
||||
}
|
||||
|
||||
balances = balances.Sort()
|
||||
addr1 := sdk.AccAddress([]byte("addr1"))
|
||||
acc1 := app.AccountKeeper.NewAccountWithAddress(ctx, addr1)
|
||||
app.AccountKeeper.SetAccount(ctx, acc1)
|
||||
s.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, balances))
|
||||
s.Require().NoError(simapp.FundAccount(app, ctx, addr1, balances))
|
||||
store := ctx.KVStore(app.GetKey(types.StoreKey))
|
||||
|
||||
// verify pagination with limit > total values
|
||||
@ -100,10 +102,12 @@ func ExampleFilteredPaginate() {
|
||||
denom := fmt.Sprintf("test%ddenom", i)
|
||||
balances = append(balances, sdk.NewInt64Coin(denom, 250))
|
||||
}
|
||||
|
||||
balances = balances.Sort()
|
||||
addr1 := sdk.AccAddress([]byte("addr1"))
|
||||
acc1 := app.AccountKeeper.NewAccountWithAddress(ctx, addr1)
|
||||
app.AccountKeeper.SetAccount(ctx, acc1)
|
||||
err := app.BankKeeper.SetBalances(ctx, addr1, balances)
|
||||
err := simapp.FundAccount(app, ctx, addr1, balances)
|
||||
if err != nil { // should return no error
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
@ -73,10 +73,11 @@ func (s *paginationTestSuite) TestPagination() {
|
||||
balances = append(balances, sdk.NewInt64Coin(denom, 100))
|
||||
}
|
||||
|
||||
balances = balances.Sort()
|
||||
addr1 := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address())
|
||||
acc1 := app.AccountKeeper.NewAccountWithAddress(ctx, addr1)
|
||||
app.AccountKeeper.SetAccount(ctx, acc1)
|
||||
s.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, balances))
|
||||
s.Require().NoError(simapp.FundAccount(app, ctx, addr1, balances))
|
||||
|
||||
s.T().Log("verify empty page request results a max of defaultLimit records and counts total records")
|
||||
pageReq := &query.PageRequest{}
|
||||
@ -178,11 +179,12 @@ func ExamplePaginate() {
|
||||
balances = append(balances, sdk.NewInt64Coin(denom, 100))
|
||||
}
|
||||
|
||||
balances = balances.Sort()
|
||||
addr1 := sdk.AccAddress([]byte("addr1"))
|
||||
acc1 := app.AccountKeeper.NewAccountWithAddress(ctx, addr1)
|
||||
app.AccountKeeper.SetAccount(ctx, acc1)
|
||||
err := app.BankKeeper.SetBalances(ctx, addr1, balances)
|
||||
if err != nil {
|
||||
err := simapp.FundAccount(app, ctx, addr1, balances)
|
||||
if err != nil { // should return no error
|
||||
fmt.Println(err)
|
||||
}
|
||||
// Paginate example
|
||||
|
||||
@ -7,6 +7,10 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
|
||||
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
@ -23,7 +27,7 @@ import (
|
||||
|
||||
// Test that simulate transaction accurately estimates gas cost
|
||||
func (suite *AnteTestSuite) TestSimulateGasCost() {
|
||||
suite.SetupTest(true) // reset
|
||||
suite.SetupTest(false) // reset
|
||||
|
||||
// Same data for every test cases
|
||||
accounts := suite.CreateTestAccounts(3)
|
||||
@ -76,7 +80,7 @@ func (suite *AnteTestSuite) TestSimulateGasCost() {
|
||||
|
||||
// Test various error cases in the AnteHandler control flow.
|
||||
func (suite *AnteTestSuite) TestAnteHandlerSigErrors() {
|
||||
suite.SetupTest(true) // reset
|
||||
suite.SetupTest(false) // reset
|
||||
|
||||
// Same data for every test cases
|
||||
priv0, _, addr0 := testdata.KeyTestPubAddr()
|
||||
@ -137,7 +141,9 @@ func (suite *AnteTestSuite) TestAnteHandlerSigErrors() {
|
||||
func() {
|
||||
acc1 := suite.app.AccountKeeper.NewAccountWithAddress(suite.ctx, addr0)
|
||||
suite.app.AccountKeeper.SetAccount(suite.ctx, acc1)
|
||||
err := suite.app.BankKeeper.SetBalances(suite.ctx, addr0, feeAmount)
|
||||
err := suite.app.BankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, feeAmount)
|
||||
suite.Require().NoError(err)
|
||||
err = suite.app.BankKeeper.SendCoinsFromModuleToAccount(suite.ctx, minttypes.ModuleName, addr0, feeAmount)
|
||||
suite.Require().NoError(err)
|
||||
},
|
||||
false,
|
||||
@ -435,7 +441,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSequences() {
|
||||
|
||||
// Test logic around fee deduction.
|
||||
func (suite *AnteTestSuite) TestAnteHandlerFees() {
|
||||
suite.SetupTest(true) // setup
|
||||
suite.SetupTest(false) // setup
|
||||
|
||||
// Same data for every test cases
|
||||
priv0, _, addr0 := testdata.KeyTestPubAddr()
|
||||
@ -466,7 +472,8 @@ func (suite *AnteTestSuite) TestAnteHandlerFees() {
|
||||
{
|
||||
"signer does not have enough funds to pay the fee",
|
||||
func() {
|
||||
suite.app.BankKeeper.SetBalances(suite.ctx, addr0, sdk.NewCoins(sdk.NewInt64Coin("atom", 149)))
|
||||
err := simapp.FundAccount(suite.app, suite.ctx, addr0, sdk.NewCoins(sdk.NewInt64Coin("atom", 149)))
|
||||
suite.Require().NoError(err)
|
||||
},
|
||||
false,
|
||||
false,
|
||||
@ -475,12 +482,14 @@ func (suite *AnteTestSuite) TestAnteHandlerFees() {
|
||||
{
|
||||
"signer as enough funds, should pass",
|
||||
func() {
|
||||
accNums = []uint64{7}
|
||||
modAcc := suite.app.AccountKeeper.GetModuleAccount(suite.ctx, types.FeeCollectorName)
|
||||
|
||||
suite.Require().True(suite.app.BankKeeper.GetAllBalances(suite.ctx, modAcc.GetAddress()).Empty())
|
||||
require.True(sdk.IntEq(suite.T(), suite.app.BankKeeper.GetAllBalances(suite.ctx, addr0).AmountOf("atom"), sdk.NewInt(149)))
|
||||
|
||||
suite.app.BankKeeper.SetBalances(suite.ctx, addr0, sdk.NewCoins(sdk.NewInt64Coin("atom", 150)))
|
||||
err := simapp.FundAccount(suite.app, suite.ctx, addr0, sdk.NewCoins(sdk.NewInt64Coin("atom", 1)))
|
||||
suite.Require().NoError(err)
|
||||
},
|
||||
false,
|
||||
true,
|
||||
@ -960,7 +969,7 @@ func TestCountSubkeys(t *testing.T) {
|
||||
}
|
||||
|
||||
func (suite *AnteTestSuite) TestAnteHandlerSigLimitExceeded() {
|
||||
suite.SetupTest(true) // setup
|
||||
suite.SetupTest(false) // setup
|
||||
|
||||
// Same data for every test cases
|
||||
accounts := suite.CreateTestAccounts(8)
|
||||
@ -997,7 +1006,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSigLimitExceeded() {
|
||||
|
||||
// Test custom SignatureVerificationGasConsumer
|
||||
func (suite *AnteTestSuite) TestCustomSignatureVerificationGasConsumer() {
|
||||
suite.SetupTest(true) // setup
|
||||
suite.SetupTest(false) // setup
|
||||
|
||||
// setup an ante handler that only accepts PubKeyEd25519
|
||||
suite.anteHandler = ante.NewAnteHandler(suite.app.AccountKeeper, suite.app.BankKeeper, func(meter sdk.GasMeter, sig signing.SignatureV2, params types.Params) error {
|
||||
@ -1047,7 +1056,7 @@ func (suite *AnteTestSuite) TestCustomSignatureVerificationGasConsumer() {
|
||||
}
|
||||
|
||||
func (suite *AnteTestSuite) TestAnteHandlerReCheck() {
|
||||
suite.SetupTest(true) // setup
|
||||
suite.SetupTest(false) // setup
|
||||
// Set recheck=true
|
||||
suite.ctx = suite.ctx.WithIsReCheckTx(true)
|
||||
suite.txBuilder = suite.clientCtx.TxConfig.NewTxBuilder()
|
||||
@ -1120,7 +1129,9 @@ func (suite *AnteTestSuite) TestAnteHandlerReCheck() {
|
||||
|
||||
// remove funds for account so antehandler fails on recheck
|
||||
suite.app.AccountKeeper.SetAccount(suite.ctx, accounts[0].acc)
|
||||
suite.app.BankKeeper.SetBalances(suite.ctx, accounts[0].acc.GetAddress(), sdk.NewCoins())
|
||||
balances := suite.app.BankKeeper.GetAllBalances(suite.ctx, accounts[0].acc.GetAddress())
|
||||
err = suite.app.BankKeeper.SendCoinsFromAccountToModule(suite.ctx, accounts[0].acc.GetAddress(), minttypes.ModuleName, balances)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
_, err = suite.anteHandler(suite.ctx, tx, false)
|
||||
suite.Require().NotNil(err, "antehandler on recheck did not fail once feePayer no longer has sufficient funds")
|
||||
|
||||
@ -2,8 +2,8 @@ package ante_test
|
||||
|
||||
import (
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/ante"
|
||||
)
|
||||
@ -61,7 +61,7 @@ func (suite *AnteTestSuite) TestEnsureMempoolFees() {
|
||||
}
|
||||
|
||||
func (suite *AnteTestSuite) TestDeductFees() {
|
||||
suite.SetupTest(true) // setup
|
||||
suite.SetupTest(false) // setup
|
||||
suite.txBuilder = suite.clientCtx.TxConfig.NewTxBuilder()
|
||||
|
||||
// keys and addresses
|
||||
@ -82,7 +82,9 @@ func (suite *AnteTestSuite) TestDeductFees() {
|
||||
// Set account with insufficient funds
|
||||
acc := suite.app.AccountKeeper.NewAccountWithAddress(suite.ctx, addr1)
|
||||
suite.app.AccountKeeper.SetAccount(suite.ctx, acc)
|
||||
suite.app.BankKeeper.SetBalances(suite.ctx, addr1, sdk.NewCoins(sdk.NewCoin("atom", sdk.NewInt(10))))
|
||||
coins := sdk.NewCoins(sdk.NewCoin("atom", sdk.NewInt(10)))
|
||||
err = simapp.FundAccount(suite.app, suite.ctx, addr1, coins)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
dfd := ante.NewDeductFeeDecorator(suite.app.AccountKeeper, suite.app.BankKeeper)
|
||||
antehandler := sdk.ChainAnteDecorators(dfd)
|
||||
@ -93,7 +95,8 @@ func (suite *AnteTestSuite) TestDeductFees() {
|
||||
|
||||
// Set account with sufficient funds
|
||||
suite.app.AccountKeeper.SetAccount(suite.ctx, acc)
|
||||
suite.app.BankKeeper.SetBalances(suite.ctx, addr1, sdk.NewCoins(sdk.NewCoin("atom", sdk.NewInt(200))))
|
||||
err = simapp.FundAccount(suite.app, suite.ctx, addr1, sdk.NewCoins(sdk.NewCoin("atom", sdk.NewInt(200))))
|
||||
suite.Require().NoError(err)
|
||||
|
||||
_, err = antehandler(suite.ctx, tx, false)
|
||||
|
||||
|
||||
@ -5,6 +5,8 @@ import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
||||
|
||||
"github.com/stretchr/testify/suite"
|
||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
||||
|
||||
@ -75,9 +77,14 @@ func (suite *AnteTestSuite) CreateTestAccounts(numAccs int) []TestAccount {
|
||||
err := acc.SetAccountNumber(uint64(i))
|
||||
suite.Require().NoError(err)
|
||||
suite.app.AccountKeeper.SetAccount(suite.ctx, acc)
|
||||
suite.app.BankKeeper.SetBalances(suite.ctx, addr, sdk.Coins{
|
||||
someCoins := sdk.Coins{
|
||||
sdk.NewInt64Coin("atom", 10000000),
|
||||
})
|
||||
}
|
||||
err = suite.app.BankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, someCoins)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
err = suite.app.BankKeeper.SendCoinsFromModuleToAccount(suite.ctx, minttypes.ModuleName, addr, someCoins)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
accounts = append(accounts, TestAccount{acc, priv})
|
||||
}
|
||||
|
||||
@ -40,9 +40,9 @@ func TestVerifySignature(t *testing.T) {
|
||||
_ = app.AccountKeeper.NewAccountWithAddress(ctx, addr1)
|
||||
app.AccountKeeper.SetAccount(ctx, acc1)
|
||||
balances := sdk.NewCoins(sdk.NewInt64Coin("atom", 200))
|
||||
require.NoError(t, app.BankKeeper.SetBalances(ctx, addr, balances))
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, addr, balances))
|
||||
acc, err := ante.GetSignerAcc(ctx, app.AccountKeeper, addr)
|
||||
require.NoError(t, app.BankKeeper.SetBalances(ctx, addr, balances))
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, addr, balances))
|
||||
|
||||
msgs := []sdk.Msg{testdata.NewTestMsg(addr)}
|
||||
fee := legacytx.NewStdFee(50000, sdk.Coins{sdk.NewInt64Coin("atom", 150)})
|
||||
|
||||
@ -37,7 +37,7 @@ func (suite *HandlerTestSuite) TestMsgCreateVestingAccount() {
|
||||
|
||||
acc1 := suite.app.AccountKeeper.NewAccountWithAddress(ctx, addr1)
|
||||
suite.app.AccountKeeper.SetAccount(ctx, acc1)
|
||||
suite.Require().NoError(suite.app.BankKeeper.SetBalances(ctx, addr1, balances))
|
||||
suite.Require().NoError(simapp.FundAccount(suite.app, ctx, addr1, balances))
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
|
||||
@ -5,11 +5,14 @@ import (
|
||||
"time"
|
||||
|
||||
proto "github.com/gogo/protobuf/proto"
|
||||
"github.com/stretchr/testify/suite"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
||||
|
||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
||||
tmtime "github.com/tendermint/tendermint/types/time"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
||||
"github.com/stretchr/testify/suite"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/authz/types"
|
||||
@ -48,9 +51,6 @@ func (s *TestSuite) TestKeeper() {
|
||||
granterAddr := addrs[0]
|
||||
granteeAddr := addrs[1]
|
||||
recipientAddr := addrs[2]
|
||||
err := app.BankKeeper.SetBalances(ctx, granterAddr, sdk.NewCoins(sdk.NewInt64Coin("steak", 10000)))
|
||||
s.Require().Nil(err)
|
||||
s.Require().True(app.BankKeeper.GetBalance(ctx, granterAddr, "steak").IsEqual(sdk.NewCoin("steak", sdk.NewInt(10000))))
|
||||
|
||||
s.T().Log("verify that no authorization returns nil")
|
||||
authorization, expiration := app.AuthzKeeper.GetOrRevokeAuthorization(ctx, granteeAddr, granterAddr, types.SendAuthorization{}.MethodName())
|
||||
@ -62,7 +62,7 @@ func (s *TestSuite) TestKeeper() {
|
||||
newCoins := sdk.NewCoins(sdk.NewInt64Coin("steak", 100))
|
||||
s.T().Log("verify if expired authorization is rejected")
|
||||
x := &types.SendAuthorization{SpendLimit: newCoins}
|
||||
err = app.AuthzKeeper.Grant(ctx, granterAddr, granteeAddr, x, now.Add(-1*time.Hour))
|
||||
err := app.AuthzKeeper.Grant(ctx, granterAddr, granteeAddr, x, now.Add(-1*time.Hour))
|
||||
s.Require().NoError(err)
|
||||
authorization, _ = app.AuthzKeeper.GetOrRevokeAuthorization(ctx, granteeAddr, granterAddr, types.SendAuthorization{}.MethodName())
|
||||
s.Require().Nil(authorization)
|
||||
@ -103,10 +103,6 @@ func (s *TestSuite) TestKeeperIter() {
|
||||
granterAddr := addrs[0]
|
||||
granteeAddr := addrs[1]
|
||||
|
||||
err := app.BankKeeper.SetBalances(ctx, granterAddr, sdk.NewCoins(sdk.NewInt64Coin("steak", 10000)))
|
||||
s.Require().Nil(err)
|
||||
s.Require().True(app.BankKeeper.GetBalance(ctx, granterAddr, "steak").IsEqual(sdk.NewCoin("steak", sdk.NewInt(10000))))
|
||||
|
||||
s.T().Log("verify that no authorization returns nil")
|
||||
authorization, expiration := app.AuthzKeeper.GetOrRevokeAuthorization(ctx, granteeAddr, granterAddr, "Abcd")
|
||||
s.Require().Nil(authorization)
|
||||
@ -117,7 +113,7 @@ func (s *TestSuite) TestKeeperIter() {
|
||||
newCoins := sdk.NewCoins(sdk.NewInt64Coin("steak", 100))
|
||||
s.T().Log("verify if expired authorization is rejected")
|
||||
x := &types.SendAuthorization{SpendLimit: newCoins}
|
||||
err = app.AuthzKeeper.Grant(ctx, granteeAddr, granterAddr, x, now.Add(-1*time.Hour))
|
||||
err := app.AuthzKeeper.Grant(ctx, granteeAddr, granterAddr, x, now.Add(-1*time.Hour))
|
||||
s.Require().NoError(err)
|
||||
authorization, _ = app.AuthzKeeper.GetOrRevokeAuthorization(ctx, granteeAddr, granterAddr, "abcd")
|
||||
s.Require().Nil(authorization)
|
||||
@ -136,10 +132,7 @@ func (s *TestSuite) TestKeeperFees() {
|
||||
granterAddr := addrs[0]
|
||||
granteeAddr := addrs[1]
|
||||
recipientAddr := addrs[2]
|
||||
err := app.BankKeeper.SetBalances(s.ctx, granterAddr, sdk.NewCoins(sdk.NewInt64Coin("steak", 10000)))
|
||||
s.Require().Nil(err)
|
||||
s.Require().True(app.BankKeeper.GetBalance(s.ctx, granterAddr, "steak").IsEqual(sdk.NewCoin("steak", sdk.NewInt(10000))))
|
||||
|
||||
s.Require().NoError(simapp.FundAccount(app, s.ctx, granterAddr, sdk.NewCoins(sdk.NewInt64Coin("steak", 10000))))
|
||||
now := s.ctx.BlockHeader().Time
|
||||
s.Require().NotNil(now)
|
||||
|
||||
@ -180,8 +173,8 @@ func (s *TestSuite) TestKeeperFees() {
|
||||
s.Require().NoError(err)
|
||||
|
||||
result, err = app.AuthzKeeper.DispatchActions(s.ctx, granteeAddr, executeMsgs)
|
||||
s.Require().NoError(err)
|
||||
s.Require().NotNil(result)
|
||||
s.Require().Nil(err)
|
||||
|
||||
authorization, _ = app.AuthzKeeper.GetOrRevokeAuthorization(s.ctx, granteeAddr, granterAddr, types.SendAuthorization{}.MethodName())
|
||||
s.Require().NotNil(authorization)
|
||||
|
||||
@ -79,8 +79,7 @@ func (suite *SimTestSuite) getTestingAccounts(r *rand.Rand, n int) []simtypes.Ac
|
||||
for _, account := range accounts {
|
||||
acc := suite.app.AccountKeeper.NewAccountWithAddress(suite.ctx, account.Address)
|
||||
suite.app.AccountKeeper.SetAccount(suite.ctx, acc)
|
||||
err := suite.app.BankKeeper.SetBalances(suite.ctx, account.Address, initCoins)
|
||||
suite.Require().NoError(err)
|
||||
suite.Require().NoError(simapp.FundAccount(suite.app, suite.ctx, account.Address, initCoins))
|
||||
}
|
||||
|
||||
return accounts
|
||||
|
||||
@ -95,8 +95,7 @@ func TestSendNotEnoughBalance(t *testing.T) {
|
||||
app := simapp.SetupWithGenesisAccounts(genAccs)
|
||||
ctx := app.BaseApp.NewContext(false, tmproto.Header{})
|
||||
|
||||
err := app.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 67)))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 67))))
|
||||
|
||||
app.Commit()
|
||||
|
||||
@ -110,7 +109,7 @@ func TestSendNotEnoughBalance(t *testing.T) {
|
||||
sendMsg := types.NewMsgSend(addr1, addr2, sdk.Coins{sdk.NewInt64Coin("foocoin", 100)})
|
||||
header := tmproto.Header{Height: app.LastBlockHeight() + 1}
|
||||
txGen := simapp.MakeTestEncodingConfig().TxConfig
|
||||
_, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{sendMsg}, "", []uint64{origAccNum}, []uint64{origSeq}, false, false, priv1)
|
||||
_, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{sendMsg}, "", []uint64{origAccNum}, []uint64{origSeq}, false, false, priv1)
|
||||
require.Error(t, err)
|
||||
|
||||
simapp.CheckBalance(t, app, addr1, sdk.Coins{sdk.NewInt64Coin("foocoin", 67)})
|
||||
@ -169,8 +168,7 @@ func TestSendToModuleAcc(t *testing.T) {
|
||||
toAddr, err := sdk.AccAddressFromBech32(test.msg.ToAddress)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = app.BankKeeper.SetBalances(ctx, fromAddr, test.fromBalance)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, fromAddr, test.fromBalance))
|
||||
|
||||
app.Commit()
|
||||
|
||||
@ -211,8 +209,7 @@ func TestMsgMultiSendWithAccounts(t *testing.T) {
|
||||
app := simapp.SetupWithGenesisAccounts(genAccs)
|
||||
ctx := app.BaseApp.NewContext(false, tmproto.Header{})
|
||||
|
||||
err := app.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 67)))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 67))))
|
||||
|
||||
app.Commit()
|
||||
|
||||
@ -282,11 +279,9 @@ func TestMsgMultiSendMultipleOut(t *testing.T) {
|
||||
app := simapp.SetupWithGenesisAccounts(genAccs)
|
||||
ctx := app.BaseApp.NewContext(false, tmproto.Header{})
|
||||
|
||||
err := app.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42)))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42))))
|
||||
|
||||
err = app.BankKeeper.SetBalances(ctx, addr2, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42)))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, addr2, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42))))
|
||||
|
||||
app.Commit()
|
||||
|
||||
@ -333,14 +328,11 @@ func TestMsgMultiSendMultipleInOut(t *testing.T) {
|
||||
app := simapp.SetupWithGenesisAccounts(genAccs)
|
||||
ctx := app.BaseApp.NewContext(false, tmproto.Header{})
|
||||
|
||||
err := app.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42)))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42))))
|
||||
|
||||
err = app.BankKeeper.SetBalances(ctx, addr2, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42)))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, addr2, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42))))
|
||||
|
||||
err = app.BankKeeper.SetBalances(ctx, addr4, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42)))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, addr4, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42))))
|
||||
|
||||
app.Commit()
|
||||
|
||||
@ -383,8 +375,7 @@ func TestMsgMultiSendDependent(t *testing.T) {
|
||||
app := simapp.SetupWithGenesisAccounts(genAccs)
|
||||
ctx := app.BaseApp.NewContext(false, tmproto.Header{})
|
||||
|
||||
err = app.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42)))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42))))
|
||||
|
||||
app.Commit()
|
||||
|
||||
|
||||
@ -30,8 +30,7 @@ func BenchmarkOneBankSendTxPerBlock(b *testing.B) {
|
||||
ctx := benchmarkApp.BaseApp.NewContext(false, tmproto.Header{})
|
||||
|
||||
// some value conceivably higher than the benchmarks would ever go
|
||||
err := benchmarkApp.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 100000000000)))
|
||||
require.NoError(b, err)
|
||||
require.NoError(b, simapp.FundAccount(benchmarkApp, ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 100000000000))))
|
||||
|
||||
benchmarkApp.Commit()
|
||||
txGen := simappparams.MakeTestEncodingConfig().TxConfig
|
||||
@ -72,8 +71,7 @@ func BenchmarkOneBankMultiSendTxPerBlock(b *testing.B) {
|
||||
ctx := benchmarkApp.BaseApp.NewContext(false, tmproto.Header{})
|
||||
|
||||
// some value conceivably higher than the benchmarks would ever go
|
||||
err := benchmarkApp.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 100000000000)))
|
||||
require.NoError(b, err)
|
||||
require.NoError(b, simapp.FundAccount(benchmarkApp, ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 100000000000))))
|
||||
|
||||
benchmarkApp.Commit()
|
||||
txGen := simappparams.MakeTestEncodingConfig().TxConfig
|
||||
|
||||
@ -20,7 +20,7 @@ func (k BaseKeeper) InitGenesis(ctx sdk.Context, genState *types.GenesisState) {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if err := k.SetBalances(ctx, addr, balance.Coins); err != nil {
|
||||
if err := k.setBalances(ctx, addr, balance.Coins); err != nil {
|
||||
panic(fmt.Errorf("error on setting balances %w", err))
|
||||
}
|
||||
|
||||
@ -31,7 +31,7 @@ func (k BaseKeeper) InitGenesis(ctx sdk.Context, genState *types.GenesisState) {
|
||||
genState.Supply = totalSupply
|
||||
}
|
||||
|
||||
k.SetSupply(ctx, types.NewSupply(genState.Supply))
|
||||
k.setSupply(ctx, types.NewSupply(genState.Supply))
|
||||
|
||||
for _, meta := range genState.DenomMetadata {
|
||||
k.SetDenomMetaData(ctx, meta)
|
||||
|
||||
@ -3,43 +3,53 @@ package keeper_test
|
||||
import (
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
||||
)
|
||||
|
||||
func (suite *IntegrationTestSuite) TestExportGenesis() {
|
||||
app, ctx := suite.app, suite.ctx
|
||||
|
||||
expectedMetadata := suite.getTestMetadata()
|
||||
expectedBalances := suite.getTestBalances()
|
||||
expectedBalances, totalSupply := suite.getTestBalancesAndSupply()
|
||||
for i := range []int{1, 2} {
|
||||
app.BankKeeper.SetDenomMetaData(ctx, expectedMetadata[i])
|
||||
accAddr, err1 := sdk.AccAddressFromBech32(expectedBalances[i].Address)
|
||||
if err1 != nil {
|
||||
panic(err1)
|
||||
}
|
||||
err := app.BankKeeper.SetBalances(ctx, accAddr, expectedBalances[i].Coins)
|
||||
suite.Require().NoError(err)
|
||||
// set balances via mint and send
|
||||
suite.
|
||||
Require().
|
||||
NoError(app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, expectedBalances[i].Coins))
|
||||
suite.
|
||||
Require().
|
||||
NoError(app.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, accAddr, expectedBalances[i].Coins))
|
||||
}
|
||||
|
||||
totalSupply := types.NewSupply(sdk.NewCoins(sdk.NewInt64Coin("test", 400000000)))
|
||||
app.BankKeeper.SetSupply(ctx, totalSupply)
|
||||
// add mint module balance as nil
|
||||
expectedBalances = append(expectedBalances, types.Balance{Address: "cosmos1m3h30wlvsf8llruxtpukdvsy0km2kum8g38c8q", Coins: nil})
|
||||
app.BankKeeper.SetParams(ctx, types.DefaultParams())
|
||||
|
||||
exportGenesis := app.BankKeeper.ExportGenesis(ctx)
|
||||
|
||||
suite.Require().Len(exportGenesis.Params.SendEnabled, 0)
|
||||
suite.Require().Equal(types.DefaultParams().DefaultSendEnabled, exportGenesis.Params.DefaultSendEnabled)
|
||||
suite.Require().Equal(totalSupply.GetTotal(), exportGenesis.Supply)
|
||||
suite.Require().Equal(totalSupply.Total, exportGenesis.Supply)
|
||||
suite.Require().Equal(expectedBalances, exportGenesis.Balances)
|
||||
suite.Require().Equal(expectedMetadata, exportGenesis.DenomMetadata)
|
||||
}
|
||||
|
||||
func (suite *IntegrationTestSuite) getTestBalances() []types.Balance {
|
||||
func (suite *IntegrationTestSuite) getTestBalancesAndSupply() ([]types.Balance, *types.Supply) {
|
||||
addr2, _ := sdk.AccAddressFromBech32("cosmos1f9xjhxm0plzrh9cskf4qee4pc2xwp0n0556gh0")
|
||||
addr1, _ := sdk.AccAddressFromBech32("cosmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu34mf0eh")
|
||||
addr1Balance := sdk.Coins{sdk.NewInt64Coin("testcoin3", 10)}
|
||||
addr2Balance := sdk.Coins{sdk.NewInt64Coin("testcoin1", 32), sdk.NewInt64Coin("testcoin2", 34)}
|
||||
|
||||
totalSupply := types.NewSupply(addr1Balance)
|
||||
totalSupply.Inflate(addr2Balance)
|
||||
return []types.Balance{
|
||||
{Address: addr2.String(), Coins: sdk.Coins{sdk.NewInt64Coin("testcoin1", 32), sdk.NewInt64Coin("testcoin2", 34)}},
|
||||
{Address: addr1.String(), Coins: sdk.Coins{sdk.NewInt64Coin("testcoin3", 10)}},
|
||||
}
|
||||
{Address: addr2.String(), Coins: addr2Balance},
|
||||
{Address: addr1.String(), Coins: addr1Balance},
|
||||
}, totalSupply
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -6,6 +6,10 @@ import (
|
||||
gocontext "context"
|
||||
"fmt"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
|
||||
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/query"
|
||||
@ -32,7 +36,7 @@ func (suite *IntegrationTestSuite) TestQueryBalance() {
|
||||
acc := app.AccountKeeper.NewAccountWithAddress(ctx, addr)
|
||||
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, acc.GetAddress(), origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, acc.GetAddress(), origCoins))
|
||||
|
||||
res, err = queryClient.Balance(gocontext.Background(), req)
|
||||
suite.Require().NoError(err)
|
||||
@ -64,7 +68,7 @@ func (suite *IntegrationTestSuite) TestQueryAllBalances() {
|
||||
acc := app.AccountKeeper.NewAccountWithAddress(ctx, addr)
|
||||
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, acc.GetAddress(), origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, acc.GetAddress(), origCoins))
|
||||
|
||||
res, err = queryClient.AllBalances(gocontext.Background(), req)
|
||||
suite.Require().NoError(err)
|
||||
@ -87,7 +91,9 @@ func (suite *IntegrationTestSuite) TestQueryAllBalances() {
|
||||
func (suite *IntegrationTestSuite) TestQueryTotalSupply() {
|
||||
app, ctx, queryClient := suite.app, suite.ctx, suite.queryClient
|
||||
expectedTotalSupply := types.NewSupply(sdk.NewCoins(sdk.NewInt64Coin("test", 400000000)))
|
||||
app.BankKeeper.SetSupply(ctx, expectedTotalSupply)
|
||||
suite.
|
||||
Require().
|
||||
NoError(app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, expectedTotalSupply.Total))
|
||||
|
||||
res, err := queryClient.TotalSupply(gocontext.Background(), &types.QueryTotalSupplyRequest{})
|
||||
suite.Require().NoError(err)
|
||||
@ -102,7 +108,9 @@ func (suite *IntegrationTestSuite) TestQueryTotalSupplyOf() {
|
||||
test1Supply := sdk.NewInt64Coin("test1", 4000000)
|
||||
test2Supply := sdk.NewInt64Coin("test2", 700000000)
|
||||
expectedTotalSupply := types.NewSupply(sdk.NewCoins(test1Supply, test2Supply))
|
||||
app.BankKeeper.SetSupply(ctx, expectedTotalSupply)
|
||||
suite.
|
||||
Require().
|
||||
NoError(app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, expectedTotalSupply.Total))
|
||||
|
||||
_, err := queryClient.SupplyOf(gocontext.Background(), &types.QuerySupplyOfRequest{})
|
||||
suite.Require().Error(err)
|
||||
|
||||
@ -25,7 +25,6 @@ type Keeper interface {
|
||||
ExportGenesis(sdk.Context) *types.GenesisState
|
||||
|
||||
GetSupply(ctx sdk.Context) exported.SupplyI
|
||||
SetSupply(ctx sdk.Context, supply exported.SupplyI)
|
||||
|
||||
GetDenomMetaData(ctx sdk.Context, denom string) (types.Metadata, bool)
|
||||
SetDenomMetaData(ctx sdk.Context, denomMetaData types.Metadata)
|
||||
@ -102,7 +101,7 @@ func (k BaseKeeper) DelegateCoins(ctx sdk.Context, delegatorAddr, moduleAccAddr
|
||||
}
|
||||
|
||||
balances = balances.Add(balance)
|
||||
err := k.SetBalance(ctx, delegatorAddr, balance.Sub(coin))
|
||||
err := k.setBalance(ctx, delegatorAddr, balance.Sub(coin))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -112,7 +111,7 @@ func (k BaseKeeper) DelegateCoins(ctx sdk.Context, delegatorAddr, moduleAccAddr
|
||||
return sdkerrors.Wrap(err, "failed to track delegation")
|
||||
}
|
||||
|
||||
err := k.AddCoins(ctx, moduleAccAddr, amt)
|
||||
err := k.addCoins(ctx, moduleAccAddr, amt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -135,7 +134,7 @@ func (k BaseKeeper) UndelegateCoins(ctx sdk.Context, moduleAccAddr, delegatorAdd
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, amt.String())
|
||||
}
|
||||
|
||||
err := k.SubtractCoins(ctx, moduleAccAddr, amt)
|
||||
err := k.subtractCoins(ctx, moduleAccAddr, amt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -144,7 +143,7 @@ func (k BaseKeeper) UndelegateCoins(ctx sdk.Context, moduleAccAddr, delegatorAdd
|
||||
return sdkerrors.Wrap(err, "failed to track undelegation")
|
||||
}
|
||||
|
||||
err = k.AddCoins(ctx, delegatorAddr, amt)
|
||||
err = k.addCoins(ctx, delegatorAddr, amt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -168,8 +167,8 @@ func (k BaseKeeper) GetSupply(ctx sdk.Context) exported.SupplyI {
|
||||
return supply
|
||||
}
|
||||
|
||||
// SetSupply sets the Supply to store
|
||||
func (k BaseKeeper) SetSupply(ctx sdk.Context, supply exported.SupplyI) {
|
||||
// setSupply sets the Supply to store
|
||||
func (k BaseKeeper) setSupply(ctx sdk.Context, supply exported.SupplyI) {
|
||||
store := ctx.KVStore(k.storeKey)
|
||||
bz, err := k.MarshalSupply(supply)
|
||||
if err != nil {
|
||||
@ -332,7 +331,7 @@ func (k BaseKeeper) MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins)
|
||||
panic(sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "module account %s does not have permissions to mint tokens", moduleName))
|
||||
}
|
||||
|
||||
err := k.AddCoins(ctx, acc.GetAddress(), amt)
|
||||
err := k.addCoins(ctx, acc.GetAddress(), amt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -341,7 +340,7 @@ func (k BaseKeeper) MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins)
|
||||
supply := k.GetSupply(ctx)
|
||||
supply.Inflate(amt)
|
||||
|
||||
k.SetSupply(ctx, supply)
|
||||
k.setSupply(ctx, supply)
|
||||
|
||||
logger := k.Logger(ctx)
|
||||
logger.Info("minted coins from module account", "amount", amt.String(), "from", moduleName)
|
||||
@ -361,7 +360,7 @@ func (k BaseKeeper) BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins)
|
||||
panic(sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "module account %s does not have permissions to burn tokens", moduleName))
|
||||
}
|
||||
|
||||
err := k.SubtractCoins(ctx, acc.GetAddress(), amt)
|
||||
err := k.subtractCoins(ctx, acc.GetAddress(), amt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -369,7 +368,7 @@ func (k BaseKeeper) BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins)
|
||||
// update total supply
|
||||
supply := k.GetSupply(ctx)
|
||||
supply.Deflate(amt)
|
||||
k.SetSupply(ctx, supply)
|
||||
k.setSupply(ctx, supply)
|
||||
|
||||
logger := k.Logger(ctx)
|
||||
logger.Info("burned tokens from module account", "amount", amt.String(), "from", moduleName)
|
||||
|
||||
@ -4,6 +4,8 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
||||
|
||||
"github.com/stretchr/testify/suite"
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
||||
@ -89,7 +91,7 @@ func (suite *IntegrationTestSuite) TestSupply() {
|
||||
initTokens := sdk.TokensFromConsensusPower(initialPower)
|
||||
|
||||
totalSupply := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, initTokens))
|
||||
app.BankKeeper.SetSupply(ctx, types.NewSupply(totalSupply))
|
||||
suite.NoError(app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, totalSupply))
|
||||
|
||||
total := app.BankKeeper.GetSupply(ctx).GetTotal()
|
||||
suite.Require().Equal(totalSupply, total)
|
||||
@ -118,23 +120,30 @@ func (suite *IntegrationTestSuite) TestSupply_SendCoins() {
|
||||
)
|
||||
|
||||
baseAcc := authKeeper.NewAccountWithAddress(ctx, authtypes.NewModuleAddress("baseAcc"))
|
||||
suite.Require().NoError(keeper.SetBalances(ctx, holderAcc.GetAddress(), initCoins))
|
||||
|
||||
keeper.SetSupply(ctx, types.NewSupply(initCoins))
|
||||
// set initial balances
|
||||
suite.
|
||||
Require().
|
||||
NoError(keeper.MintCoins(ctx, minttypes.ModuleName, initCoins))
|
||||
|
||||
suite.
|
||||
Require().
|
||||
NoError(keeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, holderAcc.GetAddress(), initCoins))
|
||||
|
||||
authKeeper.SetModuleAccount(ctx, holderAcc)
|
||||
authKeeper.SetModuleAccount(ctx, burnerAcc)
|
||||
authKeeper.SetAccount(ctx, baseAcc)
|
||||
|
||||
suite.Require().Panics(func() {
|
||||
keeper.SendCoinsFromModuleToModule(ctx, "", holderAcc.GetName(), initCoins) // nolint:errcheck
|
||||
_ = keeper.SendCoinsFromModuleToModule(ctx, "", holderAcc.GetName(), initCoins) // nolint:errcheck
|
||||
})
|
||||
|
||||
suite.Require().Panics(func() {
|
||||
keeper.SendCoinsFromModuleToModule(ctx, authtypes.Burner, "", initCoins) // nolint:errcheck
|
||||
_ = keeper.SendCoinsFromModuleToModule(ctx, authtypes.Burner, "", initCoins) // nolint:errcheck
|
||||
})
|
||||
|
||||
suite.Require().Panics(func() {
|
||||
keeper.SendCoinsFromModuleToAccount(ctx, "", baseAcc.GetAddress(), initCoins) // nolint:errcheck
|
||||
_ = keeper.SendCoinsFromModuleToAccount(ctx, "", baseAcc.GetAddress(), initCoins) // nolint:errcheck
|
||||
})
|
||||
|
||||
suite.Require().Error(
|
||||
@ -234,37 +243,45 @@ func (suite *IntegrationTestSuite) TestSupply_BurnCoins() {
|
||||
app.GetSubspace(types.ModuleName), make(map[string]bool),
|
||||
)
|
||||
|
||||
suite.Require().NoError(keeper.SetBalances(ctx, burnerAcc.GetAddress(), initCoins))
|
||||
keeper.SetSupply(ctx, types.NewSupply(initCoins))
|
||||
// set burnerAcc balance
|
||||
authKeeper.SetModuleAccount(ctx, burnerAcc)
|
||||
suite.
|
||||
Require().
|
||||
NoError(keeper.MintCoins(ctx, authtypes.Minter, initCoins))
|
||||
suite.
|
||||
Require().
|
||||
NoError(keeper.SendCoinsFromModuleToAccount(ctx, authtypes.Minter, burnerAcc.GetAddress(), initCoins))
|
||||
|
||||
initialSupply := keeper.GetSupply(ctx)
|
||||
initialSupply.Inflate(initCoins)
|
||||
keeper.SetSupply(ctx, initialSupply)
|
||||
// inflate supply
|
||||
suite.
|
||||
Require().
|
||||
NoError(keeper.MintCoins(ctx, authtypes.Minter, initCoins))
|
||||
supplyAfterInflation := keeper.GetSupply(ctx)
|
||||
|
||||
suite.Require().Panics(func() { keeper.BurnCoins(ctx, "", initCoins) }, "no module account") // nolint:errcheck
|
||||
suite.Require().Panics(func() { keeper.BurnCoins(ctx, authtypes.Minter, initCoins) }, "invalid permission") // nolint:errcheck
|
||||
suite.Require().Panics(func() { keeper.BurnCoins(ctx, randomPerm, initialSupply.GetTotal()) }, "random permission") // nolint:errcheck
|
||||
err := keeper.BurnCoins(ctx, authtypes.Burner, initialSupply.GetTotal())
|
||||
suite.Require().Panics(func() { keeper.BurnCoins(ctx, "", initCoins) }, "no module account") // nolint:errcheck
|
||||
suite.Require().Panics(func() { keeper.BurnCoins(ctx, authtypes.Minter, initCoins) }, "invalid permission") // nolint:errcheck
|
||||
suite.Require().Panics(func() { keeper.BurnCoins(ctx, randomPerm, supplyAfterInflation.GetTotal()) }, "random permission") // nolint:errcheck
|
||||
err := keeper.BurnCoins(ctx, authtypes.Burner, supplyAfterInflation.GetTotal())
|
||||
suite.Require().Error(err, "insufficient coins")
|
||||
|
||||
err = keeper.BurnCoins(ctx, authtypes.Burner, initCoins)
|
||||
suite.Require().NoError(err)
|
||||
suite.Require().Equal(sdk.Coins(nil), getCoinsByName(ctx, keeper, authKeeper, authtypes.Burner))
|
||||
suite.Require().Equal(initialSupply.GetTotal().Sub(initCoins), keeper.GetSupply(ctx).GetTotal())
|
||||
suite.Require().Equal(supplyAfterInflation.GetTotal().Sub(initCoins), keeper.GetSupply(ctx).GetTotal())
|
||||
|
||||
// test same functionality on module account with multiple permissions
|
||||
initialSupply = keeper.GetSupply(ctx)
|
||||
initialSupply.Inflate(initCoins)
|
||||
keeper.SetSupply(ctx, initialSupply)
|
||||
suite.
|
||||
Require().
|
||||
NoError(keeper.MintCoins(ctx, authtypes.Minter, initCoins))
|
||||
supplyAfterInflation = keeper.GetSupply(ctx)
|
||||
|
||||
suite.Require().NoError(keeper.SetBalances(ctx, multiPermAcc.GetAddress(), initCoins))
|
||||
suite.Require().NoError(keeper.SendCoins(ctx, authtypes.NewModuleAddress(authtypes.Minter), multiPermAcc.GetAddress(), initCoins))
|
||||
authKeeper.SetModuleAccount(ctx, multiPermAcc)
|
||||
|
||||
err = keeper.BurnCoins(ctx, multiPermAcc.GetName(), initCoins)
|
||||
suite.Require().NoError(err)
|
||||
suite.Require().Equal(sdk.Coins(nil), getCoinsByName(ctx, keeper, authKeeper, multiPermAcc.GetName()))
|
||||
suite.Require().Equal(initialSupply.GetTotal().Sub(initCoins), keeper.GetSupply(ctx).GetTotal())
|
||||
suite.Require().Equal(supplyAfterInflation.GetTotal().Sub(initCoins), keeper.GetSupply(ctx).GetTotal())
|
||||
}
|
||||
|
||||
func (suite *IntegrationTestSuite) TestSendCoinsNewAccount() {
|
||||
@ -274,7 +291,7 @@ func (suite *IntegrationTestSuite) TestSendCoinsNewAccount() {
|
||||
addr1 := sdk.AccAddress([]byte("addr1_______________"))
|
||||
acc1 := app.AccountKeeper.NewAccountWithAddress(ctx, addr1)
|
||||
app.AccountKeeper.SetAccount(ctx, acc1)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, balances))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr1, balances))
|
||||
|
||||
acc1Balances := app.BankKeeper.GetAllBalances(ctx, addr1)
|
||||
suite.Require().Equal(balances, acc1Balances)
|
||||
@ -300,7 +317,7 @@ func (suite *IntegrationTestSuite) TestInputOutputNewAccount() {
|
||||
addr1 := sdk.AccAddress([]byte("addr1_______________"))
|
||||
acc1 := app.AccountKeeper.NewAccountWithAddress(ctx, addr1)
|
||||
app.AccountKeeper.SetAccount(ctx, acc1)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, balances))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr1, balances))
|
||||
|
||||
acc1Balances := app.BankKeeper.GetAllBalances(ctx, addr1)
|
||||
suite.Require().Equal(balances, acc1Balances)
|
||||
@ -353,7 +370,7 @@ func (suite *IntegrationTestSuite) TestInputOutputCoins() {
|
||||
suite.Require().Error(app.BankKeeper.InputOutputCoins(ctx, inputs, []types.Output{}))
|
||||
suite.Require().Error(app.BankKeeper.InputOutputCoins(ctx, inputs, outputs))
|
||||
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, balances))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr1, balances))
|
||||
|
||||
insufficientInputs := []types.Input{
|
||||
{Address: addr1.String(), Coins: sdk.NewCoins(newFooCoin(300), newBarCoin(100))},
|
||||
@ -381,19 +398,19 @@ func (suite *IntegrationTestSuite) TestSendCoins() {
|
||||
app, ctx := suite.app, suite.ctx
|
||||
balances := sdk.NewCoins(newFooCoin(100), newBarCoin(50))
|
||||
|
||||
addr1 := sdk.AccAddress([]byte("addr1_______________"))
|
||||
addr1 := sdk.AccAddress("addr1_______________")
|
||||
acc1 := app.AccountKeeper.NewAccountWithAddress(ctx, addr1)
|
||||
app.AccountKeeper.SetAccount(ctx, acc1)
|
||||
|
||||
addr2 := sdk.AccAddress([]byte("addr2_______________"))
|
||||
addr2 := sdk.AccAddress("addr2_______________")
|
||||
acc2 := app.AccountKeeper.NewAccountWithAddress(ctx, addr2)
|
||||
app.AccountKeeper.SetAccount(ctx, acc2)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr2, balances))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr2, balances))
|
||||
|
||||
sendAmt := sdk.NewCoins(newFooCoin(50), newBarCoin(25))
|
||||
suite.Require().Error(app.BankKeeper.SendCoins(ctx, addr1, addr2, sendAmt))
|
||||
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, balances))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr1, balances))
|
||||
suite.Require().NoError(app.BankKeeper.SendCoins(ctx, addr1, addr2, sendAmt))
|
||||
|
||||
acc1Balances := app.BankKeeper.GetAllBalances(ctx, addr1)
|
||||
@ -420,45 +437,17 @@ func (suite *IntegrationTestSuite) TestValidateBalance() {
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
|
||||
balances := sdk.NewCoins(newFooCoin(100))
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, balances))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr1, balances))
|
||||
suite.Require().NoError(app.BankKeeper.ValidateBalance(ctx, addr1))
|
||||
|
||||
bacc := authtypes.NewBaseAccountWithAddress(addr2)
|
||||
vacc := vesting.NewContinuousVestingAccount(bacc, balances.Add(balances...), now.Unix(), endTime.Unix())
|
||||
|
||||
app.AccountKeeper.SetAccount(ctx, vacc)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr2, balances))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr2, balances))
|
||||
suite.Require().Error(app.BankKeeper.ValidateBalance(ctx, addr2))
|
||||
}
|
||||
|
||||
func (suite *IntegrationTestSuite) TestBalance() {
|
||||
app, ctx := suite.app, suite.ctx
|
||||
addr := sdk.AccAddress([]byte("addr1_______________"))
|
||||
|
||||
acc := app.AccountKeeper.NewAccountWithAddress(ctx, addr)
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
|
||||
suite.Require().Equal(sdk.NewCoin(fooDenom, sdk.ZeroInt()), app.BankKeeper.GetBalance(ctx, addr, fooDenom))
|
||||
balances := sdk.NewCoins(newFooCoin(100))
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr, balances))
|
||||
|
||||
suite.Require().Equal(balances.AmountOf(fooDenom), app.BankKeeper.GetBalance(ctx, addr, fooDenom).Amount)
|
||||
suite.Require().Equal(balances, app.BankKeeper.GetAllBalances(ctx, addr))
|
||||
|
||||
newFooBalance := newFooCoin(99)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalance(ctx, addr, newFooBalance))
|
||||
suite.Require().Equal(newFooBalance, app.BankKeeper.GetBalance(ctx, addr, fooDenom))
|
||||
|
||||
balances = sdk.NewCoins(newBarCoin(500))
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr, balances))
|
||||
suite.Require().Equal(sdk.NewCoin(fooDenom, sdk.ZeroInt()), app.BankKeeper.GetBalance(ctx, addr, fooDenom))
|
||||
suite.Require().Equal(balances.AmountOf(barDenom), app.BankKeeper.GetBalance(ctx, addr, barDenom).Amount)
|
||||
suite.Require().Equal(balances, app.BankKeeper.GetAllBalances(ctx, addr))
|
||||
|
||||
invalidBalance := sdk.Coin{Denom: "fooDenom", Amount: sdk.NewInt(-50)}
|
||||
suite.Require().Error(app.BankKeeper.SetBalance(ctx, addr, invalidBalance))
|
||||
}
|
||||
|
||||
func (suite *IntegrationTestSuite) TestSendEnabled() {
|
||||
app, ctx := suite.app, suite.ctx
|
||||
enabled := true
|
||||
@ -512,7 +501,7 @@ func (suite *IntegrationTestSuite) TestHasBalance() {
|
||||
balances := sdk.NewCoins(newFooCoin(100))
|
||||
suite.Require().False(app.BankKeeper.HasBalance(ctx, addr, newFooCoin(99)))
|
||||
|
||||
app.BankKeeper.SetBalances(ctx, addr, balances)
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr, balances))
|
||||
suite.Require().False(app.BankKeeper.HasBalance(ctx, addr, newFooCoin(101)))
|
||||
suite.Require().True(app.BankKeeper.HasBalance(ctx, addr, newFooCoin(100)))
|
||||
suite.Require().True(app.BankKeeper.HasBalance(ctx, addr, newFooCoin(1)))
|
||||
@ -560,15 +549,16 @@ func (suite *IntegrationTestSuite) TestMsgSendEvents() {
|
||||
suite.Require().Equal(abci.Event(event1), events[0])
|
||||
suite.Require().Equal(abci.Event(event2), events[1])
|
||||
|
||||
app.BankKeeper.SetBalances(ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50)))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50))))
|
||||
newCoins = sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50))
|
||||
|
||||
suite.Require().NoError(app.BankKeeper.SendCoins(ctx, addr, addr2, newCoins))
|
||||
|
||||
// events are shifted due to the funding account events
|
||||
events = ctx.EventManager().ABCIEvents()
|
||||
suite.Require().Equal(4, len(events))
|
||||
suite.Require().Equal(abci.Event(event1), events[2])
|
||||
suite.Require().Equal(abci.Event(event2), events[3])
|
||||
suite.Require().Equal(6, len(events))
|
||||
suite.Require().Equal(abci.Event(event1), events[4])
|
||||
suite.Require().Equal(abci.Event(event2), events[5])
|
||||
}
|
||||
|
||||
func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() {
|
||||
@ -603,12 +593,11 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() {
|
||||
suite.Require().Equal(0, len(events))
|
||||
|
||||
// Set addr's coins but not addr2's coins
|
||||
app.BankKeeper.SetBalances(ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50)))
|
||||
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50))))
|
||||
suite.Require().Error(app.BankKeeper.InputOutputCoins(ctx, inputs, outputs))
|
||||
|
||||
events = ctx.EventManager().ABCIEvents()
|
||||
suite.Require().Equal(1, len(events))
|
||||
suite.Require().Equal(3, len(events)) // 3 events because minting event is there
|
||||
|
||||
event1 := sdk.Event{
|
||||
Type: sdk.EventTypeMessage,
|
||||
@ -618,19 +607,19 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() {
|
||||
event1.Attributes,
|
||||
abci.EventAttribute{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())},
|
||||
)
|
||||
suite.Require().Equal(abci.Event(event1), events[0])
|
||||
suite.Require().Equal(abci.Event(event1), events[2]) // it's the third event since we have the minting event before
|
||||
|
||||
// Set addr's coins and addr2's coins
|
||||
app.BankKeeper.SetBalances(ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50)))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50))))
|
||||
newCoins = sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50))
|
||||
|
||||
app.BankKeeper.SetBalances(ctx, addr2, sdk.NewCoins(sdk.NewInt64Coin(barDenom, 100)))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr2, sdk.NewCoins(sdk.NewInt64Coin(barDenom, 100))))
|
||||
newCoins2 = sdk.NewCoins(sdk.NewInt64Coin(barDenom, 100))
|
||||
|
||||
suite.Require().NoError(app.BankKeeper.InputOutputCoins(ctx, inputs, outputs))
|
||||
|
||||
events = ctx.EventManager().ABCIEvents()
|
||||
suite.Require().Equal(5, len(events))
|
||||
suite.Require().Equal(11, len(events))
|
||||
|
||||
event2 := sdk.Event{
|
||||
Type: sdk.EventTypeMessage,
|
||||
@ -664,10 +653,11 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() {
|
||||
abci.EventAttribute{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins2.String())},
|
||||
)
|
||||
|
||||
suite.Require().Equal(abci.Event(event1), events[1])
|
||||
suite.Require().Equal(abci.Event(event2), events[2])
|
||||
suite.Require().Equal(abci.Event(event3), events[3])
|
||||
suite.Require().Equal(abci.Event(event4), events[4])
|
||||
// events are shifted due to the funding account events
|
||||
suite.Require().Equal(abci.Event(event1), events[7])
|
||||
suite.Require().Equal(abci.Event(event2), events[8])
|
||||
suite.Require().Equal(abci.Event(event3), events[9])
|
||||
suite.Require().Equal(abci.Event(event4), events[10])
|
||||
}
|
||||
|
||||
func (suite *IntegrationTestSuite) TestSpendableCoins() {
|
||||
@ -691,8 +681,8 @@ func (suite *IntegrationTestSuite) TestSpendableCoins() {
|
||||
app.AccountKeeper.SetAccount(ctx, macc)
|
||||
app.AccountKeeper.SetAccount(ctx, vacc)
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, origCoins))
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr2, origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr1, origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr2, origCoins))
|
||||
|
||||
suite.Require().Equal(origCoins, app.BankKeeper.SpendableCoins(ctx, addr2))
|
||||
|
||||
@ -717,14 +707,13 @@ func (suite *IntegrationTestSuite) TestVestingAccountSend() {
|
||||
vacc := vesting.NewContinuousVestingAccount(bacc, origCoins, now.Unix(), endTime.Unix())
|
||||
|
||||
app.AccountKeeper.SetAccount(ctx, vacc)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr1, origCoins))
|
||||
|
||||
// require that no coins be sendable at the beginning of the vesting schedule
|
||||
suite.Require().Error(app.BankKeeper.SendCoins(ctx, addr1, addr2, sendCoins))
|
||||
|
||||
// receive some coins
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, origCoins.Add(sendCoins...)))
|
||||
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr1, sendCoins))
|
||||
// require that all vested coins are spendable plus any received
|
||||
ctx = ctx.WithBlockTime(now.Add(12 * time.Hour))
|
||||
suite.Require().NoError(app.BankKeeper.SendCoins(ctx, addr1, addr2, sendCoins))
|
||||
@ -750,13 +739,13 @@ func (suite *IntegrationTestSuite) TestPeriodicVestingAccountSend() {
|
||||
vacc := vesting.NewPeriodicVestingAccount(bacc, origCoins, ctx.BlockHeader().Time.Unix(), periods)
|
||||
|
||||
app.AccountKeeper.SetAccount(ctx, vacc)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr1, origCoins))
|
||||
|
||||
// require that no coins be sendable at the beginning of the vesting schedule
|
||||
suite.Require().Error(app.BankKeeper.SendCoins(ctx, addr1, addr2, sendCoins))
|
||||
|
||||
// receive some coins
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, origCoins.Add(sendCoins...)))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr1, sendCoins))
|
||||
|
||||
// require that all vested coins are spendable plus any received
|
||||
ctx = ctx.WithBlockTime(now.Add(12 * time.Hour))
|
||||
@ -782,8 +771,8 @@ func (suite *IntegrationTestSuite) TestVestingAccountReceive() {
|
||||
|
||||
app.AccountKeeper.SetAccount(ctx, vacc)
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, origCoins))
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr2, origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr1, origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr2, origCoins))
|
||||
|
||||
// send some coins to the vesting account
|
||||
suite.Require().NoError(app.BankKeeper.SendCoins(ctx, addr2, addr1, sendCoins))
|
||||
@ -821,8 +810,8 @@ func (suite *IntegrationTestSuite) TestPeriodicVestingAccountReceive() {
|
||||
|
||||
app.AccountKeeper.SetAccount(ctx, vacc)
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, origCoins))
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr2, origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr1, origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr2, origCoins))
|
||||
|
||||
// send some coins to the vesting account
|
||||
suite.Require().NoError(app.BankKeeper.SendCoins(ctx, addr2, addr1, sendCoins))
|
||||
@ -858,8 +847,8 @@ func (suite *IntegrationTestSuite) TestDelegateCoins() {
|
||||
app.AccountKeeper.SetAccount(ctx, vacc)
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
app.AccountKeeper.SetAccount(ctx, macc)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, origCoins))
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr2, origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr1, origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr2, origCoins))
|
||||
|
||||
ctx = ctx.WithBlockTime(now.Add(12 * time.Hour))
|
||||
|
||||
@ -889,11 +878,8 @@ func (suite *IntegrationTestSuite) TestDelegateCoins_Invalid() {
|
||||
suite.Require().Error(app.BankKeeper.DelegateCoins(ctx, addr1, addrModule, invalidCoins))
|
||||
|
||||
app.AccountKeeper.SetAccount(ctx, macc)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, origCoins))
|
||||
|
||||
suite.Require().Error(app.BankKeeper.DelegateCoins(ctx, addr1, addrModule, delCoins))
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
|
||||
suite.Require().Error(app.BankKeeper.DelegateCoins(ctx, addr1, addrModule, origCoins.Add(origCoins...)))
|
||||
}
|
||||
|
||||
@ -919,8 +905,8 @@ func (suite *IntegrationTestSuite) TestUndelegateCoins() {
|
||||
app.AccountKeeper.SetAccount(ctx, vacc)
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
app.AccountKeeper.SetAccount(ctx, macc)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, origCoins))
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr2, origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr1, origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr2, origCoins))
|
||||
|
||||
ctx = ctx.WithBlockTime(now.Add(12 * time.Hour))
|
||||
|
||||
@ -964,7 +950,7 @@ func (suite *IntegrationTestSuite) TestUndelegateCoins_Invalid() {
|
||||
suite.Require().Error(app.BankKeeper.UndelegateCoins(ctx, addrModule, addr1, delCoins))
|
||||
|
||||
app.AccountKeeper.SetAccount(ctx, macc)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addr1, origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addr1, origCoins))
|
||||
|
||||
suite.Require().Error(app.BankKeeper.UndelegateCoins(ctx, addrModule, addr1, delCoins))
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
|
||||
@ -3,6 +3,10 @@ package keeper_test
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
|
||||
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
||||
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||
@ -39,7 +43,7 @@ func (suite *IntegrationTestSuite) TestQuerier_QueryBalance() {
|
||||
acc := app.AccountKeeper.NewAccountWithAddress(ctx, addr)
|
||||
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, acc.GetAddress(), origCoins))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, acc.GetAddress(), origCoins))
|
||||
|
||||
res, err = querier(ctx, []string{types.QueryBalance}, req)
|
||||
suite.Require().NoError(err)
|
||||
@ -76,8 +80,7 @@ func (suite *IntegrationTestSuite) TestQuerier_QueryAllBalances() {
|
||||
acc := app.AccountKeeper.NewAccountWithAddress(ctx, addr)
|
||||
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, acc.GetAddress(), origCoins))
|
||||
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, acc.GetAddress(), origCoins))
|
||||
res, err = querier(ctx, []string{types.QueryAllBalances}, req)
|
||||
suite.Require().NoError(err)
|
||||
suite.Require().NotNil(res)
|
||||
@ -89,7 +92,9 @@ func (suite *IntegrationTestSuite) TestQuerier_QueryTotalSupply() {
|
||||
app, ctx := suite.app, suite.ctx
|
||||
legacyAmino := app.LegacyAmino()
|
||||
expectedTotalSupply := types.NewSupply(sdk.NewCoins(sdk.NewInt64Coin("test", 400000000)))
|
||||
app.BankKeeper.SetSupply(ctx, expectedTotalSupply)
|
||||
suite.
|
||||
Require().
|
||||
NoError(app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, expectedTotalSupply.Total))
|
||||
|
||||
req := abci.RequestQuery{
|
||||
Path: fmt.Sprintf("custom/%s/%s", types.ModuleName, types.QueryTotalSupply),
|
||||
@ -118,7 +123,9 @@ func (suite *IntegrationTestSuite) TestQuerier_QueryTotalSupplyOf() {
|
||||
test1Supply := sdk.NewInt64Coin("test1", 4000000)
|
||||
test2Supply := sdk.NewInt64Coin("test2", 700000000)
|
||||
expectedTotalSupply := types.NewSupply(sdk.NewCoins(test1Supply, test2Supply))
|
||||
app.BankKeeper.SetSupply(ctx, expectedTotalSupply)
|
||||
suite.
|
||||
Require().
|
||||
NoError(app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, expectedTotalSupply.Total))
|
||||
|
||||
req := abci.RequestQuery{
|
||||
Path: fmt.Sprintf("custom/%s/%s", types.ModuleName, types.QuerySupplyOf),
|
||||
|
||||
@ -17,12 +17,6 @@ type SendKeeper interface {
|
||||
InputOutputCoins(ctx sdk.Context, inputs []types.Input, outputs []types.Output) error
|
||||
SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error
|
||||
|
||||
SubtractCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) error
|
||||
AddCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) error
|
||||
|
||||
SetBalance(ctx sdk.Context, addr sdk.AccAddress, balance sdk.Coin) error
|
||||
SetBalances(ctx sdk.Context, addr sdk.AccAddress, balances sdk.Coins) error
|
||||
|
||||
GetParams(ctx sdk.Context) types.Params
|
||||
SetParams(ctx sdk.Context, params types.Params)
|
||||
|
||||
@ -89,7 +83,7 @@ func (k BaseSendKeeper) InputOutputCoins(ctx sdk.Context, inputs []types.Input,
|
||||
return err
|
||||
}
|
||||
|
||||
err = k.SubtractCoins(ctx, inAddress, in.Coins)
|
||||
err = k.subtractCoins(ctx, inAddress, in.Coins)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -107,7 +101,7 @@ func (k BaseSendKeeper) InputOutputCoins(ctx sdk.Context, inputs []types.Input,
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = k.AddCoins(ctx, outAddress, out.Coins)
|
||||
err = k.addCoins(ctx, outAddress, out.Coins)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -150,12 +144,12 @@ func (k BaseSendKeeper) SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAd
|
||||
),
|
||||
})
|
||||
|
||||
err := k.SubtractCoins(ctx, fromAddr, amt)
|
||||
err := k.subtractCoins(ctx, fromAddr, amt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = k.AddCoins(ctx, toAddr, amt)
|
||||
err = k.addCoins(ctx, toAddr, amt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -173,9 +167,9 @@ func (k BaseSendKeeper) SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAd
|
||||
return nil
|
||||
}
|
||||
|
||||
// SubtractCoins removes amt coins the account by the given address. An error is
|
||||
// subtractCoins removes amt coins the account by the given address. An error is
|
||||
// returned if the resulting balance is negative or the initial amount is invalid.
|
||||
func (k BaseSendKeeper) SubtractCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) error {
|
||||
func (k BaseSendKeeper) subtractCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) error {
|
||||
if !amt.IsValid() {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, amt.String())
|
||||
}
|
||||
@ -194,7 +188,7 @@ func (k BaseSendKeeper) SubtractCoins(ctx sdk.Context, addr sdk.AccAddress, amt
|
||||
|
||||
newBalance := balance.Sub(coin)
|
||||
|
||||
err := k.SetBalance(ctx, addr, newBalance)
|
||||
err := k.setBalance(ctx, addr, newBalance)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -203,10 +197,10 @@ func (k BaseSendKeeper) SubtractCoins(ctx sdk.Context, addr sdk.AccAddress, amt
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddCoins adds amt to the account balance given by the provided address. An
|
||||
// addCoins adds amt to the account balance given by the provided address. An
|
||||
// error is returned if the initial amount is invalid or if any resulting new
|
||||
// balance is negative.
|
||||
func (k BaseSendKeeper) AddCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) error {
|
||||
func (k BaseSendKeeper) addCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) error {
|
||||
if !amt.IsValid() {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, amt.String())
|
||||
}
|
||||
@ -215,7 +209,7 @@ func (k BaseSendKeeper) AddCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.C
|
||||
balance := k.GetBalance(ctx, addr, coin.Denom)
|
||||
newBalance := balance.Add(coin)
|
||||
|
||||
err := k.SetBalance(ctx, addr, newBalance)
|
||||
err := k.setBalance(ctx, addr, newBalance)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -239,14 +233,14 @@ func (k BaseSendKeeper) ClearBalances(ctx sdk.Context, addr sdk.AccAddress) {
|
||||
}
|
||||
}
|
||||
|
||||
// SetBalances sets the balance (multiple coins) for an account by address. It will
|
||||
// setBalances sets the balance (multiple coins) for an account by address. It will
|
||||
// clear out all balances prior to setting the new coins as to set existing balances
|
||||
// to zero if they don't exist in amt. An error is returned upon failure.
|
||||
func (k BaseSendKeeper) SetBalances(ctx sdk.Context, addr sdk.AccAddress, balances sdk.Coins) error {
|
||||
func (k BaseSendKeeper) setBalances(ctx sdk.Context, addr sdk.AccAddress, balances sdk.Coins) error {
|
||||
k.ClearBalances(ctx, addr)
|
||||
|
||||
for _, balance := range balances {
|
||||
err := k.SetBalance(ctx, addr, balance)
|
||||
err := k.setBalance(ctx, addr, balance)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -255,8 +249,8 @@ func (k BaseSendKeeper) SetBalances(ctx sdk.Context, addr sdk.AccAddress, balanc
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetBalance sets the coin balance for an account by address.
|
||||
func (k BaseSendKeeper) SetBalance(ctx sdk.Context, addr sdk.AccAddress, balance sdk.Coin) error {
|
||||
// setBalance sets the coin balance for an account by address.
|
||||
func (k BaseSendKeeper) setBalance(ctx sdk.Context, addr sdk.AccAddress, balance sdk.Coin) error {
|
||||
if !balance.IsValid() {
|
||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, balance.String())
|
||||
}
|
||||
|
||||
@ -131,8 +131,7 @@ func (suite *SimTestSuite) getTestingAccounts(r *rand.Rand, n int) []simtypes.Ac
|
||||
for _, account := range accounts {
|
||||
acc := suite.app.AccountKeeper.NewAccountWithAddress(suite.ctx, account.Address)
|
||||
suite.app.AccountKeeper.SetAccount(suite.ctx, acc)
|
||||
err := suite.app.BankKeeper.SetBalances(suite.ctx, account.Address, initCoins)
|
||||
suite.Require().NoError(err)
|
||||
suite.Require().NoError(simapp.FundAccount(suite.app, suite.ctx, account.Address, initCoins))
|
||||
}
|
||||
|
||||
return accounts
|
||||
|
||||
@ -84,12 +84,6 @@ type SendKeeper interface {
|
||||
InputOutputCoins(ctx sdk.Context, inputs []types.Input, outputs []types.Output) error
|
||||
SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error
|
||||
|
||||
SubtractCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) error
|
||||
AddCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) error
|
||||
|
||||
SetBalance(ctx sdk.Context, addr sdk.AccAddress, balance sdk.Coin) error
|
||||
SetBalances(ctx sdk.Context, addr sdk.AccAddress, balances sdk.Coins) error
|
||||
|
||||
GetParams(ctx sdk.Context) types.Params
|
||||
SetParams(ctx sdk.Context, params types.Params)
|
||||
|
||||
|
||||
@ -5,14 +5,11 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/tendermint/tendermint/libs/log"
|
||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
||||
dbm "github.com/tendermint/tm-db"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/crisis"
|
||||
"github.com/cosmos/cosmos-sdk/x/crisis/types"
|
||||
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
|
||||
@ -26,9 +23,8 @@ var (
|
||||
)
|
||||
|
||||
func createTestApp() (*simapp.SimApp, sdk.Context, []sdk.AccAddress) {
|
||||
db := dbm.NewMemDB()
|
||||
app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 1, simapp.MakeTestEncodingConfig(), simapp.EmptyAppOptions{})
|
||||
ctx := app.NewContext(true, tmproto.Header{})
|
||||
app := simapp.Setup(false)
|
||||
ctx := app.NewContext(false, tmproto.Header{})
|
||||
|
||||
constantFee := sdk.NewInt64Coin(sdk.DefaultBondDenom, 10)
|
||||
app.CrisisKeeper.SetConstantFee(ctx, constantFee)
|
||||
@ -40,7 +36,6 @@ func createTestApp() (*simapp.SimApp, sdk.Context, []sdk.AccAddress) {
|
||||
feePool := distrtypes.InitialFeePool()
|
||||
feePool.CommunityPool = sdk.NewDecCoinsFromCoins(sdk.NewCoins(constantFee)...)
|
||||
app.DistrKeeper.SetFeePool(ctx, feePool)
|
||||
app.BankKeeper.SetSupply(ctx, banktypes.NewSupply(sdk.Coins{}))
|
||||
|
||||
addrs := simapp.AddTestAddrs(app, ctx, 1, sdk.NewInt(10000))
|
||||
|
||||
|
||||
@ -82,8 +82,9 @@ func TestAllocateTokensToManyValidators(t *testing.T) {
|
||||
feeCollector := app.AccountKeeper.GetModuleAccount(ctx, types.FeeCollectorName)
|
||||
require.NotNil(t, feeCollector)
|
||||
|
||||
err := app.BankKeeper.SetBalances(ctx, feeCollector.GetAddress(), fees)
|
||||
require.NoError(t, err)
|
||||
// fund fee collector
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, feeCollector.GetAddress(), fees))
|
||||
|
||||
app.AccountKeeper.SetAccount(ctx, feeCollector)
|
||||
|
||||
votes := []abci.VoteInfo{
|
||||
@ -162,8 +163,7 @@ func TestAllocateTokensTruncation(t *testing.T) {
|
||||
feeCollector := app.AccountKeeper.GetModuleAccount(ctx, types.FeeCollectorName)
|
||||
require.NotNil(t, feeCollector)
|
||||
|
||||
err := app.BankKeeper.SetBalances(ctx, feeCollector.GetAddress(), fees)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, feeCollector.GetAddress(), fees))
|
||||
|
||||
app.AccountKeeper.SetAccount(ctx, feeCollector)
|
||||
|
||||
|
||||
@ -280,7 +280,7 @@ func TestWithdrawDelegationRewardsBasic(t *testing.T) {
|
||||
|
||||
// set module account coins
|
||||
distrAcc := app.DistrKeeper.GetDistributionAccount(ctx)
|
||||
require.NoError(t, app.BankKeeper.SetBalances(ctx, distrAcc.GetAddress(), sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, balanceTokens))))
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, distrAcc.GetAddress(), sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, balanceTokens))))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, distrAcc)
|
||||
|
||||
// create validator with 50% commission
|
||||
@ -492,8 +492,7 @@ func TestCalculateRewardsMultiDelegatorMultWithdraw(t *testing.T) {
|
||||
|
||||
// set module account coins
|
||||
distrAcc := app.DistrKeeper.GetDistributionAccount(ctx)
|
||||
err := app.BankKeeper.SetBalances(ctx, distrAcc.GetAddress(), sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1000))))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, distrAcc.GetAddress(), sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1000)))))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, distrAcc)
|
||||
|
||||
tokens := sdk.DecCoins{sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sdk.NewDec(initial))}
|
||||
@ -538,7 +537,7 @@ func TestCalculateRewardsMultiDelegatorMultWithdraw(t *testing.T) {
|
||||
app.DistrKeeper.AllocateTokensToValidator(ctx, val, tokens)
|
||||
|
||||
// first delegator withdraws
|
||||
_, err = app.DistrKeeper.WithdrawDelegationRewards(ctx, sdk.AccAddress(valAddrs[0]), valAddrs[0])
|
||||
_, err := app.DistrKeeper.WithdrawDelegationRewards(ctx, sdk.AccAddress(valAddrs[0]), valAddrs[0])
|
||||
require.NoError(t, err)
|
||||
|
||||
// second delegator withdraws
|
||||
|
||||
@ -97,12 +97,11 @@ func (k Keeper) InitGenesis(ctx sdk.Context, data types.GenesisState) {
|
||||
|
||||
balances := k.bankKeeper.GetAllBalances(ctx, moduleAcc.GetAddress())
|
||||
if balances.IsZero() {
|
||||
if err := k.bankKeeper.SetBalances(ctx, moduleAcc.GetAddress(), moduleHoldingsInt); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
k.authKeeper.SetModuleAccount(ctx, moduleAcc)
|
||||
}
|
||||
if !balances.IsEqual(moduleHoldingsInt) {
|
||||
panic(fmt.Sprintf("distribution module balance does not match the module holdings: %s <-> %s", balances, moduleHoldingsInt))
|
||||
}
|
||||
}
|
||||
|
||||
// ExportGenesis returns a GenesisState for a given context and keeper.
|
||||
|
||||
@ -623,7 +623,7 @@ func (suite *KeeperTestSuite) TestGRPCCommunityPool() {
|
||||
"valid request",
|
||||
func() {
|
||||
amount := sdk.NewCoins(sdk.NewInt64Coin("stake", 100))
|
||||
suite.Require().NoError(app.BankKeeper.SetBalances(ctx, addrs[0], amount))
|
||||
suite.Require().NoError(simapp.FundAccount(app, ctx, addrs[0], amount))
|
||||
|
||||
err := app.DistrKeeper.FundCommunityPool(ctx, amount, addrs[0])
|
||||
suite.Require().Nil(err)
|
||||
|
||||
@ -48,11 +48,9 @@ func TestWithdrawValidatorCommission(t *testing.T) {
|
||||
|
||||
// set module account coins
|
||||
distrAcc := app.DistrKeeper.GetDistributionAccount(ctx)
|
||||
err := app.BankKeeper.SetBalances(ctx, distrAcc.GetAddress(), sdk.NewCoins(
|
||||
sdk.NewCoin("mytoken", sdk.NewInt(2)),
|
||||
sdk.NewCoin("stake", sdk.NewInt(2)),
|
||||
))
|
||||
require.NoError(t, err)
|
||||
coins := sdk.NewCoins(sdk.NewCoin("mytoken", sdk.NewInt(2)), sdk.NewCoin("stake", sdk.NewInt(2)))
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, distrAcc.GetAddress(), coins))
|
||||
|
||||
app.AccountKeeper.SetModuleAccount(ctx, distrAcc)
|
||||
|
||||
// check initial balance
|
||||
@ -68,7 +66,7 @@ func TestWithdrawValidatorCommission(t *testing.T) {
|
||||
app.DistrKeeper.SetValidatorAccumulatedCommission(ctx, valAddrs[0], types.ValidatorAccumulatedCommission{Commission: valCommission})
|
||||
|
||||
// withdraw commission
|
||||
_, err = app.DistrKeeper.WithdrawValidatorCommission(ctx, valAddrs[0])
|
||||
_, err := app.DistrKeeper.WithdrawValidatorCommission(ctx, valAddrs[0])
|
||||
require.NoError(t, err)
|
||||
|
||||
// check balance increase
|
||||
@ -113,10 +111,10 @@ func TestFundCommunityPool(t *testing.T) {
|
||||
app := simapp.Setup(false)
|
||||
ctx := app.BaseApp.NewContext(false, tmproto.Header{})
|
||||
|
||||
addr := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(1000000000))
|
||||
addr := simapp.AddTestAddrs(app, ctx, 2, sdk.ZeroInt())
|
||||
|
||||
amount := sdk.NewCoins(sdk.NewInt64Coin("stake", 100))
|
||||
require.NoError(t, app.BankKeeper.SetBalances(ctx, addr[0], amount))
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, addr[0], amount))
|
||||
|
||||
initPool := app.DistrKeeper.GetFeePool(ctx)
|
||||
assert.Empty(t, initPool.CommunityPool)
|
||||
|
||||
@ -33,8 +33,7 @@ func TestProposalHandlerPassed(t *testing.T) {
|
||||
// add coins to the module account
|
||||
macc := app.DistrKeeper.GetDistributionAccount(ctx)
|
||||
balances := app.BankKeeper.GetAllBalances(ctx, macc.GetAddress())
|
||||
err := app.BankKeeper.SetBalances(ctx, macc.GetAddress(), balances.Add(amount...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, macc.GetAddress(), amount))
|
||||
|
||||
app.AccountKeeper.SetModuleAccount(ctx, macc)
|
||||
|
||||
|
||||
@ -143,11 +143,10 @@ func (suite *SimTestSuite) testSimulateMsgWithdrawValidatorCommission(tokenName
|
||||
|
||||
// set module account coins
|
||||
distrAcc := suite.app.DistrKeeper.GetDistributionAccount(suite.ctx)
|
||||
err := suite.app.BankKeeper.SetBalances(suite.ctx, distrAcc.GetAddress(), sdk.NewCoins(
|
||||
suite.Require().NoError(simapp.FundAccount(suite.app, suite.ctx, distrAcc.GetAddress(), sdk.NewCoins(
|
||||
sdk.NewCoin(tokenName, sdk.NewInt(10)),
|
||||
sdk.NewCoin("stake", sdk.NewInt(5)),
|
||||
))
|
||||
suite.Require().NoError(err)
|
||||
)))
|
||||
suite.app.AccountKeeper.SetModuleAccount(suite.ctx, distrAcc)
|
||||
|
||||
// set outstanding rewards
|
||||
@ -230,8 +229,7 @@ func (suite *SimTestSuite) getTestingAccounts(r *rand.Rand, n int) []simtypes.Ac
|
||||
for _, account := range accounts {
|
||||
acc := suite.app.AccountKeeper.NewAccountWithAddress(suite.ctx, account.Address)
|
||||
suite.app.AccountKeeper.SetAccount(suite.ctx, acc)
|
||||
err := suite.app.BankKeeper.SetBalances(suite.ctx, account.Address, initCoins)
|
||||
suite.Require().NoError(err)
|
||||
suite.Require().NoError(simapp.FundAccount(suite.app, suite.ctx, account.Address, initCoins))
|
||||
}
|
||||
|
||||
return accounts
|
||||
|
||||
@ -21,7 +21,6 @@ type AccountKeeper interface {
|
||||
type BankKeeper interface {
|
||||
GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
|
||||
GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin
|
||||
SetBalances(ctx sdk.Context, addr sdk.AccAddress, balances sdk.Coins) error
|
||||
LockedCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
|
||||
SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
|
||||
|
||||
|
||||
@ -5,6 +5,8 @@ import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
||||
|
||||
"github.com/stretchr/testify/suite"
|
||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
||||
|
||||
@ -14,7 +16,6 @@ import (
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/evidence/exported"
|
||||
"github.com/cosmos/cosmos-sdk/x/evidence/keeper"
|
||||
"github.com/cosmos/cosmos-sdk/x/evidence/types"
|
||||
@ -130,11 +131,10 @@ func (suite *KeeperTestSuite) populateValidators(ctx sdk.Context) {
|
||||
// add accounts and set total supply
|
||||
totalSupplyAmt := initAmt.MulRaw(int64(len(valAddresses)))
|
||||
totalSupply := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, totalSupplyAmt))
|
||||
suite.app.BankKeeper.SetSupply(ctx, banktypes.NewSupply(totalSupply))
|
||||
suite.NoError(suite.app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, totalSupply))
|
||||
|
||||
for _, addr := range valAddresses {
|
||||
err := suite.app.BankKeeper.AddCoins(ctx, sdk.AccAddress(addr), initCoins)
|
||||
suite.NoError(err)
|
||||
suite.NoError(suite.app.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, (sdk.AccAddress)(addr), initCoins))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -56,7 +56,7 @@ func (suite *AnteTestSuite) SetupTest(isCheckTx bool) {
|
||||
}
|
||||
|
||||
func (suite *AnteTestSuite) TestDeductFeesNoDelegation() {
|
||||
suite.SetupTest(true)
|
||||
suite.SetupTest(false)
|
||||
// setup
|
||||
app, ctx := suite.app, suite.ctx
|
||||
|
||||
@ -77,17 +77,15 @@ func (suite *AnteTestSuite) TestDeductFeesNoDelegation() {
|
||||
priv5, _, addr5 := testdata.KeyTestPubAddr()
|
||||
|
||||
// Set addr1 with insufficient funds
|
||||
acc1 := app.AccountKeeper.NewAccountWithAddress(ctx, addr1)
|
||||
app.AccountKeeper.SetAccount(ctx, acc1)
|
||||
app.BankKeeper.SetBalances(ctx, addr1, []sdk.Coin{sdk.NewCoin("atom", sdk.NewInt(10))})
|
||||
err := simapp.FundAccount(suite.app, suite.ctx, addr1, []sdk.Coin{sdk.NewCoin("atom", sdk.NewInt(10))})
|
||||
suite.Require().NoError(err)
|
||||
|
||||
// Set addr2 with more funds
|
||||
acc2 := app.AccountKeeper.NewAccountWithAddress(ctx, addr2)
|
||||
app.AccountKeeper.SetAccount(ctx, acc2)
|
||||
app.BankKeeper.SetBalances(ctx, addr2, []sdk.Coin{sdk.NewCoin("atom", sdk.NewInt(99999))})
|
||||
err = simapp.FundAccount(suite.app, suite.ctx, addr2, []sdk.Coin{sdk.NewCoin("atom", sdk.NewInt(99999))})
|
||||
suite.Require().NoError(err)
|
||||
|
||||
// grant fee allowance from `addr2` to `addr3` (plenty to pay)
|
||||
err := app.FeeGrantKeeper.GrantFeeAllowance(ctx, addr2, addr3, &types.BasicFeeAllowance{
|
||||
err = app.FeeGrantKeeper.GrantFeeAllowance(ctx, addr2, addr3, &types.BasicFeeAllowance{
|
||||
SpendLimit: sdk.NewCoins(sdk.NewInt64Coin("atom", 500)),
|
||||
})
|
||||
suite.Require().NoError(err)
|
||||
|
||||
@ -37,19 +37,15 @@ func (suite *SimTestSuite) SetupTest() {
|
||||
}
|
||||
|
||||
func (suite *SimTestSuite) getTestingAccounts(r *rand.Rand, n int) []simtypes.Account {
|
||||
app, ctx := suite.app, suite.ctx
|
||||
accounts := simtypes.RandomAccounts(r, n)
|
||||
require := suite.Require()
|
||||
|
||||
initAmt := sdk.TokensFromConsensusPower(200)
|
||||
initCoins := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, initAmt))
|
||||
|
||||
// add coins to the accounts
|
||||
for _, account := range accounts {
|
||||
acc := app.AccountKeeper.NewAccountWithAddress(ctx, account.Address)
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
err := app.BankKeeper.SetBalances(ctx, account.Address, initCoins)
|
||||
require.NoError(err)
|
||||
err := simapp.FundAccount(suite.app, suite.ctx, account.Address, initCoins)
|
||||
suite.Require().NoError(err)
|
||||
}
|
||||
|
||||
return accounts
|
||||
|
||||
@ -64,9 +64,7 @@ func (suite *GenTxTestSuite) setAccountBalance(addr sdk.AccAddress, amount int64
|
||||
acc := suite.app.AccountKeeper.NewAccountWithAddress(suite.ctx, addr)
|
||||
suite.app.AccountKeeper.SetAccount(suite.ctx, acc)
|
||||
|
||||
err := suite.app.BankKeeper.SetBalances(
|
||||
suite.ctx, addr, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 25)},
|
||||
)
|
||||
err := simapp.FundAccount(suite.app, suite.ctx, addr, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 25)})
|
||||
suite.Require().NoError(err)
|
||||
|
||||
bankGenesisState := suite.app.BankKeeper.ExportGenesis(suite.ctx)
|
||||
|
||||
@ -41,14 +41,16 @@ func InitGenesis(ctx sdk.Context, ak types.AccountKeeper, bk types.BankKeeper, k
|
||||
k.SetProposal(ctx, proposal)
|
||||
}
|
||||
|
||||
// add coins if not provided on genesis
|
||||
if bk.GetAllBalances(ctx, moduleAcc.GetAddress()).IsZero() {
|
||||
if err := bk.SetBalances(ctx, moduleAcc.GetAddress(), totalDeposits); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// if account has zero balance it probably means it's not set, so we set it
|
||||
balance := bk.GetAllBalances(ctx, moduleAcc.GetAddress())
|
||||
if balance.IsZero() {
|
||||
ak.SetModuleAccount(ctx, moduleAcc)
|
||||
}
|
||||
|
||||
// check if total deposits equals balance, if it doesn't panic because there were export/import errors
|
||||
if !balance.IsEqual(totalDeposits) {
|
||||
panic(fmt.Sprintf("expected module account was %s but we got %s", balance.String(), totalDeposits.String()))
|
||||
}
|
||||
}
|
||||
|
||||
// ExportGenesis - output genesis parameters
|
||||
|
||||
@ -11,6 +11,7 @@ import (
|
||||
dbm "github.com/tendermint/tm-db"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||
@ -111,6 +112,27 @@ func TestImportExportQueues(t *testing.T) {
|
||||
require.True(t, proposal2.Status == types.StatusRejected)
|
||||
}
|
||||
|
||||
func TestImportExportQueues_ErrorUnconsistentState(t *testing.T) {
|
||||
app := simapp.Setup(false)
|
||||
ctx := app.BaseApp.NewContext(false, tmproto.Header{})
|
||||
require.Panics(t, func() {
|
||||
gov.InitGenesis(ctx, app.AccountKeeper, app.BankKeeper, app.GovKeeper, &types.GenesisState{
|
||||
Deposits: types.Deposits{
|
||||
{
|
||||
1234,
|
||||
"me",
|
||||
sdk.Coins{
|
||||
{
|
||||
"stake",
|
||||
sdk.NewInt(1234),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func TestEqualProposals(t *testing.T) {
|
||||
app := simapp.Setup(false)
|
||||
ctx := app.BaseApp.NewContext(false, tmproto.Header{})
|
||||
|
||||
@ -271,8 +271,7 @@ func getTestingAccounts(t *testing.T, r *rand.Rand, app *simapp.SimApp, ctx sdk.
|
||||
for _, account := range accounts {
|
||||
acc := app.AccountKeeper.NewAccountWithAddress(ctx, account.Address)
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
err := app.BankKeeper.SetBalances(ctx, account.Address, initCoins)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, account.Address, initCoins))
|
||||
}
|
||||
|
||||
return accounts
|
||||
|
||||
@ -41,7 +41,6 @@ type AccountKeeper interface {
|
||||
type BankKeeper interface {
|
||||
GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
|
||||
GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin
|
||||
SetBalances(ctx sdk.Context, addr sdk.AccAddress, balances sdk.Coins) error
|
||||
LockedCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
|
||||
SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
|
||||
|
||||
|
||||
@ -262,22 +262,6 @@ func BankOfChain(chain *ibctesting.TestChain) Bank {
|
||||
return bank
|
||||
}
|
||||
|
||||
// Set balances of the chain bank for balances present in the bank
|
||||
func (suite *KeeperTestSuite) SetChainBankBalances(chain *ibctesting.TestChain, bank *Bank) error {
|
||||
for coin, amount := range bank.balances {
|
||||
address, err := sdk.AccAddressFromBech32(coin.Address)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
trace := types.ParseDenomTrace(coin.Denom)
|
||||
err = chain.App.BankKeeper.SetBalance(chain.GetContext(), address, sdk.NewCoin(trace.IBCDenom(), amount))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Check that the state of the bank is the bankBefore + expectedBankChange
|
||||
func (suite *KeeperTestSuite) CheckBankBalances(chain *ibctesting.TestChain, bankBefore *Bank, expectedBankChange *Bank) error {
|
||||
bankAfter := BankOfChain(chain)
|
||||
|
||||
@ -3,6 +3,8 @@ package keeper_test
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types"
|
||||
clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types"
|
||||
@ -257,8 +259,7 @@ func (suite *KeeperTestSuite) TestOnAcknowledgementPacket() {
|
||||
trace = types.ParseDenomTrace(sdk.DefaultBondDenom)
|
||||
coin := sdk.NewCoin(sdk.DefaultBondDenom, amount)
|
||||
|
||||
err := suite.chainA.App.BankKeeper.AddCoins(suite.chainA.GetContext(), escrow, sdk.NewCoins(coin))
|
||||
suite.Require().NoError(err)
|
||||
suite.Require().NoError(simapp.FundAccount(suite.chainA.App, suite.chainA.GetContext(), escrow, sdk.NewCoins(coin)))
|
||||
}, false, true},
|
||||
{"unsuccessful refund from source", failedAck,
|
||||
func() {
|
||||
@ -270,8 +271,7 @@ func (suite *KeeperTestSuite) TestOnAcknowledgementPacket() {
|
||||
trace = types.ParseDenomTrace(types.GetPrefixedDenom(channelA.PortID, channelA.ID, sdk.DefaultBondDenom))
|
||||
coin := sdk.NewCoin(trace.IBCDenom(), amount)
|
||||
|
||||
err := suite.chainA.App.BankKeeper.AddCoins(suite.chainA.GetContext(), escrow, sdk.NewCoins(coin))
|
||||
suite.Require().NoError(err)
|
||||
suite.Require().NoError(simapp.FundAccount(suite.chainA.App, suite.chainA.GetContext(), escrow, sdk.NewCoins(coin)))
|
||||
}, false, true},
|
||||
}
|
||||
|
||||
@ -332,8 +332,7 @@ func (suite *KeeperTestSuite) TestOnTimeoutPacket() {
|
||||
trace = types.ParseDenomTrace(sdk.DefaultBondDenom)
|
||||
coin := sdk.NewCoin(trace.IBCDenom(), amount)
|
||||
|
||||
err := suite.chainA.App.BankKeeper.AddCoins(suite.chainA.GetContext(), escrow, sdk.NewCoins(coin))
|
||||
suite.Require().NoError(err)
|
||||
suite.Require().NoError(simapp.FundAccount(suite.chainA.App, suite.chainA.GetContext(), escrow, sdk.NewCoins(coin)))
|
||||
}, true},
|
||||
{"successful timeout from external chain",
|
||||
func() {
|
||||
@ -341,8 +340,7 @@ func (suite *KeeperTestSuite) TestOnTimeoutPacket() {
|
||||
trace = types.ParseDenomTrace(types.GetPrefixedDenom(channelA.PortID, channelA.ID, sdk.DefaultBondDenom))
|
||||
coin := sdk.NewCoin(trace.IBCDenom(), amount)
|
||||
|
||||
err := suite.chainA.App.BankKeeper.AddCoins(suite.chainA.GetContext(), escrow, sdk.NewCoins(coin))
|
||||
suite.Require().NoError(err)
|
||||
suite.Require().NoError(simapp.FundAccount(suite.chainA.App, suite.chainA.GetContext(), escrow, sdk.NewCoins(coin)))
|
||||
}, true},
|
||||
{"no balance for coin denom",
|
||||
func() {
|
||||
|
||||
@ -123,8 +123,7 @@ func getTestingAccounts(t *testing.T, r *rand.Rand, app *simapp.SimApp, ctx sdk.
|
||||
for _, account := range accounts {
|
||||
acc := app.AccountKeeper.NewAccountWithAddress(ctx, account.Address)
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
err := app.BankKeeper.SetBalances(ctx, account.Address, initCoins)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, account.Address, initCoins))
|
||||
}
|
||||
|
||||
return accounts
|
||||
|
||||
@ -19,7 +19,6 @@ type AccountKeeper interface {
|
||||
type BankKeeper interface {
|
||||
GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
|
||||
GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin
|
||||
SetBalances(ctx sdk.Context, addr sdk.AccAddress, balances sdk.Coins) error
|
||||
LockedCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
|
||||
SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
|
||||
}
|
||||
|
||||
@ -105,30 +105,28 @@ func InitGenesis(
|
||||
if bondedPool == nil {
|
||||
panic(fmt.Sprintf("%s module account has not been set", types.BondedPoolName))
|
||||
}
|
||||
|
||||
// TODO remove with genesis 2-phases refactor https://github.com/cosmos/cosmos-sdk/issues/2862
|
||||
// add coins if not provided on genesis
|
||||
if bankKeeper.GetAllBalances(ctx, bondedPool.GetAddress()).IsZero() {
|
||||
if err := bankKeeper.SetBalances(ctx, bondedPool.GetAddress(), bondedCoins); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
bondedBalance := bankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
|
||||
if bondedBalance.IsZero() {
|
||||
accountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
}
|
||||
|
||||
// if balance is different from bonded coins panic because genesis is most likely malformed
|
||||
if !bondedBalance.IsEqual(bondedCoins) {
|
||||
panic(fmt.Sprintf("bonded pool balance is different from bonded coins: %s <-> %s", bondedBalance, bondedCoins))
|
||||
}
|
||||
notBondedPool := keeper.GetNotBondedPool(ctx)
|
||||
if notBondedPool == nil {
|
||||
panic(fmt.Sprintf("%s module account has not been set", types.NotBondedPoolName))
|
||||
}
|
||||
|
||||
if bankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress()).IsZero() {
|
||||
if err := bankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), notBondedCoins); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
notBondedBalance := bankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress())
|
||||
if notBondedBalance.IsZero() {
|
||||
accountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
}
|
||||
|
||||
// if balance is different from non bonded coins panic because genesis is most likely malformed
|
||||
if !notBondedBalance.IsEqual(notBondedCoins) {
|
||||
panic(fmt.Sprintf("not bonded pool balance is different from not bonded coins: %s <-> %s", notBondedBalance, notBondedCoins))
|
||||
}
|
||||
// don't need to run Tendermint updates if we exported
|
||||
if data.Exported {
|
||||
for _, lv := range data.LastValidatorPowers {
|
||||
|
||||
@ -2,47 +2,39 @@ package staking_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"testing"
|
||||
|
||||
auth "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
||||
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/staking"
|
||||
"github.com/cosmos/cosmos-sdk/x/staking/teststaking"
|
||||
"github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||
)
|
||||
|
||||
func bootstrapGenesisTest(t *testing.T, power int64, numAddrs int) (*simapp.SimApp, sdk.Context, []sdk.AccAddress) {
|
||||
func bootstrapGenesisTest(numAddrs int) (*simapp.SimApp, sdk.Context, []sdk.AccAddress) {
|
||||
_, app, ctx := getBaseSimappWithCustomKeeper()
|
||||
|
||||
addrDels, _ := generateAddresses(app, ctx, numAddrs, sdk.NewInt(10000))
|
||||
|
||||
amt := sdk.TokensFromConsensusPower(power)
|
||||
totalSupply := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), amt.MulRaw(int64(len(addrDels)))))
|
||||
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
err := app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), totalSupply)
|
||||
require.NoError(t, err)
|
||||
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
app.BankKeeper.SetSupply(ctx, banktypes.NewSupply(totalSupply))
|
||||
|
||||
return app, ctx, addrDels
|
||||
}
|
||||
|
||||
func TestInitGenesis(t *testing.T) {
|
||||
app, ctx, addrs := bootstrapGenesisTest(t, 1000, 10)
|
||||
app, ctx, addrs := bootstrapGenesisTest(10)
|
||||
|
||||
valTokens := sdk.TokensFromConsensusPower(1)
|
||||
|
||||
params := app.StakingKeeper.GetParams(ctx)
|
||||
validators := make([]types.Validator, 2)
|
||||
validators := app.StakingKeeper.GetAllValidators(ctx)
|
||||
var delegations []types.Delegation
|
||||
|
||||
pk0, err := codectypes.NewAnyWithValue(PKs[0])
|
||||
@ -52,19 +44,40 @@ func TestInitGenesis(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// initialize the validators
|
||||
validators[0].OperatorAddress = sdk.ValAddress(addrs[0]).String()
|
||||
validators[0].ConsensusPubkey = pk0
|
||||
validators[0].Description = types.NewDescription("hoop", "", "", "", "")
|
||||
validators[0].Status = types.Bonded
|
||||
validators[0].Tokens = valTokens
|
||||
validators[0].DelegatorShares = valTokens.ToDec()
|
||||
validators[1].OperatorAddress = sdk.ValAddress(addrs[1]).String()
|
||||
validators[1].ConsensusPubkey = pk1
|
||||
validators[1].Description = types.NewDescription("bloop", "", "", "", "")
|
||||
validators[1].Status = types.Bonded
|
||||
validators[1].Tokens = valTokens
|
||||
validators[1].DelegatorShares = valTokens.ToDec()
|
||||
bondedVal1 := types.Validator{
|
||||
OperatorAddress: sdk.ValAddress(addrs[0]).String(),
|
||||
ConsensusPubkey: pk0,
|
||||
Status: types.Bonded,
|
||||
Tokens: valTokens,
|
||||
DelegatorShares: valTokens.ToDec(),
|
||||
Description: types.NewDescription("hoop", "", "", "", ""),
|
||||
}
|
||||
bondedVal2 := types.Validator{
|
||||
OperatorAddress: sdk.ValAddress(addrs[1]).String(),
|
||||
ConsensusPubkey: pk1,
|
||||
Status: types.Bonded,
|
||||
Tokens: valTokens,
|
||||
DelegatorShares: valTokens.ToDec(),
|
||||
Description: types.NewDescription("bloop", "", "", "", ""),
|
||||
}
|
||||
|
||||
// append new bonded validators to the list
|
||||
validators = append(validators, bondedVal1, bondedVal2)
|
||||
log.Printf("%#v", len(validators))
|
||||
// mint coins in the bonded pool representing the validators coins
|
||||
require.NoError(t,
|
||||
simapp.FundAccount(
|
||||
app,
|
||||
ctx,
|
||||
auth.NewModuleAddress(types.BondedPoolName),
|
||||
sdk.NewCoins(
|
||||
sdk.NewCoin(
|
||||
params.BondDenom,
|
||||
valTokens.MulRaw((int64)(len(validators))),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
genesisState := types.NewGenesisState(params, validators, delegations)
|
||||
vals := staking.InitGenesis(ctx, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, genesisState)
|
||||
|
||||
@ -97,16 +110,63 @@ func TestInitGenesis(t *testing.T) {
|
||||
require.Equal(t, abcivals, vals)
|
||||
}
|
||||
|
||||
func TestInitGenesis_PoolsBalanceMismatch(t *testing.T) {
|
||||
app := simapp.Setup(false)
|
||||
ctx := app.NewContext(false, tmproto.Header{})
|
||||
|
||||
consPub, err := codectypes.NewAnyWithValue(PKs[0])
|
||||
require.NoError(t, err)
|
||||
|
||||
// create mock validator
|
||||
validator := types.Validator{
|
||||
OperatorAddress: sdk.ValAddress("12345678901234567890").String(),
|
||||
ConsensusPubkey: consPub,
|
||||
Jailed: false,
|
||||
Tokens: sdk.NewInt(10),
|
||||
DelegatorShares: sdk.NewInt(10).ToDec(),
|
||||
Description: types.NewDescription("bloop", "", "", "", ""),
|
||||
}
|
||||
// valid params
|
||||
params := types.Params{
|
||||
UnbondingTime: 10000,
|
||||
MaxValidators: 1,
|
||||
MaxEntries: 10,
|
||||
BondDenom: "stake",
|
||||
}
|
||||
|
||||
// test
|
||||
|
||||
require.Panics(t, func() {
|
||||
// setting validator status to bonded so the balance counts towards bonded pool
|
||||
validator.Status = types.Bonded
|
||||
staking.InitGenesis(ctx, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, &types.GenesisState{
|
||||
Params: params,
|
||||
Validators: []types.Validator{validator},
|
||||
})
|
||||
}, "should panic because bonded pool balance is different from bonded pool coins")
|
||||
|
||||
require.Panics(t, func() {
|
||||
// setting validator status to unbonded so the balance counts towards not bonded pool
|
||||
validator.Status = types.Unbonded
|
||||
staking.InitGenesis(ctx, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, &types.GenesisState{
|
||||
Params: params,
|
||||
Validators: []types.Validator{validator},
|
||||
})
|
||||
}, "should panic because not bonded pool balance is different from not bonded pool coins")
|
||||
}
|
||||
|
||||
func TestInitGenesisLargeValidatorSet(t *testing.T) {
|
||||
size := 200
|
||||
require.True(t, size > 100)
|
||||
|
||||
app, ctx, addrs := bootstrapGenesisTest(t, 1000, 200)
|
||||
app, ctx, addrs := bootstrapGenesisTest(200)
|
||||
|
||||
params := app.StakingKeeper.GetParams(ctx)
|
||||
delegations := []types.Delegation{}
|
||||
validators := make([]types.Validator, size)
|
||||
var err error
|
||||
|
||||
bondedPoolAmt := sdk.ZeroInt()
|
||||
for i := range validators {
|
||||
validators[i], err = types.NewValidator(sdk.ValAddress(addrs[i]),
|
||||
PKs[i], types.NewDescription(fmt.Sprintf("#%d", i), "", "", "", ""))
|
||||
@ -119,9 +179,22 @@ func TestInitGenesisLargeValidatorSet(t *testing.T) {
|
||||
}
|
||||
validators[i].Tokens = tokens
|
||||
validators[i].DelegatorShares = tokens.ToDec()
|
||||
// add bonded coins
|
||||
bondedPoolAmt = bondedPoolAmt.Add(tokens)
|
||||
}
|
||||
|
||||
genesisState := types.NewGenesisState(params, validators, delegations)
|
||||
// mint coins in the bonded pool representing the validators coins
|
||||
require.NoError(t,
|
||||
simapp.FundAccount(
|
||||
app,
|
||||
ctx,
|
||||
auth.NewModuleAddress(types.BondedPoolName),
|
||||
sdk.NewCoins(
|
||||
sdk.NewCoin(params.BondDenom, bondedPoolAmt),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
vals := staking.InitGenesis(ctx, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, genesisState)
|
||||
|
||||
abcivals := make([]abci.ValidatorUpdate, 100)
|
||||
|
||||
@ -20,7 +20,6 @@ import (
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/staking"
|
||||
"github.com/cosmos/cosmos-sdk/x/staking/keeper"
|
||||
"github.com/cosmos/cosmos-sdk/x/staking/teststaking"
|
||||
@ -36,12 +35,10 @@ func bootstrapHandlerGenesisTest(t *testing.T, power int64, numAddrs int, accAmo
|
||||
totalSupply := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), amt.MulRaw(int64(len(addrDels)))))
|
||||
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
err := app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), totalSupply)
|
||||
require.NoError(t, err)
|
||||
|
||||
// set non bonded pool balance
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
app.BankKeeper.SetSupply(ctx, banktypes.NewSupply(totalSupply))
|
||||
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), totalSupply))
|
||||
return app, ctx, addrDels, addrVals
|
||||
}
|
||||
|
||||
|
||||
@ -186,13 +186,7 @@ func TestUnbondDelegation(t *testing.T) {
|
||||
startTokens := sdk.TokensFromConsensusPower(10)
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
|
||||
require.NoError(t,
|
||||
app.BankKeeper.SetBalances(
|
||||
ctx,
|
||||
notBondedPool.GetAddress(),
|
||||
sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), startTokens)),
|
||||
),
|
||||
)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), startTokens))))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
// create a validator and a delegator to that validator
|
||||
@ -233,8 +227,7 @@ func TestUnbondingDelegationsMaxEntries(t *testing.T) {
|
||||
bondDenom := app.StakingKeeper.BondDenom(ctx)
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
|
||||
err := app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(bondDenom, startTokens)))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(bondDenom, startTokens))))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
// create a validator and a delegator to that validator
|
||||
@ -272,7 +265,7 @@ func TestUnbondingDelegationsMaxEntries(t *testing.T) {
|
||||
oldNotBonded = app.BankKeeper.GetBalance(ctx, app.StakingKeeper.GetNotBondedPool(ctx).GetAddress(), bondDenom).Amount
|
||||
|
||||
// an additional unbond should fail due to max entries
|
||||
_, err = app.StakingKeeper.Undelegate(ctx, addrDels[0], addrVals[0], sdk.NewDec(1))
|
||||
_, err := app.StakingKeeper.Undelegate(ctx, addrDels[0], addrVals[0], sdk.NewDec(1))
|
||||
require.Error(t, err)
|
||||
|
||||
newBonded = app.BankKeeper.GetBalance(ctx, app.StakingKeeper.GetBondedPool(ctx).GetAddress(), bondDenom).Amount
|
||||
@ -322,9 +315,7 @@ func TestUndelegateSelfDelegationBelowMinSelfDelegation(t *testing.T) {
|
||||
|
||||
// add bonded tokens to pool for delegations
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
oldNotBonded := app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress())
|
||||
err := app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), oldNotBonded.Add(delCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), delCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
|
||||
@ -336,9 +327,7 @@ func TestUndelegateSelfDelegationBelowMinSelfDelegation(t *testing.T) {
|
||||
|
||||
// add bonded tokens to pool for delegations
|
||||
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
|
||||
oldBonded := app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
|
||||
err = app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), oldBonded.Add(delCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), delCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
|
||||
// create a second delegation to this validator
|
||||
@ -348,9 +337,7 @@ func TestUndelegateSelfDelegationBelowMinSelfDelegation(t *testing.T) {
|
||||
require.Equal(t, delTokens, issuedShares.RoundInt())
|
||||
|
||||
// add bonded tokens to pool for delegations
|
||||
oldBonded = app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
|
||||
err = app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), oldBonded.Add(delCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), delCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
|
||||
validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
|
||||
@ -358,7 +345,7 @@ func TestUndelegateSelfDelegationBelowMinSelfDelegation(t *testing.T) {
|
||||
app.StakingKeeper.SetDelegation(ctx, delegation)
|
||||
|
||||
val0AccAddr := sdk.AccAddress(addrVals[0].Bytes())
|
||||
_, err = app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.TokensFromConsensusPower(6).ToDec())
|
||||
_, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.TokensFromConsensusPower(6).ToDec())
|
||||
require.NoError(t, err)
|
||||
|
||||
// end block
|
||||
@ -388,9 +375,7 @@ func TestUndelegateFromUnbondingValidator(t *testing.T) {
|
||||
|
||||
// add bonded tokens to pool for delegations
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
oldNotBonded := app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress())
|
||||
err := app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), oldNotBonded.Add(delCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), delCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
|
||||
@ -400,9 +385,7 @@ func TestUndelegateFromUnbondingValidator(t *testing.T) {
|
||||
app.StakingKeeper.SetDelegation(ctx, selfDelegation)
|
||||
|
||||
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
|
||||
oldBonded := app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
|
||||
err = app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), oldBonded.Add(delCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), delCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
|
||||
// create a second delegation to this validator
|
||||
@ -411,18 +394,14 @@ func TestUndelegateFromUnbondingValidator(t *testing.T) {
|
||||
validator, issuedShares = validator.AddTokensFromDel(delTokens)
|
||||
require.Equal(t, delTokens, issuedShares.RoundInt())
|
||||
|
||||
oldBonded = app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
|
||||
err = app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), oldBonded.Add(delCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), delCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
|
||||
validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
|
||||
delegation := types.NewDelegation(addrDels[1], addrVals[0], issuedShares)
|
||||
app.StakingKeeper.SetDelegation(ctx, delegation)
|
||||
|
||||
oldBonded = app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
|
||||
err = app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), oldBonded.Add(delCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), delCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
|
||||
header := ctx.BlockHeader()
|
||||
@ -434,7 +413,7 @@ func TestUndelegateFromUnbondingValidator(t *testing.T) {
|
||||
|
||||
// unbond the all self-delegation to put validator in unbonding state
|
||||
val0AccAddr := sdk.AccAddress(addrVals[0])
|
||||
_, err = app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], delTokens.ToDec())
|
||||
_, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], delTokens.ToDec())
|
||||
require.NoError(t, err)
|
||||
|
||||
// end block
|
||||
@ -474,9 +453,7 @@ func TestUndelegateFromUnbondedValidator(t *testing.T) {
|
||||
|
||||
// add bonded tokens to pool for delegations
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
oldNotBonded := app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress())
|
||||
err := app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), oldNotBonded.Add(delCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), delCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
// create a validator with a self-delegation
|
||||
@ -494,9 +471,7 @@ func TestUndelegateFromUnbondedValidator(t *testing.T) {
|
||||
app.StakingKeeper.SetDelegation(ctx, selfDelegation)
|
||||
|
||||
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
|
||||
oldBonded := app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
|
||||
err = app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), oldBonded.Add(delCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), delCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
|
||||
// create a second delegation to this validator
|
||||
@ -512,7 +487,7 @@ func TestUndelegateFromUnbondedValidator(t *testing.T) {
|
||||
ctx = ctx.WithBlockTime(time.Unix(333, 0))
|
||||
|
||||
// unbond the all self-delegation to put validator in unbonding state
|
||||
_, err = app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], valTokens.ToDec())
|
||||
_, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], valTokens.ToDec())
|
||||
require.NoError(t, err)
|
||||
|
||||
// end block
|
||||
@ -558,9 +533,7 @@ func TestUnbondingAllDelegationFromValidator(t *testing.T) {
|
||||
|
||||
// add bonded tokens to pool for delegations
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
oldNotBonded := app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress())
|
||||
err := app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), oldNotBonded.Add(delCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), delCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
//create a validator with a self-delegation
|
||||
@ -584,9 +557,7 @@ func TestUnbondingAllDelegationFromValidator(t *testing.T) {
|
||||
require.Equal(t, delTokens, issuedShares.RoundInt())
|
||||
|
||||
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
|
||||
oldBonded := app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
|
||||
err = app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), oldBonded.Add(delCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), delCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
|
||||
validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
|
||||
@ -599,7 +570,7 @@ func TestUnbondingAllDelegationFromValidator(t *testing.T) {
|
||||
ctx = ctx.WithBlockTime(time.Unix(333, 0))
|
||||
|
||||
// unbond the all self-delegation to put validator in unbonding state
|
||||
_, err = app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], valTokens.ToDec())
|
||||
_, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], valTokens.ToDec())
|
||||
require.NoError(t, err)
|
||||
|
||||
// end block
|
||||
@ -725,9 +696,7 @@ func TestRedelegateToSameValidator(t *testing.T) {
|
||||
|
||||
// add bonded tokens to pool for delegations
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
oldNotBonded := app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress())
|
||||
err := app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), oldNotBonded.Add(startCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), startCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
// create a validator with a self-delegation
|
||||
@ -741,7 +710,7 @@ func TestRedelegateToSameValidator(t *testing.T) {
|
||||
selfDelegation := types.NewDelegation(val0AccAddr, addrVals[0], issuedShares)
|
||||
app.StakingKeeper.SetDelegation(ctx, selfDelegation)
|
||||
|
||||
_, err = app.StakingKeeper.BeginRedelegation(ctx, val0AccAddr, addrVals[0], addrVals[0], sdk.NewDec(5))
|
||||
_, err := app.StakingKeeper.BeginRedelegation(ctx, val0AccAddr, addrVals[0], addrVals[0], sdk.NewDec(5))
|
||||
require.Error(t, err)
|
||||
}
|
||||
|
||||
@ -756,9 +725,7 @@ func TestRedelegationMaxEntries(t *testing.T) {
|
||||
|
||||
// add bonded tokens to pool for delegations
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
oldNotBonded := app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress())
|
||||
err := app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), oldNotBonded.Add(startCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), startCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
// create a validator with a self-delegation
|
||||
@ -790,7 +757,7 @@ func TestRedelegationMaxEntries(t *testing.T) {
|
||||
}
|
||||
|
||||
// an additional redelegation should fail due to max entries
|
||||
_, err = app.StakingKeeper.BeginRedelegation(ctx, val0AccAddr, addrVals[0], addrVals[1], sdk.NewDec(1))
|
||||
_, err := app.StakingKeeper.BeginRedelegation(ctx, val0AccAddr, addrVals[0], addrVals[1], sdk.NewDec(1))
|
||||
require.Error(t, err)
|
||||
|
||||
// mature redelegations
|
||||
@ -814,9 +781,7 @@ func TestRedelegateSelfDelegation(t *testing.T) {
|
||||
|
||||
// add bonded tokens to pool for delegations
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
oldNotBonded := app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress())
|
||||
err := app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), oldNotBonded.Add(startCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), startCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
//create a validator with a self-delegation
|
||||
@ -849,7 +814,7 @@ func TestRedelegateSelfDelegation(t *testing.T) {
|
||||
delegation := types.NewDelegation(addrDels[0], addrVals[0], issuedShares)
|
||||
app.StakingKeeper.SetDelegation(ctx, delegation)
|
||||
|
||||
_, err = app.StakingKeeper.BeginRedelegation(ctx, val0AccAddr, addrVals[0], addrVals[1], delTokens.ToDec())
|
||||
_, err := app.StakingKeeper.BeginRedelegation(ctx, val0AccAddr, addrVals[0], addrVals[1], delTokens.ToDec())
|
||||
require.NoError(t, err)
|
||||
|
||||
// end block
|
||||
@ -872,9 +837,7 @@ func TestRedelegateFromUnbondingValidator(t *testing.T) {
|
||||
|
||||
// add bonded tokens to pool for delegations
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
oldNotBonded := app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress())
|
||||
err := app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), oldNotBonded.Add(startCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), startCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
//create a validator with a self-delegation
|
||||
@ -912,7 +875,7 @@ func TestRedelegateFromUnbondingValidator(t *testing.T) {
|
||||
ctx = ctx.WithBlockHeader(header)
|
||||
|
||||
// unbond the all self-delegation to put validator in unbonding state
|
||||
_, err = app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], delTokens.ToDec())
|
||||
_, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], delTokens.ToDec())
|
||||
require.NoError(t, err)
|
||||
|
||||
// end block
|
||||
@ -956,9 +919,7 @@ func TestRedelegateFromUnbondedValidator(t *testing.T) {
|
||||
|
||||
// add bonded tokens to pool for delegations
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
oldNotBonded := app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress())
|
||||
err := app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), oldNotBonded.Add(startCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), startCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
//create a validator with a self-delegation
|
||||
@ -993,7 +954,7 @@ func TestRedelegateFromUnbondedValidator(t *testing.T) {
|
||||
ctx = ctx.WithBlockTime(time.Unix(333, 0))
|
||||
|
||||
// unbond the all self-delegation to put validator in unbonding state
|
||||
_, err = app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], delTokens.ToDec())
|
||||
_, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], delTokens.ToDec())
|
||||
require.NoError(t, err)
|
||||
|
||||
// end block
|
||||
|
||||
@ -10,7 +10,6 @@ import (
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/staking/keeper"
|
||||
"github.com/cosmos/cosmos-sdk/x/staking/teststaking"
|
||||
"github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||
@ -26,8 +25,7 @@ func bootstrapSlashTest(t *testing.T, power int64) (*simapp.SimApp, sdk.Context,
|
||||
totalSupply := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), amt.MulRaw(int64(len(addrDels)))))
|
||||
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
err := app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), totalSupply)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), totalSupply))
|
||||
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
@ -35,11 +33,9 @@ func bootstrapSlashTest(t *testing.T, power int64) (*simapp.SimApp, sdk.Context,
|
||||
bondedCoins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), amt.MulRaw(numVals)))
|
||||
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
|
||||
|
||||
err = app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), bondedCoins)
|
||||
require.NoError(t, err)
|
||||
|
||||
// set bonded pool balance
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
app.BankKeeper.SetSupply(ctx, banktypes.NewSupply(totalSupply))
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), bondedCoins))
|
||||
|
||||
for i := int64(0); i < numVals; i++ {
|
||||
validator := teststaking.NewValidator(t, addrVals[i], PKs[i])
|
||||
@ -129,7 +125,7 @@ func TestSlashRedelegation(t *testing.T) {
|
||||
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
|
||||
balances := app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
|
||||
|
||||
require.NoError(t, app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), balances.Add(startCoins...)))
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), startCoins))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
|
||||
// set a redelegation with an expiration timestamp beyond which the
|
||||
@ -408,10 +404,7 @@ func TestSlashWithRedelegation(t *testing.T) {
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
rdCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, rdTokens.MulRaw(2)))
|
||||
|
||||
balances := app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
|
||||
|
||||
err := app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), balances.Add(rdCoins...))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), rdCoins))
|
||||
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
|
||||
@ -574,11 +567,9 @@ func TestSlashBoth(t *testing.T) {
|
||||
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
|
||||
bondedPoolBalances := app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
|
||||
require.NoError(t, app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), bondedPoolBalances.Add(bondedCoins...)))
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), bondedCoins))
|
||||
|
||||
notBondedPoolBalances := app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress())
|
||||
require.NoError(t, app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), notBondedPoolBalances.Add(notBondedCoins...)))
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), notBondedCoins))
|
||||
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
@ -13,7 +13,6 @@ import (
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/staking/keeper"
|
||||
"github.com/cosmos/cosmos-sdk/x/staking/teststaking"
|
||||
"github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||
@ -34,11 +33,10 @@ func bootstrapValidatorTest(t testing.TB, power int64, numAddrs int) (*simapp.Si
|
||||
totalSupply := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), amt.MulRaw(int64(len(addrDels)))))
|
||||
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
err := app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), totalSupply)
|
||||
require.NoError(t, err)
|
||||
|
||||
// set bonded pool supply
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
app.BankKeeper.SetSupply(ctx, banktypes.NewSupply(totalSupply))
|
||||
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), totalSupply))
|
||||
|
||||
return app, ctx, addrDels, addrVals
|
||||
}
|
||||
@ -115,11 +113,9 @@ func TestUpdateValidatorByPowerIndex(t *testing.T) {
|
||||
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
|
||||
err := app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), sdk.TokensFromConsensusPower(1234))))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), sdk.TokensFromConsensusPower(1234)))))
|
||||
|
||||
err = app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), sdk.TokensFromConsensusPower(10000))))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), sdk.TokensFromConsensusPower(10000)))))
|
||||
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
@ -167,11 +163,9 @@ func TestUpdateBondedValidatorsDecreaseCliff(t *testing.T) {
|
||||
app.StakingKeeper.SetParams(ctx, params)
|
||||
|
||||
// create a random pool
|
||||
err := app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), sdk.TokensFromConsensusPower(1234))))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), sdk.TokensFromConsensusPower(1234)))))
|
||||
|
||||
err = app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), sdk.TokensFromConsensusPower(10000))))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), sdk.TokensFromConsensusPower(10000)))))
|
||||
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
@ -225,8 +219,7 @@ func TestSlashToZeroPowerRemoved(t *testing.T) {
|
||||
|
||||
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
|
||||
|
||||
err := app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), valTokens)))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), valTokens))))
|
||||
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
|
||||
@ -431,11 +424,9 @@ func TestGetValidatorSortingMixed(t *testing.T) {
|
||||
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
|
||||
err := app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), sdk.TokensFromConsensusPower(501))))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), sdk.TokensFromConsensusPower(501)))))
|
||||
|
||||
err = app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), sdk.TokensFromConsensusPower(0))))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), sdk.TokensFromConsensusPower(0)))))
|
||||
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
@ -509,9 +500,7 @@ func TestGetValidatorsEdgeCases(t *testing.T) {
|
||||
validators[i], _ = validators[i].AddTokensFromDel(tokens)
|
||||
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
balances := app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress())
|
||||
require.NoError(t, app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), balances.Add(sdk.NewCoin(params.BondDenom, tokens))))
|
||||
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(params.BondDenom, tokens))))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
validators[i] = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validators[i], true)
|
||||
}
|
||||
@ -529,9 +518,8 @@ func TestGetValidatorsEdgeCases(t *testing.T) {
|
||||
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
|
||||
newTokens := sdk.NewCoins()
|
||||
balances := app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress())
|
||||
|
||||
require.NoError(t, app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), balances.Add(newTokens...)))
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), newTokens))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
// test that the two largest validators are
|
||||
@ -563,8 +551,7 @@ func TestGetValidatorsEdgeCases(t *testing.T) {
|
||||
|
||||
notBondedPool = app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
newTokens = sdk.NewCoins(sdk.NewCoin(params.BondDenom, sdk.TokensFromConsensusPower(1)))
|
||||
balances = app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress())
|
||||
require.NoError(t, app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), balances.Add(newTokens...)))
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), newTokens))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
validators[3] = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validators[3], true)
|
||||
@ -579,8 +566,7 @@ func TestGetValidatorsEdgeCases(t *testing.T) {
|
||||
validators[3], _ = validators[3].RemoveDelShares(sdk.NewDec(201))
|
||||
|
||||
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
|
||||
balances = app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
|
||||
require.NoError(t, app.BankKeeper.SetBalances(ctx, bondedPool.GetAddress(), balances.Add(sdk.NewCoin(params.BondDenom, rmTokens))))
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, bondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(params.BondDenom, rmTokens))))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
|
||||
|
||||
validators[3] = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validators[3], true)
|
||||
@ -594,8 +580,7 @@ func TestGetValidatorsEdgeCases(t *testing.T) {
|
||||
validators[3], _ = validators[3].AddTokensFromDel(sdk.NewInt(200))
|
||||
|
||||
notBondedPool = app.StakingKeeper.GetNotBondedPool(ctx)
|
||||
balances = app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress())
|
||||
require.NoError(t, app.BankKeeper.SetBalances(ctx, notBondedPool.GetAddress(), balances.Add(sdk.NewCoin(params.BondDenom, sdk.NewInt(200)))))
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, notBondedPool.GetAddress(), sdk.NewCoins(sdk.NewCoin(params.BondDenom, sdk.NewInt(200)))))
|
||||
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
|
||||
|
||||
validators[3] = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validators[3], true)
|
||||
|
||||
@ -283,8 +283,7 @@ func getTestingAccounts(t *testing.T, r *rand.Rand, app *simapp.SimApp, ctx sdk.
|
||||
for _, account := range accounts {
|
||||
acc := app.AccountKeeper.NewAccountWithAddress(ctx, account.Address)
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
err := app.BankKeeper.SetBalances(ctx, account.Address, initCoins)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, simapp.FundAccount(app, ctx, account.Address, initCoins))
|
||||
}
|
||||
|
||||
return accounts
|
||||
|
||||
@ -28,7 +28,6 @@ type AccountKeeper interface {
|
||||
type BankKeeper interface {
|
||||
GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
|
||||
GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin
|
||||
SetBalances(ctx sdk.Context, addr sdk.AccAddress, balances sdk.Coins) error
|
||||
LockedCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
|
||||
SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user