Merge PR #3403: Implement parameter-controlled bank/send switch-off
This commit is contained in:
parent
6de39e19f3
commit
f16cc31919
2
Makefile
2
Makefile
|
@ -15,7 +15,7 @@ GOTOOLS = \
|
|||
github.com/rakyll/statik
|
||||
GOBIN ?= $(GOPATH)/bin
|
||||
|
||||
all: devtools install test_lint test
|
||||
all: devtools vendor-deps install test_lint test
|
||||
|
||||
# The below include contains the tools target.
|
||||
include scripts/Makefile
|
||||
|
|
|
@ -102,7 +102,11 @@ func NewGaiaApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b
|
|||
)
|
||||
|
||||
// add handlers
|
||||
app.bankKeeper = bank.NewBaseKeeper(app.accountKeeper)
|
||||
app.bankKeeper = bank.NewBaseKeeper(
|
||||
app.accountKeeper,
|
||||
app.paramsKeeper.Subspace(bank.DefaultParamspace),
|
||||
bank.DefaultCodespace,
|
||||
)
|
||||
app.feeCollectionKeeper = auth.NewFeeCollectionKeeper(
|
||||
app.cdc,
|
||||
app.keyFeeCollection,
|
||||
|
@ -248,6 +252,7 @@ func (app *GaiaApp) initFromGenesisState(ctx sdk.Context, genesisState GenesisSt
|
|||
|
||||
// initialize module-specific stores
|
||||
auth.InitGenesis(ctx, app.accountKeeper, app.feeCollectionKeeper, genesisState.AuthData)
|
||||
bank.InitGenesis(ctx, app.bankKeeper, genesisState.BankData)
|
||||
slashing.InitGenesis(ctx, app.slashingKeeper, genesisState.SlashingData, genesisState.StakingData)
|
||||
gov.InitGenesis(ctx, app.govKeeper, genesisState.GovData)
|
||||
mint.InitGenesis(ctx, app.mintKeeper, genesisState.MintData)
|
||||
|
|
|
@ -4,6 +4,8 @@ import (
|
|||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/x/bank"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/tendermint/tendermint/libs/db"
|
||||
"github.com/tendermint/tendermint/libs/log"
|
||||
|
@ -28,6 +30,7 @@ func setGenesis(gapp *GaiaApp, accs ...*auth.BaseAccount) error {
|
|||
genesisState := NewGenesisState(
|
||||
genaccs,
|
||||
auth.DefaultGenesisState(),
|
||||
bank.DefaultGenesisState(),
|
||||
staking.DefaultGenesisState(),
|
||||
mint.DefaultGenesisState(),
|
||||
distr.DefaultGenesisState(),
|
||||
|
|
|
@ -9,6 +9,7 @@ import (
|
|||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
||||
"github.com/cosmos/cosmos-sdk/x/bank"
|
||||
distr "github.com/cosmos/cosmos-sdk/x/distribution"
|
||||
"github.com/cosmos/cosmos-sdk/x/gov"
|
||||
"github.com/cosmos/cosmos-sdk/x/mint"
|
||||
|
@ -39,6 +40,7 @@ func (app *GaiaApp) ExportAppStateAndValidators(forZeroHeight bool) (
|
|||
genState := NewGenesisState(
|
||||
accounts,
|
||||
auth.ExportGenesis(ctx, app.accountKeeper, app.feeCollectionKeeper),
|
||||
bank.ExportGenesis(ctx, app.bankKeeper),
|
||||
staking.ExportGenesis(ctx, app.stakingKeeper),
|
||||
mint.ExportGenesis(ctx, app.mintKeeper),
|
||||
distr.ExportGenesis(ctx, app.distrKeeper),
|
||||
|
|
|
@ -10,6 +10,8 @@ import (
|
|||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/x/bank"
|
||||
|
||||
tmtypes "github.com/tendermint/tendermint/types"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
|
@ -34,6 +36,7 @@ var (
|
|||
type GenesisState struct {
|
||||
Accounts []GenesisAccount `json:"accounts"`
|
||||
AuthData auth.GenesisState `json:"auth"`
|
||||
BankData bank.GenesisState `json:"bank"`
|
||||
StakingData staking.GenesisState `json:"staking"`
|
||||
MintData mint.GenesisState `json:"mint"`
|
||||
DistrData distr.GenesisState `json:"distr"`
|
||||
|
@ -43,6 +46,7 @@ type GenesisState struct {
|
|||
}
|
||||
|
||||
func NewGenesisState(accounts []GenesisAccount, authData auth.GenesisState,
|
||||
bankData bank.GenesisState,
|
||||
stakingData staking.GenesisState, mintData mint.GenesisState,
|
||||
distrData distr.GenesisState, govData gov.GenesisState,
|
||||
slashingData slashing.GenesisState) GenesisState {
|
||||
|
@ -50,6 +54,7 @@ func NewGenesisState(accounts []GenesisAccount, authData auth.GenesisState,
|
|||
return GenesisState{
|
||||
Accounts: accounts,
|
||||
AuthData: authData,
|
||||
BankData: bankData,
|
||||
StakingData: stakingData,
|
||||
MintData: mintData,
|
||||
DistrData: distrData,
|
||||
|
@ -201,6 +206,7 @@ func NewDefaultGenesisState() GenesisState {
|
|||
return GenesisState{
|
||||
Accounts: nil,
|
||||
AuthData: auth.DefaultGenesisState(),
|
||||
BankData: bank.DefaultGenesisState(),
|
||||
StakingData: staking.DefaultGenesisState(),
|
||||
MintData: mint.DefaultGenesisState(),
|
||||
DistrData: distr.DefaultGenesisState(),
|
||||
|
@ -227,6 +233,9 @@ func GaiaValidateGenesisState(genesisState GenesisState) error {
|
|||
if err := auth.ValidateGenesis(genesisState.AuthData); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := bank.ValidateGenesis(genesisState.BankData); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := staking.ValidateGenesis(genesisState.StakingData); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ import (
|
|||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
||||
authsim "github.com/cosmos/cosmos-sdk/x/auth/simulation"
|
||||
"github.com/cosmos/cosmos-sdk/x/bank"
|
||||
banksim "github.com/cosmos/cosmos-sdk/x/bank/simulation"
|
||||
distr "github.com/cosmos/cosmos-sdk/x/distribution"
|
||||
distrsim "github.com/cosmos/cosmos-sdk/x/distribution/simulation"
|
||||
|
@ -118,6 +119,9 @@ func appStateFn(r *rand.Rand, accs []simulation.Account, genesisTimestamp time.T
|
|||
}
|
||||
fmt.Printf("Selected randomly generated auth parameters:\n\t%+v\n", authGenesis)
|
||||
|
||||
bankGenesis := bank.NewGenesisState(r.Int63n(2) == 0)
|
||||
fmt.Printf("Selected randomly generated bank parameters:\n\t%+v\n", bankGenesis)
|
||||
|
||||
// Random genesis states
|
||||
vp := time.Duration(r.Intn(2*172800)) * time.Second
|
||||
govGenesis := gov.GenesisState{
|
||||
|
@ -203,6 +207,7 @@ func appStateFn(r *rand.Rand, accs []simulation.Account, genesisTimestamp time.T
|
|||
genesis := GenesisState{
|
||||
Accounts: genesisAccounts,
|
||||
AuthData: authGenesis,
|
||||
BankData: bankGenesis,
|
||||
StakingData: stakingGenesis,
|
||||
MintData: mintGenesis,
|
||||
DistrData: distrGenesis,
|
||||
|
|
|
@ -178,7 +178,7 @@ func NewGaiaApp(logger log.Logger, db dbm.DB, baseAppOptions ...func(*bam.BaseAp
|
|||
)
|
||||
|
||||
// add handlers
|
||||
app.bankKeeper = bank.NewBaseKeeper(app.accountKeeper)
|
||||
app.bankKeeper = bank.NewBaseKeeper(app.accountKeeper, app.paramsKeeper.Subspace(bank.DefaultParamspace), bank.DefaultCodespace)
|
||||
app.stakingKeeper = staking.NewKeeper(app.cdc, app.keyStaking, app.tkeyStaking, app.bankKeeper, app.paramsKeeper.Subspace(staking.DefaultParamspace), staking.DefaultCodespace)
|
||||
app.slashingKeeper = slashing.NewKeeper(app.cdc, app.keySlashing, app.stakingKeeper, app.paramsKeeper.Subspace(slashing.DefaultParamspace), slashing.DefaultCodespace)
|
||||
|
||||
|
|
|
@ -91,6 +91,17 @@ func getMockApp(t *testing.T) *mock.App {
|
|||
return mapp
|
||||
}
|
||||
|
||||
// overwrite the mock init chainer
|
||||
func getInitChainer(mapp *mock.App, keeper BaseKeeper) sdk.InitChainer {
|
||||
return func(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain {
|
||||
mapp.InitChainer(ctx, req)
|
||||
bankGenesis := DefaultGenesisState()
|
||||
InitGenesis(ctx, keeper, bankGenesis)
|
||||
|
||||
return abci.ResponseInitChain{}
|
||||
}
|
||||
}
|
||||
|
||||
func TestMsgSendWithAccounts(t *testing.T) {
|
||||
mapp := getMockApp(t)
|
||||
acc := &auth.BaseAccount{
|
||||
|
|
|
@ -16,8 +16,13 @@ func getBenchmarkMockApp() (*mock.App, error) {
|
|||
mapp := mock.NewApp()
|
||||
|
||||
RegisterCodec(mapp.Cdc)
|
||||
bankKeeper := NewBaseKeeper(mapp.AccountKeeper)
|
||||
bankKeeper := NewBaseKeeper(
|
||||
mapp.AccountKeeper,
|
||||
mapp.ParamsKeeper.Subspace(DefaultParamspace),
|
||||
DefaultCodespace,
|
||||
)
|
||||
mapp.Router().AddRoute("bank", NewHandler(bankKeeper))
|
||||
mapp.SetInitChainer(getInitChainer(mapp, bankKeeper))
|
||||
|
||||
err := mapp.CompleteSetup()
|
||||
return mapp, err
|
||||
|
|
|
@ -11,6 +11,7 @@ const (
|
|||
|
||||
CodeInvalidInput sdk.CodeType = 101
|
||||
CodeInvalidOutput sdk.CodeType = 102
|
||||
CodeSendDisabled sdk.CodeType = 103
|
||||
)
|
||||
|
||||
// NOTE: Don't stringer this, we'll put better messages in later.
|
||||
|
@ -44,6 +45,10 @@ func ErrNoOutputs(codespace sdk.CodespaceType) sdk.Error {
|
|||
return newError(codespace, CodeInvalidOutput, "")
|
||||
}
|
||||
|
||||
func ErrSendDisabled(codespace sdk.CodespaceType) sdk.Error {
|
||||
return newError(codespace, CodeSendDisabled, "")
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
|
||||
func msgOrDefaultMsg(msg string, code sdk.CodeType) string {
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
package bank
|
||||
|
||||
import (
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
// GenesisState is the bank state that must be provided at genesis.
|
||||
type GenesisState struct {
|
||||
SendEnabled bool `json:"send_enabled"`
|
||||
}
|
||||
|
||||
// NewGenesisState creates a new genesis state.
|
||||
func NewGenesisState(sendEnabled bool) GenesisState {
|
||||
return GenesisState{SendEnabled: sendEnabled}
|
||||
}
|
||||
|
||||
// Return a default genesis state
|
||||
func DefaultGenesisState() GenesisState { return NewGenesisState(true) }
|
||||
|
||||
// InitGenesis sets distribution information for genesis.
|
||||
func InitGenesis(ctx sdk.Context, keeper Keeper, data GenesisState) {
|
||||
keeper.SetSendEnabled(ctx, data.SendEnabled)
|
||||
}
|
||||
|
||||
// ExportGenesis returns a GenesisState for a given context and keeper.
|
||||
func ExportGenesis(ctx sdk.Context, keeper Keeper) GenesisState {
|
||||
return NewGenesisState(keeper.GetSendEnabled(ctx))
|
||||
}
|
||||
|
||||
// ValidateGenesis performs basic validation of bank genesis data returning an
|
||||
// error for any failed validation criteria.
|
||||
func ValidateGenesis(data GenesisState) error { return nil }
|
|
@ -20,6 +20,9 @@ func NewHandler(k Keeper) sdk.Handler {
|
|||
// Handle MsgSend.
|
||||
func handleMsgSend(ctx sdk.Context, k Keeper, msg MsgSend) sdk.Result {
|
||||
// NOTE: totalIn == totalOut should already have been checked
|
||||
if !k.GetSendEnabled(ctx) {
|
||||
return ErrSendDisabled(k.Codespace()).Result()
|
||||
}
|
||||
tags, err := k.InputOutputCoins(ctx, msg.Inputs, msg.Outputs)
|
||||
if err != nil {
|
||||
return err.Result()
|
||||
|
|
|
@ -6,6 +6,7 @@ import (
|
|||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
||||
"github.com/cosmos/cosmos-sdk/x/params"
|
||||
)
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
@ -33,13 +34,19 @@ type BaseKeeper struct {
|
|||
BaseSendKeeper
|
||||
|
||||
ak auth.AccountKeeper
|
||||
paramSpace params.Subspace
|
||||
}
|
||||
|
||||
// NewBaseKeeper returns a new BaseKeeper
|
||||
func NewBaseKeeper(ak auth.AccountKeeper) BaseKeeper {
|
||||
func NewBaseKeeper(ak auth.AccountKeeper,
|
||||
paramSpace params.Subspace,
|
||||
codespace sdk.CodespaceType) BaseKeeper {
|
||||
|
||||
ps := paramSpace.WithTypeTable(ParamTypeTable())
|
||||
return BaseKeeper{
|
||||
BaseSendKeeper: NewBaseSendKeeper(ak),
|
||||
BaseSendKeeper: NewBaseSendKeeper(ak, ps, codespace),
|
||||
ak: ak,
|
||||
paramSpace: ps,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -95,6 +102,9 @@ type SendKeeper interface {
|
|||
ViewKeeper
|
||||
|
||||
SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) (sdk.Tags, sdk.Error)
|
||||
|
||||
GetSendEnabled(ctx sdk.Context) bool
|
||||
SetSendEnabled(ctx sdk.Context, enabled bool)
|
||||
}
|
||||
|
||||
var _ SendKeeper = (*BaseSendKeeper)(nil)
|
||||
|
@ -105,13 +115,17 @@ type BaseSendKeeper struct {
|
|||
BaseViewKeeper
|
||||
|
||||
ak auth.AccountKeeper
|
||||
paramSpace params.Subspace
|
||||
}
|
||||
|
||||
// NewBaseSendKeeper returns a new BaseSendKeeper.
|
||||
func NewBaseSendKeeper(ak auth.AccountKeeper) BaseSendKeeper {
|
||||
func NewBaseSendKeeper(ak auth.AccountKeeper,
|
||||
paramSpace params.Subspace, codespace sdk.CodespaceType) BaseSendKeeper {
|
||||
|
||||
return BaseSendKeeper{
|
||||
BaseViewKeeper: NewBaseViewKeeper(ak),
|
||||
BaseViewKeeper: NewBaseViewKeeper(ak, codespace),
|
||||
ak: ak,
|
||||
paramSpace: paramSpace,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -119,10 +133,22 @@ func NewBaseSendKeeper(ak auth.AccountKeeper) BaseSendKeeper {
|
|||
func (keeper BaseSendKeeper) SendCoins(
|
||||
ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins,
|
||||
) (sdk.Tags, sdk.Error) {
|
||||
|
||||
return sendCoins(ctx, keeper.ak, fromAddr, toAddr, amt)
|
||||
}
|
||||
|
||||
// GetSendEnabled returns the current SendEnabled
|
||||
// nolint: errcheck
|
||||
func (keeper BaseSendKeeper) GetSendEnabled(ctx sdk.Context) bool {
|
||||
var enabled bool
|
||||
keeper.paramSpace.Get(ctx, ParamStoreKeySendEnabled, &enabled)
|
||||
return enabled
|
||||
}
|
||||
|
||||
// nolint: errcheck
|
||||
func (keeper BaseSendKeeper) SetSendEnabled(ctx sdk.Context, enabled bool) {
|
||||
keeper.paramSpace.Set(ctx, ParamStoreKeySendEnabled, &enabled)
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// View Keeper
|
||||
|
||||
|
@ -133,18 +159,19 @@ var _ ViewKeeper = (*BaseViewKeeper)(nil)
|
|||
type ViewKeeper interface {
|
||||
GetCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
|
||||
HasCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) bool
|
||||
|
||||
Codespace() sdk.CodespaceType
|
||||
}
|
||||
|
||||
// BaseViewKeeper implements a read only keeper implementation of ViewKeeper.
|
||||
type BaseViewKeeper struct {
|
||||
ak auth.AccountKeeper
|
||||
codespace sdk.CodespaceType
|
||||
}
|
||||
|
||||
// NewBaseViewKeeper returns a new BaseViewKeeper.
|
||||
func NewBaseViewKeeper(ak auth.AccountKeeper) BaseViewKeeper {
|
||||
return BaseViewKeeper{
|
||||
ak: ak,
|
||||
}
|
||||
func NewBaseViewKeeper(ak auth.AccountKeeper, codespace sdk.CodespaceType) BaseViewKeeper {
|
||||
return BaseViewKeeper{ak: ak, codespace: codespace}
|
||||
}
|
||||
|
||||
// GetCoins returns the coins at the addr.
|
||||
|
@ -157,6 +184,11 @@ func (keeper BaseViewKeeper) HasCoins(ctx sdk.Context, addr sdk.AccAddress, amt
|
|||
return hasCoins(ctx, keeper.ak, addr, amt)
|
||||
}
|
||||
|
||||
// Codespace returns the keeper's codespace.
|
||||
func (keeper BaseViewKeeper) Codespace() sdk.CodespaceType {
|
||||
return keeper.codespace
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Auxiliary
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ type testInput struct {
|
|||
cdc *codec.Codec
|
||||
ctx sdk.Context
|
||||
ak auth.AccountKeeper
|
||||
pk params.Keeper
|
||||
}
|
||||
|
||||
func setupTestInput() testInput {
|
||||
|
@ -49,13 +50,14 @@ func setupTestInput() testInput {
|
|||
|
||||
ak.SetParams(ctx, auth.DefaultParams())
|
||||
|
||||
return testInput{cdc: cdc, ctx: ctx, ak: ak}
|
||||
return testInput{cdc: cdc, ctx: ctx, ak: ak, pk: pk}
|
||||
}
|
||||
|
||||
func TestKeeper(t *testing.T) {
|
||||
input := setupTestInput()
|
||||
ctx := input.ctx
|
||||
bankKeeper := NewBaseKeeper(input.ak)
|
||||
bankKeeper := NewBaseKeeper(input.ak, input.pk.Subspace(DefaultParamspace), DefaultCodespace)
|
||||
bankKeeper.SetSendEnabled(ctx, true)
|
||||
|
||||
addr := sdk.AccAddress([]byte("addr1"))
|
||||
addr2 := sdk.AccAddress([]byte("addr2"))
|
||||
|
@ -134,8 +136,10 @@ func TestKeeper(t *testing.T) {
|
|||
func TestSendKeeper(t *testing.T) {
|
||||
input := setupTestInput()
|
||||
ctx := input.ctx
|
||||
bankKeeper := NewBaseKeeper(input.ak)
|
||||
sendKeeper := NewBaseSendKeeper(input.ak)
|
||||
paramSpace := input.pk.Subspace(DefaultParamspace)
|
||||
bankKeeper := NewBaseKeeper(input.ak, paramSpace, DefaultCodespace)
|
||||
sendKeeper := NewBaseSendKeeper(input.ak, paramSpace, DefaultCodespace)
|
||||
bankKeeper.SetSendEnabled(ctx, true)
|
||||
|
||||
addr := sdk.AccAddress([]byte("addr1"))
|
||||
addr2 := sdk.AccAddress([]byte("addr2"))
|
||||
|
@ -181,8 +185,10 @@ func TestSendKeeper(t *testing.T) {
|
|||
func TestViewKeeper(t *testing.T) {
|
||||
input := setupTestInput()
|
||||
ctx := input.ctx
|
||||
bankKeeper := NewBaseKeeper(input.ak)
|
||||
viewKeeper := NewBaseViewKeeper(input.ak)
|
||||
paramSpace := input.pk.Subspace(DefaultParamspace)
|
||||
bankKeeper := NewBaseKeeper(input.ak, paramSpace, DefaultCodespace)
|
||||
bankKeeper.SetSendEnabled(ctx, true)
|
||||
viewKeeper := NewBaseViewKeeper(input.ak, DefaultCodespace)
|
||||
|
||||
addr := sdk.AccAddress([]byte("addr1"))
|
||||
acc := input.ak.NewAccountWithAddress(ctx, addr)
|
||||
|
@ -209,7 +215,8 @@ func TestVestingAccountSend(t *testing.T) {
|
|||
|
||||
origCoins := sdk.Coins{sdk.NewInt64Coin("steak", 100)}
|
||||
sendCoins := sdk.Coins{sdk.NewInt64Coin("steak", 50)}
|
||||
bankKeeper := NewBaseKeeper(input.ak)
|
||||
bankKeeper := NewBaseKeeper(input.ak, input.pk.Subspace(DefaultParamspace), DefaultCodespace)
|
||||
bankKeeper.SetSendEnabled(ctx, true)
|
||||
|
||||
addr1 := sdk.AccAddress([]byte("addr1"))
|
||||
addr2 := sdk.AccAddress([]byte("addr2"))
|
||||
|
@ -242,7 +249,8 @@ func TestVestingAccountReceive(t *testing.T) {
|
|||
|
||||
origCoins := sdk.Coins{sdk.NewInt64Coin("steak", 100)}
|
||||
sendCoins := sdk.Coins{sdk.NewInt64Coin("steak", 50)}
|
||||
bankKeeper := NewBaseKeeper(input.ak)
|
||||
bankKeeper := NewBaseKeeper(input.ak, input.pk.Subspace(DefaultParamspace), DefaultCodespace)
|
||||
bankKeeper.SetSendEnabled(ctx, true)
|
||||
|
||||
addr1 := sdk.AccAddress([]byte("addr1"))
|
||||
addr2 := sdk.AccAddress([]byte("addr2"))
|
||||
|
@ -275,7 +283,8 @@ func TestDelegateCoins(t *testing.T) {
|
|||
|
||||
origCoins := sdk.Coins{sdk.NewInt64Coin("steak", 100)}
|
||||
delCoins := sdk.Coins{sdk.NewInt64Coin("steak", 50)}
|
||||
bankKeeper := NewBaseKeeper(input.ak)
|
||||
bankKeeper := NewBaseKeeper(input.ak, input.pk.Subspace(DefaultParamspace), DefaultCodespace)
|
||||
bankKeeper.SetSendEnabled(ctx, true)
|
||||
|
||||
addr1 := sdk.AccAddress([]byte("addr1"))
|
||||
addr2 := sdk.AccAddress([]byte("addr2"))
|
||||
|
@ -311,7 +320,8 @@ func TestUndelegateCoins(t *testing.T) {
|
|||
|
||||
origCoins := sdk.Coins{sdk.NewInt64Coin("steak", 100)}
|
||||
delCoins := sdk.Coins{sdk.NewInt64Coin("steak", 50)}
|
||||
bankKeeper := NewBaseKeeper(input.ak)
|
||||
bankKeeper := NewBaseKeeper(input.ak, input.pk.Subspace(DefaultParamspace), DefaultCodespace)
|
||||
bankKeeper.SetSendEnabled(ctx, true)
|
||||
|
||||
addr1 := sdk.AccAddress([]byte("addr1"))
|
||||
addr2 := sdk.AccAddress([]byte("addr2"))
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
package bank
|
||||
|
||||
import (
|
||||
"github.com/cosmos/cosmos-sdk/x/params"
|
||||
)
|
||||
|
||||
const (
|
||||
// default paramspace for params keeper
|
||||
DefaultParamspace = "bank"
|
||||
// default send enabled
|
||||
DefaultSendEnabled = true
|
||||
)
|
||||
|
||||
// ParamStoreKeySendEnabled is store's key for SendEnabled
|
||||
var ParamStoreKeySendEnabled = []byte("sendenabled")
|
||||
|
||||
// type declaration for parameters
|
||||
func ParamTypeTable() params.TypeTable {
|
||||
return params.NewTypeTable(
|
||||
ParamStoreKeySendEnabled, false,
|
||||
)
|
||||
}
|
|
@ -112,6 +112,9 @@ func sendAndVerifyMsgSend(app *baseapp.BaseApp, mapper auth.AccountKeeper, msg b
|
|||
if handler != nil {
|
||||
res := handler(ctx, msg)
|
||||
if !res.IsOK() {
|
||||
if res.Code == bank.CodeSendDisabled {
|
||||
return nil
|
||||
}
|
||||
// TODO: Do this in a more 'canonical' way
|
||||
return fmt.Errorf("handling msg failed %v", res)
|
||||
}
|
||||
|
|
|
@ -110,7 +110,7 @@ func CreateTestInputAdvanced(t *testing.T, isCheckTx bool, initCoins int64,
|
|||
|
||||
ctx := sdk.NewContext(ms, abci.Header{ChainID: "foochainid"}, isCheckTx, log.NewNopLogger())
|
||||
accountKeeper := auth.NewAccountKeeper(cdc, keyAcc, pk.Subspace(auth.DefaultParamspace), auth.ProtoBaseAccount)
|
||||
ck := bank.NewBaseKeeper(accountKeeper)
|
||||
ck := bank.NewBaseKeeper(accountKeeper, pk.Subspace(bank.DefaultParamspace), bank.DefaultCodespace)
|
||||
sk := staking.NewKeeper(cdc, keyStaking, tkeyStaking, ck, pk.Subspace(staking.DefaultParamspace), staking.DefaultCodespace)
|
||||
sk.SetPool(ctx, staking.InitialPool())
|
||||
sk.SetParams(ctx, staking.DefaultParams())
|
||||
|
|
|
@ -16,6 +16,7 @@ func TestTickExpiredDepositPeriod(t *testing.T) {
|
|||
mapp, keeper, _, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
||||
mapp.BeginBlock(abci.RequestBeginBlock{})
|
||||
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
||||
keeper.ck.SetSendEnabled(ctx, true)
|
||||
govHandler := NewHandler(keeper)
|
||||
|
||||
inactiveQueue := keeper.InactiveProposalQueueIterator(ctx, ctx.BlockHeader().Time)
|
||||
|
@ -58,6 +59,7 @@ func TestTickMultipleExpiredDepositPeriod(t *testing.T) {
|
|||
mapp, keeper, _, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
||||
mapp.BeginBlock(abci.RequestBeginBlock{})
|
||||
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
||||
keeper.ck.SetSendEnabled(ctx, true)
|
||||
govHandler := NewHandler(keeper)
|
||||
|
||||
inactiveQueue := keeper.InactiveProposalQueueIterator(ctx, ctx.BlockHeader().Time)
|
||||
|
@ -114,6 +116,7 @@ func TestTickPassedDepositPeriod(t *testing.T) {
|
|||
mapp, keeper, _, addrs, _, _ := getMockApp(t, 10, GenesisState{}, nil)
|
||||
mapp.BeginBlock(abci.RequestBeginBlock{})
|
||||
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
||||
keeper.ck.SetSendEnabled(ctx, true)
|
||||
govHandler := NewHandler(keeper)
|
||||
|
||||
inactiveQueue := keeper.InactiveProposalQueueIterator(ctx, ctx.BlockHeader().Time)
|
||||
|
@ -156,6 +159,7 @@ func TestTickPassedVotingPeriod(t *testing.T) {
|
|||
SortAddresses(addrs)
|
||||
mapp.BeginBlock(abci.RequestBeginBlock{})
|
||||
ctx := mapp.BaseApp.NewContext(false, abci.Header{})
|
||||
keeper.ck.SetSendEnabled(ctx, true)
|
||||
govHandler := NewHandler(keeper)
|
||||
|
||||
inactiveQueue := keeper.InactiveProposalQueueIterator(ctx, ctx.BlockHeader().Time)
|
||||
|
|
|
@ -31,7 +31,7 @@ func getMockApp(t *testing.T, numGenAccs int, genState GenesisState, genAccs []a
|
|||
keyGov := sdk.NewKVStoreKey(StoreKey)
|
||||
|
||||
pk := mapp.ParamsKeeper
|
||||
ck := bank.NewBaseKeeper(mapp.AccountKeeper)
|
||||
ck := bank.NewBaseKeeper(mapp.AccountKeeper, mapp.ParamsKeeper.Subspace(bank.DefaultParamspace), bank.DefaultCodespace)
|
||||
sk = staking.NewKeeper(mapp.Cdc, keyStaking, tkeyStaking, ck, pk.Subspace(staking.DefaultParamspace), staking.DefaultCodespace)
|
||||
keeper = NewKeeper(mapp.Cdc, keyGov, pk, pk.Subspace("testgov"), ck, sk, DefaultCodespace)
|
||||
|
||||
|
|
|
@ -21,7 +21,9 @@ func getMockApp(t *testing.T) *mock.App {
|
|||
RegisterCodec(mapp.Cdc)
|
||||
keyIBC := sdk.NewKVStoreKey("ibc")
|
||||
ibcMapper := NewMapper(mapp.Cdc, keyIBC, DefaultCodespace)
|
||||
bankKeeper := bank.NewBaseKeeper(mapp.AccountKeeper)
|
||||
bankKeeper := bank.NewBaseKeeper(mapp.AccountKeeper,
|
||||
mapp.ParamsKeeper.Subspace(bank.DefaultParamspace),
|
||||
bank.DefaultCodespace)
|
||||
mapp.Router().AddRoute("ibc", NewHandler(ibcMapper, bankKeeper))
|
||||
|
||||
require.NoError(t, mapp.CompleteSetup(keyIBC))
|
||||
|
|
|
@ -50,7 +50,7 @@ func setupTestInput() testInput {
|
|||
ak := auth.NewAccountKeeper(
|
||||
cdc, authCapKey, pk.Subspace(auth.DefaultParamspace), auth.ProtoBaseAccount,
|
||||
)
|
||||
bk := bank.NewBaseKeeper(ak)
|
||||
bk := bank.NewBaseKeeper(ak, pk.Subspace(bank.DefaultParamspace), bank.DefaultCodespace)
|
||||
ctx := sdk.NewContext(ms, abci.Header{ChainID: "test-chain-id"}, false, log.NewNopLogger())
|
||||
|
||||
ak.SetParams(ctx, auth.DefaultParams())
|
||||
|
|
|
@ -30,7 +30,7 @@ func getMockApp(t *testing.T) (*mock.App, staking.Keeper, Keeper) {
|
|||
tkeyStaking := sdk.NewTransientStoreKey(staking.TStoreKey)
|
||||
keySlashing := sdk.NewKVStoreKey(StoreKey)
|
||||
|
||||
bankKeeper := bank.NewBaseKeeper(mapp.AccountKeeper)
|
||||
bankKeeper := bank.NewBaseKeeper(mapp.AccountKeeper, mapp.ParamsKeeper.Subspace(bank.DefaultParamspace), bank.DefaultCodespace)
|
||||
stakingKeeper := staking.NewKeeper(mapp.Cdc, keyStaking, tkeyStaking, bankKeeper, mapp.ParamsKeeper.Subspace(staking.DefaultParamspace), staking.DefaultCodespace)
|
||||
keeper := NewKeeper(mapp.Cdc, keySlashing, stakingKeeper, mapp.ParamsKeeper.Subspace(DefaultParamspace), DefaultCodespace)
|
||||
mapp.Router().AddRoute(staking.RouterKey, staking.NewHandler(stakingKeeper))
|
||||
|
|
|
@ -72,7 +72,7 @@ func createTestInput(t *testing.T, defaults Params) (sdk.Context, bank.Keeper, s
|
|||
paramsKeeper := params.NewKeeper(cdc, keyParams, tkeyParams)
|
||||
accountKeeper := auth.NewAccountKeeper(cdc, keyAcc, paramsKeeper.Subspace(auth.DefaultParamspace), auth.ProtoBaseAccount)
|
||||
|
||||
ck := bank.NewBaseKeeper(accountKeeper)
|
||||
ck := bank.NewBaseKeeper(accountKeeper, paramsKeeper.Subspace(bank.DefaultParamspace), bank.DefaultCodespace)
|
||||
sk := staking.NewKeeper(cdc, keyStaking, tkeyStaking, ck, paramsKeeper.Subspace(staking.DefaultParamspace), staking.DefaultCodespace)
|
||||
genesis := staking.DefaultGenesisState()
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ func getMockApp(t *testing.T) (*mock.App, Keeper) {
|
|||
keyStaking := sdk.NewKVStoreKey(StoreKey)
|
||||
tkeyStaking := sdk.NewTransientStoreKey(TStoreKey)
|
||||
|
||||
bankKeeper := bank.NewBaseKeeper(mApp.AccountKeeper)
|
||||
bankKeeper := bank.NewBaseKeeper(mApp.AccountKeeper, mApp.ParamsKeeper.Subspace(bank.DefaultParamspace), bank.DefaultCodespace)
|
||||
keeper := NewKeeper(mApp.Cdc, keyStaking, tkeyStaking, bankKeeper, mApp.ParamsKeeper.Subspace(DefaultParamspace), DefaultCodespace)
|
||||
|
||||
mApp.Router().AddRoute(RouterKey, NewHandler(keeper))
|
||||
|
|
|
@ -112,7 +112,11 @@ func CreateTestInput(t *testing.T, isCheckTx bool, initCoins int64) (sdk.Context
|
|||
auth.ProtoBaseAccount, // prototype
|
||||
)
|
||||
|
||||
ck := bank.NewBaseKeeper(accountKeeper)
|
||||
ck := bank.NewBaseKeeper(
|
||||
accountKeeper,
|
||||
pk.Subspace(bank.DefaultParamspace),
|
||||
bank.DefaultCodespace,
|
||||
)
|
||||
|
||||
keeper := NewKeeper(cdc, keyStaking, tkeyStaking, ck, pk.Subspace(DefaultParamspace), types.DefaultCodespace)
|
||||
keeper.SetPool(ctx, types.InitialPool())
|
||||
|
|
Loading…
Reference in New Issue