From 8bc1f0026265db14f1c5de3fa2cd0711022b5de6 Mon Sep 17 00:00:00 2001 From: insumity Date: Thu, 5 Sep 2024 09:58:11 +0200 Subject: [PATCH 01/10] init commit --- app/upgrades/v20/upgrades.go | 370 ++++++++++++++++++++---------- app/upgrades/v20/upgrades_test.go | 242 +++++++++++++++++++ 2 files changed, 495 insertions(+), 117 deletions(-) create mode 100644 app/upgrades/v20/upgrades_test.go diff --git a/app/upgrades/v20/upgrades.go b/app/upgrades/v20/upgrades.go index bedacc15ea0..a823c17bf8a 100644 --- a/app/upgrades/v20/upgrades.go +++ b/app/upgrades/v20/upgrades.go @@ -3,6 +3,8 @@ package v20 import ( "context" "fmt" + "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + "time" providerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/provider/keeper" providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" @@ -22,11 +24,11 @@ import ( // Constants for the new parameters in the v20 upgrade. const ( - // MaxValidators will be set to 200 (up from 180), + // NewMaxValidators will be set to 200 (up from 180), // to allow the first 20 inactive validators // to participate on consumer chains. NewMaxValidators = 200 - // MaxProviderConsensusValidators will be set to 180, + // NewMaxProviderConsensusValidators will be set to 180, // to preserve the behaviour of only the first 180 // validators participating in consensus on the Cosmos Hub. NewMaxProviderConsensusValidators = 180 @@ -66,11 +68,11 @@ func CreateUpgradeHandler( return vm, errorsmod.Wrapf(err, "initializing LastProviderConsensusValSet during migration") } - ctx.Logger().Info("Migrating ICS legacy proposals...") + ctx.Logger().Info("Migrating ICS proposals...") msgServer := providerkeeper.NewMsgServerImpl(&keepers.ProviderKeeper) - err = MigrateICSLegacyProposals(ctx, msgServer, keepers.ProviderKeeper, *keepers.GovKeeper) + err = MigrateICSProposals(ctx, msgServer, keepers.ProviderKeeper, *keepers.GovKeeper) if err != nil { - return vm, errorsmod.Wrapf(err, "migrating ICS legacy proposals during migration") + return vm, errorsmod.Wrapf(err, "migrating ICS proposals during migration") } ctx.Logger().Info("Setting ICS consumers metadata...") @@ -141,8 +143,8 @@ func InitializeLastProviderConsensusValidatorSet( return nil } -// MigrateICSLegacyProposals migrates ICS legacy proposals -func MigrateICSLegacyProposals(ctx sdk.Context, msgServer providertypes.MsgServer, providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper) error { +// MigrateICSProposals migrates ICS legacy proposals +func MigrateICSProposals(ctx sdk.Context, msgServer providertypes.MsgServer, providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper) error { proposals := []govtypes.Proposal{} err := govKeeper.Proposals.Walk(ctx, nil, func(key uint64, proposal govtypes.Proposal) (stop bool, err error) { proposals = append(proposals, proposal) @@ -152,7 +154,12 @@ func MigrateICSLegacyProposals(ctx sdk.Context, msgServer providertypes.MsgServe return errorsmod.Wrapf(err, "iterating through proposals") } for _, proposal := range proposals { - err := MigrateProposal(ctx, msgServer, providerKeeper, govKeeper, proposal) + err := MigrateICSLegacyProposal(ctx, msgServer, providerKeeper, govKeeper, proposal) + if err != nil { + return errorsmod.Wrapf(err, "migrating legacy proposal %d", proposal.Id) + } + + err = MigrateICSProposal(ctx, msgServer, providerKeeper, govKeeper, proposal) if err != nil { return errorsmod.Wrapf(err, "migrating proposal %d", proposal.Id) } @@ -160,8 +167,135 @@ func MigrateICSLegacyProposals(ctx sdk.Context, msgServer providertypes.MsgServe return nil } -// MigrateProposal migrates an ICS proposal -func MigrateProposal( +func ConsumerAdditionProposalToMsgConsumerAddition(proposal providertypes.ConsumerAdditionProposal, authority string) providertypes.MsgConsumerAddition { + return providertypes.MsgConsumerAddition{ + ChainId: proposal.ChainId, + InitialHeight: proposal.InitialHeight, + GenesisHash: proposal.GenesisHash, + BinaryHash: proposal.BinaryHash, + SpawnTime: proposal.SpawnTime, + UnbondingPeriod: proposal.UnbondingPeriod, + CcvTimeoutPeriod: proposal.CcvTimeoutPeriod, + TransferTimeoutPeriod: proposal.TransferTimeoutPeriod, + ConsumerRedistributionFraction: proposal.ConsumerRedistributionFraction, + BlocksPerDistributionTransmission: proposal.BlocksPerDistributionTransmission, + HistoricalEntries: proposal.HistoricalEntries, + DistributionTransmissionChannel: proposal.DistributionTransmissionChannel, + Top_N: proposal.Top_N, + ValidatorsPowerCap: proposal.ValidatorsPowerCap, + ValidatorSetCap: proposal.ValidatorSetCap, + Allowlist: proposal.Allowlist, + Denylist: proposal.Denylist, + Authority: authority, + MinStake: proposal.MinStake, + AllowInactiveVals: proposal.AllowInactiveVals, + } +} + +func ConsumerRemovalProposalToMsgConsumerRemoval(proposal providertypes.ConsumerRemovalProposal, authority string) providertypes.MsgConsumerRemoval { + return providertypes.MsgConsumerRemoval{ + ChainId: proposal.ChainId, + StopTime: proposal.StopTime, + Authority: authority, + } +} + +func ConsumerModificationProposalToMsgConsumerModification(proposal providertypes.ConsumerModificationProposal, authority string) providertypes.MsgConsumerModification { + return providertypes.MsgConsumerModification{ + Title: proposal.Title, + Description: proposal.Description, + ChainId: proposal.ChainId, + Top_N: proposal.Top_N, + ValidatorsPowerCap: proposal.ValidatorsPowerCap, + ValidatorSetCap: proposal.ValidatorSetCap, + Allowlist: proposal.Allowlist, + Denylist: proposal.Denylist, + Authority: authority, + MinStake: proposal.MinStake, + AllowInactiveVals: proposal.AllowInactiveVals, + } +} + +func ChangeRewardDenomsProposalToMsgChangeRewardDenoms(proposal providertypes.ChangeRewardDenomsProposal, authority string) providertypes.MsgChangeRewardDenoms { + return providertypes.MsgChangeRewardDenoms{ + DenomsToAdd: proposal.DenomsToAdd, + DenomsToRemove: proposal.DenomsToRemove, + Authority: authority, + } +} + +func MigrateICSProposal( + ctx sdk.Context, + msgServer providertypes.MsgServer, + providerKeeper providerkeeper.Keeper, + govKeeper govkeeper.Keeper, + proposal govtypes.Proposal) error { + // ignore proposals that were rejected or failed + if proposal.Status != govtypes.StatusDepositPeriod && + proposal.Status != govtypes.StatusVotingPeriod && + proposal.Status != govtypes.StatusPassed { + return nil + } + + proposalMessages := proposal.GetMessages() + for index, proposalMsg := range proposalMessages { + switch msg := proposalMsg.GetCachedValue().(type) { + case *providertypes.MsgConsumerAddition: + err := MigrateMsgConsumerAddition( + ctx, + msgServer, + providerKeeper, + govKeeper, + proposal.Id, + *msg, + index, + ) + if err != nil { + return err + } + case *providertypes.MsgConsumerRemoval: + err := MigrateMsgConsumerRemoval( + ctx, + msgServer, + providerKeeper, + govKeeper, + proposal.Id, + *msg, + index, + ) + if err != nil { + return err + } + case *providertypes.MsgConsumerModification: + err := MigrateMsgConsumerModification( + ctx, + providerKeeper, + govKeeper, + proposal.Id, + *msg, + index, + ) + if err != nil { + return err + } + case *providertypes.MsgChangeRewardDenoms: + err := MigrateMsgChangeRewardDenoms( + ctx, + govKeeper, + proposal.Id, + *msg, + index, + ) + if err != nil { + return err + } + } + } + + return nil +} + +func MigrateICSLegacyProposal( ctx sdk.Context, msgServer providertypes.MsgServer, providerKeeper providerkeeper.Keeper, @@ -195,73 +329,74 @@ func MigrateProposal( switch msg := content.(type) { case *providertypes.ConsumerAdditionProposal: - return MigrateConsumerAdditionProposal( - ctx, + return MigrateMsgConsumerAddition(ctx, msgServer, providerKeeper, govKeeper, - proposal, - msg, - ) + proposal.Id, + ConsumerAdditionProposalToMsgConsumerAddition(*msg, "authority"), + 0) case *providertypes.ConsumerRemovalProposal: - return MigrateConsumerRemovalProposal( + return MigrateMsgConsumerRemoval( ctx, msgServer, providerKeeper, govKeeper, - proposal, - msg, + proposal.Id, + ConsumerRemovalProposalToMsgConsumerRemoval(*msg, "authority"), + 0, ) case *providertypes.ConsumerModificationProposal: - return MigrateConsumerModificationProposal( + return MigrateMsgConsumerModification( ctx, - msgServer, providerKeeper, govKeeper, - proposal, - msg, + proposal.Id, + ConsumerModificationProposalToMsgConsumerModification(*msg, "authority"), + 0, ) case *providertypes.ChangeRewardDenomsProposal: - return MigrateChangeRewardDenomsProposal( + return MigrateMsgChangeRewardDenoms( ctx, - msgServer, - providerKeeper, govKeeper, - proposal, - msg, + proposal.Id, + ChangeRewardDenomsProposalToMsgChangeRewardDenoms(*msg, "authority"), + 0, ) } return nil } -// MigrateConsumerAdditionProposal migrates a ConsumerAdditionProposal -func MigrateConsumerAdditionProposal( +func MigrateMsgConsumerAddition( ctx sdk.Context, msgServer providertypes.MsgServer, providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper, - proposal govtypes.Proposal, - msg *providertypes.ConsumerAdditionProposal, + proposalId uint64, + msg providertypes.MsgConsumerAddition, + indexOfMessageInProposal int, ) error { + proposal, err := govKeeper.Proposals.Get(ctx, proposalId) + if err != nil { + return err + } if proposal.Status == govtypes.StatusPassed { - // ConsumerAdditionProposal that passed -- it was added to the - // list of pending consumer addition proposals, which was deleted during - // the migration of the provider module - for _, consumerID := range providerKeeper.GetAllActiveConsumerIds(ctx) { - chainID, err := providerKeeper.GetConsumerChainId(ctx, consumerID) + // MsgConsumerAddition that passed + for _, consumerId := range providerKeeper.GetAllActiveConsumerIds(ctx) { + chainId, err := providerKeeper.GetConsumerChainId(ctx, consumerId) if err != nil { return err // this means something is wrong with the provider state } - if chainID == msg.ChainId { + if chainId == msg.ChainId { // this proposal was already handled in a previous block ctx.Logger().Info( fmt.Sprintf( - "Proposal with ID(%d) was skipped as it was already handled - consumerID(%s), chainID(%s), spawnTime(%s)", - proposal.Id, consumerID, msg.ChainId, msg.SpawnTime.String(), + "Proposal with ID(%d) was skipped as it was already handled - consumerId(%s), chainId(%s), spawnTime(%s)", + proposal.Id, consumerId, msg.ChainId, msg.SpawnTime.String(), ), ) return nil @@ -274,8 +409,11 @@ func MigrateConsumerAdditionProposal( // chain to be launched at msg.SpawnTime. // create a new consumer chain with all the parameters - metadata := metadataFromCAP(msg) - initParams, err := initParamsFromCAP(msg) + metadata := CreateConsumerMetadata(fmt.Sprintf("Chain with chain id %s", msg.ChainId), "TBA") + + initParams, err := CreateConsumerInitializationParameters(msg.InitialHeight, msg.GenesisHash, msg.BinaryHash, + msg.SpawnTime, msg.UnbondingPeriod, msg.CcvTimeoutPeriod, msg.TransferTimeoutPeriod, msg.ConsumerRedistributionFraction, + msg.BlocksPerDistributionTransmission, msg.HistoricalEntries, msg.DistributionTransmissionChannel) if err != nil { // invalid init params -- ignore proposal ctx.Logger().Error( @@ -286,7 +424,9 @@ func MigrateConsumerAdditionProposal( ) return nil } - powerShapingParams, err := powerShapingParamsFromCAP(msg) + + powerShapingParams, err := CreatePowerShapingParameters(msg.Top_N, msg.ValidatorsPowerCap, msg.ValidatorSetCap, + msg.Allowlist, msg.Denylist, msg.MinStake, msg.AllowInactiveVals) if err != nil { // invalid power shaping params -- ignore proposal ctx.Logger().Error( @@ -328,13 +468,16 @@ func MigrateConsumerAdditionProposal( ), ) } else { - // ConsumerAdditionProposal that was submitted, but not yet passed. + // MsgConsumerAddition that was submitted, but not yet passed. // If the proposal is invalid, remove it. // Otherwise, create a new consumer chain (MsgCreateConsumer), and // replace the proposal's content with a MsgUpdateConsumer - metadata := metadataFromCAP(msg) - initParams, err := initParamsFromCAP(msg) + metadata := CreateConsumerMetadata(fmt.Sprintf("Chain with chain id %s", msg.ChainId), "TBA") + + initParams, err := CreateConsumerInitializationParameters(msg.InitialHeight, msg.GenesisHash, msg.BinaryHash, + msg.SpawnTime, msg.UnbondingPeriod, msg.CcvTimeoutPeriod, msg.TransferTimeoutPeriod, msg.ConsumerRedistributionFraction, + msg.BlocksPerDistributionTransmission, msg.HistoricalEntries, msg.DistributionTransmissionChannel) if err != nil { // invalid init params -- delete proposal if err := govKeeper.DeleteProposal(ctx, proposal.Id); err != nil { @@ -348,7 +491,9 @@ func MigrateConsumerAdditionProposal( ) return nil } - powerShapingParams, err := powerShapingParamsFromCAP(msg) + + powerShapingParams, err := CreatePowerShapingParameters(msg.Top_N, msg.ValidatorsPowerCap, msg.ValidatorSetCap, + msg.Allowlist, msg.Denylist, msg.MinStake, msg.AllowInactiveVals) if err != nil { // invalid power shaping params -- delete proposal if err := govKeeper.DeleteProposal(ctx, proposal.Id); err != nil { @@ -394,7 +539,7 @@ func MigrateConsumerAdditionProposal( if err != nil { return err } - proposal.Messages[0] = anyMsg + proposal.Messages[indexOfMessageInProposal] = anyMsg if err := govKeeper.SetProposal(ctx, proposal); err != nil { return err } @@ -408,11 +553,10 @@ func MigrateConsumerAdditionProposal( return nil } -// metadataFromCAP returns ConsumerMetadata from a ConsumerAdditionProposal -func metadataFromCAP(prop *providertypes.ConsumerAdditionProposal) providertypes.ConsumerMetadata { +func CreateConsumerMetadata(title string, description string) providertypes.ConsumerMetadata { metadata := providertypes.ConsumerMetadata{ - Name: prop.Title, - Description: prop.Description, + Name: title, + Description: description, Metadata: "TBA", } err := providertypes.ValidateConsumerMetadata(metadata) @@ -423,54 +567,57 @@ func metadataFromCAP(prop *providertypes.ConsumerAdditionProposal) providertypes return metadata } -// initParamsFromCAP returns ConsumerInitializationParameters from -// a ConsumerAdditionProposal -func initParamsFromCAP( - prop *providertypes.ConsumerAdditionProposal, -) (providertypes.ConsumerInitializationParameters, error) { +func CreateConsumerInitializationParameters( + initialHeight types.Height, genesisHash []byte, binaryHash []byte, spawnTime time.Time, unbondingPeriod time.Duration, + ccvTimeoutPeriod time.Duration, transferTimeoutPeriod time.Duration, consumerRedistributionFraction string, + blocksPerDistributionTransmission int64, historicalEntries int64, distributionTransmissionChannel string) (providertypes.ConsumerInitializationParameters, error) { initParams := providertypes.ConsumerInitializationParameters{ - InitialHeight: prop.InitialHeight, - GenesisHash: prop.GenesisHash, - BinaryHash: prop.BinaryHash, - SpawnTime: prop.SpawnTime, - UnbondingPeriod: prop.UnbondingPeriod, - CcvTimeoutPeriod: prop.CcvTimeoutPeriod, - TransferTimeoutPeriod: prop.TransferTimeoutPeriod, - ConsumerRedistributionFraction: prop.ConsumerRedistributionFraction, - BlocksPerDistributionTransmission: prop.BlocksPerDistributionTransmission, - HistoricalEntries: prop.HistoricalEntries, - DistributionTransmissionChannel: prop.DistributionTransmissionChannel, + InitialHeight: initialHeight, + GenesisHash: genesisHash, + BinaryHash: binaryHash, + SpawnTime: spawnTime, + UnbondingPeriod: unbondingPeriod, + CcvTimeoutPeriod: ccvTimeoutPeriod, + TransferTimeoutPeriod: transferTimeoutPeriod, + ConsumerRedistributionFraction: consumerRedistributionFraction, + BlocksPerDistributionTransmission: blocksPerDistributionTransmission, + HistoricalEntries: historicalEntries, + DistributionTransmissionChannel: distributionTransmissionChannel, } err := providertypes.ValidateInitializationParameters(initParams) return initParams, err } -// powerShapingParamsFromCAP returns PowerShapingParameters from a ConsumerAdditionProposal -func powerShapingParamsFromCAP( - prop *providertypes.ConsumerAdditionProposal, +func CreatePowerShapingParameters( + topN uint32, validatorsPowerCap uint32, validatorSetCap uint32, allowlist []string, denylist []string, + minStake uint64, allowInactiveVals bool, ) (providertypes.PowerShapingParameters, error) { powerShapingParams := providertypes.PowerShapingParameters{ - Top_N: prop.Top_N, - ValidatorsPowerCap: prop.ValidatorsPowerCap, - ValidatorSetCap: prop.ValidatorSetCap, - Allowlist: prop.Allowlist, - Denylist: prop.Denylist, - MinStake: prop.MinStake, - AllowInactiveVals: prop.AllowInactiveVals, + Top_N: topN, + ValidatorsPowerCap: validatorsPowerCap, + ValidatorSetCap: validatorSetCap, + Allowlist: allowlist, + Denylist: denylist, + MinStake: minStake, + AllowInactiveVals: allowInactiveVals, } err := providertypes.ValidatePowerShapingParameters(powerShapingParams) return powerShapingParams, err } -// MigrateConsumerRemovalProposal migrates a ConsumerRemovalProposal -func MigrateConsumerRemovalProposal( +func MigrateMsgConsumerRemoval( ctx sdk.Context, msgServer providertypes.MsgServer, providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper, - proposal govtypes.Proposal, - msg *providertypes.ConsumerRemovalProposal, + proposalId uint64, + msg providertypes.MsgConsumerRemoval, + indexOfMessageInProposal int, ) error { + proposal, err := govKeeper.Proposals.Get(ctx, proposalId) + if err != nil { + return err + } // identify the consumer chain rmConsumerID := "" for _, consumerID := range providerKeeper.GetAllActiveConsumerIds(ctx) { @@ -508,7 +655,6 @@ func MigrateConsumerRemovalProposal( msgRemoveConsumer := providertypes.MsgRemoveConsumer{ ConsumerId: rmConsumerID, - StopTime: msg.StopTime, Signer: govKeeper.GetAuthority(), } @@ -533,14 +679,15 @@ func MigrateConsumerRemovalProposal( ), ) } else { - // ConsumerRemovalProposal that was submitted, but not yet passed + // MsgConsumerRemoval that was submitted, but not yet passed // replace the message in the proposal with a MsgRemoveConsumer anyMsg, err := codec.NewAnyWithValue(&msgRemoveConsumer) if err != nil { return err } - proposal.Messages[0] = anyMsg + + proposal.Messages[indexOfMessageInProposal] = anyMsg if err := govKeeper.SetProposal(ctx, proposal); err != nil { return err } @@ -554,17 +701,20 @@ func MigrateConsumerRemovalProposal( return nil } -// MigrateConsumerModificationProposal migrates a ConsumerModificationProposal -func MigrateConsumerModificationProposal( +func MigrateMsgConsumerModification( ctx sdk.Context, - msgServer providertypes.MsgServer, providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper, - proposal govtypes.Proposal, - msg *providertypes.ConsumerModificationProposal, + proposalId uint64, + msg providertypes.MsgConsumerModification, + indexOfMessageInProposal int, ) error { + proposal, err := govKeeper.Proposals.Get(ctx, proposalId) + if err != nil { + return err + } if proposal.Status == govtypes.StatusPassed { - // ConsumerModificationProposal that passed -- it was already handled in + // proposal that passed -- it was already handled in // a previous block since these proposals are handled immediately ctx.Logger().Info( fmt.Sprintf( @@ -575,7 +725,7 @@ func MigrateConsumerModificationProposal( return nil } - // ConsumerModificationProposal that was submitted, but not yet passed + // proposal that was submitted, but not yet passed modifyConsumerID := "" for _, consumerID := range providerKeeper.GetAllActiveConsumerIds(ctx) { chainID, err := providerKeeper.GetConsumerChainId(ctx, consumerID) @@ -602,7 +752,8 @@ func MigrateConsumerModificationProposal( } // replace the message in the proposal with a MsgUpdateConsumer - powerShapingParams, err := powerShapingParamsFromCMP(msg) + powerShapingParams, err := CreatePowerShapingParameters(msg.Top_N, msg.ValidatorsPowerCap, msg.ValidatorSetCap, + msg.Allowlist, msg.Denylist, msg.MinStake, msg.AllowInactiveVals) if err != nil { // invalid power shaping params -- delete proposal if err := govKeeper.DeleteProposal(ctx, proposal.Id); err != nil { @@ -627,7 +778,7 @@ func MigrateConsumerModificationProposal( if err != nil { return err } - proposal.Messages[0] = anyMsg + proposal.Messages[indexOfMessageInProposal] = anyMsg if err := govKeeper.SetProposal(ctx, proposal); err != nil { return err } @@ -640,32 +791,17 @@ func MigrateConsumerModificationProposal( return nil } -// powerShapingParamsFromCMP returns PowerShapingParameters from a ConsumerModificationProposal -func powerShapingParamsFromCMP( - prop *providertypes.ConsumerModificationProposal, -) (providertypes.PowerShapingParameters, error) { - powerShapingParams := providertypes.PowerShapingParameters{ - Top_N: prop.Top_N, - ValidatorsPowerCap: prop.ValidatorsPowerCap, - ValidatorSetCap: prop.ValidatorSetCap, - Allowlist: prop.Allowlist, - Denylist: prop.Denylist, - MinStake: prop.MinStake, - AllowInactiveVals: prop.AllowInactiveVals, - } - err := providertypes.ValidatePowerShapingParameters(powerShapingParams) - return powerShapingParams, err -} - -// MigrateChangeRewardDenomsProposal migrates a ChangeRewardDenomsProposal -func MigrateChangeRewardDenomsProposal( +func MigrateMsgChangeRewardDenoms( ctx sdk.Context, - msgServer providertypes.MsgServer, - providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper, - proposal govtypes.Proposal, - msg *providertypes.ChangeRewardDenomsProposal, + proposalId uint64, + msg providertypes.MsgChangeRewardDenoms, + indexOfMessageInProposal int, ) error { + proposal, err := govKeeper.Proposals.Get(ctx, proposalId) + if err != nil { + return err + } if proposal.Status == govtypes.StatusPassed { // ChangeRewardDenomsProposal that passed -- it was already handled in // a previous block since these proposals are handled immediately @@ -699,7 +835,7 @@ func MigrateChangeRewardDenomsProposal( if err != nil { return err } - proposal.Messages[0] = anyMsg + proposal.Messages[indexOfMessageInProposal] = anyMsg if err := govKeeper.SetProposal(ctx, proposal); err != nil { return err } diff --git a/app/upgrades/v20/upgrades_test.go b/app/upgrades/v20/upgrades_test.go new file mode 100644 index 00000000000..0ff0f3be4e1 --- /dev/null +++ b/app/upgrades/v20/upgrades_test.go @@ -0,0 +1,242 @@ +package v20_test + +import ( + "encoding/base64" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + "github.com/cosmos/gaia/v20/app/helpers" + v20 "github.com/cosmos/gaia/v20/app/upgrades/v20" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + providerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/provider/keeper" + providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" + "github.com/cosmos/interchain-security/v5/x/ccv/types" + "github.com/stretchr/testify/require" + "testing" + "time" +) + +func GetTestMsgConsumerAddition() providertypes.MsgConsumerAddition { + return providertypes.MsgConsumerAddition{ + ChainId: "a ChainId", + InitialHeight: clienttypes.NewHeight(4, 5), + GenesisHash: []byte(base64.StdEncoding.EncodeToString([]byte("gen_hash"))), + BinaryHash: []byte(base64.StdEncoding.EncodeToString([]byte("bin_hash"))), + SpawnTime: time.Now().UTC(), + UnbondingPeriod: types.DefaultConsumerUnbondingPeriod, + CcvTimeoutPeriod: types.DefaultCCVTimeoutPeriod, + TransferTimeoutPeriod: types.DefaultTransferTimeoutPeriod, + ConsumerRedistributionFraction: types.DefaultConsumerRedistributeFrac, + BlocksPerDistributionTransmission: types.DefaultBlocksPerDistributionTransmission, + HistoricalEntries: types.DefaultHistoricalEntries, + DistributionTransmissionChannel: "", + Top_N: 50, + ValidatorsPowerCap: 0, + ValidatorSetCap: 0, + Allowlist: nil, + Denylist: nil, + Authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), + } +} + +func TestMigrateMsgConsumerAdditionWithNotPassedProposalAndInvalidParams(t *testing.T) { + gaiaApp := helpers.Setup(t) + ctx := gaiaApp.NewUncachedContext(true, tmproto.Header{}) + + providerKeeper := gaiaApp.ProviderKeeper + govKeeper := gaiaApp.GovKeeper + + // assert that when a not-passed proposal has invalid params, it gets deleted + // create a sample message, so we can use it in the proposal + messages := make([]*codectypes.Any, 1) + messages[0] = &codectypes.Any{TypeUrl: "", Value: []byte{}} + proposal := v1.Proposal{Messages: messages} + err := govKeeper.SetProposal(ctx, proposal) + require.NoError(t, err) + + // verify the proposal can be found + _, err = govKeeper.Proposals.Get(ctx, 0) + require.NoError(t, err) + + msgConsumerAddition := GetTestMsgConsumerAddition() + msgConsumerAddition.Top_N = 13 // invalid param, not in [0]\union[50, 100] + msgServer := providerkeeper.NewMsgServerImpl(&providerKeeper) + err = v20.MigrateMsgConsumerAddition(ctx, msgServer, + providerKeeper, + *govKeeper, + 0, + msgConsumerAddition, + 0) + require.NoError(t, err) + + // verify that the proposal got deleted (we cannot find it) + _, err = govKeeper.Proposals.Get(ctx, 0) + require.ErrorContains(t, err, "not found") + + // (indirectly) verify that `CreateConsumer` was not called by checking that consumer id was not updated + consumerId, found := providerKeeper.GetConsumerId(ctx) + require.False(t, found) + require.Equal(t, uint64(0), consumerId) +} + +func TestMigrateMsgConsumerAdditionWithNotPassedProposalAndValidParams(t *testing.T) { + gaiaApp := helpers.Setup(t) + ctx := gaiaApp.NewUncachedContext(true, tmproto.Header{}) + + providerKeeper := gaiaApp.ProviderKeeper + govKeeper := gaiaApp.GovKeeper + + // create a proposal with 2 messages and only update the second message (call `MigrateConsumerAddition` with + // `indexOfMessageInProposal` being 1) + messages := make([]*codectypes.Any, 2) + messages[0] = &codectypes.Any{TypeUrl: "", Value: []byte{1, 2, 3}} + messages[1] = &codectypes.Any{TypeUrl: "", Value: []byte{}} + proposal := v1.Proposal{Messages: messages} + err := govKeeper.SetProposal(ctx, proposal) + require.NoError(t, err) + + msgConsumerAddition := GetTestMsgConsumerAddition() + msgServer := providerkeeper.NewMsgServerImpl(&providerKeeper) + err = v20.MigrateMsgConsumerAddition(ctx, msgServer, + providerKeeper, + *govKeeper, + 0, + msgConsumerAddition, + 1) + require.NoError(t, err) + + // (indirectly) verify that `CreateConsumer` was called by checking that consumer id was updated + consumerId, found := providerKeeper.GetConsumerId(ctx) + require.True(t, found) + require.Equal(t, uint64(1), consumerId) + consumerMetadata, err := providerKeeper.GetConsumerMetadata(ctx, "0") + require.NoError(t, err) + require.Contains(t, "Chain with chain id a ChainId", consumerMetadata.Name) + + proposal, err = govKeeper.Proposals.Get(ctx, 0) + require.NoError(t, err) + // first message was not updated + require.Equal(t, messages[0].TypeUrl, proposal.Messages[0].TypeUrl) + require.Equal(t, messages[0].Value, proposal.Messages[0].Value) + + // verify that the proposal's second message now contains a `MsgUpdateConsumer` message + initParams, err := v20.CreateConsumerInitializationParameters( + msgConsumerAddition.InitialHeight, msgConsumerAddition.GenesisHash, msgConsumerAddition.BinaryHash, + msgConsumerAddition.SpawnTime, msgConsumerAddition.UnbondingPeriod, msgConsumerAddition.CcvTimeoutPeriod, msgConsumerAddition.TransferTimeoutPeriod, + msgConsumerAddition.ConsumerRedistributionFraction, msgConsumerAddition.BlocksPerDistributionTransmission, msgConsumerAddition.HistoricalEntries, + msgConsumerAddition.DistributionTransmissionChannel) + require.NoError(t, err) + + powerShapingParams, err := v20.CreatePowerShapingParameters(msgConsumerAddition.Top_N, msgConsumerAddition.ValidatorsPowerCap, + msgConsumerAddition.ValidatorSetCap, msgConsumerAddition.Allowlist, msgConsumerAddition.Denylist, msgConsumerAddition.MinStake, + msgConsumerAddition.AllowInactiveVals) + require.NoError(t, err) + + expectedMsgUpdateConsumer := providertypes.MsgUpdateConsumer{ + Signer: govKeeper.GetAuthority(), + ConsumerId: "0", + Metadata: nil, + InitializationParameters: &initParams, + PowerShapingParameters: &powerShapingParams, + } + expectedMsgUpdateConsumerBytes, err := expectedMsgUpdateConsumer.Marshal() + require.NoError(t, err) + require.Equal(t, "/interchain_security.ccv.provider.v1.MsgUpdateConsumer", proposal.Messages[1].TypeUrl) + require.Equal(t, expectedMsgUpdateConsumerBytes, proposal.Messages[1].Value) +} + +func TestMigrateMsgConsumerAdditionWithPassedProposal(t *testing.T) { + gaiaApp := helpers.Setup(t) + ctx := gaiaApp.NewUncachedContext(true, tmproto.Header{}) + + providerKeeper := gaiaApp.ProviderKeeper + govKeeper := gaiaApp.GovKeeper + + // create a passed proposal with one message + messages := make([]*codectypes.Any, 1) + messages[0] = &codectypes.Any{TypeUrl: "", Value: []byte{1, 2, 3}} + proposal := v1.Proposal{Messages: messages, Status: v1.ProposalStatus_PROPOSAL_STATUS_PASSED} + err := govKeeper.SetProposal(ctx, proposal) + require.NoError(t, err) + + msgConsumerAddition := GetTestMsgConsumerAddition() + msgServer := providerkeeper.NewMsgServerImpl(&providerKeeper) + err = v20.MigrateMsgConsumerAddition(ctx, msgServer, + providerKeeper, + *govKeeper, + 0, + msgConsumerAddition, + 0) + require.NoError(t, err) + + // (indirectly) verify that `CreateConsumer` was called by checking that consumer id was updated + consumerId, found := providerKeeper.GetConsumerId(ctx) + require.True(t, found) + require.Equal(t, uint64(1), consumerId) + consumerMetadata, err := providerKeeper.GetConsumerMetadata(ctx, "0") + require.NoError(t, err) + require.Contains(t, "Chain with chain id a ChainId", consumerMetadata.Name) + + proposal, err = govKeeper.Proposals.Get(ctx, 0) + require.NoError(t, err) + // first message was not updated + require.Equal(t, messages[0].TypeUrl, proposal.Messages[0].TypeUrl) + require.Equal(t, messages[0].Value, proposal.Messages[0].Value) + + // verify that the proposal's second message now contains a `MsgUpdateConsumer` message + initParams, err := v20.CreateConsumerInitializationParameters( + msgConsumerAddition.InitialHeight, msgConsumerAddition.GenesisHash, msgConsumerAddition.BinaryHash, + msgConsumerAddition.SpawnTime, msgConsumerAddition.UnbondingPeriod, msgConsumerAddition.CcvTimeoutPeriod, msgConsumerAddition.TransferTimeoutPeriod, + msgConsumerAddition.ConsumerRedistributionFraction, msgConsumerAddition.BlocksPerDistributionTransmission, msgConsumerAddition.HistoricalEntries, + msgConsumerAddition.DistributionTransmissionChannel) + require.NoError(t, err) + + powerShapingParams, err := v20.CreatePowerShapingParameters(msgConsumerAddition.Top_N, msgConsumerAddition.ValidatorsPowerCap, + msgConsumerAddition.ValidatorSetCap, msgConsumerAddition.Allowlist, msgConsumerAddition.Denylist, msgConsumerAddition.MinStake, + msgConsumerAddition.AllowInactiveVals) + require.NoError(t, err) + + actualInitParams, err := providerKeeper.GetConsumerInitializationParameters(ctx, "0") + require.NoError(t, err) + actualPowerShapingParams, err := providerKeeper.GetConsumerPowerShapingParameters(ctx, "0") + require.NoError(t, err) + require.Equal(t, powerShapingParams, actualPowerShapingParams) + require.Equal(t, initParams, actualInitParams) +} + +func TestMigrateMsgConsumerAdditionWithPassedProposalOfAnAlreadyHandleChain(t *testing.T) { + gaiaApp := helpers.Setup(t) + ctx := gaiaApp.NewUncachedContext(true, tmproto.Header{}) + + providerKeeper := gaiaApp.ProviderKeeper + govKeeper := gaiaApp.GovKeeper + + // create a passed proposal with one message + messages := make([]*codectypes.Any, 1) + messages[0] = &codectypes.Any{TypeUrl: "", Value: []byte{1, 2, 3}} + proposal := v1.Proposal{Messages: messages, Status: v1.ProposalStatus_PROPOSAL_STATUS_PASSED} + err := govKeeper.SetProposal(ctx, proposal) + require.NoError(t, err) + + msgConsumerAddition := GetTestMsgConsumerAddition() + + // the chain is already handled and launched + providerKeeper.FetchAndIncrementConsumerId(ctx) + providerKeeper.SetConsumerPhase(ctx, "0", providertypes.ConsumerPhase_CONSUMER_PHASE_LAUNCHED) + providerKeeper.SetConsumerChainId(ctx, "0", msgConsumerAddition.ChainId) + + msgServer := providerkeeper.NewMsgServerImpl(&providerKeeper) + err = v20.MigrateMsgConsumerAddition(ctx, msgServer, + providerKeeper, + *govKeeper, + 0, + msgConsumerAddition, + 0) + require.NoError(t, err) + + // (indirectly) verify that `CreateConsumer` was not called by checking there are no consumer metadata + _, err = providerKeeper.GetConsumerMetadata(ctx, "0") + require.Error(t, err) +} From 436754280bd63f87bd509260976ef2b14a27989f Mon Sep 17 00:00:00 2001 From: insumity Date: Thu, 5 Sep 2024 13:12:27 +0200 Subject: [PATCH 02/10] Update app/upgrades/v20/upgrades.go Co-authored-by: Marius Poke --- app/upgrades/v20/upgrades.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/upgrades/v20/upgrades.go b/app/upgrades/v20/upgrades.go index a823c17bf8a..cb415150305 100644 --- a/app/upgrades/v20/upgrades.go +++ b/app/upgrades/v20/upgrades.go @@ -468,7 +468,7 @@ func MigrateMsgConsumerAddition( ), ) } else { - // MsgConsumerAddition that was submitted, but not yet passed. + // proposal that was submitted, but not yet passed. // If the proposal is invalid, remove it. // Otherwise, create a new consumer chain (MsgCreateConsumer), and // replace the proposal's content with a MsgUpdateConsumer From 3e69b9cd16373526bb0e6f7c038f9bc301513b78 Mon Sep 17 00:00:00 2001 From: insumity Date: Thu, 5 Sep 2024 13:16:56 +0200 Subject: [PATCH 03/10] Update app/upgrades/v20/upgrades.go Co-authored-by: Marius Poke --- app/upgrades/v20/upgrades.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/upgrades/v20/upgrades.go b/app/upgrades/v20/upgrades.go index cb415150305..b52774bc73a 100644 --- a/app/upgrades/v20/upgrades.go +++ b/app/upgrades/v20/upgrades.go @@ -803,7 +803,7 @@ func MigrateMsgChangeRewardDenoms( return err } if proposal.Status == govtypes.StatusPassed { - // ChangeRewardDenomsProposal that passed -- it was already handled in + // proposal that passed -- it was already handled in // a previous block since these proposals are handled immediately ctx.Logger().Info( fmt.Sprintf("Proposal with ID(%d) was skipped as it was already handled", proposal.Id), From c17c70a9c4a56f2ae7a40f34b6301138b7719b7c Mon Sep 17 00:00:00 2001 From: insumity Date: Thu, 5 Sep 2024 13:17:04 +0200 Subject: [PATCH 04/10] Update app/upgrades/v20/upgrades.go Co-authored-by: Marius Poke --- app/upgrades/v20/upgrades.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/upgrades/v20/upgrades.go b/app/upgrades/v20/upgrades.go index b52774bc73a..43087c2a2ba 100644 --- a/app/upgrades/v20/upgrades.go +++ b/app/upgrades/v20/upgrades.go @@ -385,7 +385,7 @@ func MigrateMsgConsumerAddition( return err } if proposal.Status == govtypes.StatusPassed { - // MsgConsumerAddition that passed + // proposal that passed for _, consumerId := range providerKeeper.GetAllActiveConsumerIds(ctx) { chainId, err := providerKeeper.GetConsumerChainId(ctx, consumerId) if err != nil { From 3476a4532aa4845f530a956ab9e2dffa5b3da1b8 Mon Sep 17 00:00:00 2001 From: insumity Date: Thu, 5 Sep 2024 13:17:15 +0200 Subject: [PATCH 05/10] Update app/upgrades/v20/upgrades.go Co-authored-by: Marius Poke --- app/upgrades/v20/upgrades.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/upgrades/v20/upgrades.go b/app/upgrades/v20/upgrades.go index 43087c2a2ba..2475d04f761 100644 --- a/app/upgrades/v20/upgrades.go +++ b/app/upgrades/v20/upgrades.go @@ -679,7 +679,7 @@ func MigrateMsgConsumerRemoval( ), ) } else { - // MsgConsumerRemoval that was submitted, but not yet passed + // proposal that was submitted, but not yet passed // replace the message in the proposal with a MsgRemoveConsumer anyMsg, err := codec.NewAnyWithValue(&msgRemoveConsumer) From 3bccedb2eeef3dbe5304c49855fe2328fa2736ce Mon Sep 17 00:00:00 2001 From: insumity Date: Thu, 5 Sep 2024 13:52:13 +0200 Subject: [PATCH 06/10] small fixes; took into account comments --- app/upgrades/v20/upgrades.go | 133 ++++++++++++------------------ app/upgrades/v20/upgrades_test.go | 18 ++-- 2 files changed, 60 insertions(+), 91 deletions(-) diff --git a/app/upgrades/v20/upgrades.go b/app/upgrades/v20/upgrades.go index 2475d04f761..f223d623c92 100644 --- a/app/upgrades/v20/upgrades.go +++ b/app/upgrades/v20/upgrades.go @@ -3,9 +3,7 @@ package v20 import ( "context" "fmt" - "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - "time" - + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" providerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/provider/keeper" providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" @@ -16,7 +14,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" "github.com/cosmos/gaia/v20/app/keepers" @@ -145,8 +144,8 @@ func InitializeLastProviderConsensusValidatorSet( // MigrateICSProposals migrates ICS legacy proposals func MigrateICSProposals(ctx sdk.Context, msgServer providertypes.MsgServer, providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper) error { - proposals := []govtypes.Proposal{} - err := govKeeper.Proposals.Walk(ctx, nil, func(key uint64, proposal govtypes.Proposal) (stop bool, err error) { + proposals := []govtypesv1.Proposal{} + err := govKeeper.Proposals.Walk(ctx, nil, func(key uint64, proposal govtypesv1.Proposal) (stop bool, err error) { proposals = append(proposals, proposal) return false, nil // go through the entire collection }) @@ -167,7 +166,7 @@ func MigrateICSProposals(ctx sdk.Context, msgServer providertypes.MsgServer, pro return nil } -func ConsumerAdditionProposalToMsgConsumerAddition(proposal providertypes.ConsumerAdditionProposal, authority string) providertypes.MsgConsumerAddition { +func ConsumerAdditionProposalToMsgConsumerAddition(proposal providertypes.ConsumerAdditionProposal) providertypes.MsgConsumerAddition { return providertypes.MsgConsumerAddition{ ChainId: proposal.ChainId, InitialHeight: proposal.InitialHeight, @@ -186,21 +185,21 @@ func ConsumerAdditionProposalToMsgConsumerAddition(proposal providertypes.Consum ValidatorSetCap: proposal.ValidatorSetCap, Allowlist: proposal.Allowlist, Denylist: proposal.Denylist, - Authority: authority, + Authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), MinStake: proposal.MinStake, AllowInactiveVals: proposal.AllowInactiveVals, } } -func ConsumerRemovalProposalToMsgConsumerRemoval(proposal providertypes.ConsumerRemovalProposal, authority string) providertypes.MsgConsumerRemoval { +func ConsumerRemovalProposalToMsgConsumerRemoval(proposal providertypes.ConsumerRemovalProposal) providertypes.MsgConsumerRemoval { return providertypes.MsgConsumerRemoval{ ChainId: proposal.ChainId, StopTime: proposal.StopTime, - Authority: authority, + Authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), } } -func ConsumerModificationProposalToMsgConsumerModification(proposal providertypes.ConsumerModificationProposal, authority string) providertypes.MsgConsumerModification { +func ConsumerModificationProposalToMsgConsumerModification(proposal providertypes.ConsumerModificationProposal) providertypes.MsgConsumerModification { return providertypes.MsgConsumerModification{ Title: proposal.Title, Description: proposal.Description, @@ -210,7 +209,7 @@ func ConsumerModificationProposalToMsgConsumerModification(proposal providertype ValidatorSetCap: proposal.ValidatorSetCap, Allowlist: proposal.Allowlist, Denylist: proposal.Denylist, - Authority: authority, + Authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), MinStake: proposal.MinStake, AllowInactiveVals: proposal.AllowInactiveVals, } @@ -229,11 +228,11 @@ func MigrateICSProposal( msgServer providertypes.MsgServer, providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper, - proposal govtypes.Proposal) error { + proposal govtypesv1.Proposal) error { // ignore proposals that were rejected or failed - if proposal.Status != govtypes.StatusDepositPeriod && - proposal.Status != govtypes.StatusVotingPeriod && - proposal.Status != govtypes.StatusPassed { + if proposal.Status != govtypesv1.StatusDepositPeriod && + proposal.Status != govtypesv1.StatusVotingPeriod && + proposal.Status != govtypesv1.StatusPassed { return nil } @@ -278,17 +277,6 @@ func MigrateICSProposal( if err != nil { return err } - case *providertypes.MsgChangeRewardDenoms: - err := MigrateMsgChangeRewardDenoms( - ctx, - govKeeper, - proposal.Id, - *msg, - index, - ) - if err != nil { - return err - } } } @@ -300,12 +288,12 @@ func MigrateICSLegacyProposal( msgServer providertypes.MsgServer, providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper, - proposal govtypes.Proposal, + proposal govtypesv1.Proposal, ) error { // ignore proposals that were rejected or failed - if proposal.Status != govtypes.StatusDepositPeriod && - proposal.Status != govtypes.StatusVotingPeriod && - proposal.Status != govtypes.StatusPassed { + if proposal.Status != govtypesv1.StatusDepositPeriod && + proposal.Status != govtypesv1.StatusVotingPeriod && + proposal.Status != govtypesv1.StatusPassed { return nil } @@ -318,11 +306,11 @@ func MigrateICSLegacyProposal( msg := messages[0] // ignore non-legacy proposals - sdkLegacyMsg, isLegacyProposal := msg.GetCachedValue().(*govtypes.MsgExecLegacyContent) + sdkLegacyMsg, isLegacyProposal := msg.GetCachedValue().(*govtypesv1.MsgExecLegacyContent) if !isLegacyProposal { return nil } - content, err := govtypes.LegacyContentFromMessage(sdkLegacyMsg) + content, err := govtypesv1.LegacyContentFromMessage(sdkLegacyMsg) if err != nil { return err } @@ -334,7 +322,7 @@ func MigrateICSLegacyProposal( providerKeeper, govKeeper, proposal.Id, - ConsumerAdditionProposalToMsgConsumerAddition(*msg, "authority"), + ConsumerAdditionProposalToMsgConsumerAddition(*msg), 0) case *providertypes.ConsumerRemovalProposal: @@ -344,7 +332,7 @@ func MigrateICSLegacyProposal( providerKeeper, govKeeper, proposal.Id, - ConsumerRemovalProposalToMsgConsumerRemoval(*msg, "authority"), + ConsumerRemovalProposalToMsgConsumerRemoval(*msg), 0, ) @@ -354,7 +342,7 @@ func MigrateICSLegacyProposal( providerKeeper, govKeeper, proposal.Id, - ConsumerModificationProposalToMsgConsumerModification(*msg, "authority"), + ConsumerModificationProposalToMsgConsumerModification(*msg), 0, ) @@ -384,8 +372,8 @@ func MigrateMsgConsumerAddition( if err != nil { return err } - if proposal.Status == govtypes.StatusPassed { - // proposal that passed + if proposal.Status == govtypesv1.StatusPassed { + // MsgConsumerAddition that passed for _, consumerId := range providerKeeper.GetAllActiveConsumerIds(ctx) { chainId, err := providerKeeper.GetConsumerChainId(ctx, consumerId) if err != nil { @@ -409,11 +397,13 @@ func MigrateMsgConsumerAddition( // chain to be launched at msg.SpawnTime. // create a new consumer chain with all the parameters - metadata := CreateConsumerMetadata(fmt.Sprintf("Chain with chain id %s", msg.ChainId), "TBA") + metadata := providertypes.ConsumerMetadata{ + Name: msg.ChainId, + Description: "TBA", + Metadata: "TBA", + } - initParams, err := CreateConsumerInitializationParameters(msg.InitialHeight, msg.GenesisHash, msg.BinaryHash, - msg.SpawnTime, msg.UnbondingPeriod, msg.CcvTimeoutPeriod, msg.TransferTimeoutPeriod, msg.ConsumerRedistributionFraction, - msg.BlocksPerDistributionTransmission, msg.HistoricalEntries, msg.DistributionTransmissionChannel) + initParams, err := CreateConsumerInitializationParameters(msg) if err != nil { // invalid init params -- ignore proposal ctx.Logger().Error( @@ -473,11 +463,13 @@ func MigrateMsgConsumerAddition( // Otherwise, create a new consumer chain (MsgCreateConsumer), and // replace the proposal's content with a MsgUpdateConsumer - metadata := CreateConsumerMetadata(fmt.Sprintf("Chain with chain id %s", msg.ChainId), "TBA") + metadata := providertypes.ConsumerMetadata{ + Name: msg.ChainId, + Description: "TBA", + Metadata: "TBA", + } - initParams, err := CreateConsumerInitializationParameters(msg.InitialHeight, msg.GenesisHash, msg.BinaryHash, - msg.SpawnTime, msg.UnbondingPeriod, msg.CcvTimeoutPeriod, msg.TransferTimeoutPeriod, msg.ConsumerRedistributionFraction, - msg.BlocksPerDistributionTransmission, msg.HistoricalEntries, msg.DistributionTransmissionChannel) + initParams, err := CreateConsumerInitializationParameters(msg) if err != nil { // invalid init params -- delete proposal if err := govKeeper.DeleteProposal(ctx, proposal.Id); err != nil { @@ -553,36 +545,19 @@ func MigrateMsgConsumerAddition( return nil } -func CreateConsumerMetadata(title string, description string) providertypes.ConsumerMetadata { - metadata := providertypes.ConsumerMetadata{ - Name: title, - Description: description, - Metadata: "TBA", - } - err := providertypes.ValidateConsumerMetadata(metadata) - if err != nil { - metadata.Name = providertypes.TruncateString(metadata.Name, providertypes.MaxNameLength) - metadata.Description = providertypes.TruncateString(metadata.Description, providertypes.MaxDescriptionLength) - } - return metadata -} - -func CreateConsumerInitializationParameters( - initialHeight types.Height, genesisHash []byte, binaryHash []byte, spawnTime time.Time, unbondingPeriod time.Duration, - ccvTimeoutPeriod time.Duration, transferTimeoutPeriod time.Duration, consumerRedistributionFraction string, - blocksPerDistributionTransmission int64, historicalEntries int64, distributionTransmissionChannel string) (providertypes.ConsumerInitializationParameters, error) { +func CreateConsumerInitializationParameters(msgConsumerAddition providertypes.MsgConsumerAddition) (providertypes.ConsumerInitializationParameters, error) { initParams := providertypes.ConsumerInitializationParameters{ - InitialHeight: initialHeight, - GenesisHash: genesisHash, - BinaryHash: binaryHash, - SpawnTime: spawnTime, - UnbondingPeriod: unbondingPeriod, - CcvTimeoutPeriod: ccvTimeoutPeriod, - TransferTimeoutPeriod: transferTimeoutPeriod, - ConsumerRedistributionFraction: consumerRedistributionFraction, - BlocksPerDistributionTransmission: blocksPerDistributionTransmission, - HistoricalEntries: historicalEntries, - DistributionTransmissionChannel: distributionTransmissionChannel, + InitialHeight: msgConsumerAddition.InitialHeight, + GenesisHash: msgConsumerAddition.GenesisHash, + BinaryHash: msgConsumerAddition.BinaryHash, + SpawnTime: msgConsumerAddition.SpawnTime, + UnbondingPeriod: msgConsumerAddition.UnbondingPeriod, + CcvTimeoutPeriod: msgConsumerAddition.CcvTimeoutPeriod, + TransferTimeoutPeriod: msgConsumerAddition.TransferTimeoutPeriod, + ConsumerRedistributionFraction: msgConsumerAddition.ConsumerRedistributionFraction, + BlocksPerDistributionTransmission: msgConsumerAddition.BlocksPerDistributionTransmission, + HistoricalEntries: msgConsumerAddition.HistoricalEntries, + DistributionTransmissionChannel: msgConsumerAddition.DistributionTransmissionChannel, } err := providertypes.ValidateInitializationParameters(initParams) return initParams, err @@ -638,7 +613,7 @@ func MigrateMsgConsumerRemoval( proposal.Id, msg.ChainId, ), ) - if proposal.Status != govtypes.StatusPassed { + if proposal.Status != govtypesv1.StatusPassed { // if the proposal didn't pass yet, then just remove it if err := govKeeper.DeleteProposal(ctx, proposal.Id); err != nil { return err @@ -658,7 +633,7 @@ func MigrateMsgConsumerRemoval( Signer: govKeeper.GetAuthority(), } - if proposal.Status == govtypes.StatusPassed { + if proposal.Status == govtypesv1.StatusPassed { // ConsumerRemovalProposal that passed -- it was added to the // list of pending consumer removal proposals, which was deleted during // the migration of the provider module @@ -713,7 +688,7 @@ func MigrateMsgConsumerModification( if err != nil { return err } - if proposal.Status == govtypes.StatusPassed { + if proposal.Status == govtypesv1.StatusPassed { // proposal that passed -- it was already handled in // a previous block since these proposals are handled immediately ctx.Logger().Info( @@ -802,7 +777,7 @@ func MigrateMsgChangeRewardDenoms( if err != nil { return err } - if proposal.Status == govtypes.StatusPassed { + if proposal.Status == govtypesv1.StatusPassed { // proposal that passed -- it was already handled in // a previous block since these proposals are handled immediately ctx.Logger().Info( diff --git a/app/upgrades/v20/upgrades_test.go b/app/upgrades/v20/upgrades_test.go index 0ff0f3be4e1..8a52a598b19 100644 --- a/app/upgrades/v20/upgrades_test.go +++ b/app/upgrades/v20/upgrades_test.go @@ -2,6 +2,7 @@ package v20_test import ( "encoding/base64" + "fmt" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" codectypes "github.com/cosmos/cosmos-sdk/codec/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -113,7 +114,8 @@ func TestMigrateMsgConsumerAdditionWithNotPassedProposalAndValidParams(t *testin require.Equal(t, uint64(1), consumerId) consumerMetadata, err := providerKeeper.GetConsumerMetadata(ctx, "0") require.NoError(t, err) - require.Contains(t, "Chain with chain id a ChainId", consumerMetadata.Name) + fmt.Println(consumerMetadata) + require.Equal(t, msgConsumerAddition.ChainId, consumerMetadata.Name) proposal, err = govKeeper.Proposals.Get(ctx, 0) require.NoError(t, err) @@ -122,11 +124,7 @@ func TestMigrateMsgConsumerAdditionWithNotPassedProposalAndValidParams(t *testin require.Equal(t, messages[0].Value, proposal.Messages[0].Value) // verify that the proposal's second message now contains a `MsgUpdateConsumer` message - initParams, err := v20.CreateConsumerInitializationParameters( - msgConsumerAddition.InitialHeight, msgConsumerAddition.GenesisHash, msgConsumerAddition.BinaryHash, - msgConsumerAddition.SpawnTime, msgConsumerAddition.UnbondingPeriod, msgConsumerAddition.CcvTimeoutPeriod, msgConsumerAddition.TransferTimeoutPeriod, - msgConsumerAddition.ConsumerRedistributionFraction, msgConsumerAddition.BlocksPerDistributionTransmission, msgConsumerAddition.HistoricalEntries, - msgConsumerAddition.DistributionTransmissionChannel) + initParams, err := v20.CreateConsumerInitializationParameters(msgConsumerAddition) require.NoError(t, err) powerShapingParams, err := v20.CreatePowerShapingParameters(msgConsumerAddition.Top_N, msgConsumerAddition.ValidatorsPowerCap, @@ -177,7 +175,7 @@ func TestMigrateMsgConsumerAdditionWithPassedProposal(t *testing.T) { require.Equal(t, uint64(1), consumerId) consumerMetadata, err := providerKeeper.GetConsumerMetadata(ctx, "0") require.NoError(t, err) - require.Contains(t, "Chain with chain id a ChainId", consumerMetadata.Name) + require.Equal(t, msgConsumerAddition.ChainId, consumerMetadata.Name) proposal, err = govKeeper.Proposals.Get(ctx, 0) require.NoError(t, err) @@ -186,11 +184,7 @@ func TestMigrateMsgConsumerAdditionWithPassedProposal(t *testing.T) { require.Equal(t, messages[0].Value, proposal.Messages[0].Value) // verify that the proposal's second message now contains a `MsgUpdateConsumer` message - initParams, err := v20.CreateConsumerInitializationParameters( - msgConsumerAddition.InitialHeight, msgConsumerAddition.GenesisHash, msgConsumerAddition.BinaryHash, - msgConsumerAddition.SpawnTime, msgConsumerAddition.UnbondingPeriod, msgConsumerAddition.CcvTimeoutPeriod, msgConsumerAddition.TransferTimeoutPeriod, - msgConsumerAddition.ConsumerRedistributionFraction, msgConsumerAddition.BlocksPerDistributionTransmission, msgConsumerAddition.HistoricalEntries, - msgConsumerAddition.DistributionTransmissionChannel) + initParams, err := v20.CreateConsumerInitializationParameters(msgConsumerAddition) require.NoError(t, err) powerShapingParams, err := v20.CreatePowerShapingParameters(msgConsumerAddition.Top_N, msgConsumerAddition.ValidatorsPowerCap, From 56a6c4661ab9965b27e97197ceafcb357da8206c Mon Sep 17 00:00:00 2001 From: insumity Date: Thu, 5 Sep 2024 13:56:04 +0200 Subject: [PATCH 07/10] fix linter issues --- app/upgrades/v20/upgrades.go | 32 ++++++++++++++++--------------- app/upgrades/v20/upgrades_test.go | 31 +++++++++++++++++------------- 2 files changed, 35 insertions(+), 28 deletions(-) diff --git a/app/upgrades/v20/upgrades.go b/app/upgrades/v20/upgrades.go index f223d623c92..0921797d79c 100644 --- a/app/upgrades/v20/upgrades.go +++ b/app/upgrades/v20/upgrades.go @@ -3,7 +3,7 @@ package v20 import ( "context" "fmt" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + providerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/provider/keeper" providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" @@ -13,6 +13,7 @@ import ( codec "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" @@ -228,7 +229,8 @@ func MigrateICSProposal( msgServer providertypes.MsgServer, providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper, - proposal govtypesv1.Proposal) error { + proposal govtypesv1.Proposal, +) error { // ignore proposals that were rejected or failed if proposal.Status != govtypesv1.StatusDepositPeriod && proposal.Status != govtypesv1.StatusVotingPeriod && @@ -364,27 +366,27 @@ func MigrateMsgConsumerAddition( msgServer providertypes.MsgServer, providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper, - proposalId uint64, + proposalID uint64, msg providertypes.MsgConsumerAddition, indexOfMessageInProposal int, ) error { - proposal, err := govKeeper.Proposals.Get(ctx, proposalId) + proposal, err := govKeeper.Proposals.Get(ctx, proposalID) if err != nil { return err } if proposal.Status == govtypesv1.StatusPassed { // MsgConsumerAddition that passed - for _, consumerId := range providerKeeper.GetAllActiveConsumerIds(ctx) { - chainId, err := providerKeeper.GetConsumerChainId(ctx, consumerId) + for _, consumerID := range providerKeeper.GetAllActiveConsumerIds(ctx) { + chainID, err := providerKeeper.GetConsumerChainId(ctx, consumerID) if err != nil { return err // this means something is wrong with the provider state } - if chainId == msg.ChainId { + if chainID == msg.ChainId { // this proposal was already handled in a previous block ctx.Logger().Info( fmt.Sprintf( - "Proposal with ID(%d) was skipped as it was already handled - consumerId(%s), chainId(%s), spawnTime(%s)", - proposal.Id, consumerId, msg.ChainId, msg.SpawnTime.String(), + "Proposal with ID(%d) was skipped as it was already handled - consumerID(%s), chainID(%s), spawnTime(%s)", + proposal.Id, consumerID, msg.ChainId, msg.SpawnTime.String(), ), ) return nil @@ -585,11 +587,11 @@ func MigrateMsgConsumerRemoval( msgServer providertypes.MsgServer, providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper, - proposalId uint64, + proposalID uint64, msg providertypes.MsgConsumerRemoval, indexOfMessageInProposal int, ) error { - proposal, err := govKeeper.Proposals.Get(ctx, proposalId) + proposal, err := govKeeper.Proposals.Get(ctx, proposalID) if err != nil { return err } @@ -680,11 +682,11 @@ func MigrateMsgConsumerModification( ctx sdk.Context, providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper, - proposalId uint64, + proposalID uint64, msg providertypes.MsgConsumerModification, indexOfMessageInProposal int, ) error { - proposal, err := govKeeper.Proposals.Get(ctx, proposalId) + proposal, err := govKeeper.Proposals.Get(ctx, proposalID) if err != nil { return err } @@ -769,11 +771,11 @@ func MigrateMsgConsumerModification( func MigrateMsgChangeRewardDenoms( ctx sdk.Context, govKeeper govkeeper.Keeper, - proposalId uint64, + proposalID uint64, msg providertypes.MsgChangeRewardDenoms, indexOfMessageInProposal int, ) error { - proposal, err := govKeeper.Proposals.Get(ctx, proposalId) + proposal, err := govKeeper.Proposals.Get(ctx, proposalID) if err != nil { return err } diff --git a/app/upgrades/v20/upgrades_test.go b/app/upgrades/v20/upgrades_test.go index 8a52a598b19..b439cf48671 100644 --- a/app/upgrades/v20/upgrades_test.go +++ b/app/upgrades/v20/upgrades_test.go @@ -3,20 +3,25 @@ package v20_test import ( "encoding/base64" "fmt" + "testing" + "time" + + "github.com/stretchr/testify/require" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + providerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/provider/keeper" + providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" + "github.com/cosmos/interchain-security/v5/x/ccv/types" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + "github.com/cosmos/gaia/v20/app/helpers" v20 "github.com/cosmos/gaia/v20/app/upgrades/v20" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - providerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/provider/keeper" - providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" - "github.com/cosmos/interchain-security/v5/x/ccv/types" - "github.com/stretchr/testify/require" - "testing" - "time" ) func GetTestMsgConsumerAddition() providertypes.MsgConsumerAddition { @@ -77,9 +82,9 @@ func TestMigrateMsgConsumerAdditionWithNotPassedProposalAndInvalidParams(t *test require.ErrorContains(t, err, "not found") // (indirectly) verify that `CreateConsumer` was not called by checking that consumer id was not updated - consumerId, found := providerKeeper.GetConsumerId(ctx) + consumerID, found := providerKeeper.GetConsumerId(ctx) require.False(t, found) - require.Equal(t, uint64(0), consumerId) + require.Equal(t, uint64(0), consumerID) } func TestMigrateMsgConsumerAdditionWithNotPassedProposalAndValidParams(t *testing.T) { @@ -109,9 +114,9 @@ func TestMigrateMsgConsumerAdditionWithNotPassedProposalAndValidParams(t *testin require.NoError(t, err) // (indirectly) verify that `CreateConsumer` was called by checking that consumer id was updated - consumerId, found := providerKeeper.GetConsumerId(ctx) + consumerID, found := providerKeeper.GetConsumerId(ctx) require.True(t, found) - require.Equal(t, uint64(1), consumerId) + require.Equal(t, uint64(1), consumerID) consumerMetadata, err := providerKeeper.GetConsumerMetadata(ctx, "0") require.NoError(t, err) fmt.Println(consumerMetadata) @@ -170,9 +175,9 @@ func TestMigrateMsgConsumerAdditionWithPassedProposal(t *testing.T) { require.NoError(t, err) // (indirectly) verify that `CreateConsumer` was called by checking that consumer id was updated - consumerId, found := providerKeeper.GetConsumerId(ctx) + consumerID, found := providerKeeper.GetConsumerId(ctx) require.True(t, found) - require.Equal(t, uint64(1), consumerId) + require.Equal(t, uint64(1), consumerID) consumerMetadata, err := providerKeeper.GetConsumerMetadata(ctx, "0") require.NoError(t, err) require.Equal(t, msgConsumerAddition.ChainId, consumerMetadata.Name) From 22c52e2f7bd3c61a917dd443c6cd9a92d4af0487 Mon Sep 17 00:00:00 2001 From: mpoke Date: Fri, 6 Sep 2024 19:54:03 +0200 Subject: [PATCH 08/10] bump ICS to v6 --- app/app.go | 2 +- app/app_helpers.go | 4 ++-- app/keepers/keepers.go | 9 ++++----- app/keepers/keys.go | 2 +- app/modules.go | 6 +++--- app/upgrades/v20/upgrades.go | 4 ++-- app/upgrades/v20/upgrades_test.go | 11 ++++++----- go.mod | 4 ++-- go.sum | 10 ++++------ tests/e2e/chain.go | 2 +- tests/e2e/e2e_gov_test.go | 2 +- tests/e2e/query.go | 2 +- tests/integration/interchain_security_test.go | 8 ++++---- 13 files changed, 32 insertions(+), 34 deletions(-) diff --git a/app/app.go b/app/app.go index 0dd09c22f1c..330488b080a 100644 --- a/app/app.go +++ b/app/app.go @@ -20,7 +20,7 @@ import ( dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/gogoproto/proto" ibctesting "github.com/cosmos/ibc-go/v8/testing" - providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" + providertypes "github.com/cosmos/interchain-security/v6/x/ccv/provider/types" autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1" diff --git a/app/app_helpers.go b/app/app_helpers.go index 93303079707..1d056b43be1 100644 --- a/app/app_helpers.go +++ b/app/app_helpers.go @@ -4,8 +4,8 @@ import ( capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" ibctestingtypes "github.com/cosmos/ibc-go/v8/testing/types" - icstest "github.com/cosmos/interchain-security/v5/testutil/integration" - ibcproviderkeeper "github.com/cosmos/interchain-security/v5/x/ccv/provider/keeper" + icstest "github.com/cosmos/interchain-security/v6/testutil/integration" + ibcproviderkeeper "github.com/cosmos/interchain-security/v6/x/ccv/provider/keeper" ) // ProviderApp interface implementations for icstest tests diff --git a/app/keepers/keepers.go b/app/keepers/keepers.go index 781fb648c1f..a1e3310b64b 100644 --- a/app/keepers/keepers.go +++ b/app/keepers/keepers.go @@ -33,9 +33,9 @@ import ( porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" - icsprovider "github.com/cosmos/interchain-security/v5/x/ccv/provider" - icsproviderkeeper "github.com/cosmos/interchain-security/v5/x/ccv/provider/keeper" - providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" + icsprovider "github.com/cosmos/interchain-security/v6/x/ccv/provider" + icsproviderkeeper "github.com/cosmos/interchain-security/v6/x/ccv/provider/keeper" + providertypes "github.com/cosmos/interchain-security/v6/x/ccv/provider/types" "cosmossdk.io/log" storetypes "cosmossdk.io/store/types" @@ -376,8 +376,7 @@ func NewAppKeeper( govRouter := govv1beta1.NewRouter() govRouter. AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler). - AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(appKeepers.ParamsKeeper)). - AddRoute(providertypes.RouterKey, icsprovider.NewProviderProposalHandler(appKeepers.ProviderKeeper)) + AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(appKeepers.ParamsKeeper)) // Set legacy router for backwards compatibility with gov v1beta1 appKeepers.GovKeeper.SetLegacyRouter(govRouter) diff --git a/app/keepers/keys.go b/app/keepers/keys.go index c4d51b3bd74..e4cf9fe31fb 100644 --- a/app/keepers/keys.go +++ b/app/keepers/keys.go @@ -11,7 +11,7 @@ import ( ibcfeetypes "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types" ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" - providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" + providertypes "github.com/cosmos/interchain-security/v6/x/ccv/provider/types" storetypes "cosmossdk.io/store/types" evidencetypes "cosmossdk.io/x/evidence/types" diff --git a/app/modules.go b/app/modules.go index d51acab9206..8afebc13489 100644 --- a/app/modules.go +++ b/app/modules.go @@ -15,9 +15,9 @@ import ( ibc "github.com/cosmos/ibc-go/v8/modules/core" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" ibctm "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" - no_valupdates_genutil "github.com/cosmos/interchain-security/v5/x/ccv/no_valupdates_genutil" - no_valupdates_staking "github.com/cosmos/interchain-security/v5/x/ccv/no_valupdates_staking" - providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" + no_valupdates_genutil "github.com/cosmos/interchain-security/v6/x/ccv/no_valupdates_genutil" + no_valupdates_staking "github.com/cosmos/interchain-security/v6/x/ccv/no_valupdates_staking" + providertypes "github.com/cosmos/interchain-security/v6/x/ccv/provider/types" "cosmossdk.io/x/evidence" evidencetypes "cosmossdk.io/x/evidence/types" diff --git a/app/upgrades/v20/upgrades.go b/app/upgrades/v20/upgrades.go index 9fe72d7a133..f4a5c397450 100644 --- a/app/upgrades/v20/upgrades.go +++ b/app/upgrades/v20/upgrades.go @@ -5,8 +5,8 @@ import ( "encoding/json" "fmt" - providerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/provider/keeper" - providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" + providerkeeper "github.com/cosmos/interchain-security/v6/x/ccv/provider/keeper" + providertypes "github.com/cosmos/interchain-security/v6/x/ccv/provider/types" errorsmod "cosmossdk.io/errors" upgradetypes "cosmossdk.io/x/upgrade/types" diff --git a/app/upgrades/v20/upgrades_test.go b/app/upgrades/v20/upgrades_test.go index 87a3d37308b..a95d3c3ce36 100644 --- a/app/upgrades/v20/upgrades_test.go +++ b/app/upgrades/v20/upgrades_test.go @@ -2,6 +2,7 @@ package v20_test import ( "encoding/base64" + "encoding/json" "fmt" "testing" "time" @@ -11,9 +12,9 @@ import ( tmproto "github.com/cometbft/cometbft/proto/tendermint/types" clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - providerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/provider/keeper" - providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" - "github.com/cosmos/interchain-security/v5/x/ccv/types" + providerkeeper "github.com/cosmos/interchain-security/v6/x/ccv/provider/keeper" + providertypes "github.com/cosmos/interchain-security/v6/x/ccv/provider/types" + "github.com/cosmos/interchain-security/v6/x/ccv/types" codectypes "github.com/cosmos/cosmos-sdk/codec/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -138,7 +139,7 @@ func TestMigrateMsgConsumerAdditionWithNotPassedProposalAndValidParams(t *testin require.NoError(t, err) expectedMsgUpdateConsumer := providertypes.MsgUpdateConsumer{ - Signer: govKeeper.GetAuthority(), + Owner: govKeeper.GetAuthority(), ConsumerId: "0", Metadata: nil, InitializationParameters: &initParams, @@ -223,7 +224,7 @@ func TestMigrateMsgConsumerAdditionWithPassedProposalOfAnAlreadyHandleChain(t *t // the chain is already handled and launched providerKeeper.FetchAndIncrementConsumerId(ctx) - providerKeeper.SetConsumerPhase(ctx, "0", providertypes.ConsumerPhase_CONSUMER_PHASE_LAUNCHED) + providerKeeper.SetConsumerPhase(ctx, "0", providertypes.CONSUMER_PHASE_LAUNCHED) providerKeeper.SetConsumerChainId(ctx, "0", msgConsumerAddition.ChainId) msgServer := providerkeeper.NewMsgServerImpl(&providerKeeper) diff --git a/go.mod b/go.mod index 4a180119394..bc351d31337 100644 --- a/go.mod +++ b/go.mod @@ -28,7 +28,7 @@ require ( github.com/cosmos/ibc-apps/modules/rate-limiting/v8 v8.0.0 github.com/cosmos/ibc-go/modules/capability v1.0.1 github.com/cosmos/ibc-go/v8 v8.5.0 - github.com/cosmos/interchain-security/v5 v5.0.0-20240905162918-300530f18130 + github.com/cosmos/interchain-security/v6 v6.0.0-20240906165300-5b6252c77268 github.com/google/gofuzz v1.2.0 github.com/gorilla/mux v1.8.1 github.com/ory/dockertest/v3 v3.11.0 @@ -50,7 +50,7 @@ require ( github.com/golang/protobuf v1.5.4 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094 // indirect - google.golang.org/grpc v1.65.0 // indirect + google.golang.org/grpc v1.66.0 // indirect ) require ( diff --git a/go.sum b/go.sum index 57792e5448d..affb0d2ecb1 100644 --- a/go.sum +++ b/go.sum @@ -443,10 +443,8 @@ github.com/cosmos/ibc-go/v8 v8.5.0 h1:OjaSXz480JT8ZuMrASxGgS7XzloZ2NuuJPwZB/fKDg github.com/cosmos/ibc-go/v8 v8.5.0/go.mod h1:P5hkAvq0Qbg0h18uLxDVA9q1kOJ0l36htMsskiNwXbo= github.com/cosmos/ics23/go v0.11.0 h1:jk5skjT0TqX5e5QJbEnwXIS2yI2vnmLOgpQPeM5RtnU= github.com/cosmos/ics23/go v0.11.0/go.mod h1:A8OjxPE67hHST4Icw94hOxxFEJMBG031xIGF/JHNIY0= -github.com/cosmos/interchain-security/v5 v5.0.0-20240904161413-954f77c8c6f2 h1:Z07VkkzgXyiboGTzCBCjlHfOZwdnq/pts3i+LCRn3Kc= -github.com/cosmos/interchain-security/v5 v5.0.0-20240904161413-954f77c8c6f2/go.mod h1:y3LdR1GPxF8SMFRb/V38OWGZNwEriJDFlka/hoH1GEk= -github.com/cosmos/interchain-security/v5 v5.0.0-20240905162918-300530f18130 h1:RKrwueaofyJhrlJ/57TxFpbf5unMG2BcX8kmmTDVRoc= -github.com/cosmos/interchain-security/v5 v5.0.0-20240905162918-300530f18130/go.mod h1:EYGBSusSaB9XgW5f5mFgN/sDW25hWn9shlZSKOe41ek= +github.com/cosmos/interchain-security/v6 v6.0.0-20240906165300-5b6252c77268 h1:UJEywL1Fi/HYAFao8fUQxvQXudrt2Vv+D3BL9JK/osM= +github.com/cosmos/interchain-security/v6 v6.0.0-20240906165300-5b6252c77268/go.mod h1:+5zIZEzkL4yNHB/UWXCu75t6GeEgEmWHbz5OnBWiL0o= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM= @@ -1967,8 +1965,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= -google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/grpc v1.66.0 h1:DibZuoBznOxbDQxRINckZcUvnCEvrW9pcWIE2yF9r1c= +google.golang.org/grpc v1.66.0/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/tests/e2e/chain.go b/tests/e2e/chain.go index 42ba30ecfe0..c2ab65ec2be 100644 --- a/tests/e2e/chain.go +++ b/tests/e2e/chain.go @@ -8,7 +8,7 @@ import ( dbm "github.com/cosmos/cosmos-db" ratelimittypes "github.com/cosmos/ibc-apps/modules/rate-limiting/v8/types" - providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" + providertypes "github.com/cosmos/interchain-security/v6/x/ccv/provider/types" "cosmossdk.io/log" evidencetypes "cosmossdk.io/x/evidence/types" diff --git a/tests/e2e/e2e_gov_test.go b/tests/e2e/e2e_gov_test.go index fc6b57d7e74..5a6b7aceea8 100644 --- a/tests/e2e/e2e_gov_test.go +++ b/tests/e2e/e2e_gov_test.go @@ -5,7 +5,7 @@ import ( "strconv" "time" - providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" + providertypes "github.com/cosmos/interchain-security/v6/x/ccv/provider/types" "cosmossdk.io/math" upgradetypes "cosmossdk.io/x/upgrade/types" diff --git a/tests/e2e/query.go b/tests/e2e/query.go index 40edf553a0f..e788ba9efc0 100644 --- a/tests/e2e/query.go +++ b/tests/e2e/query.go @@ -9,7 +9,7 @@ import ( ratelimittypes "github.com/cosmos/ibc-apps/modules/rate-limiting/v8/types" icacontrollertypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types" - providertypes "github.com/cosmos/interchain-security/v5/x/ccv/provider/types" + providertypes "github.com/cosmos/interchain-security/v6/x/ccv/provider/types" evidencetypes "cosmossdk.io/x/evidence/types" diff --git a/tests/integration/interchain_security_test.go b/tests/integration/interchain_security_test.go index 79406657495..2c0797216d8 100644 --- a/tests/integration/interchain_security_test.go +++ b/tests/integration/interchain_security_test.go @@ -6,10 +6,10 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - appConsumer "github.com/cosmos/interchain-security/v5/app/consumer" - "github.com/cosmos/interchain-security/v5/tests/integration" - icstestingutils "github.com/cosmos/interchain-security/v5/testutil/ibc_testing" - "github.com/cosmos/interchain-security/v5/x/ccv/types" + appConsumer "github.com/cosmos/interchain-security/v6/app/consumer" + "github.com/cosmos/interchain-security/v6/tests/integration" + icstestingutils "github.com/cosmos/interchain-security/v6/testutil/ibc_testing" + "github.com/cosmos/interchain-security/v6/x/ccv/types" "cosmossdk.io/math" From b759e9e7e3569ef901104f3c057c0e71b7b85b87 Mon Sep 17 00:00:00 2001 From: mpoke Date: Fri, 6 Sep 2024 20:08:13 +0200 Subject: [PATCH 09/10] fix linter --- app/upgrades/v20/upgrades.go | 37 +++++++++++++++---------------- app/upgrades/v20/upgrades_test.go | 4 ++-- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/app/upgrades/v20/upgrades.go b/app/upgrades/v20/upgrades.go index f4a5c397450..6ec70640a29 100644 --- a/app/upgrades/v20/upgrades.go +++ b/app/upgrades/v20/upgrades.go @@ -140,8 +140,7 @@ func InitializeLastProviderConsensusValidatorSet( lastValidators = append(lastValidators, consensusVal) } - providerKeeper.SetLastProviderConsensusValSet(ctx, lastValidators) - return nil + return providerKeeper.SetLastProviderConsensusValSet(ctx, lastValidators) } // MigrateICSProposals migrates ICS legacy proposals @@ -168,8 +167,8 @@ func MigrateICSProposals(ctx sdk.Context, msgServer providertypes.MsgServer, pro return nil } -func ConsumerAdditionProposalToMsgConsumerAddition(proposal providertypes.ConsumerAdditionProposal) providertypes.MsgConsumerAddition { - return providertypes.MsgConsumerAddition{ +func ConsumerAdditionProposalToMsgConsumerAddition(proposal providertypes.ConsumerAdditionProposal) providertypes.MsgConsumerAddition { //nolint:staticcheck + return providertypes.MsgConsumerAddition{ //nolint:staticcheck ChainId: proposal.ChainId, InitialHeight: proposal.InitialHeight, GenesisHash: proposal.GenesisHash, @@ -193,16 +192,16 @@ func ConsumerAdditionProposalToMsgConsumerAddition(proposal providertypes.Consum } } -func ConsumerRemovalProposalToMsgConsumerRemoval(proposal providertypes.ConsumerRemovalProposal) providertypes.MsgConsumerRemoval { - return providertypes.MsgConsumerRemoval{ +func ConsumerRemovalProposalToMsgConsumerRemoval(proposal providertypes.ConsumerRemovalProposal) providertypes.MsgConsumerRemoval { //nolint:staticcheck + return providertypes.MsgConsumerRemoval{ //nolint:staticcheck ChainId: proposal.ChainId, StopTime: proposal.StopTime, Authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), } } -func ConsumerModificationProposalToMsgConsumerModification(proposal providertypes.ConsumerModificationProposal) providertypes.MsgConsumerModification { - return providertypes.MsgConsumerModification{ +func ConsumerModificationProposalToMsgConsumerModification(proposal providertypes.ConsumerModificationProposal) providertypes.MsgConsumerModification { //nolint:staticcheck + return providertypes.MsgConsumerModification{ //nolint:staticcheck Title: proposal.Title, Description: proposal.Description, ChainId: proposal.ChainId, @@ -242,7 +241,7 @@ func MigrateICSProposal( proposalMessages := proposal.GetMessages() for index, proposalMsg := range proposalMessages { switch msg := proposalMsg.GetCachedValue().(type) { - case *providertypes.MsgConsumerAddition: + case *providertypes.MsgConsumerAddition: //nolint:staticcheck err := MigrateMsgConsumerAddition( ctx, msgServer, @@ -255,7 +254,7 @@ func MigrateICSProposal( if err != nil { return err } - case *providertypes.MsgConsumerRemoval: + case *providertypes.MsgConsumerRemoval: //nolint:staticcheck err := MigrateMsgConsumerRemoval( ctx, msgServer, @@ -268,7 +267,7 @@ func MigrateICSProposal( if err != nil { return err } - case *providertypes.MsgConsumerModification: + case *providertypes.MsgConsumerModification: //nolint:staticcheck err := MigrateMsgConsumerModification( ctx, providerKeeper, @@ -319,7 +318,7 @@ func MigrateICSLegacyProposal( } switch msg := content.(type) { - case *providertypes.ConsumerAdditionProposal: + case *providertypes.ConsumerAdditionProposal: //nolint:staticcheck return MigrateMsgConsumerAddition(ctx, msgServer, providerKeeper, @@ -328,7 +327,7 @@ func MigrateICSLegacyProposal( ConsumerAdditionProposalToMsgConsumerAddition(*msg), 0) - case *providertypes.ConsumerRemovalProposal: + case *providertypes.ConsumerRemovalProposal: //nolint:staticcheck return MigrateMsgConsumerRemoval( ctx, msgServer, @@ -339,7 +338,7 @@ func MigrateICSLegacyProposal( 0, ) - case *providertypes.ConsumerModificationProposal: + case *providertypes.ConsumerModificationProposal: //nolint:staticcheck return MigrateMsgConsumerModification( ctx, providerKeeper, @@ -349,7 +348,7 @@ func MigrateICSLegacyProposal( 0, ) - case *providertypes.ChangeRewardDenomsProposal: + case *providertypes.ChangeRewardDenomsProposal: return MigrateMsgChangeRewardDenoms( ctx, govKeeper, @@ -368,7 +367,7 @@ func MigrateMsgConsumerAddition( providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper, proposalID uint64, - msg providertypes.MsgConsumerAddition, + msg providertypes.MsgConsumerAddition, //nolint:staticcheck indexOfMessageInProposal int, ) error { proposal, err := govKeeper.Proposals.Get(ctx, proposalID) @@ -548,7 +547,7 @@ func MigrateMsgConsumerAddition( return nil } -func CreateConsumerInitializationParameters(msgConsumerAddition providertypes.MsgConsumerAddition) (providertypes.ConsumerInitializationParameters, error) { +func CreateConsumerInitializationParameters(msgConsumerAddition providertypes.MsgConsumerAddition) (providertypes.ConsumerInitializationParameters, error) { //nolint:staticcheck initParams := providertypes.ConsumerInitializationParameters{ InitialHeight: msgConsumerAddition.InitialHeight, GenesisHash: msgConsumerAddition.GenesisHash, @@ -589,7 +588,7 @@ func MigrateMsgConsumerRemoval( providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper, proposalID uint64, - msg providertypes.MsgConsumerRemoval, + msg providertypes.MsgConsumerRemoval, //nolint:staticcheck indexOfMessageInProposal int, ) error { proposal, err := govKeeper.Proposals.Get(ctx, proposalID) @@ -684,7 +683,7 @@ func MigrateMsgConsumerModification( providerKeeper providerkeeper.Keeper, govKeeper govkeeper.Keeper, proposalID uint64, - msg providertypes.MsgConsumerModification, + msg providertypes.MsgConsumerModification, //nolint:staticcheck indexOfMessageInProposal int, ) error { proposal, err := govKeeper.Proposals.Get(ctx, proposalID) diff --git a/app/upgrades/v20/upgrades_test.go b/app/upgrades/v20/upgrades_test.go index a95d3c3ce36..c42afb9716a 100644 --- a/app/upgrades/v20/upgrades_test.go +++ b/app/upgrades/v20/upgrades_test.go @@ -25,8 +25,8 @@ import ( v20 "github.com/cosmos/gaia/v20/app/upgrades/v20" ) -func GetTestMsgConsumerAddition() providertypes.MsgConsumerAddition { - return providertypes.MsgConsumerAddition{ +func GetTestMsgConsumerAddition() providertypes.MsgConsumerAddition { //nolint:staticcheck + return providertypes.MsgConsumerAddition{ //nolint:staticcheck ChainId: "a ChainId", InitialHeight: clienttypes.NewHeight(4, 5), GenesisHash: []byte(base64.StdEncoding.EncodeToString([]byte("gen_hash"))), From d949385711d5742b83a3445a2e8c3a9f6e11e56d Mon Sep 17 00:00:00 2001 From: mpoke Date: Fri, 6 Sep 2024 20:11:51 +0200 Subject: [PATCH 10/10] make format --- app/upgrades/v20/upgrades.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/upgrades/v20/upgrades.go b/app/upgrades/v20/upgrades.go index 6ec70640a29..15e43b63a05 100644 --- a/app/upgrades/v20/upgrades.go +++ b/app/upgrades/v20/upgrades.go @@ -348,7 +348,7 @@ func MigrateICSLegacyProposal( 0, ) - case *providertypes.ChangeRewardDenomsProposal: + case *providertypes.ChangeRewardDenomsProposal: return MigrateMsgChangeRewardDenoms( ctx, govKeeper,