Trading fee discount with staked GMX/MP

Proposal

I am proposing a tiered open/close position fee (instead of a flat 0.1%). I’m currently thinking either the tiers are based on GMX staked or Multiplier points. Both options incentivize long-term GMX stakers and creates a beneficial system for traders who believe in GMX.

Currently, the cost of opening and closing a margined position is 0.2% (0.1% to open and close). This fee (0.1%) is almost 3x what Binance charges (0.036%), and significantly affects traders who want to open and close trades in short periods of time (i.e. swing traders). With a high fee, traders are forced to aim for a much higher PnL to offset the fee. While I’m all for accruing fees for GMX and GLP stakers, I believe the high fee may discourage traders, especially in a bear market, where volatility is significantly less than in a bull market.

A counter argument is, reducing the open/close fee may reduce accumulated fees that are distributed to GLP and GMX stakers. While this may be true, it could quite possibly be offset by more trading volume by short term trades.

Another benefit is that this tiered system aligns traders with the success of GMX as a protocol. Traders who trade significant volumes would obviously appreciate lower trading fees and are forced to buy GMX in order to receive these discounts (similar to Binance).

Vision

The model (based on GMX staked) I’m envisioning is as follows:
(The numbers provided a merely for simplicity sake, will likely be much higher in practice to target genuine supporters of GMX).

sbfGMX Balance Fee
=< 25 sbfGMX 0.1%
> 25 sbfGMX 0.09%
>100 sbfGMX 0.08%
>250 sbfGMX 0.06%
>500 sbfGMX 0.04%
>1000 sbfGMX 0.03%

Obviously, all these numbers can be adjusted, but this is to provide a general idea of what the tiered discounts would look like.

Technical Details

The Timelock Contract currently controls the margin fee basis points (currently 10/10000 = 0.1%).

To implement this tiered discounts functionality, a new timelock will need to be deployed with the following code changes.

function getMarginFeeBasisPoints(address _account) public view returns (uint) {
     uint balance = IERC20(sbfGMX).balanceOf(_account);
     if (balance <= 25e18) return 10;
     else if (balance > 25e18) return 9;
     else if (balance > 100e18) return 8;
     else if (balance > 250e18) return 6;
     else if (balance > 500e18) return 4;
     else if (balance > 1000e18) return 3;
}

function enableLeverage(address _vault, address _account) external override onlyHandlerAndAbove {
        IVault vault = IVault(_vault);

        if (shouldToggleIsLeverageEnabled) {
            vault.setIsLeverageEnabled(true);
        }
        uint accountMarginFeeBasisPoints = getMarginFeeBasisPoints(_account);
        vault.setFees(
            vault.taxBasisPoints(),
            vault.stableTaxBasisPoints(),
            vault.mintBurnFeeBasisPoints(),
            vault.swapFeeBasisPoints(),
            vault.stableSwapFeeBasisPoints(),
            accountMarginFeeBasisPoints,
            vault.liquidationFeeUsd(),
            vault.minProfitTime(),
            vault.hasDynamicFees()
        );
    }

In addition, the position router will need to be upgraded to pass in the _account parameter into the timelock call (ITimelock(timelock).enableLeverage(_vault) => ITimelock(timelock).enableLeverage(_vault, _account)).

With the currently relayer model, this method is not susceptible to a flash loan attack. Since the setFees function is called by the relayer, this prevents attackers from flashloaning the GMX to reach a lower fee tier.

I’d be more than happy to write the modified contracts and work with the core team to get this implemented if approved by governance.

Conclusion

It is beneficial to create a system where traders and stakers are aligned together. By aligning a trading fee discount with staked GMX (or MP), it encourages these traders to support the GMX protocol, earning the staked GMX rewards and more importantly in this proposal, saving on trading fees.

7 Likes

I like this idea but not the tiers, exchanges like binance etc make you hold millions of $ their token to be eligible for the highest tiers of fees, having it for only 1000 GMX is too little.

I would make it more like the same fee tiers but something more like, fee rebates are good, but offering too many for a little amount of GMX held is how you massively kill the protocols fees.

=<100

100
1000
5000
20000
40000

Don’t forget this would include MP and esGMX as they are all bonded together under sbfGMX which makes it far easier to gain such large amounts.

2 Likes

Agreed. I just threw out some numbers for the concept, but yes, the amounts should be pretty high in practice to target genuine supports. Although, I think intervals at 250, 500, 1000, 2500, 5000, 10000, 20000 are sufficient for a start.

1 Like

I think this is important and should be implemented.

I’d suggest it is part of a larger conversation that GMX policy should offer superior fee structures than DYDX/Binance.

IMO this claim would be excellent marketing in itself and massively drive user growth on GMX. Why would I trade on Binance/DYDX (after synths!) if I am paying more in fees and with CEX risk?

I wouldn’t. Money talks and clicks walk.

1 Like

How much incremental volume do you think this will drive?

1 Like

I really like the proposal.
It creates loyalty at the trading level.

Obviously we have MP and esGMX which create long term alignment and loyalty for stakers and LPs.

Having something economically sticky for traders would be good from a pure loyalty perspective. As a GMX bag holder, I shouldn’t be shopping perp fees for my trades. I should just use GMX every time because I know it is the best price for me, due to my investment.

This would definitely incentivize large traders to build their GMX bags as part of their operations. And as we know, once you stake that GMX it’s hard to unstake and burn the MPs.

One very important point on the tiering. The open/close fees is not just how we earn fees. It is also what helps protect us from our “no-slippage” feature. So we can discount the fees, but not by too much.

Ie, I’d propose that at the upper end of the tier (like $1M worth? more?), we offer a 50% discount at the most. That gets us close to competitive with CEX (maybe still better given their slippage), without making us vulnerable.

1 Like

Good, this is a wonderful proposals…

great proposal guys. i am in favour.

I was creating a similar post and just saw this one. Why was is not more discussed ?

The idea has been brought up a few times, and has been a slumbering discussion in the community for a long time. But admittedly, there’s been limited discussion of it here on the Governance forum.

See also here: Introduce discount on fees for holding/staking GMX

There are good arguments for staked GMX enabling trading fee discounts, particularly around boosting customer loyalty and helping retain larger traders. And a few good arguments against it as well, particularly around it adding complexity, and GMX being a neutral protocol that offers traders of every size a level playing ground with equal fees.

I lean towards the former side myself;

I think alot of users, do not know how to continue pushing the proposals into votes ? I think staking fee discount be a nice to have. and given current mechanism it shouldnt take alot of developer hours to develop a contract to readjust the fee discount.

Hope a mod could assist in pushing this into a vote where users could choose between the different ways these discount could work, looking at telegram feedback i think we need to lower our fee’s slightly to attract more traders. Higher volume traders should have tiered discount be it through staking gmx / volume tiers, thats one of the ways to attract traders.

We want bigger whales to be here, thus i think giving a fee discount for high volume trades would be beneficial, but please seek Chaos Labs opinion on the maximum discount possible to prevent abuse. Thanks my 2 cents

1 Like