Skip to content

Commit

Permalink
[OTE-788] Update revshare safety (#2284)
Browse files Browse the repository at this point in the history
  • Loading branch information
affanv14 authored Sep 24, 2024
1 parent 1659f93 commit e4249ec
Show file tree
Hide file tree
Showing 25 changed files with 285 additions and 259 deletions.
49 changes: 25 additions & 24 deletions protocol/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -949,26 +949,40 @@ func New(
)
affiliatesModule := affiliatesmodule.NewAppModule(appCodec, app.AffiliatesKeeper)

app.RevShareKeeper = *revsharemodulekeeper.NewKeeper(
app.MarketMapKeeper = *marketmapmodulekeeper.NewKeeper(
runtime.NewKVStoreService(keys[marketmapmoduletypes.StoreKey]),
appCodec,
keys[revsharemoduletypes.StoreKey],
authtypes.NewModuleAddress(govtypes.ModuleName),
)

marketmapModule := marketmapmodule.NewAppModule(appCodec, &app.MarketMapKeeper)

app.FeeTiersKeeper = feetiersmodulekeeper.NewKeeper(
appCodec,
app.StatsKeeper,
app.AffiliatesKeeper,
keys[feetiersmoduletypes.StoreKey],
// set the governance and delaymsg module accounts as the authority for conducting upgrades
[]string{
lib.GovModuleAddress.String(),
delaymsgmoduletypes.ModuleAddress.String(),
},
app.AffiliatesKeeper,
)
revShareModule := revsharemodule.NewAppModule(appCodec, app.RevShareKeeper)
feeTiersModule := feetiersmodule.NewAppModule(appCodec, app.FeeTiersKeeper)

// Set the revshare keeper in the affiliates keeper.
app.AffiliatesKeeper.SetRevShareKeeper(app.RevShareKeeper)
app.AffiliatesKeeper.SetFeetiersKeeper(app.FeeTiersKeeper)

app.MarketMapKeeper = *marketmapmodulekeeper.NewKeeper(
runtime.NewKVStoreService(keys[marketmapmoduletypes.StoreKey]),
app.RevShareKeeper = *revsharemodulekeeper.NewKeeper(
appCodec,
authtypes.NewModuleAddress(govtypes.ModuleName),
keys[revsharemoduletypes.StoreKey],
[]string{
lib.GovModuleAddress.String(),
},
app.AffiliatesKeeper,
*app.FeeTiersKeeper,
)

marketmapModule := marketmapmodule.NewAppModule(appCodec, &app.MarketMapKeeper)
revShareModule := revsharemodule.NewAppModule(appCodec, app.RevShareKeeper)
app.FeeTiersKeeper.SetRevShareKeeper(app.RevShareKeeper)

app.PricesKeeper = *pricesmodulekeeper.NewKeeper(
appCodec,
Expand Down Expand Up @@ -1041,19 +1055,6 @@ func New(
)
perpetualsModule := perpetualsmodule.NewAppModule(appCodec, app.PerpetualsKeeper)

app.FeeTiersKeeper = feetiersmodulekeeper.NewKeeper(
appCodec,
app.StatsKeeper,
app.AffiliatesKeeper,
keys[feetiersmoduletypes.StoreKey],
// set the governance and delaymsg module accounts as the authority for conducting upgrades
[]string{
lib.GovModuleAddress.String(),
delaymsgmoduletypes.ModuleAddress.String(),
},
)
feeTiersModule := feetiersmodule.NewAppModule(appCodec, app.FeeTiersKeeper)

app.VestKeeper = *vestmodulekeeper.NewKeeper(
appCodec,
keys[vestmoduletypes.StoreKey],
Expand Down
8 changes: 4 additions & 4 deletions protocol/testing/e2e/gov/feetiers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,16 @@ func TestUpdateFeeTiersModuleParams(t *testing.T) {
Tiers: []*feetierstypes.PerpetualFeeTier{
{
Name: "test_tier_0",
MakerFeePpm: 1_000,
TakerFeePpm: 2_000,
MakerFeePpm: 11_000,
TakerFeePpm: 22_000,
},
{
Name: "test_tier_1",
AbsoluteVolumeRequirement: 200_000,
TotalVolumeShareRequirementPpm: 100_000,
MakerVolumeShareRequirementPpm: 50_000,
MakerFeePpm: 11_000,
TakerFeePpm: 22_000,
MakerFeePpm: 1_000,
TakerFeePpm: 2_000,
},
},
}
Expand Down
4 changes: 3 additions & 1 deletion protocol/testutil/keeper/assets.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,9 @@ func AssetsKeepers(
stakingKeeper,
)
affiliatesKeeper, _ := createAffiliatesKeeper(stateStore, db, cdc, statsKeeper, transientStoreKey, msgSenderEnabled)
revShareKeeper, _, _ := createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper)
vaultKeeper, _ := createVaultKeeper(stateStore, db, cdc, transientStoreKey)
feetiersKeeper, _ := createFeeTiersKeeper(stateStore, statsKeeper, vaultKeeper, affiliatesKeeper, db, cdc)
revShareKeeper, _, _ := createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper, feetiersKeeper)
marketMapKeeper, _ := createMarketMapKeeper(stateStore, db, cdc)
pricesKeeper, _, _, mockTimeProvider = createPricesKeeper(
stateStore,
Expand Down
32 changes: 17 additions & 15 deletions protocol/testutil/keeper/clob.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,23 @@ func NewClobKeepersTestContextWithUninitializedMemStore(
)
ks.AffiliatesKeeper, _ = createAffiliatesKeeper(stateStore, db, cdc, ks.StatsKeeper,
indexerEventsTransientStoreKey, true)
revShareKeeper, _, _ := createRevShareKeeper(stateStore, db, cdc, ks.AffiliatesKeeper)
ks.VaultKeeper, _ = createVaultKeeper(
stateStore,
db,
cdc,
indexerEventsTransientStoreKey,
)
ks.FeeTiersKeeper, _ = createFeeTiersKeeper(
stateStore,
ks.StatsKeeper,
ks.VaultKeeper,
ks.AffiliatesKeeper,
db,
cdc,
)
revShareKeeper, _, _ := createRevShareKeeper(stateStore, db, cdc, ks.AffiliatesKeeper, ks.FeeTiersKeeper)
ks.FeeTiersKeeper.SetRevShareKeeper(revShareKeeper)
ks.AffiliatesKeeper.SetFeetiersKeeper(ks.FeeTiersKeeper)
ks.MarketMapKeeper, _ = createMarketMapKeeper(stateStore, db, cdc)
ks.PricesKeeper, _, _, mockTimeProvider = createPricesKeeper(
stateStore,
Expand Down Expand Up @@ -138,20 +154,6 @@ func NewClobKeepersTestContextWithUninitializedMemStore(
true,
)
ks.BlockTimeKeeper, _ = createBlockTimeKeeper(stateStore, db, cdc)
ks.VaultKeeper, _ = createVaultKeeper(
stateStore,
db,
cdc,
indexerEventsTransientStoreKey,
)
ks.FeeTiersKeeper, _ = createFeeTiersKeeper(
stateStore,
ks.StatsKeeper,
ks.VaultKeeper,
ks.AffiliatesKeeper,
db,
cdc,
)
ks.RewardsKeeper, _ = createRewardsKeeper(
stateStore,
ks.AssetsKeeper,
Expand Down
30 changes: 15 additions & 15 deletions protocol/testutil/keeper/listing.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,21 @@ func ListingKeepers(
stakingKeeper,
)
affiliatesKeeper, _ := createAffiliatesKeeper(stateStore, db, cdc, statsKeeper, transientStoreKey, true)
revShareKeeper, _, _ := createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper)
vaultKeeper, _ := createVaultKeeper(
stateStore,
db,
cdc,
transientStoreKey,
)
feeTiersKeeper, _ := createFeeTiersKeeper(
stateStore,
statsKeeper,
vaultKeeper,
affiliatesKeeper,
db,
cdc,
)
revShareKeeper, _, _ := createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper, feeTiersKeeper)
marketMapKeeper, _ = createMarketMapKeeper(stateStore, db, cdc)
pricesKeeper, _, _, mockTimeProvider = createPricesKeeper(
stateStore,
Expand Down Expand Up @@ -102,20 +116,6 @@ func ListingKeepers(
)

blockTimeKeeper, _ := createBlockTimeKeeper(stateStore, db, cdc)
vaultKeeper, _ := createVaultKeeper(
stateStore,
db,
cdc,
transientStoreKey,
)
feeTiersKeeper, _ := createFeeTiersKeeper(
stateStore,
statsKeeper,
vaultKeeper,
affiliatesKeeper,
db,
cdc,
)
rewardsKeeper, _ := createRewardsKeeper(
stateStore,
assetsKeeper,
Expand Down
4 changes: 3 additions & 1 deletion protocol/testutil/keeper/perpetuals.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,9 @@ func PerpetualsKeepersWithClobHelpers(
stakingKeeper,
)
affiliatesKeeper, _ := createAffiliatesKeeper(stateStore, db, cdc, statsKeeper, transientStoreKey, true)
revShareKeeper, _, _ := createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper)
vaultKeeper, _ := createVaultKeeper(stateStore, db, cdc, transientStoreKey)
feetiersKeeper, _ := createFeeTiersKeeper(stateStore, statsKeeper, vaultKeeper, affiliatesKeeper, db, cdc)
revShareKeeper, _, _ := createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper, feetiersKeeper)
pc.MarketMapKeeper, _ = createMarketMapKeeper(stateStore, db, cdc)
pc.PricesKeeper, _, pc.IndexPriceCache, pc.MockTimeProvider = createPricesKeeper(
stateStore,
Expand Down
4 changes: 3 additions & 1 deletion protocol/testutil/keeper/prices.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,9 @@ func PricesKeepers(t testing.TB) (
stakingKeeper,
)
affiliatesKeeper, _ := createAffiliatesKeeper(stateStore, db, cdc, statsKeeper, transientStoreKey, true)
revShareKeeper, _, _ = createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper)
vaultKeeper, _ := createVaultKeeper(stateStore, db, cdc, transientStoreKey)
feetiersKeeper, _ := createFeeTiersKeeper(stateStore, statsKeeper, vaultKeeper, affiliatesKeeper, db, cdc)
revShareKeeper, _, _ = createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper, feetiersKeeper)
marketMapKeeper, _ = createMarketMapKeeper(stateStore, db, cdc)
// Define necessary keepers here for unit tests
keeper, storeKey, indexPriceCache, mockTimeProvider =
Expand Down
7 changes: 6 additions & 1 deletion protocol/testutil/keeper/revshare.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
"github.com/dydxprotocol/v4-chain/protocol/lib"
affiliateskeeper "github.com/dydxprotocol/v4-chain/protocol/x/affiliates/keeper"
feetierskeeper "github.com/dydxprotocol/v4-chain/protocol/x/feetiers/keeper"
"github.com/dydxprotocol/v4-chain/protocol/x/revshare/types"

storetypes "cosmossdk.io/store/types"
Expand Down Expand Up @@ -54,8 +55,10 @@ func RevShareKeepers(t testing.TB) (
stakingKeeper,
)
affiliatesKeeper, _ := createAffiliatesKeeper(stateStore, db, cdc, statsKeeper, transientStoreKey, true)
vaultKeeper, _ := createVaultKeeper(stateStore, db, cdc, transientStoreKey)
feetiersKeeper, _ := createFeeTiersKeeper(stateStore, statsKeeper, vaultKeeper, affiliatesKeeper, db, cdc)
keeper, storeKey, mockTimeProvider =
createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper)
createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper, feetiersKeeper)

return []GenesisInitializer{keeper}
},
Expand All @@ -69,6 +72,7 @@ func createRevShareKeeper(
db *dbm.MemDB,
cdc *codec.ProtoCodec,
affiliatesKeeper *affiliateskeeper.Keeper,
feetiersKeeper *feetierskeeper.Keeper,
) (
*keeper.Keeper,
storetypes.StoreKey,
Expand All @@ -83,6 +87,7 @@ func createRevShareKeeper(
lib.GovModuleAddress.String(),
},
*affiliatesKeeper,
*feetiersKeeper,
)

