Trading fee discount with staked GMX/MP


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).


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) {
        uint accountMarginFeeBasisPoints = getMarginFeeBasisPoints(_account);

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.


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.


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.



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.

1 Like

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.

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.