Skip to content

Commit ef46968

Browse files
authored
refactor!: create x/gov wrapper (#248)
Create x/gov wrapper based on Atom One SDK Closes: #242 and #244
1 parent 20f13db commit ef46968

File tree

101 files changed

+1334
-18306
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

101 files changed

+1334
-18306
lines changed

.golangci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ run:
77
skip-files:
88
- ".*\\.pb\\.go$"
99
- ".*\\.pb\\.gw\\.go$"
10+
- x/gov/types/v1/wrapper.go
11+
- x/gov/types/v1beta1/wrapper.go
1012

1113
linters:
1214
disable-all: true

Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,6 @@ docker-build-all: docker-build-debug docker-build-hermes
219219
mockgen_cmd=$(rundep) github.com/golang/mock/mockgen
220220

221221
mocks-gen:
222-
$(mockgen_cmd) -source=x/gov/testutil/expected_keepers.go -package testutil -destination x/gov/testutil/expected_keepers_mocks.go
223222
$(mockgen_cmd) -source=x/photon/types/expected_keepers.go -package testutil -destination x/photon/testutil/expected_keepers_mocks.go
224223
$(mockgen_cmd) -source=x/photon/ante/expected_keepers.go -package ante_test -destination x/photon/ante/expected_keepers_mocks_test.go
225224
$(mockgen_cmd) -source=x/dynamicfee/ante/expected_keepers.go -package ante_test -destination x/dynamicfee/ante/expected_keepers_mocks_test.go

app/app.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,24 +51,24 @@ import (
5151
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
5252
"github.com/cosmos/cosmos-sdk/x/genutil"
5353
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
54+
"github.com/cosmos/cosmos-sdk/x/gov"
55+
govclient "github.com/cosmos/cosmos-sdk/x/gov/client"
56+
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
57+
paramsclient "github.com/cosmos/cosmos-sdk/x/params/client"
5458

5559
atomoneante "github.com/atomone-hub/atomone/ante"
5660
"github.com/atomone-hub/atomone/app/keepers"
5761
"github.com/atomone-hub/atomone/app/upgrades"
58-
v3 "github.com/atomone-hub/atomone/app/upgrades/v3"
5962
v4 "github.com/atomone-hub/atomone/app/upgrades/v4"
6063
"github.com/atomone-hub/atomone/client/docs"
6164
atomonepost "github.com/atomone-hub/atomone/post"
62-
"github.com/atomone-hub/atomone/x/gov"
63-
govclient "github.com/atomone-hub/atomone/x/gov/client"
64-
govtypes "github.com/atomone-hub/atomone/x/gov/types"
6565
)
6666

6767
var (
6868
// DefaultNodeHome default home directories for the application daemon
6969
DefaultNodeHome string
7070

71-
Upgrades = []upgrades.Upgrade{v3.Upgrade, v4.Upgrade}
71+
Upgrades = []upgrades.Upgrade{v4.Upgrade}
7272
)
7373

7474
var (
@@ -222,7 +222,7 @@ func NewAtomOneApp(
222222
genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator),
223223
govtypes.ModuleName: gov.NewAppModuleBasic(
224224
[]govclient.ProposalHandler{
225-
paramsChangeProposalHandler,
225+
paramsclient.ProposalHandler,
226226
},
227227
),
228228
})

app/gov_handlers.go

Lines changed: 0 additions & 102 deletions
This file was deleted.

