Skip to content

Commit

Permalink
feat(delayedack): paginate rollapp packets when deleting them (#972)
Browse files Browse the repository at this point in the history
  • Loading branch information
zale144 authored Jul 9, 2024
1 parent 0f84b52 commit 1b11625
Show file tree
Hide file tree
Showing 23 changed files with 519 additions and 171 deletions.
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
88 changes: 20 additions & 68 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,10 +188,6 @@ 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"
)

var (
Expand All @@ -196,11 +196,8 @@ var (
_ = packetforwardtypes.ErrIntOverflowGenesis
)

// this line is used by starport scaffolding # stargate/wasm/app/enabledProposals

func getGovProposalHandlers() []govclient.ProposalHandler {
var govProposalHandlers []govclient.ProposalHandler
// this line is used by starport scaffolding # stargate/app/govProposalHandlers

govProposalHandlers = append(govProposalHandlers,
paramsclient.ProposalHandler,
Expand All @@ -226,6 +223,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 @@ -255,7 +254,6 @@ var (
packetforwardmiddleware.AppModuleBasic{},
delayedackmodule.AppModuleBasic{},
eibcmodule.AppModuleBasic{},
// this line is used by starport scaffolding # stargate/app/moduleBasic

// Ethermint modules
evm.AppModuleBasic{},
Expand Down Expand Up @@ -326,48 +324,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 @@ -415,7 +372,6 @@ func New(
packetforwardtypes.StoreKey,
delayedacktypes.StoreKey,
eibcmoduletypes.StoreKey,
// this line is used by starport scaffolding # stargate/app/storeKey

// ethermint keys
evmtypes.StoreKey, feemarkettypes.StoreKey,
Expand Down Expand Up @@ -459,7 +415,6 @@ func New(
// grant capabilities for the ibc and ibc-transfer modules
scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibchost.ModuleName)
scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName)
// this line is used by starport scaffolding # stargate/app/scopedKeeper

app.CapabilityKeeper.Seal()

Expand Down Expand Up @@ -715,8 +670,6 @@ func New(
&stakingKeeper, govRouter, app.MsgServiceRouter(), govConfig,
)

// this line is used by starport scaffolding # stargate/app/keeperDefinition

app.PacketForwardMiddlewareKeeper = packetforwardkeeper.NewKeeper(
appCodec, keys[packetforwardtypes.StoreKey],
app.GetSubspace(packetforwardtypes.ModuleName),
Expand Down Expand Up @@ -790,7 +743,6 @@ func New(
denomMetadataModule,
delayedackModule,
eibcmodule.NewAppModule(appCodec, app.EIBCKeeper, app.AccountKeeper, app.BankKeeper),
// this line is used by starport scaffolding # stargate/app/appModule

// Ethermint app modules
evm.NewAppModule(app.EvmKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(evmtypes.ModuleName).WithKeyTable(evmtypes.ParamKeyTable())),
Expand Down Expand Up @@ -838,7 +790,6 @@ func New(
denommetadatamoduletypes.ModuleName,
delayedacktypes.ModuleName,
eibcmoduletypes.ModuleName,
// this line is used by starport scaffolding # stargate/app/beginBlockers
lockuptypes.ModuleName,
gammtypes.ModuleName,
poolmanagertypes.ModuleName,
Expand Down Expand Up @@ -874,7 +825,6 @@ func New(
denommetadatamoduletypes.ModuleName,
delayedacktypes.ModuleName,
eibcmoduletypes.ModuleName,
// this line is used by starport scaffolding # stargate/app/endBlockers
epochstypes.ModuleName,
lockuptypes.ModuleName,
gammtypes.ModuleName,
Expand Down Expand Up @@ -916,7 +866,6 @@ func New(
denommetadatamoduletypes.ModuleName, // must after `x/bank` to trigger hooks
delayedacktypes.ModuleName,
eibcmoduletypes.ModuleName,
// this line is used by starport scaffolding # stargate/app/initGenesis

epochstypes.ModuleName,
lockuptypes.ModuleName,
Expand Down Expand Up @@ -970,7 +919,6 @@ func New(

app.ScopedIBCKeeper = scopedIBCKeeper
app.ScopedTransferKeeper = scopedTransferKeeper
// this line is used by starport scaffolding # stargate/app/beforeInitReturn

return app
}
Expand Down Expand Up @@ -1152,7 +1100,6 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino
paramsKeeper.Subspace(denommetadatamoduletypes.ModuleName)
paramsKeeper.Subspace(delayedacktypes.ModuleName)
paramsKeeper.Subspace(eibcmoduletypes.ModuleName)
// this line is used by starport scaffolding # stargate/app/paramSubspace

// ethermint subspaces
paramsKeeper.Subspace(evmtypes.ModuleName)
Expand Down Expand Up @@ -1197,15 +1144,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 +1174,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
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.
type Upgrade struct {
// Upgrade version name, for the upgrade handler, e.g. `v4`
UpgradeName string

// CreateUpgradeHandler defines the function that creates an upgrade handler
CreateUpgradeHandler func(*module.Manager, module.Configurator, BaseAppParamManager, *keepers.AppKeepers) upgradetypes.UpgradeHandler

// 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.

Loading

0 comments on commit 1b11625

Please sign in to comment.