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: dynamicfees keeper as denom resolver #540

Merged
merged 25 commits into from
Jun 4, 2024
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
bfa117a
wip
swelf19 May 24, 2024
182360b
wip
swelf19 May 27, 2024
84453e6
dynamic fees as denom resolver
swelf19 May 28, 2024
d3a4c9b
merge feat/feemarket-integration
swelf19 May 28, 2024
fb2b39b
added dynamicfeestypes.MsgUpdateParams to proposal_allowlisting. form…
swelf19 May 28, 2024
895cdb9
comments
swelf19 May 28, 2024
8a43e99
added feemarket/dynamicfee migration
swelf19 May 29, 2024
b3716e0
unit tests for dynamic fees resolver module
pr0n00gler May 29, 2024
afb0df6
added cli query gas-prices. updated output format for gas-price(s) qu…
swelf19 May 29, 2024
1dd8f59
updated feemarket
swelf19 May 29, 2024
f160d56
updated feemarket params, fixed bugs, update feemarket module
swelf19 May 31, 2024
51713ba
Merge branch 'feat/denom-resolver' into feat/denom-resolver-unit-tests
pr0n00gler Jun 3, 2024
be0deeb
merged upstream
swelf19 Jun 3, 2024
ae7046b
updated comments, generated pb/swagger
swelf19 Jun 3, 2024
13a7335
fix tests
pr0n00gler Jun 3, 2024
95fb216
fix test comments
pr0n00gler Jun 3, 2024
c2fe28e
Merge branch 'feat/denom-resolver' into feat/denom-resolver-unit-tests
pr0n00gler Jun 3, 2024
759af36
fix tests
pr0n00gler Jun 3, 2024
adbeb75
Merge pull request #544 from neutron-org/feat/denom-resolver-unit-tests
pr0n00gler Jun 3, 2024
e7e6e64
genesis test
pr0n00gler Jun 3, 2024
ef27268
remove unnecessary comment
pr0n00gler Jun 3, 2024
ab6c0cc
Merge branch 'feat/feemarket-integration' into feat/denom-resolver
swelf19 Jun 3, 2024
1309451
review fixes: error formatting, outdated comments, renamed method
swelf19 Jun 3, 2024
4e1cec2
unused proto imports
swelf19 Jun 3, 2024
6dce377
updated relayer gas price
swelf19 Jun 3, 2024
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
23 changes: 18 additions & 5 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,20 @@ package app
import (
"context"
"fmt"
"github.com/skip-mev/feemarket/x/feemarket"
feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper"
feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types"
"io"
"io/fs"
"net/http"
"os"
"path/filepath"
"time"

"github.com/neutron-org/neutron/v4/x/dynamicfees"
dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types"

"github.com/skip-mev/feemarket/x/feemarket"
feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper"
feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types"

"cosmossdk.io/client/v2/autocli"
"cosmossdk.io/core/appmodule"
authcodec "github.com/cosmos/cosmos-sdk/x/auth/codec"
Expand Down Expand Up @@ -150,6 +154,7 @@ import (
"github.com/neutron-org/neutron/v4/x/contractmanager"
contractmanagermodulekeeper "github.com/neutron-org/neutron/v4/x/contractmanager/keeper"
contractmanagermoduletypes "github.com/neutron-org/neutron/v4/x/contractmanager/types"
dynamicfeeskeeper "github.com/neutron-org/neutron/v4/x/dynamicfees/keeper"
"github.com/neutron-org/neutron/v4/x/feeburner"
feeburnerkeeper "github.com/neutron-org/neutron/v4/x/feeburner/keeper"
feeburnertypes "github.com/neutron-org/neutron/v4/x/feeburner/types"
Expand Down Expand Up @@ -267,6 +272,7 @@ var (
ibcswap.AppModuleBasic{},
oracle.AppModuleBasic{},
marketmap.AppModuleBasic{},
dynamicfees.AppModuleBasic{},
)

// module account permissions
Expand Down Expand Up @@ -348,6 +354,7 @@ type App struct {
TransferKeeper wrapkeeper.KeeperTransferWrapper
FeeGrantKeeper feegrantkeeper.Keeper
FeeMarkerKeeper *feemarketkeeper.Keeper
DynamicFeesKeeper *dynamicfeeskeeper.Keeper
FeeKeeper *feekeeper.Keeper
FeeBurnerKeeper *feeburnerkeeper.Keeper
ConsumerKeeper ccvconsumerkeeper.Keeper
Expand Down Expand Up @@ -473,7 +480,7 @@ func New(
interchainqueriesmoduletypes.StoreKey, contractmanagermoduletypes.StoreKey, interchaintxstypes.StoreKey, wasmtypes.StoreKey, feetypes.StoreKey,
feeburnertypes.StoreKey, adminmoduletypes.StoreKey, ccvconsumertypes.StoreKey, tokenfactorytypes.StoreKey, pfmtypes.StoreKey,
crontypes.StoreKey, ibchookstypes.StoreKey, consensusparamtypes.StoreKey, crisistypes.StoreKey, dextypes.StoreKey, auctiontypes.StoreKey,
oracletypes.StoreKey, marketmaptypes.StoreKey, feemarkettypes.StoreKey,
oracletypes.StoreKey, marketmaptypes.StoreKey, feemarkettypes.StoreKey, dynamicfeestypes.StoreKey,
)
tkeys := storetypes.NewTransientStoreKeys(paramstypes.TStoreKey, dextypes.TStoreKey)
memKeys := storetypes.NewMemoryStoreKeys(capabilitytypes.MemStoreKey, feetypes.MemStoreKey)
Expand Down Expand Up @@ -559,11 +566,13 @@ func New(
authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(),
)

app.DynamicFeesKeeper = dynamicfeeskeeper.NewKeeper(appCodec, keys[dynamicfeestypes.StoreKey], authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String())

app.FeeMarkerKeeper = feemarketkeeper.NewKeeper(
appCodec,
keys[feemarkettypes.StoreKey],
app.AccountKeeper,
&feemarkettypes.ErrorDenomResolver{}, // TODO: implement ??? denom resolver, or find a proper one
app.DynamicFeesKeeper,
authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(),
)

Expand Down Expand Up @@ -949,6 +958,7 @@ func New(
tokenfactory.NewAppModule(appCodec, *app.TokenFactoryKeeper, app.AccountKeeper, app.BankKeeper),
cronModule,
feemarket.NewAppModule(appCodec, *app.FeeMarkerKeeper),
dynamicfees.NewAppModule(appCodec, *app.DynamicFeesKeeper),
swapModule,
dexModule,
marketmapModule,
Expand Down Expand Up @@ -1074,6 +1084,7 @@ func New(
oracletypes.ModuleName,
ibcswaptypes.ModuleName,
dextypes.ModuleName,
dynamicfeestypes.ModuleName,
)

app.mm.RegisterInvariants(&app.CrisisKeeper)
Expand Down Expand Up @@ -1364,6 +1375,8 @@ func (app *App) setupUpgradeHandlers() {
ConsensusKeeper: &app.ConsensusParamsKeeper,
ConsumerKeeper: &app.ConsumerKeeper,
MarketmapKeeper: app.MarketMapKeeper,
FeeMarketKeeper: app.FeeMarkerKeeper,
DynamicfeesKeeper: app.DynamicFeesKeeper,
CcvConsumerSubspace: app.GetSubspace(ccvconsumertypes.ModuleName),
},
app,
Expand Down
13 changes: 5 additions & 8 deletions app/genesis.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package app

import (
"cosmossdk.io/math"
"encoding/json"

"cosmossdk.io/math"

feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types"

"github.com/cosmos/cosmos-sdk/codec"
Expand All @@ -21,19 +23,14 @@ type GenesisState map[string]json.RawMessage

// NewDefaultGenesisState generates the default state for the application.
func NewDefaultGenesisState(cdc codec.JSONCodec) GenesisState {
// This ugly hack is required to alter globalfee module genesis state
// because in current chain implementation staking module is absent which is required by globalfee module
// and we can't use default genesis state for globalfee module.
// If we do not alter globalfee module genesis state, then we will get panic during tests run.

genesisState := ModuleBasics.DefaultGenesis(cdc)
feemarketFeeGenesis := feemarkettypes.GenesisState{
Params: feemarkettypes.Params{
Alpha: math.LegacyOneDec(),
Beta: math.LegacyOneDec(),
Theta: math.LegacyOneDec(),
Delta: math.LegacyOneDec(),
MinBaseFee: math.LegacyMustNewDecFromStr("0.0025"),
MinBaseGasPrice: math.LegacyMustNewDecFromStr("0.0025"),
MinLearningRate: math.LegacyMustNewDecFromStr("0.5"),
MaxLearningRate: math.LegacyMustNewDecFromStr("1.5"),
TargetBlockUtilization: 1,
Expand All @@ -44,7 +41,7 @@ func NewDefaultGenesisState(cdc codec.JSONCodec) GenesisState {
DistributeFees: true,
},
State: feemarkettypes.State{
BaseFee: math.LegacyMustNewDecFromStr("0.0025"),
BaseGasPrice: math.LegacyMustNewDecFromStr("0.0025"),
LearningRate: math.LegacyOneDec(),
Window: []uint64{100},
Index: 0,
Expand Down
4 changes: 1 addition & 3 deletions app/lane.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@ const (
MaxTxsForDefaultLane = 3000 // maximal number of txs that can be stored in this lane at any point in time
)

var (
MaxBlockspaceForDefaultLane = math.LegacyMustNewDecFromStr("1") // maximal fraction of blockMaxBytes / gas that can be used by this lane at any point in time (90%)
)
var MaxBlockspaceForDefaultLane = math.LegacyMustNewDecFromStr("1") // maximal fraction of blockMaxBytes / gas that can be used by this lane at any point in time (100%)

// CreateLanes creates a LaneMempool containing MEV, default lanes (in that order)
func (app *App) CreateLanes() *blocksdkbase.BaseLane {
Expand Down
5 changes: 5 additions & 0 deletions app/proposals_allowlisting.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,11 @@ import (
ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck
ccvconsumertypes "github.com/cosmos/interchain-security/v5/x/ccv/consumer/types"
auctiontypes "github.com/skip-mev/block-sdk/v2/x/auction/types"
feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types"
marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types"

dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types"

contractmanagertypes "github.com/neutron-org/neutron/v4/x/contractmanager/types"
crontypes "github.com/neutron-org/neutron/v4/x/cron/types"
dextypes "github.com/neutron-org/neutron/v4/x/dex/types"
Expand Down Expand Up @@ -84,6 +87,8 @@ func isSdkMessageWhitelisted(msg sdk.Msg) bool {
*authtypes.MsgUpdateParams,
*ccvconsumertypes.MsgUpdateParams,
*icahosttypes.MsgUpdateParams,
*feemarkettypes.MsgParams,
*dynamicfeestypes.MsgUpdateParams,
*ibctransfertypes.MsgUpdateParams:
return true
}
Expand Down
5 changes: 5 additions & 0 deletions app/upgrades/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,11 @@ import (
capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper"
ccvconsumerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/consumer/keeper"
auctionkeeper "github.com/skip-mev/block-sdk/v2/x/auction/keeper"
feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper"
marketmapkeeper "github.com/skip-mev/slinky/x/marketmap/keeper"

dynamicfeeskeeper "github.com/neutron-org/neutron/v4/x/dynamicfees/keeper"

contractmanagerkeeper "github.com/neutron-org/neutron/v4/x/contractmanager/keeper"
cronkeeper "github.com/neutron-org/neutron/v4/x/cron/keeper"
feeburnerkeeper "github.com/neutron-org/neutron/v4/x/feeburner/keeper"
Expand Down Expand Up @@ -59,6 +62,8 @@ type UpgradeKeepers struct {
ConsensusKeeper *consensuskeeper.Keeper
ConsumerKeeper *ccvconsumerkeeper.Keeper
MarketmapKeeper *marketmapkeeper.Keeper
FeeMarketKeeper *feemarketkeeper.Keeper
DynamicfeesKeeper *dynamicfeeskeeper.Keeper
// subspaces
CcvConsumerSubspace paramtypes.Subspace
}
Expand Down
5 changes: 5 additions & 0 deletions app/upgrades/v4.0.0/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@ package v400

import (
storetypes "cosmossdk.io/store/types"
feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types"
marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types"
oracletypes "github.com/skip-mev/slinky/x/oracle/types"

dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types"

"github.com/neutron-org/neutron/v4/app/upgrades"
)

Expand All @@ -20,6 +23,8 @@ var Upgrade = upgrades.Upgrade{
Added: []string{
marketmaptypes.ModuleName,
oracletypes.ModuleName,
feemarkettypes.ModuleName,
dynamicfeestypes.ModuleName,
},
},
}
63 changes: 63 additions & 0 deletions app/upgrades/v4.0.0/upgrades.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,16 @@ import (
"context"
"fmt"

"cosmossdk.io/errors"
"cosmossdk.io/math"

feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper"
feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types"

"github.com/neutron-org/neutron/v4/app/params"
dynamicfeeskeeper "github.com/neutron-org/neutron/v4/x/dynamicfees/keeper"
dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types"

upgradetypes "cosmossdk.io/x/upgrade/types"
comettypes "github.com/cometbft/cometbft/proto/tendermint/types"
adminmoduletypes "github.com/cosmos/admin-module/x/adminmodule/types"
Expand Down Expand Up @@ -53,6 +63,17 @@ func CreateUpgradeHandler(
return nil, err
}

ctx.Logger().Info("Setting dynamicfees/feemarket params...")
err = setFeeMarketParams(ctx, keepers.FeeMarketKeeper)
if err != nil {
return nil, err
}

err = setDynamicFeesParams(ctx, keepers.DynamicfeesKeeper)
if err != nil {
return nil, err
}

ctx.Logger().Info("Setting marketmap and oracle state...")
err = setMarketState(ctx, keepers.MarketmapKeeper)
if err != nil {
Expand All @@ -72,6 +93,48 @@ func setMarketMapParams(ctx sdk.Context, marketmapKeeper *marketmapkeeper.Keeper
return marketmapKeeper.SetParams(ctx, marketmapParams)
}

// NtrnPrices describes prices of any token in NTRN for dynamic fee resolver
// TODO: determine actual prices
var NtrnPrices = sdk.NewDecCoins(sdk.NewDecCoin(params.DefaultDenom, math.OneInt().Mul(math.NewInt(100))))

func setDynamicFeesParams(ctx sdk.Context, dfKeeper *dynamicfeeskeeper.Keeper) error {
dfParams := dynamicfeestypes.Params{
NtrnPrices: NtrnPrices,
}
return dfKeeper.SetParams(ctx, dfParams)
joldie777 marked this conversation as resolved.
Show resolved Hide resolved
}

// TODO: add a test for the migrations: check that feemarket state is consistent with feemarket params
func setFeeMarketParams(ctx sdk.Context, feemarketKeeper *feemarketkeeper.Keeper) error {
// TODO: set params values
feemarketParams := feemarkettypes.Params{
Alpha: math.LegacyDec{},
Beta: math.LegacyDec{},
Theta: math.LegacyDec{},
Delta: math.LegacyDec{},
MinBaseGasPrice: math.LegacyDec{},
MinLearningRate: math.LegacyDec{},
MaxLearningRate: math.LegacyDec{},
TargetBlockUtilization: 0,
MaxBlockUtilization: 0,
Window: 0,
FeeDenom: "",
Enabled: false,
DistributeFees: false,
}
feemarketState := feemarkettypes.NewState(feemarketParams.Window, feemarketParams.MinBaseGasPrice, feemarketParams.MinLearningRate)
err := feemarketKeeper.SetParams(ctx, feemarketParams)
if err != nil {
return errors.Wrap(err, "failed to to set feemarket params")
joldie777 marked this conversation as resolved.
Show resolved Hide resolved
}
err = feemarketKeeper.SetState(ctx, feemarketState)
if err != nil {
return errors.Wrap(err, "failed to to set feemarket state")
joldie777 marked this conversation as resolved.
Show resolved Hide resolved
}

return nil
}

func setMarketState(ctx sdk.Context, mmKeeper *marketmapkeeper.Keeper) error {
markets, err := slinkyutils.ReadMarketsFromFile(marketsJSON)
if err != nil {
Expand Down
16 changes: 16 additions & 0 deletions app/upgrades/v4.0.0/upgrades_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,19 @@ func (suite *UpgradeTestSuite) TestEnableVoteExtensionsUpgrade() {

suite.Require().Equal(oldParams, newParams)
}

func (suite *UpgradeTestSuite) TestDynamicFeesUpgrade() {
app := suite.GetNeutronZoneApp(suite.ChainA)
ctx := suite.ChainA.GetContext()
t := suite.T()

upgrade := upgradetypes.Plan{
Name: v400.UpgradeName,
Info: "some text here",
Height: 100,
}
require.NoError(t, app.UpgradeKeeper.ApplyUpgrade(ctx, upgrade))

params := app.DynamicFeesKeeper.GetParams(ctx)
suite.Require().Equal(params.NtrnPrices, v400.NtrnPrices)
}
Loading
Loading