-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
On-chain upgrade to consumer chain #1
base: main
Are you sure you want to change the base?
Changes from 9 commits
40f3fdd
aa566c9
dc9768d
473e467
c6803f1
15265ad
2806d6f
c3ae9a4
67aa39b
09f7b61
d7b5a7f
8aea5bf
62da0d2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,6 +8,8 @@ import ( | |
"os" | ||
"path/filepath" | ||
|
||
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" | ||
|
||
"github.com/cosmos/cosmos-sdk/baseapp" | ||
"github.com/cosmos/cosmos-sdk/client" | ||
"github.com/cosmos/cosmos-sdk/client/grpc/tmservice" | ||
|
@@ -417,6 +419,7 @@ func New( | |
&app.IBCKeeper.PortKeeper, | ||
app.IBCKeeper.ConnectionKeeper, | ||
app.IBCKeeper.ClientKeeper, | ||
app.StakingKeeper, | ||
app.SlashingKeeper, | ||
app.BankKeeper, | ||
app.AccountKeeper, | ||
|
@@ -436,7 +439,7 @@ func New( | |
|
||
// register slashing module StakingHooks to the consumer keeper | ||
app.ConsumerKeeper = *app.ConsumerKeeper.SetHooks(app.SlashingKeeper.Hooks()) | ||
consumerModule := ibcconsumer.NewAppModule(app.ConsumerKeeper) | ||
consumerModule := ibcconsumer.NewAppModule(app.ConsumerKeeper, app.StakingKeeper) | ||
|
||
app.TransferKeeper = ibctransferkeeper.NewKeeper( | ||
appCodec, | ||
|
@@ -483,7 +486,7 @@ func New( | |
ccvmint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper), | ||
slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.ConsumerKeeper), | ||
ccvdistr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, authtypes.FeeCollectorName), | ||
ccvstaking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), | ||
ccvstaking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.ConsumerKeeper), | ||
upgrade.NewAppModule(app.UpgradeKeeper), | ||
evidence.NewAppModule(app.EvidenceKeeper), | ||
params.NewAppModule(app.ParamsKeeper), | ||
|
@@ -506,6 +509,7 @@ func New( | |
ccvdistrtypes.ModuleName, | ||
slashingtypes.ModuleName, | ||
evidencetypes.ModuleName, | ||
ibcconsumertypes.ModuleName, // Note: consumer beginblocker before staking module | ||
ccvstakingtypes.ModuleName, | ||
authtypes.ModuleName, | ||
banktypes.ModuleName, | ||
|
@@ -517,11 +521,11 @@ func New( | |
vestingtypes.ModuleName, | ||
ibctransfertypes.ModuleName, | ||
ibchost.ModuleName, | ||
ibcconsumertypes.ModuleName, | ||
) | ||
app.MM.SetOrderEndBlockers( | ||
crisistypes.ModuleName, | ||
ccvgovtypes.ModuleName, | ||
ibcconsumertypes.ModuleName, // Note: consumer endblocker before staking module | ||
ccvstakingtypes.ModuleName, | ||
capabilitytypes.ModuleName, | ||
authtypes.ModuleName, | ||
|
@@ -537,7 +541,6 @@ func New( | |
vestingtypes.ModuleName, | ||
ibctransfertypes.ModuleName, | ||
ibchost.ModuleName, | ||
ibcconsumertypes.ModuleName, | ||
) | ||
|
||
// NOTE: The genutils module must occur after staking so that pools are | ||
|
@@ -550,6 +553,7 @@ func New( | |
capabilitytypes.ModuleName, | ||
authtypes.ModuleName, | ||
banktypes.ModuleName, | ||
ibcconsumertypes.ModuleName, // Note: consumer initiation before staking module | ||
ccvdistrtypes.ModuleName, | ||
ccvstakingtypes.ModuleName, | ||
slashingtypes.ModuleName, | ||
|
@@ -564,7 +568,6 @@ func New( | |
vestingtypes.ModuleName, | ||
ibchost.ModuleName, | ||
ibctransfertypes.ModuleName, | ||
ibcconsumertypes.ModuleName, | ||
) | ||
|
||
app.MM.RegisterInvariants(&app.CrisisKeeper) | ||
|
@@ -584,7 +587,7 @@ func New( | |
feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry), | ||
ccvgov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper, IsProposalWhitelisted), | ||
ccvmint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper), | ||
ccvstaking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), | ||
ccvstaking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.ConsumerKeeper), | ||
ccvdistr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, authtypes.FeeCollectorName), | ||
slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), | ||
params.NewAppModule(app.ParamsKeeper), | ||
|
@@ -625,6 +628,7 @@ func New( | |
app.UpgradeKeeper.SetUpgradeHandler( | ||
upgradeName, | ||
func(ctx sdk.Context, _ upgradetypes.Plan, _ module.VersionMap) (module.VersionMap, error) { | ||
|
||
app.IBCKeeper.ConnectionKeeper.SetParams(ctx, ibcconnectiontypes.DefaultParams()) | ||
|
||
fromVM := make(map[string]uint64) | ||
|
@@ -633,6 +637,23 @@ func New( | |
fromVM[moduleName] = eachModule.ConsensusVersion() | ||
} | ||
|
||
// TODO: should have a way to read from current node home | ||
userHomeDir, err := os.UserHomeDir() | ||
if err != nil { | ||
stdlog.Println("Failed to get home dir %2", err) | ||
} | ||
nodeHome := userHomeDir + "/.sovereign/config/genesis.json" | ||
appState, _, err := genutiltypes.GenesisStateFromGenFile(nodeHome) | ||
if err != nil { | ||
return fromVM, fmt.Errorf("failed to unmarshal genesis state: %w", err) | ||
} | ||
|
||
var consumerGenesis = ibcconsumertypes.GenesisState{} | ||
appCodec.MustUnmarshalJSON(appState[ibcconsumertypes.ModuleName], &consumerGenesis) | ||
|
||
consumerGenesis.PreCCV = true | ||
app.ConsumerKeeper.InitGenesis(ctx, &consumerGenesis) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. How does this call to the consumer keeper's There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. InitGenesis is only called when it's doing hard fork or launching a new chain, on soft fork, to init, it should be on upgrade handler I believe. |
||
|
||
ctx.Logger().Info("start to run module migrations...") | ||
|
||
return app.MM.RunMigrations(ctx, app.configurator, fromVM) | ||
|
@@ -645,7 +666,9 @@ func New( | |
} | ||
|
||
if upgradeInfo.Name == upgradeName && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { | ||
storeUpgrades := store.StoreUpgrades{} | ||
storeUpgrades := store.StoreUpgrades{ | ||
Added: []string{ibcconsumertypes.ModuleName}, | ||
} | ||
|
||
// configure store loader that checks if version == upgradeHeight and applies store upgrades | ||
app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -334,6 +334,7 @@ func New( | |
&app.IBCKeeper.PortKeeper, | ||
app.IBCKeeper.ConnectionKeeper, | ||
app.IBCKeeper.ClientKeeper, | ||
nil, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could we pass in staking keeper here in case we'd ever want to test this upgrade with a normal consumer? Maybe I just need more clarity on how this PR affects (or shouldn't affect) the normal consumer, and the democracy consumer There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Staking keeper will only be used for democracy one, but could pass consumer keeper here since consumer keeper implement the interface of staking keeper. On consumer app, there's no staking keeper FYI. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The reason for not passing anything here is to show that it's not democracy app There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For all the uses of stakingKeeper, it has checker for |
||
app.SlashingKeeper, | ||
app.BankKeeper, | ||
app.AccountKeeper, | ||
|
@@ -344,7 +345,7 @@ func New( | |
|
||
// register slashing module Slashing hooks to the consumer keeper | ||
app.ConsumerKeeper = *app.ConsumerKeeper.SetHooks(app.SlashingKeeper.Hooks()) | ||
consumerModule := ibcconsumer.NewAppModule(app.ConsumerKeeper) | ||
consumerModule := ibcconsumer.NewAppModule(app.ConsumerKeeper, nil) | ||
|
||
app.TransferKeeper = ibctransferkeeper.NewKeeper( | ||
appCodec, | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seems good, just curious on the context why new arguments are needed in this file and
app/consumer/app.go
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is using staking keeper's previous validator set, to set voting power of the existing validators as zero. Probably, there should be a way to use previous validator set without staking keeper.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Got it, I'll need to refresh myself about how the democracy consumer app.go works, and how its staking keeper is used