Skip to content
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

feat(delayedack): paginate rollapp packets when deleting them #972

Merged
merged 5 commits into from
Jul 9, 2024
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ Ref: https://keepachangelog.com/en/1.0.0/

### Features

- (app) [#972](https://github.com/dymensionxyz/dymension/pull/972) Refactor upgrade handlers.
- (delayedack) [#972](https://github.com/dymensionxyz/dymension/pull/972) Use pagination when deleting rollapp packets.
- (denommetadata) [#955](https://github.com/dymensionxyz/dymension/issues/955) Add IBC middleware to create denom metadata from rollapp, on IBC transfer.
- (genesisbridge) [#932](https://github.com/dymensionxyz/dymension/issues/932) Adds ibc module and ante handler to stop transfers to/from rollapp that has an incomplete genesis bridge (transfersEnabled)
- (genesisbridge) [#932](https://github.com/dymensionxyz/dymension/issues/932) Adds a new temporary ibc module to set the canonical channel id, since we no longer do that using a whitelisted addr
Expand Down
76 changes: 21 additions & 55 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ import (
"os"
"path/filepath"

"github.com/dymensionxyz/dymension/v3/app/keepers"
"github.com/dymensionxyz/dymension/v3/app/upgrades"
v3 "github.com/dymensionxyz/dymension/v3/app/upgrades/v3"
v4 "github.com/dymensionxyz/dymension/v3/app/upgrades/v4"
"github.com/dymensionxyz/dymension/v3/x/rollapp/transfergenesis"

"github.com/dymensionxyz/dymension/v3/x/bridgingfee"
Expand Down Expand Up @@ -184,11 +188,7 @@ import (
"github.com/osmosis-labs/osmosis/v15/x/txfees"
txfeeskeeper "github.com/osmosis-labs/osmosis/v15/x/txfees/keeper"
txfeestypes "github.com/osmosis-labs/osmosis/v15/x/txfees/types"

/* ---------------------------- upgrade handlers ---------------------------- */

v3upgrade "github.com/dymensionxyz/dymension/v3/app/upgrades/v3"
)
/* ---------------------------- upgrade handlers ---------------------------- */)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this seperator is misplaced


var (
_ = packetforwardkeeper.DefaultForwardTransferPacketTimeoutTimestamp
Expand Down Expand Up @@ -226,6 +226,8 @@ var (
// DefaultNodeHome default home directories for the application daemon
DefaultNodeHome string

Upgrades = []upgrades.Upgrade{v3.Upgrade, v4.Upgrade}

// ModuleBasics defines the module BasicManager is in charge of setting up basic,
// non-dependant module elements, such as codec registration
// and genesis verification.
Expand Down Expand Up @@ -326,48 +328,7 @@ type App struct {
memKeys map[string]*storetypes.MemoryStoreKey

// keepers
AccountKeeper authkeeper.AccountKeeper
AuthzKeeper authzkeeper.Keeper
BankKeeper bankkeeper.Keeper
CapabilityKeeper *capabilitykeeper.Keeper
StakingKeeper stakingkeeper.Keeper
SlashingKeeper slashingkeeper.Keeper
MintKeeper mintkeeper.Keeper
DistrKeeper distrkeeper.Keeper
GovKeeper govkeeper.Keeper
CrisisKeeper crisiskeeper.Keeper
UpgradeKeeper upgradekeeper.Keeper
ParamsKeeper paramskeeper.Keeper
IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
EvidenceKeeper evidencekeeper.Keeper
TransferKeeper ibctransferkeeper.Keeper
FeeGrantKeeper feegrantkeeper.Keeper
PacketForwardMiddlewareKeeper *packetforwardkeeper.Keeper

// Ethermint keepers
EvmKeeper *evmkeeper.Keeper
FeeMarketKeeper feemarketkeeper.Keeper

// Osmosis keepers
GAMMKeeper *gammkeeper.Keeper
PoolManagerKeeper *poolmanagerkeeper.Keeper
LockupKeeper *lockupkeeper.Keeper
EpochsKeeper *epochskeeper.Keeper
IncentivesKeeper *incentiveskeeper.Keeper
TxFeesKeeper *txfeeskeeper.Keeper

// make scoped keepers public for test purposes
ScopedIBCKeeper capabilitykeeper.ScopedKeeper
ScopedTransferKeeper capabilitykeeper.ScopedKeeper

RollappKeeper rollappmodulekeeper.Keeper
SequencerKeeper sequencermodulekeeper.Keeper
StreamerKeeper streamermodulekeeper.Keeper
EIBCKeeper eibckeeper.Keeper

// this line is used by starport scaffolding # stargate/app/keeperDeclaration
DelayedAckKeeper delayedackkeeper.Keeper
DenomMetadataKeeper *denommetadatamodulekeeper.Keeper
keepers.AppKeepers
// the module manager
mm *module.Manager

Expand Down Expand Up @@ -1197,15 +1158,20 @@ func (app *App) ExportState(ctx sdk.Context) map[string]json.RawMessage {
return app.mm.ExportGenesis(ctx, app.AppCodec())
}

// TODO: Create upgrade interface and setup generic upgrades handling a la osmosis
func (app *App) setupUpgradeHandlers() {
UpgradeName := "v3"
for _, u := range Upgrades {
app.setupUpgradeHandler(u)
}
}

func (app *App) setupUpgradeHandler(upgrade upgrades.Upgrade) {
app.UpgradeKeeper.SetUpgradeHandler(
UpgradeName,
v3upgrade.CreateUpgradeHandler(
app.mm, app.configurator,
app.RollappKeeper, app.SequencerKeeper, app.DelayedAckKeeper,
upgrade.UpgradeName,
upgrade.CreateUpgradeHandler(
app.mm,
app.configurator,
app.BaseApp,
&app.AppKeepers,
),
)

Expand All @@ -1222,8 +1188,8 @@ func (app *App) setupUpgradeHandlers() {
// do nothing
}

if upgradeInfo.Name == "v3" && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
if upgradeInfo.Name == upgrade.UpgradeName && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
// configure store loader with the store upgrades
app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, v3upgrade.GetStoreUpgrades()))
app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &upgrade.StoreUpgrades))
}
}
82 changes: 82 additions & 0 deletions app/keepers/keepers.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package keepers

import (
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper"
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper"
crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper"
distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
evidencekeeper "github.com/cosmos/cosmos-sdk/x/evidence/keeper"
feegrantkeeper "github.com/cosmos/cosmos-sdk/x/feegrant/keeper"
govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper"
mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper"
paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper"
slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper"
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper"
packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v6/packetforward/keeper"
ibctransferkeeper "github.com/cosmos/ibc-go/v6/modules/apps/transfer/keeper"
ibckeeper "github.com/cosmos/ibc-go/v6/modules/core/keeper"
evmkeeper "github.com/evmos/ethermint/x/evm/keeper"
feemarketkeeper "github.com/evmos/ethermint/x/feemarket/keeper"
epochskeeper "github.com/osmosis-labs/osmosis/v15/x/epochs/keeper"
gammkeeper "github.com/osmosis-labs/osmosis/v15/x/gamm/keeper"
incentiveskeeper "github.com/osmosis-labs/osmosis/v15/x/incentives/keeper"
lockupkeeper "github.com/osmosis-labs/osmosis/v15/x/lockup/keeper"
poolmanagerkeeper "github.com/osmosis-labs/osmosis/v15/x/poolmanager/keeper"
txfeeskeeper "github.com/osmosis-labs/osmosis/v15/x/txfees/keeper"

delayedackkeeper "github.com/dymensionxyz/dymension/v3/x/delayedack/keeper"
denommetadatamodulekeeper "github.com/dymensionxyz/dymension/v3/x/denommetadata/keeper"
eibckeeper "github.com/dymensionxyz/dymension/v3/x/eibc/keeper"
rollappmodulekeeper "github.com/dymensionxyz/dymension/v3/x/rollapp/keeper"
sequencermodulekeeper "github.com/dymensionxyz/dymension/v3/x/sequencer/keeper"
streamermodulekeeper "github.com/dymensionxyz/dymension/v3/x/streamer/keeper"
)

type AppKeepers struct {
// keepers
AccountKeeper authkeeper.AccountKeeper
zale144 marked this conversation as resolved.
Show resolved Hide resolved
AuthzKeeper authzkeeper.Keeper
BankKeeper bankkeeper.Keeper
CapabilityKeeper *capabilitykeeper.Keeper
StakingKeeper stakingkeeper.Keeper
SlashingKeeper slashingkeeper.Keeper
MintKeeper mintkeeper.Keeper
DistrKeeper distrkeeper.Keeper
GovKeeper govkeeper.Keeper
CrisisKeeper crisiskeeper.Keeper
UpgradeKeeper upgradekeeper.Keeper
ParamsKeeper paramskeeper.Keeper
IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
EvidenceKeeper evidencekeeper.Keeper
TransferKeeper ibctransferkeeper.Keeper
FeeGrantKeeper feegrantkeeper.Keeper
PacketForwardMiddlewareKeeper *packetforwardkeeper.Keeper

// Ethermint keepers
EvmKeeper *evmkeeper.Keeper
FeeMarketKeeper feemarketkeeper.Keeper

// Osmosis keepers
GAMMKeeper *gammkeeper.Keeper
PoolManagerKeeper *poolmanagerkeeper.Keeper
LockupKeeper *lockupkeeper.Keeper
EpochsKeeper *epochskeeper.Keeper
IncentivesKeeper *incentiveskeeper.Keeper
TxFeesKeeper *txfeeskeeper.Keeper

// make scoped keepers public for test purposes
ScopedIBCKeeper capabilitykeeper.ScopedKeeper
ScopedTransferKeeper capabilitykeeper.ScopedKeeper

RollappKeeper rollappmodulekeeper.Keeper
SequencerKeeper sequencermodulekeeper.Keeper
StreamerKeeper streamermodulekeeper.Keeper
EIBCKeeper eibckeeper.Keeper

// this line is used by starport scaffolding # stargate/app/keeperDeclaration
DelayedAckKeeper delayedackkeeper.Keeper
DenomMetadataKeeper *denommetadatamodulekeeper.Keeper
}
33 changes: 33 additions & 0 deletions app/upgrades/types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package upgrades

import (
storetypes "github.com/cosmos/cosmos-sdk/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
abci "github.com/tendermint/tendermint/abci/types"

"github.com/dymensionxyz/dymension/v3/app/keepers"
)

// BaseAppParamManager defines an interface that BaseApp is expected to fulfill
// that allows upgrade handlers to modify BaseApp parameters.
type BaseAppParamManager interface {
GetConsensusParams(ctx sdk.Context) *abci.ConsensusParams
StoreConsensusParams(ctx sdk.Context, cp *abci.ConsensusParams)
}

// Upgrade defines a struct containing necessary fields that a SoftwareUpgradeProposal
// must have written, in order for the state migration to go smoothly.
// An upgrade must implement this struct, and then set it in the app.go.
// The app.go will then define the handler.
Comment on lines +20 to +23
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

obviously it defines a struct, dont need to say that

type Upgrade struct {
// Upgrade version name, for the upgrade handler, e.g. `v4`
UpgradeName string
zale144 marked this conversation as resolved.
Show resolved Hide resolved

// CreateUpgradeHandler defines the function that creates an upgrade handler
CreateUpgradeHandler func(*module.Manager, module.Configurator, BaseAppParamManager, *keepers.AppKeepers) upgradetypes.UpgradeHandler
zale144 marked this conversation as resolved.
Show resolved Hide resolved

// Store upgrades, should be used for any new modules introduced, new modules deleted, or store names renamed.
StoreUpgrades storetypes.StoreUpgrades
}
15 changes: 15 additions & 0 deletions app/upgrades/v3/constants.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
package v3

import (
storetypes "github.com/cosmos/cosmos-sdk/store/types"

"github.com/dymensionxyz/dymension/v3/app/upgrades"
eibctypes "github.com/dymensionxyz/dymension/v3/x/eibc/types"
)

const (
UpgradeName = "v3"
)

var Upgrade = upgrades.Upgrade{
UpgradeName: UpgradeName,
CreateUpgradeHandler: CreateUpgradeHandler,
StoreUpgrades: storetypes.StoreUpgrades{
Added: []string{eibctypes.ModuleName},
},
}
20 changes: 0 additions & 20 deletions app/upgrades/v3/expected_keepers.go

This file was deleted.

23 changes: 8 additions & 15 deletions app/upgrades/v3/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,51 +3,44 @@ package v3
import (
"math/big"

storetypes "github.com/cosmos/cosmos-sdk/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"

"github.com/dymensionxyz/dymension/v3/app/keepers"
appparams "github.com/dymensionxyz/dymension/v3/app/params"
"github.com/dymensionxyz/dymension/v3/app/upgrades"

delayedacktypes "github.com/dymensionxyz/dymension/v3/x/delayedack/types"
rollapptypes "github.com/dymensionxyz/dymension/v3/x/rollapp/types"
seqtypes "github.com/dymensionxyz/dymension/v3/x/sequencer/types"
)

func GetStoreUpgrades() *storetypes.StoreUpgrades {
storeUpgrades := storetypes.StoreUpgrades{
// Set migrations for all new modules
Added: []string{"eibc"},
}
return &storeUpgrades
}

// CreateUpgradeHandler creates an SDK upgrade handler for v3
func CreateUpgradeHandler(
mm *module.Manager,
configurator module.Configurator,
rollappkeeper RollappKeeper,
seqkeeper SequencerKeeper,
dakeeper DelayedAckKeeper,
_ upgrades.BaseAppParamManager,
keepers *keepers.AppKeepers,
) upgradetypes.UpgradeHandler {
return func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
logger := ctx.Logger().With("upgrade", UpgradeName)

// overwrite params for delayedack module due to proto change
daParams := delayedacktypes.DefaultParams()
dakeeper.SetParams(ctx, daParams)
keepers.DelayedAckKeeper.SetParams(ctx, daParams)

// overwrite params for rollapp module due to proto change
rollappParams := rollapptypes.DefaultParams()
rollappParams.RollappsEnabled = false
rollappParams.DisputePeriodInBlocks = 120960 // 1 week
rollappkeeper.SetParams(ctx, rollappParams)
keepers.RollappKeeper.SetParams(ctx, rollappParams)

// overwrite params for sequencer module due to proto change
seqParams := seqtypes.DefaultParams()
DYM := sdk.NewIntFromBigInt(new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil))
seqParams.MinBond = sdk.NewCoin(appparams.BaseDenom, DYM.Mul(sdk.NewInt(1000))) // 1000DYM
seqkeeper.SetParams(ctx, seqParams)
keepers.SequencerKeeper.SetParams(ctx, seqParams)

// Start running the module migrations
logger.Debug("running module migrations ...")
Expand Down
16 changes: 13 additions & 3 deletions app/upgrades/v3/upgrade_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ import (

sdk "github.com/cosmos/cosmos-sdk/types"
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
app "github.com/dymensionxyz/dymension/v3/app"
"github.com/dymensionxyz/dymension/v3/app/apptesting"
incentivestypes "github.com/osmosis-labs/osmosis/v15/x/incentives/types"
"github.com/stretchr/testify/suite"
abci "github.com/tendermint/tendermint/abci/types"
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"

"github.com/dymensionxyz/dymension/v3/app"
"github.com/dymensionxyz/dymension/v3/app/apptesting"
)

// UpgradeTestSuite defines the structure for the upgrade test suite
Expand Down Expand Up @@ -41,11 +42,13 @@ var (
expectCreateGaugeFee = DYM.Mul(sdk.NewInt(10))
// AddToGagugeFee is the fee required to add to gauge.
expectAddToGaugeFee = sdk.ZeroInt()

expectDelayedackEpochIdentifier = "hour"
expectDelayedackBridgingFee = sdk.NewDecWithPrec(1, 3)
)

const (
dummyUpgradeHeight = 5
dummyEndBlockHeight = 10
expectRollappsEnabled = false
expectDisputePeriodInBlocks = 120960
expectMinBond = "1000000000000000000000"
Expand Down Expand Up @@ -81,6 +84,13 @@ func (s *UpgradeTestSuite) TestUpgrade() {
func() error {
// Post-update validation to ensure parameters are correctly set

// Check Delayedack parameters
delayedackParams := s.App.DelayedAckKeeper.GetParams(s.Ctx)
if delayedackParams.EpochIdentifier != expectDelayedackEpochIdentifier ||
!delayedackParams.BridgingFee.Equal(expectDelayedackBridgingFee) {
return fmt.Errorf("delayedack parameters not set correctly")
}

// Check Rollapp parameters
rollappParams := s.App.RollappKeeper.GetParams(s.Ctx)
if rollappParams.RollappsEnabled != expectRollappsEnabled || rollappParams.DisputePeriodInBlocks != expectDisputePeriodInBlocks {
Expand Down
Loading
Loading