return k, storeKey, mockTimeProvider
Expand Down
24 changes: 12 additions & 12 deletions protocol/testutil/keeper/rewards.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,18 +66,6 @@ func RewardsKeepers(
stakingKeeper,
)
affiliatesKeeper, _ := createAffiliatesKeeper(stateStore, db, cdc, statsKeeper, transientStoreKey, true)
revShareKeeper, _, _ := createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper)
marketMapKeeper, _ := createMarketMapKeeper(stateStore, db, cdc)
pricesKeeper, _, _, _ = createPricesKeeper(stateStore, db, cdc, transientStoreKey, revShareKeeper, marketMapKeeper)
// Mock time provider response for market creation.
assetsKeeper, _ = createAssetsKeeper(
stateStore,
db,
cdc,
pricesKeeper,
transientStoreKey,
true,
)
vaultKeeper, _ := createVaultKeeper(
stateStore,
db,
Expand All @@ -92,6 +80,18 @@ func RewardsKeepers(
db,
cdc,
)
revShareKeeper, _, _ := createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper, feetiersKeeper)
marketMapKeeper, _ := createMarketMapKeeper(stateStore, db, cdc)
pricesKeeper, _, _, _ = createPricesKeeper(stateStore, db, cdc, transientStoreKey, revShareKeeper, marketMapKeeper)
// Mock time provider response for market creation.
assetsKeeper, _ = createAssetsKeeper(
stateStore,
db,
cdc,
pricesKeeper,
transientStoreKey,
true,
)
rewardsKeeper, storeKey = createRewardsKeeper(
stateStore,
assetsKeeper,
Expand Down
4 changes: 3 additions & 1 deletion protocol/testutil/keeper/sending.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,9 @@ func SendingKeepersWithSubaccountsKeeper(t testing.TB, saKeeper types.Subaccount
stakingKeeper,
)
affiliatesKeeper, _ := createAffiliatesKeeper(stateStore, db, cdc, statsKeeper, transientStoreKey, true)
revShareKeeper, _, _ := createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper)
vaultKeeper, _ := createVaultKeeper(stateStore, db, cdc, transientStoreKey)
feetiersKeeper, _ := createFeeTiersKeeper(stateStore, statsKeeper, vaultKeeper, affiliatesKeeper, db, cdc)
revShareKeeper, _, _ := createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper, feetiersKeeper)
marketMapKeeper, _ := createMarketMapKeeper(stateStore, db, cdc)
ks.PricesKeeper, _, _, mockTimeProvider = createPricesKeeper(
stateStore,
Expand Down
5 changes: 3 additions & 2 deletions protocol/testutil/keeper/subaccounts.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,9 @@ func SubaccountsKeepers(t testing.TB, msgSenderEnabled bool) (
stakingKeeper,
)
affiliatesKeeper, _ = createAffiliatesKeeper(stateStore, db, cdc, statsKeeper, transientStoreKey, true)
revShareKeeper, _, _ = createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper)
affiliatesKeeper.SetRevShareKeeper(revShareKeeper)
vaultKeeper, _ := createVaultKeeper(stateStore, db, cdc, transientStoreKey)
feetiersKeeper, _ := createFeeTiersKeeper(stateStore, statsKeeper, vaultKeeper, affiliatesKeeper, db, cdc)
revShareKeeper, _, _ = createRevShareKeeper(stateStore, db, cdc, affiliatesKeeper, feetiersKeeper)
marketMapKeeper, _ := createMarketMapKeeper(stateStore, db, cdc)
pricesKeeper, _, _, mockTimeProvider = createPricesKeeper(
stateStore,
Expand Down
6 changes: 3 additions & 3 deletions protocol/x/affiliates/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ type (
storeKey storetypes.StoreKey
authorities map[string]struct{}
statsKeeper types.StatsKeeper
revShareKeeper types.RevShareKeeper
feetiersKeeper types.FeetiersKeeper
indexerEventManager indexer_manager.IndexerEventManager
}
)
Expand Down Expand Up @@ -278,8 +278,8 @@ func (k Keeper) UpdateAffiliateTiers(ctx sdk.Context, affiliateTiers types.Affil
return nil
}

