@@ -3,7 +3,6 @@ package keeper
33import (
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
254255func (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(
277278func (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