app/keepers/keepers.go

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ import (
4040
consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types"
4141
distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
4242
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
43+
govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper"
44+
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
45+
govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
46+
govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
4347
mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper"
4448
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
4549
"github.com/cosmos/cosmos-sdk/x/params"
@@ -55,10 +59,7 @@ import (
5559
coredaostypes "github.com/atomone-hub/atomone/x/coredaos/types"
5660
dynamicfeekeeper "github.com/atomone-hub/atomone/x/dynamicfee/keeper"
5761
dynamicfeetypes "github.com/atomone-hub/atomone/x/dynamicfee/types"
58-
govkeeper "github.com/atomone-hub/atomone/x/gov/keeper"
59-
govtypes "github.com/atomone-hub/atomone/x/gov/types"
60-
govv1 "github.com/atomone-hub/atomone/x/gov/types/v1"
61-
govv1beta1 "github.com/atomone-hub/atomone/x/gov/types/v1beta1"
62+
atomonegovkeeper "github.com/atomone-hub/atomone/x/gov/keeper"
6263
photonkeeper "github.com/atomone-hub/atomone/x/photon/keeper"
6364
photontypes "github.com/atomone-hub/atomone/x/photon/types"
6465
)
@@ -70,15 +71,16 @@ type AppKeepers struct {
7071
memKeys map[string]*storetypes.MemoryStoreKey
7172

7273
// keepers
73-
AccountKeeper authkeeper.AccountKeeper
74-
BankKeeper bankkeeper.Keeper
75-
StakingKeeper *stakingkeeper.Keeper
76-
SlashingKeeper slashingkeeper.Keeper
77-
MintKeeper mintkeeper.Keeper
78-
DistrKeeper distrkeeper.Keeper
79-
GovKeeper *govkeeper.Keeper
80-
UpgradeKeeper *upgradekeeper.Keeper
81-
ParamsKeeper paramskeeper.Keeper
74+
AccountKeeper authkeeper.AccountKeeper
75+
BankKeeper bankkeeper.Keeper
76+
StakingKeeper *stakingkeeper.Keeper
77+
SlashingKeeper slashingkeeper.Keeper
78+
MintKeeper mintkeeper.Keeper
79+
DistrKeeper distrkeeper.Keeper
80+
GovKeeper *govkeeper.Keeper
81+
GovKeeperWrapper *atomonegovkeeper.Keeper
82+
UpgradeKeeper *upgradekeeper.Keeper
83+
ParamsKeeper paramskeeper.Keeper
8284
// IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
8385
IBCKeeper *ibckeeper.Keeper
8486
ICAHostKeeper icahostkeeper.Keeper
@@ -238,10 +240,11 @@ func NewAppKeeper(
238240
govConfig.MaxMetadataLen = 10200
239241
appKeepers.GovKeeper = govkeeper.NewKeeper(
240242
appCodec,
241-
appKeepers.keys[govtypes.StoreKey],
243+
runtime.NewKVStoreService(appKeepers.keys[govtypes.StoreKey]),
242244
appKeepers.AccountKeeper,
243245
appKeepers.BankKeeper,
244246
appKeepers.StakingKeeper,
247+
appKeepers.DistrKeeper,
245248
bApp.MsgServiceRouter(),
246249
govConfig,
247250
authorityStr,
@@ -255,11 +258,13 @@ func NewAppKeeper(
255258
})
256259
appKeepers.GovKeeper.SetLegacyRouter(govRouter)
257260

261+
appKeepers.GovKeeperWrapper = atomonegovkeeper.NewKeeper(appKeepers.GovKeeper)
262+
258263
appKeepers.CoreDaosKeeper = coredaoskeeper.NewKeeper(
259264
appCodec,
260265
runtime.NewKVStoreService(appKeepers.keys[coredaostypes.StoreKey]),
261266
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
262-
appKeepers.GovKeeper,
267+
appKeepers.GovKeeperWrapper,
263268
appKeepers.StakingKeeper,
264269
)
265270

app/modules.go

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package atomone
22

33
import (
4+
"encoding/json"
5+
46
icatypes "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/types"
57
ibctransfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"
68
ibc "github.com/cosmos/ibc-go/v10/modules/core"
@@ -30,6 +32,8 @@ import (
3032
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
3133
"github.com/cosmos/cosmos-sdk/x/genutil"
3234
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
35+
"github.com/cosmos/cosmos-sdk/x/gov"
36+
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
3337
"github.com/cosmos/cosmos-sdk/x/mint"
3438
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
3539
sdkparams "github.com/cosmos/cosmos-sdk/x/params"
@@ -43,8 +47,8 @@ import (
4347
coredaostypes "github.com/atomone-hub/atomone/x/coredaos/types"
4448
"github.com/atomone-hub/atomone/x/dynamicfee"
4549
dynamicfeetypes "github.com/atomone-hub/atomone/x/dynamicfee/types"
46-
"github.com/atomone-hub/atomone/x/gov"
47-
govtypes "github.com/atomone-hub/atomone/x/gov/types"
50+
atomonegov "github.com/atomone-hub/atomone/x/gov"
51+
atomonegovv1 "github.com/atomone-hub/atomone/x/gov/types/v1"
4852
"github.com/atomone-hub/atomone/x/photon"
4953
photontypes "github.com/atomone-hub/atomone/x/photon/types"
5054
)
@@ -63,11 +67,29 @@ var maccPerms = map[string][]string{
6367
coredaostypes.ModuleName: nil,
6468
}
6569

70+
type govModuleAtomOneDefaults struct {
71+
gov.AppModule
72+
}
73+
74+
// DefaultGenesis returns default genesis state as raw bytes for the gov module.
75+
// It sets the same defaults than the atom one x/gov wrapper for genesis
76+
func (am govModuleAtomOneDefaults) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage {
77+
return cdc.MustMarshalJSON(atomonegovv1.DefaultGenesisState())
78+
}
79+
6680
func appModules(
6781
app *AtomOneApp,
6882
appCodec codec.Codec,
6983
txConfig client.TxConfig,
7084
) []module.AppModule {
85+
govModule := govModuleAtomOneDefaults{gov.NewAppModule(
86+
appCodec,
87+
app.GovKeeper,
88+
app.AccountKeeper,
89+
app.BankKeeper,
90+
app.GetSubspace(govtypes.ModuleName),
91+
)}
92+
7193
return []module.AppModule{
7294
genutil.NewAppModule(
7395
app.AccountKeeper,
@@ -78,14 +100,8 @@ func appModules(
78100
auth.NewAppModule(appCodec, app.AccountKeeper, nil, app.GetSubspace(authtypes.ModuleName)),
79101
vesting.NewAppModule(app.AccountKeeper, app.BankKeeper),
80102
bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper, app.GetSubspace(banktypes.ModuleName)),
81-
gov.NewAppModule(
82-
appCodec,
83-
app.GovKeeper,
84-
app.AccountKeeper,
85-
app.BankKeeper,
86-
app.GetSubspace(govtypes.ModuleName),
87-
paramsChangeProposalHandler, // x/params won't be used in the future, so this handler can be removed eventually.
88-
),
103+
govModule,
104+
atomonegov.NewAppModule(appCodec, app.GovKeeperWrapper, app.AccountKeeper),
89105
mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil, app.GetSubspace(minttypes.ModuleName)),
90106
slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(slashingtypes.ModuleName), app.interfaceRegistry),
91107
distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(distrtypes.ModuleName)),
@@ -99,7 +115,7 @@ func appModules(
99115
sdkparams.NewAppModule(app.ParamsKeeper),
100116
consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper),
101117
dynamicfee.NewAppModule(appCodec, *app.DynamicfeeKeeper),
102-
coredaos.NewAppModule(appCodec, *app.CoreDaosKeeper, app.GovKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper),
118+
coredaos.NewAppModule(appCodec, *app.CoreDaosKeeper, app.GovKeeperWrapper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper),
103119

104120
app.TransferModule,
105121
app.ICAModule,

app/upgrades/v3/upgrades.go

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/cosmos/cosmos-sdk/types/module"
1414
distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
1515
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
16+
sdkgovv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
1617

1718
"github.com/atomone-hub/atomone/app/keepers"
1819
govkeeper "github.com/atomone-hub/atomone/x/gov/keeper"
@@ -36,7 +37,7 @@ func CreateUpgradeHandler(
3637
if err != nil {
3738
return vm, err
3839
}
39-
if err := initGovDynamicQuorum(sdkCtx, keepers.GovKeeper); err != nil {
40+
if err := initGovDynamicQuorum(sdkCtx, keepers.GovKeeperWrapper); err != nil {
4041
return vm, err
4142
}
4243

@@ -53,19 +54,37 @@ func CreateUpgradeHandler(
5354
// participation ema.
5455
func initGovDynamicQuorum(ctx sdk.Context, govKeeper *govkeeper.Keeper) error {
5556
ctx.Logger().Info("Initializing gov module for dynamic quorum...")
56-
params := govKeeper.GetParams(ctx)
57+
params, err := govKeeper.Params.Get(ctx)
58+
if err != nil {
59+
return err
60+
}
5761
defaultParams := v1.DefaultParams()
58-
params.QuorumRange = defaultParams.QuorumRange
59-
params.ConstitutionAmendmentQuorumRange = defaultParams.ConstitutionAmendmentQuorumRange
60-
params.LawQuorumRange = defaultParams.LawQuorumRange
61-
if err := govKeeper.SetParams(ctx, params); err != nil {
62+
params.QuorumRange = &sdkgovv1.QuorumRange{
63+
Min: defaultParams.QuorumRange.Min,
64+
Max: defaultParams.QuorumRange.Max,
65+
}
66+
params.ConstitutionAmendmentQuorumRange = &sdkgovv1.QuorumRange{
67+
Min: defaultParams.ConstitutionAmendmentQuorumRange.Min,
68+
Max: defaultParams.ConstitutionAmendmentQuorumRange.Max,
69+
}
70+
params.LawQuorumRange = &sdkgovv1.QuorumRange{
71+
Min: defaultParams.LawQuorumRange.Min,
72+
Max: defaultParams.LawQuorumRange.Max,
73+
}
74+
if err := govKeeper.Params.Set(ctx, params); err != nil {
6275
return fmt.Errorf("set gov params: %w", err)
6376
}
6477
// NOTE(tb): Disregarding whales' votes, the current participation is less than 12%
6578
initParticipationEma := math.LegacyNewDecWithPrec(12, 2)
66-
govKeeper.SetParticipationEMA(ctx, initParticipationEma)
67-
govKeeper.SetConstitutionAmendmentParticipationEMA(ctx, initParticipationEma)
68-
govKeeper.SetLawParticipationEMA(ctx, initParticipationEma)
79+
if err := govKeeper.ParticipationEMA.Set(ctx, initParticipationEma); err != nil {
80+
return fmt.Errorf("set participation EMA: %w", err)
81+
}
82+
if err := govKeeper.ConstitutionAmendmentParticipationEMA.Set(ctx, initParticipationEma); err != nil {
83+
return fmt.Errorf("set constitution amendment participation EMA: %w", err)
84+
}
85+
if err := govKeeper.LawParticipationEMA.Set(ctx, initParticipationEma); err != nil {
86+
return fmt.Errorf("set law participation EMA: %w", err)
87+
}
6988
ctx.Logger().Info("Gov module initialized for dynamic quorum")
7089
return nil
7190
}

0 commit comments

Comments
 (0)