refactor(crisis)!: use collections for state management (#16328)

Co-authored-by: unknown unknown <unknown@unknown>
This commit is contained in:
testinginprod 2023-05-29 19:12:57 +02:00 committed by GitHub
parent d225e428f6
commit f358214b43
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 30 additions and 103 deletions

View File

@ -240,6 +240,8 @@ Ref: https://keepachangelog.com/en/1.0.0/
* this finalizes the gov collections migration
* Removed: keeper `InsertActiveProposalsQueue`, `RemoveActiveProposalsQueue`, `InsertInactiveProposalsQueue`, `RemoveInactiveProposalsQueue`, `IterateInactiveProposalsQueue`, `IterateActiveProposalsQueue`, `ActiveProposalsQueueIterator`, `InactiveProposalsQueueIterator`
* Remove: types all the key related functions
* (x/crisis) [#16328](https://github.com/cosmos/cosmos-sdk/pull/16328) Use collections for state management:
* Removed: keeper `GetConstantFee`, `SetConstantFee`
### Client Breaking Changes

View File

@ -7,14 +7,14 @@ import (
// new crisis genesis
func (k *Keeper) InitGenesis(ctx sdk.Context, data *types.GenesisState) {
if err := k.SetConstantFee(ctx, data.ConstantFee); err != nil {
if err := k.ConstantFee.Set(ctx, data.ConstantFee); err != nil {
panic(err)
}
}
// ExportGenesis returns a GenesisState for a given context and keeper.
func (k *Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState {
constantFee, err := k.GetConstantFee(ctx)
constantFee, err := k.ConstantFee.Get(ctx)
if err != nil {
panic(err)
}

View File

@ -52,13 +52,13 @@ func (s *GenesisTestSuite) SetupTest() {
func (s *GenesisTestSuite) TestImportExportGenesis() {
// default params
constantFee := sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(1000))
err := s.keeper.SetConstantFee(s.sdkCtx, constantFee)
err := s.keeper.ConstantFee.Set(s.sdkCtx, constantFee)
s.Require().NoError(err)
genesis := s.keeper.ExportGenesis(s.sdkCtx)
// set constant fee to zero
constantFee = sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(0))
err = s.keeper.SetConstantFee(s.sdkCtx, constantFee)
err = s.keeper.ConstantFee.Set(s.sdkCtx, constantFee)
s.Require().NoError(err)
s.keeper.InitGenesis(s.sdkCtx, genesis)
@ -71,7 +71,7 @@ func (s *GenesisTestSuite) TestInitGenesis() {
genesisState.ConstantFee = sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(1000))
s.keeper.InitGenesis(s.sdkCtx, genesisState)
constantFee, err := s.keeper.GetConstantFee(s.sdkCtx)
constantFee, err := s.keeper.ConstantFee.Get(s.sdkCtx)
s.Require().NoError(err)
s.Require().Equal(genesisState.ConstantFee, constantFee)
}

View File

@ -5,6 +5,7 @@ import (
"fmt"
"time"
"cosmossdk.io/collections"
"cosmossdk.io/core/address"
"cosmossdk.io/log"
@ -31,6 +32,9 @@ type Keeper struct {
feeCollectorName string // name of the FeeCollector ModuleAccount
addressCodec address.Codec
Schema collections.Schema
ConstantFee collections.Item[sdk.Coin]
}
// NewKeeper creates a new Keeper object
@ -38,7 +42,8 @@ func NewKeeper(
cdc codec.BinaryCodec, storeService storetypes.KVStoreService, invCheckPeriod uint,
supplyKeeper types.SupplyKeeper, feeCollectorName, authority string, ac address.Codec,
) *Keeper {
return &Keeper{
sb := collections.NewSchemaBuilder(storeService)
k := &Keeper{
storeService: storeService,
cdc: cdc,
routes: make([]types.InvarRoute, 0),
@ -47,7 +52,15 @@ func NewKeeper(
feeCollectorName: feeCollectorName,
authority: authority,
addressCodec: ac,
ConstantFee: collections.NewItem(sb, types.ConstantFeeKey, "constant_fee", codec.CollValue[sdk.Coin](cdc)),
}
schema, err := sb.Build()
if err != nil {
panic(err)
}
k.Schema = schema
return k
}
// GetAuthority returns the x/crisis module's authority.

View File

@ -25,7 +25,7 @@ func (k *Keeper) VerifyInvariant(goCtx context.Context, msg *types.MsgVerifyInva
}
ctx := sdk.UnwrapSDKContext(goCtx)
params, err := k.GetConstantFee(ctx)
params, err := k.ConstantFee.Get(goCtx)
if err != nil {
return nil, err
}
@ -90,7 +90,7 @@ func (k *Keeper) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) (
}
sdkCtx := sdk.UnwrapSDKContext(ctx)
if err := k.SetConstantFee(sdkCtx, msg.ConstantFee); err != nil {
if err := k.ConstantFee.Set(sdkCtx, msg.ConstantFee); err != nil {
return nil, err
}

View File

@ -48,7 +48,7 @@ func (s *KeeperTestSuite) SetupTest() {
func (s *KeeperTestSuite) TestMsgVerifyInvariant() {
// default params
constantFee := sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1000))
err := s.keeper.SetConstantFee(s.ctx, constantFee)
err := s.keeper.ConstantFee.Set(s.ctx, constantFee)
s.Require().NoError(err)
encCfg := moduletestutil.MakeTestEncodingConfig(crisis.AppModuleBasic{})

View File

@ -1,37 +0,0 @@
package keeper
import (
"context"
errorsmod "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/x/crisis/types"
)
// GetConstantFee get's the constant fee from the store
func (k *Keeper) GetConstantFee(ctx context.Context) (constantFee sdk.Coin, err error) {
store := k.storeService.OpenKVStore(ctx)
bz, err := store.Get(types.ConstantFeeKey)
if bz == nil || err != nil {
return constantFee, err
}
err = k.cdc.Unmarshal(bz, &constantFee)
return constantFee, err
}
// GetConstantFee set's the constant fee in the store
func (k *Keeper) SetConstantFee(ctx context.Context, constantFee sdk.Coin) error {
if !constantFee.IsValid() || constantFee.IsNegative() {
return errorsmod.Wrapf(errors.ErrInvalidCoins, "negative or invalid constant fee: %s", constantFee)
}
store := k.storeService.OpenKVStore(ctx)
bz, err := k.cdc.Marshal(&constantFee)
if err != nil {
return err
}
return store.Set(types.ConstantFeeKey, bz)
}

View File

@ -1,56 +0,0 @@
package keeper_test
import (
sdkmath "cosmossdk.io/math"
sdk "github.com/cosmos/cosmos-sdk/types"
)
func (s *KeeperTestSuite) TestParams() {
// default params
constantFee := sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(1000))
testCases := []struct {
name string
constantFee sdk.Coin
expErr bool
expErrMsg string
}{
{
name: "invalid constant fee",
constantFee: sdk.Coin{},
expErr: true,
},
{
name: "negative constant fee",
constantFee: sdk.Coin{Denom: sdk.DefaultBondDenom, Amount: sdkmath.NewInt(-1000)},
expErr: true,
},
{
name: "all good",
constantFee: constantFee,
expErr: false,
},
}
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
expected, err := s.keeper.GetConstantFee(s.ctx)
s.Require().NoError(err)
err = s.keeper.SetConstantFee(s.ctx, tc.constantFee)
if tc.expErr {
s.Require().Error(err)
s.Require().Contains(err.Error(), tc.expErrMsg)
} else {
expected = tc.constantFee
s.Require().NoError(err)
}
params, err := s.keeper.GetConstantFee(s.ctx)
s.Require().NoError(err)
s.Require().Equal(expected, params)
})
}
}

View File

@ -24,6 +24,9 @@ func DefaultGenesisState() *GenesisState {
// ValidateGenesis - validate crisis genesis data
func ValidateGenesis(data *GenesisState) error {
if !data.ConstantFee.IsValid() {
return fmt.Errorf("constant fee is invalid")
}
if !data.ConstantFee.IsPositive() {
return fmt.Errorf("constant fee must be positive: %s", data.ConstantFee)
}

View File

@ -1,5 +1,7 @@
package types
import "cosmossdk.io/collections"
const (
// module name
ModuleName = "crisis"
@ -7,4 +9,4 @@ const (
StoreKey = ModuleName
)
var ConstantFeeKey = []byte{0x01}
var ConstantFeeKey = collections.NewPrefix(1)