refactor!(gov): make distribution keeper optional (#25616)
Co-authored-by: Alex | Cosmos Labs <alex@cosmoslabs.io>
This commit is contained in:
parent
e857245c21
commit
d235bc4952
@ -48,6 +48,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||
* (crypto) [#24414](https://github.com/cosmos/cosmos-sdk/pull/24414) Remove sr25519 support, since it was removed in CometBFT v1.x (see: CometBFT [#3646](https://github.com/cometbft/cometbft/pull/3646)).
|
||||
* (x/gov) [#25615](https://github.com/cosmos/cosmos-sdk/pull/25615) Decouple `x/gov` from `x/staking` by making `CalculateVoteResultsAndVotingPowerFn` a required parameter to `keeper.NewKeeper` instead of `StakingKeeper`.
|
||||
`BondedTokens` has been renamed to `ValidatorPower` and `TotalBondedTokens` has been renamed to `TotalValidatorPower` to allow for multiple validator power representations.
|
||||
* (x/gov) [#25616](https://github.com/cosmos/cosmos-sdk/pull/25616) `DistrKeeper` `x/distribution` is now optional. Genesis validation ensures `distrKeeper` is set if distribution module is used as proposal cancel destination.
|
||||
|
||||
### Features
|
||||
|
||||
|
||||
@ -109,7 +109,7 @@ func TestImportExportQueues(t *testing.T) {
|
||||
distributionGenState := s1.DistrKeeper.ExportGenesis(ctx)
|
||||
|
||||
// export the state and import it into a new app
|
||||
govGenState, _ := gov.ExportGenesis(ctx, s1.GovKeeper)
|
||||
govGenState, _ := keeper.ExportGenesis(ctx, s1.GovKeeper)
|
||||
genesisState := s1.appBuilder.DefaultGenesis()
|
||||
|
||||
genesisState[authtypes.ModuleName] = s1.cdc.MustMarshalJSON(authGenState)
|
||||
|
||||
@ -1,39 +0,0 @@
|
||||
package gov_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
sdkmath "cosmossdk.io/math"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/gov"
|
||||
v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
|
||||
)
|
||||
|
||||
func TestImportExportQueues_ErrorUnconsistentState(t *testing.T) {
|
||||
suite := createTestSuite(t)
|
||||
app := suite.App
|
||||
ctx := app.NewContext(false)
|
||||
require.Panics(t, func() {
|
||||
gov.InitGenesis(ctx, suite.AccountKeeper, suite.BankKeeper, suite.GovKeeper, &v1.GenesisState{
|
||||
Deposits: v1.Deposits{
|
||||
{
|
||||
ProposalId: 1234,
|
||||
Depositor: "me",
|
||||
Amount: sdk.Coins{
|
||||
sdk.NewCoin(
|
||||
"stake",
|
||||
sdkmath.NewInt(1234),
|
||||
),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
})
|
||||
gov.InitGenesis(ctx, suite.AccountKeeper, suite.BankKeeper, suite.GovKeeper, v1.DefaultGenesisState())
|
||||
genState, err := gov.ExportGenesis(ctx, suite.GovKeeper)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, genState, v1.DefaultGenesisState())
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package gov
|
||||
package keeper
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
@ -6,18 +6,23 @@ import (
|
||||
"cosmossdk.io/collections"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/gov/keeper"
|
||||
disttypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/gov/types"
|
||||
v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
|
||||
)
|
||||
|
||||
// InitGenesis - store genesis parameters
|
||||
func InitGenesis(ctx sdk.Context, ak types.AccountKeeper, bk types.BankKeeper, k *keeper.Keeper, data *v1.GenesisState) {
|
||||
func InitGenesis(ctx sdk.Context, ak types.AccountKeeper, bk types.BankKeeper, k *Keeper, data *v1.GenesisState) {
|
||||
err := k.ProposalID.Set(ctx, data.StartingProposalId)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
distrAddress := ak.GetModuleAddress(disttypes.ModuleName).String()
|
||||
if data.Params.ProposalCancelDest == distrAddress && distrAddress != "" && k.distrKeeper == nil {
|
||||
panic(fmt.Sprintf("must set DistrKeeper first if using distribution module (%s) as proposal cancel destination", distrAddress))
|
||||
}
|
||||
|
||||
err = k.Params.Set(ctx, *data.Params)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
@ -86,7 +91,7 @@ func InitGenesis(ctx sdk.Context, ak types.AccountKeeper, bk types.BankKeeper, k
|
||||
}
|
||||
|
||||
// ExportGenesis - output genesis parameters
|
||||
func ExportGenesis(ctx sdk.Context, k *keeper.Keeper) (*v1.GenesisState, error) {
|
||||
func ExportGenesis(ctx sdk.Context, k *Keeper) (*v1.GenesisState, error) {
|
||||
startingProposalID, err := k.ProposalID.Peek(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
36
x/gov/keeper/genesis_test.go
Normal file
36
x/gov/keeper/genesis_test.go
Normal file
@ -0,0 +1,36 @@
|
||||
package keeper_test
|
||||
|
||||
import (
|
||||
"go.uber.org/mock/gomock"
|
||||
|
||||
sdkmath "cosmossdk.io/math"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/gov/keeper"
|
||||
v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
|
||||
)
|
||||
|
||||
func (suite *KeeperTestSuite) TestImportExportQueues_ErrorUnconsistentState() {
|
||||
suite.reset()
|
||||
suite.acctKeeper.EXPECT().SetModuleAccount(suite.ctx, gomock.Any()).AnyTimes()
|
||||
suite.Require().Panics(func() {
|
||||
keeper.InitGenesis(suite.ctx, suite.acctKeeper, suite.bankKeeper, suite.govKeeper, &v1.GenesisState{
|
||||
Deposits: v1.Deposits{
|
||||
{
|
||||
ProposalId: 1234,
|
||||
Depositor: "me",
|
||||
Amount: sdk.Coins{
|
||||
sdk.NewCoin(
|
||||
"stake",
|
||||
sdkmath.NewInt(1234),
|
||||
),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
})
|
||||
keeper.InitGenesis(suite.ctx, suite.acctKeeper, suite.bankKeeper, suite.govKeeper, v1.DefaultGenesisState())
|
||||
genState, err := keeper.ExportGenesis(suite.ctx, suite.govKeeper)
|
||||
suite.Require().NoError(err)
|
||||
suite.Require().Equal(genState, v1.DefaultGenesisState())
|
||||
}
|
||||
@ -176,13 +176,13 @@ func (am AppModule) RegisterServices(cfg module.Configurator) {
|
||||
func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) {
|
||||
var genesisState v1.GenesisState
|
||||
cdc.MustUnmarshalJSON(data, &genesisState)
|
||||
InitGenesis(ctx, am.accountKeeper, am.bankKeeper, am.keeper, &genesisState)
|
||||
keeper.InitGenesis(ctx, am.accountKeeper, am.bankKeeper, am.keeper, &genesisState)
|
||||
}
|
||||
|
||||
// ExportGenesis returns the exported genesis state as raw bytes for the gov
|
||||
// module.
|
||||
func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage {
|
||||
gs, err := ExportGenesis(ctx, am.keeper)
|
||||
gs, err := keeper.ExportGenesis(ctx, am.keeper)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user