Skip to content

Commit 1659f93

Browse files
authored
[OTE-816] Update Revshare logic for affiliates (#2298)
1 parent cc59dd2 commit 1659f93

File tree

16 files changed

+245
-342
lines changed

16 files changed

+245
-342
lines changed

protocol/app/app.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1091,7 +1091,6 @@ func New(
10911091
app.BankKeeper,
10921092
app.PerpetualsKeeper,
10931093
app.BlockTimeKeeper,
1094-
app.RevShareKeeper,
10951094
app.IndexerEventManager,
10961095
app.FullNodeStreamingManager,
10971096
)

protocol/testutil/keeper/clob.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,6 @@ func NewClobKeepersTestContextWithUninitializedMemStore(
170170
bankKeeper,
171171
ks.PerpetualsKeeper,
172172
ks.BlockTimeKeeper,
173-
revShareKeeper,
174173
indexerEventsTransientStoreKey,
175174
true,
176175
)

protocol/testutil/keeper/listing.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@ func ListingKeepers(
134134
bankKeeper,
135135
perpetualsKeeper,
136136
blockTimeKeeper,
137-
revShareKeeper,
138137
transientStoreKey,
139138
true,
140139
)

protocol/testutil/keeper/sending.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ func SendingKeepersWithSubaccountsKeeper(t testing.TB, saKeeper types.Subaccount
113113
ks.BankKeeper,
114114
ks.PerpetualsKeeper,
115115
blockTimeKeeper,
116-
revShareKeeper,
117116
transientStoreKey,
118117
true,
119118
)

protocol/testutil/keeper/subaccounts.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ func SubaccountsKeepers(t testing.TB, msgSenderEnabled bool) (
100100
bankKeeper,
101101
perpetualsKeeper,
102102
blocktimeKeeper,
103-
revShareKeeper,
104103
transientStoreKey,
105104
msgSenderEnabled,
106105
)
@@ -132,7 +131,6 @@ func createSubaccountsKeeper(
132131
bk types.BankKeeper,
133132
pk *perpskeeper.Keeper,
134133
btk *blocktimekeeper.Keeper,
135-
rsk *revsharekeeper.Keeper,
136134
transientStoreKey storetypes.StoreKey,
137135
msgSenderEnabled bool,
138136
) (*keeper.Keeper, storetypes.StoreKey) {
@@ -151,7 +149,6 @@ func createSubaccountsKeeper(
151149
bk,
152150
pk,
153151
btk,
154-
rsk,
155152
mockIndexerEventsManager,
156153
streaming.NewNoopGrpcStreamingManager(),
157154
)

protocol/x/clob/keeper/process_single_match.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/dydxprotocol/v4-chain/protocol/lib/metrics"
1515
assettypes "github.com/dydxprotocol/v4-chain/protocol/x/assets/types"
1616
"github.com/dydxprotocol/v4-chain/protocol/x/clob/types"
17+
revsharetypes "github.com/dydxprotocol/v4-chain/protocol/x/revshare/types"
1718
satypes "github.com/dydxprotocol/v4-chain/protocol/x/subaccounts/types"
1819
gometrics "github.com/hashicorp/go-metrics"
1920
)
@@ -464,14 +465,13 @@ func (k Keeper) persistMatchedOrders(
464465
// Distribute the fee amount from subacounts module to fee collector and rev share accounts
465466
bigTotalFeeQuoteQuantums := new(big.Int).Add(bigTakerFeeQuoteQuantums, bigMakerFeeQuoteQuantums)
466467
revSharesForFill, err := k.revshareKeeper.GetAllRevShares(ctx, fillForProcess, affiliatesWhitelistMap)
467-
468+
if err != nil {
469+
revSharesForFill = revsharetypes.RevSharesForFill{}
470+
log.ErrorLog(ctx, "error getting rev shares for fill", "error", err)
471+
}
468472
if revSharesForFill.AffiliateRevShare != nil {
469473
affiliateRevSharesQuoteQuantums = revSharesForFill.AffiliateRevShare.QuoteQuantums
470474
}
471-
472-
if err != nil {
473-
return takerUpdateResult, makerUpdateResult, affiliateRevSharesQuoteQuantums, err
474-
}
475475
if err := k.subaccountsKeeper.DistributeFees(
476476
ctx,
477477
assettypes.AssetUsdc.Id,

protocol/x/revshare/keeper/revshare.go

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package keeper
33
import (
44
"math/big"
55

6-
errorsmod "cosmossdk.io/errors"
76
"cosmossdk.io/store/prefix"
87
sdk "github.com/cosmos/cosmos-sdk/types"
98
"github.com/dydxprotocol/v4-chain/protocol/lib"
@@ -163,25 +162,28 @@ func (k Keeper) GetAllRevShares(
163162
feeSourceToRevSharePpm := make(map[types.RevShareFeeSource]uint32)
164163
feeSourceToQuoteQuantums[types.REV_SHARE_FEE_SOURCE_TAKER_FEE] = big.NewInt(0)
165164
feeSourceToRevSharePpm[types.REV_SHARE_FEE_SOURCE_TAKER_FEE] = 0
166-
feeSourceToQuoteQuantums[types.REV_SHARE_FEE_SOURCE_NET_FEE] = big.NewInt(0)
167-
feeSourceToRevSharePpm[types.REV_SHARE_FEE_SOURCE_NET_FEE] = 0
165+
feeSourceToQuoteQuantums[types.REV_SHARE_FEE_SOURCE_NET_PROTOCOL_REVENUE] = big.NewInt(0)
166+
feeSourceToRevSharePpm[types.REV_SHARE_FEE_SOURCE_NET_PROTOCOL_REVENUE] = 0
168167

169168
totalFeesShared := big.NewInt(0)
170169
takerFees := fill.TakerFeeQuoteQuantums
171170
makerFees := fill.MakerFeeQuoteQuantums
172171
netFees := big.NewInt(0).Add(takerFees, makerFees)
173172

174-
affiliateRevShares, err := k.getAffiliateRevShares(ctx, fill, affiliatesWhitelistMap)
173+
affiliateRevShares, affiliateFeesShared, err := k.getAffiliateRevShares(ctx, fill, affiliatesWhitelistMap)
175174
if err != nil {
176175
return types.RevSharesForFill{}, err
177176
}
177+
netFeesSubAffiliateFeesShared := new(big.Int).Sub(netFees, affiliateFeesShared)
178+
if netFeesSubAffiliateFeesShared.Sign() <= 0 {
179+
return types.RevSharesForFill{}, types.ErrAffiliateFeesSharedExceedsNetFees
180+
}
178181

179-
unconditionalRevShares, err := k.getUnconditionalRevShares(ctx, netFees)
182+
unconditionalRevShares, err := k.getUnconditionalRevShares(ctx, netFeesSubAffiliateFeesShared)
180183
if err != nil {
181184
return types.RevSharesForFill{}, err
182185
}
183-
184-
marketMapperRevShares, err := k.getMarketMapperRevShare(ctx, fill.MarketId, netFees)
186+
marketMapperRevShares, err := k.getMarketMapperRevShare(ctx, fill.MarketId, netFeesSubAffiliateFeesShared)
185187
if err != nil {
186188
return types.RevSharesForFill{}, err
187189
}
@@ -208,8 +210,7 @@ func (k Keeper) GetAllRevShares(
208210
}
209211
//check total fees shared is less than or equal to net fees
210212
if totalFeesShared.Cmp(netFees) > 0 {
211-
return types.RevSharesForFill{}, errorsmod.Wrap(
212-
types.ErrTotalFeesSharedExceedsNetFees, "total fees shared exceeds net fees")
213+
return types.RevSharesForFill{}, types.ErrTotalFeesSharedExceedsNetFees
213214
}
214215

215216
return types.RevSharesForFill{
@@ -224,20 +225,20 @@ func (k Keeper) getAffiliateRevShares(
224225
ctx sdk.Context,
225226
fill clobtypes.FillForProcess,
226227
affiliatesWhitelistMap map[string]uint32,
227-
) ([]types.RevShare, error) {
228+
) ([]types.RevShare, *big.Int, error) {
228229
takerAddr := fill.TakerAddr
229230
takerFee := fill.TakerFeeQuoteQuantums
230231
if fill.MonthlyRollingTakerVolumeQuantums >= types.MaxReferee30dVolumeForAffiliateShareQuantums {
231-
return nil, nil
232+
return nil, big.NewInt(0), nil
232233
}
233234

234235
takerAffiliateAddr, feeSharePpm, exists, err := k.affiliatesKeeper.GetTakerFeeShare(
235236
ctx, takerAddr, affiliatesWhitelistMap)
236237
if err != nil {
237-
return nil, err
238+
return nil, big.NewInt(0), err
238239
}
239240
if !exists {
240-
return nil, nil
241+
return nil, big.NewInt(0), nil
241242
}
242243
feesShared := lib.BigMulPpm(takerFee, lib.BigU(feeSharePpm), false)
243244
return []types.RevShare{
@@ -248,23 +249,23 @@ func (k Keeper) getAffiliateRevShares(
248249
QuoteQuantums: feesShared,
249250
RevSharePpm: feeSharePpm,
250251
},
251-
}, nil
252+
}, feesShared, nil
252253
}
253254

254255
func (k Keeper) getUnconditionalRevShares(
255256
ctx sdk.Context,
256-
netFees *big.Int,
257+
netFeesSubAffiliateFeesShared *big.Int,
257258
) ([]types.RevShare, error) {
258259
revShares := []types.RevShare{}
259260
unconditionalRevShareConfig, err := k.GetUnconditionalRevShareConfigParams(ctx)
260261
if err != nil {
261262
return nil, err
262263
}
263264
for _, revShare := range unconditionalRevShareConfig.Configs {
264-
feeShared := lib.BigMulPpm(netFees, lib.BigU(revShare.SharePpm), false)
265+
feeShared := lib.BigMulPpm(netFeesSubAffiliateFeesShared, lib.BigU(revShare.SharePpm), false)
265266
revShare := types.RevShare{
266267
Recipient: revShare.Address,
267-
RevShareFeeSource: types.REV_SHARE_FEE_SOURCE_NET_FEE,
268+
RevShareFeeSource: types.REV_SHARE_FEE_SOURCE_NET_PROTOCOL_REVENUE,
268269
RevShareType: types.REV_SHARE_TYPE_UNCONDITIONAL,
269270
QuoteQuantums: feeShared,
270271
RevSharePpm: revShare.SharePpm,
@@ -277,7 +278,7 @@ func (k Keeper) getUnconditionalRevShares(
277278
func (k Keeper) getMarketMapperRevShare(
278279
ctx sdk.Context,
279280
marketId uint32,
280-
netFees *big.Int,
281+
netFeesSubAffiliateFeesShared *big.Int,
281282
) ([]types.RevShare, error) {
282283
revShares := []types.RevShare{}
283284
marketMapperRevshareAddress, revenueSharePpm, err := k.GetMarketMapperRevenueShareForMarket(ctx, marketId)
@@ -288,10 +289,10 @@ func (k Keeper) getMarketMapperRevShare(
288289
return nil, nil
289290
}
290291

291-
marketMapperRevshareAmount := lib.BigMulPpm(netFees, lib.BigU(revenueSharePpm), false)
292+
marketMapperRevshareAmount := lib.BigMulPpm(netFeesSubAffiliateFeesShared, lib.BigU(revenueSharePpm), false)
292293
revShares = append(revShares, types.RevShare{
293294
Recipient: marketMapperRevshareAddress.String(),
294-
RevShareFeeSource: types.REV_SHARE_FEE_SOURCE_NET_FEE,
295+
RevShareFeeSource: types.REV_SHARE_FEE_SOURCE_NET_PROTOCOL_REVENUE,
295296
RevShareType: types.REV_SHARE_TYPE_MARKET_MAPPER,
296297
QuoteQuantums: marketMapperRevshareAmount,
297298
RevSharePpm: revenueSharePpm,

0 commit comments

Comments
 (0)