func (k *Keeper) SetRevShareKeeper(revShareKeeper types.RevShareKeeper) {
k.revShareKeeper = revShareKeeper
func (k *Keeper) SetFeetiersKeeper(feetiersKeeper types.FeetiersKeeper) {
k.feetiersKeeper = feetiersKeeper
}

func (k Keeper) GetIndexerEventManager() indexer_manager.IndexerEventManager {
Expand Down
42 changes: 2 additions & 40 deletions protocol/x/affiliates/keeper/msg_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"context"
"errors"

errorsmod "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/dydxprotocol/v4-chain/protocol/x/affiliates/types"
)
Expand Down Expand Up @@ -38,25 +37,8 @@ func (k msgServer) UpdateAffiliateTiers(ctx context.Context,
}

sdkCtx := sdk.UnwrapSDKContext(ctx)
unconditionalRevShareConfig, err := k.revShareKeeper.GetUnconditionalRevShareConfigParams(sdkCtx)
if err != nil {
return nil, err
}
marketMapperRevShareParams := k.revShareKeeper.GetMarketMapperRevenueShareParams(sdkCtx)
affiliateWhitelist, err := k.GetAffiliateWhitelist(sdkCtx)
if err != nil {
return nil, err
}

if !k.revShareKeeper.ValidateRevShareSafety(msg.Tiers,
unconditionalRevShareConfig, marketMapperRevShareParams, affiliateWhitelist) {
return nil, errorsmod.Wrapf(
types.ErrRevShareSafetyViolation,
"rev share safety violation",
)
}

err = k.Keeper.UpdateAffiliateTiers(sdkCtx, msg.Tiers)
err := k.Keeper.UpdateAffiliateTiers(sdkCtx, msg.Tiers)
if err != nil {
return nil, err
}
Expand All @@ -70,27 +52,7 @@ func (k msgServer) UpdateAffiliateWhitelist(ctx context.Context,
return nil, errors.New("invalid authority")
}

sdkCtx := sdk.UnwrapSDKContext(ctx)
unconditionalRevShareConfig, err := k.revShareKeeper.GetUnconditionalRevShareConfigParams(sdkCtx)
if err != nil {
return nil, err
}
marketMapperRevShareParams := k.revShareKeeper.GetMarketMapperRevenueShareParams(sdkCtx)

affiliateTiers, err := k.Keeper.GetAllAffiliateTiers(sdkCtx)
if err != nil {
return nil, err
}

if !k.revShareKeeper.ValidateRevShareSafety(affiliateTiers,
unconditionalRevShareConfig, marketMapperRevShareParams, msg.Whitelist) {
return nil, errorsmod.Wrapf(
types.ErrRevShareSafetyViolation,
"rev share safety violation",
)
}

err = k.Keeper.SetAffiliateWhitelist(sdk.UnwrapSDKContext(ctx), msg.Whitelist)
err := k.Keeper.SetAffiliateWhitelist(sdk.UnwrapSDKContext(ctx), msg.Whitelist)
if err != nil {
return nil, err
}
Expand Down
Loading

0 comments on commit e4249ec

Please sign in to comment.