GMX is a decentralized perpetual and spot exchange protocol currently on Arbitrum and Avalanche. It became popular for its unique GLP liquidity pool index, as well as for providing investors with ‘real yield’ from protocol revenue in the form of ETH and AVAX rewards. It stands out for allowing traders to trade up to 50x leverage with zero impact on token prices and almost no slippage. This is possible thanks to its GLP, a tokenized liquidity pool with multiple assets in it.
As a decentralized and permissionless trading platform, users don’t need a username or password to open/close trades or provide liquidity. The protocol uses an aggregate price feed supported by a decentralized oracle infrastructure powered by Chainlink.
GMX originally started off as Gambit on Binance Smart Chain, before pivoting to the GMX dApp used today. The protocol has a very engaged community which has created an NFT collection and many tools based on GMX. There is a referral link feature, where users can earn commissions for referring others to the platform. GMX is a part of the growing DeFi derivatives sector. They have numerous partnerships and are planning on expanding the number of chains they are deployed on, which is currently just Avalanche and Arbitrum.
The anonymous GMX team has managed to become one of the leading protocols when it comes to revenue generation, even surpassing giants like Aave, Curve, and even Bitcoin.
Its innovative trading system allows traders to rent out liquidity from the assets in the liquidity pool in such a way that liquidity providers do not suffer from impermanent loss while earning 70% of protocol fees. Because of this model, perpetuals on GMX work differently than what some traders might be used to on CEXs or even other DEXs, like Perpetual and DYDX. Since the liquidity is being rented out from the liquidity pool, traders who are going long are renting out the upside on the assets they are trading, and traders who are going short are renting out the upside on the stablecoins held by the pool. Because of that, short traders are paid in stables, and long traders are paid in the asset they are going long on. This liquidity pool is made out of multiple assets, so liquidity providers can mint or burn GLP based on whether they are depositing or withdrawing assets from the pool.
By holding GLP, you own a share of the multi-asset pool. Based on whether the assets you deposit or withdraw are balancing or imbalancing the liquidity pool, you will be charged more or less fees. GLP holders act as a counterparty to traders. When GMX traders make a profit, GLP holders make a loss, and vice versa. Because of this reason, GLP holders are also referred to as the House or the casino, since more traders lose money on average than they earn.
When positions are opened or closed, the protocol charges a fee, on top of an additional borrow fee that is paid to the traders’ counterparty, the GLP holders. In fact, all fees generated by the exchange are distributed to GLP and GMX holders. 70% of fees go to GLP holders and are paid in ETH or AVAX based on whether the user is using GMX on the Arbitrum or Avalanche chain. 30% of fees go to GMX stakers, which are also rewarded with Escrowed GMX tokens, and multiplier points in addition to ETH and AVAX.
GMX launched in September 2021 as a perpetual futures DEX where users could trade up to 50x leverage with close to 0% slippage without KYC or geographic restrictions.
The protocol started as XVIX in November 2020 and then upgraded to Gambit on the Binance Smart Chain in March 2021. GMX was launched in September 2021 on Arbitrum and has been adding features such as smaller trading spreads, new assets added to the GLP pool, integrations with DEX aggregators such as 1inch and Paraswap, deployments on other chains like Avalanche, fee discounts, and more.
The Roadmap is focused on increasing trading volume and revenue from fees by:
Being chain agnostic, the GMX wants to deploy on more chains to become the default multi-chain spot and perpetuals DEX.
The team members are anonymous:
There is no official role information other than the information compiled from Discord, Medium articles, Github or Twitter.
GMX belongs to the derivatives sector, more specifically the perpetual futures and spot trading categories.
There is also a significant transition from CEXs to DEXs, with the top 10 DEXs increasing their quarterly volume by 441.92% from Q1 2021 to Q4 2021. For perpetual markets, the market share has increased from almost 0% to close to 3%, with DYDX still covering more than 2% of the entire perpetual exchange volume in Q4 2021. This volume is expected to increase with the adoption of L2s and the scaling solutions of alternative L1s.
GMX stands out for its composability and for having become one of the most used and built upon money legos. More than 28 projects are building on top of GMX as of Q1 2023 across a variety of categories: vaults, lending, options, social trading, and others.
Mainstream adoption of GMX would turn the protocol into the go-to solution for on-chain spot and perpetuals trading. GMX revenue would be enough to attract both liquidity providers and traders. The innovation of the GMX would allow it to gain attention from both retail and institutional investors.
If more people using CEXs started using DEXs instead, this would help GMX. GMX could also gain more users and market share by improving UX, having a lower gas cost, and using blockchain scaling solutions.
Currently, the market leader on decentralized perpetual exchanges is DYDX with more than $700B in volume since its launch. DYDX was launched on Starkware and is planning a future release on Cosmos. The approach of DYDX with a central limit order book allows for more complex order types by taking the tradeoff of more centralization from off-chain technology. Other competitors and forks with a similar model are Gains Network, Mycelium, Metavault Trade…
GMX is different from its competitors because of its revenue sharing. GMX rewards are distributed to both liquidity providers and stakers, while other platforms like DYDX reward traders with no lockup, which leads to trading revenues per epoch netting out against trading emissions. If GMX could grow to a level where revenue is enough to sustain business operations without the need for token emissions that are used as incentives. Many people like that GMX distributes a lot of its revenue in “real yield”: in ETH or AVAX depending on whether you are using GMX on Arbitrum or Avalanche chain.
During 2022, GMX has been among the protocols that have generated more revenue from fees, even surpassing DeFi protocols like Curve, Compound, Aave, or Layer 1s like Bitcoin.
GMX is currently on Arbitrum and Avalanche and plans to deploy on other chains in the future. In the past, the GMX team expressed some interest in redeploying on Binance Smart Chain (BSC), where the project was originally deployed, though it is unclear if there is still any interest in this.
Get a 10% discount on all trading fees at GMX by using our referral code. Click here https://app.gmx.io/ to start trading.
GMX target users are traders who want leverage and close to zero slippage trading. This is possible due to the Oracle Pricing Model used by GMX. Since there is no AMM, the GLP pool uses dynamic aggregated oracle price feeds provided by Chainlink to determine the market price of an asset. The way this works is by taking the median price of Binance, Coinbase, and Bitfinex.
Users who believe in a multichain world would benefit from GMX being on as many chains as possible.
GMX Trading logic is handled by the Vault contract, which stores deposits and handles the main trading functions.
When users open a position or deposit collateral:
The collateral value of such trade will not change even if the price of the token being traded changes, for example:
There are 2 trading sides, but unlike traditional margin trading platforms where users borrow assets to go short and borrow stablecoins to go long, users on GMX do the opposite: users borrow assets to go long and borrow stablecoins to go short. This means that GLP holders are renting out their exposure to traders. If traders make a profit, GLP holders incur a loss, and vice-versa. This occurs because GLP token holders are holding a token that represents a multi-asset liquidity pool.
A position can be liquidated by keepers if the losses of the trade reduce the collateral to the point where (position size / remaining collateral) is more than the max allowed leverage.
As V2 is funded by the GMX Market pool mechanism, there are some differences when it comes to trading compared to V1.
Selecting a Pool
Multiple pools may be available for your selected market, for example, there may be an ETH-USDC and ETH-USDT pool. You can select which pool you’d like to trade in depending on which collateral you prefer to be backing your positions.
Selecting a Collateral
Multiple types of collateral may be available for your selected market, for example, in the ETH-USDC market, you can choose whether your position’s collateral is stored as ETH or USDC. Examples of how this could be used:
There are 2 types of markets possible in V2.
Traders can swap assets on spot trading, or trade perpetual futures with leverage without the need for KYC. They can also enjoy zero price impact trades on market order execution, and enjoy trading without temporary wicks that might trigger liquidations.
Traders have access to a maximum of 50x leverage.
However, none of this liquidity is actually rented out from the pool. When the position is closed:
Hence, the GLP holders profit when traders lose, and lose when traders win.
1. User sends the transaction with request details (e.g. deposit/withdraw/swap/increase/decrease position…)
2. Keepers listen for the transactions and include the price for the request. After that, the transaction is sent to execute the request.
When liquidity providers deposit assets in a liquidity pool of an AMM (Automated Market Maker), they must deposit assets based on a given ratio quoted by the AMM (e.g. 50% of assets in USDC and 50% in ETH). This ratio between the assets in the pool determines the price, usually by a constant product formula (x*y = k).
While this formula allows for the market to function, it can lead to impermanent losses for liquidity providers. Impermanent loss occurs when the AMM adjusts the ratio of the assets in the pool (to ensure they remain at a constant ratio in terms of value), and the liquidity provider loses out on gain from a deposited asset that outperforms the other. In other words, the liquidity provider would have made more gains if he/she had held the original assets instead of providing them as liquidity for traders.
GMX synthetic markets are created with a long collateral token, a short collateral token, and an index token:
Liquidity providers can deposit either the long or short collateral token to mint liquidity tokens:
Synthetic markets on GMX will be isolated and its contracts could allow for new assets to be listed. Since these trading pools are backed by pair-specific liquidity providers, GLP is not involved in their design.
Users could:
2 steps are required for execution and also helps avoid frontrunning issues:
Prices are provided by an off-chain oracle system:
Funding fees and price impact keep longs/shorts in balance while reducing the risk of manipulation
Negative funding rates mean that shorts pay a fee to longs, and positive funding rates mean that longs pay a fee to shorts.
If the index price of the asset is higher than the spot price of the asset, funding will be positive (to arbitrage back to the real price by incentivizing shorts and penalizing longs), and if the price is lower than the spot price, funding will negative to penalize shorts and incentivize longs.
Get a 10% discount on all trading fees at GMX by using our referral code. Click here https://app.gmx.io/ to start trading.
There are 3 kinds of keepers and nodes:
There are a few main types of contracts:
The contracts are separated into these types to allow for gradual upgradeability.
EnumberableSets are used to allow order lists and position lists to be easily queried by interfaces or keepers, this is used over indexers as there may be a lag for indexers to sync the latest block. Having the lists stored directly in the contract also helps to ensure that accurate data can be retrieved and verified when needed.
Markets are created using “MarketFactory.createMarket”, this creates a “MarketToken” and stores a “Market.Props” struct in the “MarketStore”.
The “MarketToken” is used to keep track of liquidity providers’ share of the market pool and to store the tokens for each market.
At any point in time, the price of a “MarketToken” is “(worth of market pool) / MarketToken.totalSupply()”, the function “MarketUtils.getMarketTokenPrice” can be used to retrieve this value.
The worth of the market pool is the sum of
Deposits add long/short tokens to the market’s pool and mint “MarketTokens” to the depositor.
Requests for deposits are created by calling “ExchangeRouter.createDeposit”, specifying:
Deposit requests are executed using “epositHandler.executeDeposit” if the deposit was created at block n, it should be executed with the oracle prices at block n.
The amount of MarketTokens to be minted, before fees and price impact, is calculated as “(worth of tokens deposited) / (worth of market pool) * MarketToken.totalSupply()”.
Withdrawals burn “MarketTokens” in exchange for the long/short tokens of a market’s pool.
Requests for withdrawals are created by calling “ExchangeRouter.createWithdrawal”, specifying:
Withdrawal requests are executed using “WithdrawalHandler.executeWithdrawal”, if the withdrawal was created at block n, it should be executed with the oracle prices at block n.
The amount of long or short tokens to be redeemed, before fees and price impact, is calculated as “(worth of market tokens) / (long/short token price)”.
Long and short tokens of a market can be swapped for each other.
For example, if the ETH / USD market has WETH as the long token and USDC as the short token, WETH can be sent to the market to be swapped for USDC and USDC can be sent to the market to be swapped for WETH.
Swap order requests are created by calling “ExchangeRouter.createOrder”, specifying:
The swap output amount, before fees and price impact, “(amount of tokens in) * (token in price) / (token out price)”.
Market swap order requests are executed using “OrderHandler.executeOrder”, if the order was created at block n, it should be executed with the Oracle prices at block n.
Passive swap orders that should be executed when the output amount matches the minimum output amount specified by the user.
Limit swap order requests are executed using OrderHandler.executeOrder, if the order was created at block n, it should be executed with Oracle prices after block n.
Open or increase a long/short perp position.
Market increase order requests are created by calling ExchangeRouter.createOrder, specifying:
Market increase order requests are executed using OrderHandler.executeOrder, if the order was created at block n, it should be executed with the oracle prices at block n.
Passive increase position orders that should be executed when the index token price matches the acceptable price specified by the user.
Long position example: if the current index token price is $5000, a limit increase order can be created with an acceptable price of $4990, the order can be executed when the index token price is <= $4990.
Short position example: if the current index token price is $5000, a limit increase order can be created with an acceptable price of $5010, the order can be executed when the index token price is >= $5010.
Limit increase order requests are executed using OrderHandler.executeOrder, if the order was created at block n, it should be executed with the Oracle prices after block n.
Close or decrease a long/short perp position.
Market decrease order requests are created by calling ExchangeRouter.createOrder, specifying:
Market decrease order requests are executed using OrderHandler.executeOrder, if the order was created at block n, it should be executed with the oracle prices at block n.
Passive decrease position orders that should be executed when the index token price matches the acceptable price specified by the user.
Long position example: if the current index token price is $5000, a limit decrease order can be created with an acceptable price of $5010, the order can be executed when the index token price is >= $5010.
Short position example: if the current index token price is $5000, a limit decrease order can be created with the acceptable price of $4990, the order can be executed when the index token price is <= $4990.
Limit decrease order requests are executed using OrderHandler.executeOrder, if the order was created at block n, it should be executed with the Oracle prices after block n.
Passive decrease position orders should be executed when the index token price crosses the acceptable price specified by the user.
Long position example: if the current index token price is $5000, a stop-loss decrease order can be created with an acceptable price of $4990, the order can be executed when the index token price is <= $4990.
Short position example: if the current index token price is $5000, a stop-loss decrease order can be created with the acceptable price of $5010, the order can be executed when the index token price is >= $5010.
Stop-loss decrease order requests are executed using OrderHandler.executeOrder, If the order was created at block n, it should be executed with the oracle prices after block n.
For the limit swap, limit increase, limit decrease, and stop-loss decrease orders, the order can be executed at an acceptable price if it is within the range of the validated Oracle prices.
For example, if the current index token price is $5000 and a user creates a limit long decrease order with an acceptable price of $5010, the order can be executed with the index token price as $5010 if Oracle prices $5008 and $5012 are validated, the blocks of the oracle prices must be after the order was updated and must be in ascending order.
Oracle prices are signed as a value together with a precision, this allows prices to be compacted as uint32 values.
The signed prices represent the price of one unit of the token using a value with 30 decimals of precision.
Representing the prices in this way allows for conversions between token amounts and fiat values to be simplified, e.g. to calculate the fiat value of a given number of tokens the calculation would just be: token amount * oracle price, to calculate the token amount for a fiat value it would be: fiat value/oracle price.
The trade-off of this simplicity in the calculation is that tokens with a small USD price and a lot of decimals may have precision issues it is also possible that a token’s price changes significantly and results in requiring higher precision.
The formula to calculate what the decimal multiplier value should be set to:
Decimals: 30 – (token decimals) – (number of decimals desired for precision)
Funding fees incentivize the balancing of long and short positions, the side with the larger open interest pays a funding fee to the side with the smaller open interest.
Funding fees for the larger side are calculated as (funding factor per second) * (open interest imbalance) ^ (funding exponent factor) / (total open interest).
For example, if the funding factor per second is 1 / 50,000, the funding exponent factor is 1, the long open interest is $150,000 and the short open interest is $50,000 then the funding fee per second for longs would be (1 / 50,000) * 100,000 / 200,000 => 0.00001 => 0.001%.
The funding fee per second for shorts would be -0.00001 * 150,000 / 50,000 => 0.00003 => -0.003%.
It is also possible to set a stableFundingFactor, this would result in the specified funding factor being used instead of the dynamic funding factor.
There is a borrowing fee paid to liquidity providers, this helps prevent users from opening both long and short positions to take up pool capacity without paying any fees.
Borrowing fees are calculated as borrowing factor * (open interest in usd + pending pnl) ^ (borrowing exponent factor) / (pool usd) for longs and borrowing factor * (open interest in usd) ^ (borrowing exponent factor) / (pool usd) for shorts.
For example, if the borrowing factor per second is 1 / 50,000, the borrowing exponent factor is 1, the long open interest is $150,000 with +$50,000 pending PnL, and the pool has $250,000 worth of tokens, the borrowing fee per second for longs would be (1 / 50,000) * (150,000 + 50,000) / 250,000 => 0.000016 => 0.0016%.
There is also an option to set a skipBorrowingFeeForSmallerSide flag, this would result in the borrowing fee for the smaller side being set to zero. For example, if there are more longs than shorts and skipBorrowingFeeForSmallerSide is true, then the borrowing fee for shorts would be zero.
The code for price impact can be found in the /pricing contracts.
Price impact is calculated as:
For swaps, the imbalance is calculated as the difference in the worth of the long tokens and short tokens.
For position actions (increase/decrease position), the imbalance is calculated as the difference in the long and short open interest.
price impact exponents and price impact factors are configured per market and can differ for spot and position actions.
Note that this calculation is the price impact for a user’s trade not the price impact on the pool. For example, a user’s trade may have a 0.25% price impact, the next trade for a very small amount may have a 0.5% price impact.
The purpose of the price impact is to:
Since the contracts use an oracle price which would be an average or median price of multiple reference exchanges. Without a price impact, it may be profitable to manipulate the prices on reference exchanges while executing orders on the contracts.
This risk will also be present if the positive and negative price impact values are similar, for that reason the positive price impact should be set to a low value in times of volatility or irregular price movements.
For the price impact on position increases/decreases, if negative price impact is deducted as collateral from the position, this could lead to the position having different leverage from what the user intended, so instead of deducting collateral, the position’s entry/exit price is adjusted based on the price impact.
If the index token is different from both the long and short token of the market, then it is possible that the pool value becomes significantly affected by the position impact pool, if the position impact pool is very large and the index token has a large price increase. An option to gradually reduce the size of the position impact pool may be added if this becomes an issue.
Price impact is also tracked using a virtual inventory value for positions and swaps, this tracks the imbalance of tokens across similar markets, e.g. ETH/USDC, ETH/USDT.
In case of a large price movement, it is possible that a large amount of positions are decreased or liquidated on one side causing a significant imbalance between long and short open interest, this could lead to very high price impact values. To mitigate this, a max position impact factor value can be configured. If the current price impact exceeds the max negative price impact, then any excess collateral deducted beyond the max negative price impact would be held within the contract, if there was no price manipulation detected, this collateral can be released to the user. When the negative price impact is capped, it may be profitable to open and immediately close positions, since the positive price impact may now be more than the capped negative price impact. To avoid this, the max positive price impact should be configured to be below the max negative price impact.
There are configurable swap fees and position fees per market.
Execution fees are also estimated and accounted for on creation of deposit, withdrawal, and order requests so that keepers can execute transactions at a close to net zero cost.
If a market has stablecoins as the short collateral token it should be able to fully pay short profits if the max short open interest does not exceed the amount of stablecoins in the pool.
If a market has a long collateral token that is different from the index token, the long profits may not be fully paid out if the price increase of the index token exceeds the price increase of the long collateral token.
Markets have a reserve factor that allows open interest to be capped to a percentage of the pool size, this reduces the impact of profits of short positions and reduces the risk that long positions cannot be fully paid out.
Roles are managed in the RoleStore, the RoleAdmin has access to grant and revoke any role.
The RoleAdmin will be the deployer initially, but this should be removed after roles have been setup.
After the initial setup:
Only the Timelock contract should have the RoleAdmin role
New roles can be granted by timelock admins with a time delay
System values should only be set using the Config contract
No EOA should have a Controller role
Config keepers and timelock admins could potentially disrupt regular operation through the disabling of features, incorrect setting of values, whitelisting malicious tokens, abusing the positive price impact value, etc
It is expected that the timelock multisig should revoke the permissions of malicious or compromised accounts
Order keepers and frozen order keepers could potentially extract value through transaction ordering, delayed transaction execution, ADL execution, etc, this will be partially mitigated with a keeper network
Oracle signers are expected to accurately report the price of tokens
Liquidity providers suffer no impermanent loss and enjoy a high APR in ETH/AVAX based on the amount of trading volume. Also, liquidity providers are eligible to profit from traders’ losses.
Liquidity providers deposit assets in the pool to mint GLP. This liquidity represents an index of assets used for swaps and leverage trading. The token price of GLP is the value of the total worth of assets in the index including the unrealized profits and losses of open positions divided by the supply of GLP.
The composition of GLP is different on each chain. The fees for minting/burning GLP depend on if the index assets are underweight/overweight in the index pool. For example, if ETH is underweight, the fees for minting GLP by depositing ETH will be lower to incentivize more ETH deposits. The token weights in the pool are adjusted to help hedge the holders of GLP against the open positions of traders.
GMX aims for value accrual to its governance token GMX while giving staking yield in ETH or AVAX instead of just using their native GMX token as a reward. As per cryptofees.info, GMX is one of the most profitable protocols, given the upside and product differentiation from other perpetual trading exchanges. Low slippage trades and abundant liquidity attract traders, which also incentivizes more liquidity providers who will generate revenue from traders’ profits/losses, resulting in a flywheel effect. The value accrual for GMX is significant since 30% of the platform fees are distributed to GMX stakers. This also rewards long-term GMX holders, reducing selling pressure of the token on the market due to the 1 year vesting period of esGMX (escrowed GMX).
Similarly, value accrues to GLP holders by entitling them to a share of the GLP liquidity pool, which also means that at any given time GLP holders are taking the other side of the longs and shorts currently open. Regardless of the profits/losses of traders, GLP holders are rewarded with 70% of platform fees. Because of this, holding GLP is like holding an index of the assets and stablecoins in the pool, which is usually dominated by ETH, WBTC, and stablecoins as well as other assets like UNI or LINK.
GMX gets its revenue from trading volumes. When this revenue is high enough to incentivize users to provide more liquidity, the protocol can reach a level where it can self-sustain itself even in a downtrend market. During 2022, the product has stood out from its competitors and proven that the LP’s APR and TVL metrics are not negatively affected by less esGMX rewards. This shows that the yield provided to LPs is high enough to incentivize liquidity in the GLP pool.
The protocol generates revenue by charging fees when users open or close positions and charging borrow fees which are deducted every hour a leveraged position is open. This revenue is split into the following allocations:
To continue incentivizing liquidity while maintaining protocol sustainability, the GMX DAO passed a proposal to update esGMX emissions. Rewards to staked tokens are distributed every second. The rate of rewards is evaluated and can be changed by the DAO.
Rewards are distributed as follows:
Most protocol revenue comes from margin trading (~75%), with some coming from spot trading (~15%), 5% from dynamic fees minting and burning GLP, and the remaining from liquidations.
Get a 10% discount on all trading fees at GMX by using our referral code. Click here https://app.gmx.io/ to start trading.
GMX is the governance token for the GMX protocol.
Users can stake GMX to earn rewards from 3 sources:
There are two options to access these rewards:
There is a floor price fund for the GMX token priced in ETH and GLP. These reserves can grow in 2 ways:
The floor price fund:
Currently, the floor price fund is held in multiple contracts that will gradually consolidate into a single contract:
Token emissions seek to grow the network of users interacting with the protocol. This demand for using the protocol would generate organic revenue to sustain protocol operations while sufficiently incentivizing even more users to provide liquidity.
It is unlikely that all tokens will be circulating at the same time, due to the tokens reserved for the price floor funds not being meant to hit the markets to avoid diluting the value of current token holders. Besides, esGMX emissions can only become liquid after a 365 days vesting period after which the underlying principle GMX or GLP can be claimed.
The emissions of esGMX ended in March 2023, as per the governance vote.
Escrowed GMX is meant to be a non-transferrable token that can be used in one of 2 ways:
Despite being meant to not be transferable, users can perform a full account transfer of esGMX tokens. A full account transfer sends all GMX, esGMX, GLP tokens, and multiplier tokens to a new account. This functionality is only supported if the receiver address has not staked GMX or GLP tokens before. These transfers are the only way to transfer and cannot return back to the sending account.
The emissions of esGMX ended in March 2023, as per the governance vote.
GMX uses multiplier points as a mechanism to reward long-term holders without token inflation. When users stake GMX, they receive Multiplier Points from the protocol at a fixed 100%APR. For example, 1,000 GMX tokens that are staked would earn a total of 1,000 Multiplier Points.
The GLP token is the tokenized representation of GMX V1’s liquidity pool.
The GLP token consists of an index of assets used for trading. Its price is determined by the value of all tokens within the pool and factoring in the profits and losses of all current open positions.
The price of GLP minting and redemptions is calculated based on: (the total worth of assets in the index including profits/losses of open positions) / (GLP supply).
GLP holders earn Escrowed GMX rewards and 70% of platform fees are distributed in ETH for Arbitrum users or AVAX for Avalanche users. The fees are distributed after deducting referral rewards and the network costs of keepers (~1% of the total fees). GLP is specific to the network where it is minted and cannot be transferred across networks, since the price and rewards will be different.
Since GLP holders deposit liquidity for leverage trading, they will make a profit when leverage traders make a loss and vice versa:
Fees for minting GLP vary based on the assets of which the pool has more or less of. The fees for minting will be lower for tokens that the pool has less of (to incentivize deposits in that asset) and vice versa. The protocol rebalances the fees to mint GLP, burn GLP, or perform swaps based on whether the action increases the balance of assets included in the index or reduces it.
GLP also grants exposure to volatile markets that negatively impact both long and short traders, filling the pool assets as it simultaneously makes a profit from trading fees.
The GM pool, or GMX Market pool, is the liquidity mechanism of GMX V2, and can be bought or sold on the GM Pools page.
The main difference between GLP and GM is that instead of an indexed basket of assets like GLP, GM represents individual pools, allowing liquidity providers to expose themselves to specific tokens. Rewards for liquidity providers in GM are also paid in the pool token, with no esGMX earned.
A GM pool consists of:
For example, a market could be ETH/USD[ETH-USDC], in this case:
If a market is labelled as SWAP-ONLY or SPOT-ONLY, then the market only supports swaps and does not support leverage trading.
The price of the GM tokens depends on the following factors:
GMX Liquidity Vaults (GLV) manages liquidity across different trading markets. It is a vault of dynamically rebalancing GM liquidity tokens. GLV is a ‘pool of pools’, optimising liquidity between its underlying GM pools based on demand and usage, and generating fees from all those markets.
This way, liquidity is always available where traders need it most, making it easier for them to trade while giving liquidity providers a more efficient way to earn fees.
GLV is the index pool of GM Markets, rebalancing liquidity to its best-performing GM pools and generating fees from them. As a result, GLV offers liquidity providers a balanced instrument with stable risk-adjusted returns and high capital efficiency.
A GLV (GMX Liquidity Vault) pool consists of:
For example, a GLV could be GLV[WETH-USDC], in this case:
Liquidity will be automatically shifted between the supported markets based on utilization and the recommendations of Chaos Labs.
Just as with the separate GM pools, holders of GLV:
GLV can be purchased with $ETH, $USDC, or any of its seven underlying GM tokens.
Purchasing GLV with any of its underlying GM tokens costs no fees. GMX’s recently introduced SHIFT functionality for GM liquidity providers makes this zero-fee liquidity transfer possible.
Note that while the list of supported markets in which liquidity will be provided are displayed for each GLV, this list can change as additional markets are approved and added.
The following are the various fees for utilizing the protocol.
Additionally, under the v2 Fee Split snapshot passed on July 19, 2023, an allocation of 10% of protocol fees for which GMX stakers & GM liquidity providers participate would be allocated to the GMX Treasury. Overall, fees from V2 would be split according to the following ratios:
Rebates are the maker-taker fees collected by a market maker and that is shared with liquidity providers while charging the customers who take that liquidity out from the exchange.
Besides keeper nodes, watcher nodes are also run to verify that the prices submitted by the keepers have not been manipulated. These watcher nodes are responsible for continuously monitoring and computing the median price from the price feeds and comparing this price with the prices submitted by keepers.
Keepers and watchers are currently run by separate team members. As the team becomes more confident with regard to the watcher’s reliability, they can open the watcher to be run by any user and receive notifications instead.
The price feeds and position keepers can be decentralized more by using Chainlink keepers or a custom execution environment such as Intel SGX used by Avalanche.
On May 10, 2023, a proposal to integrate Chainlink’s new oracle was passed, allocating 1.2% of the GMX V2 protocol fees to Chainlink for future development work and support of the low-latency oracles used by GMX V2.
Get a 10% discount on all trading fees at GMX by using our referral code. Click here https://app.gmx.io/ to start trading.
GMX governance proposals can be tracked on their snapshot page.
There are parameters controlled by the team and adjusted by a Timelock, such as:
The Timelock requires a 24-hour gap between when details of an action are signaled on-chain to when the action is executed. The reason for choosing 24 hours is to quickly respond to any issues that may occur. The Timelock contract is monitored by team members.
Timelock smart contracts restrict the functionality within a smart contract to a specific window of time.
GMX is open source and has a large and supportive community. Such a strong community is a big difference when compared to other protocols since the support and contributions can act as a great marketing campaign. The community has built multiple projects and governance proposals that keep pushing the narrative forward. Some examples are the statistics page, a trading competition, a referrals program, an NFT project led by @xm92boi called the GMX Blueberry Club, and more.
Interacting with any smart contract requires caution. While these risks are minimized through testing, audits, and bug bounties, there is always the risk of vulnerabilities.
If a malicious transaction is sent, it is possible for all funds in the pool to be compromised. To mitigate this, all actions that can impact user funds must pass through a 24-hour Timelock contract controlled by the team. By doing this, an action is signaled on-chain, then there is a 24-hour time gap, and finally, the signaled action goes through.
If malicious transactions are detected through their monitoring system or Bug Bounty program, a multi-sig of advisors and community members can override the admin value of the Timelock and prevent the action from being executed.
The core logic of GMX contracts can’t be changed, but certain peripheral functions such as price feeds and pricing calculations can be updated.
The two-step transaction process for swap fees and the integration with KeeperDAO seek to mitigate front-running attacks.
Flash loans do not have an impact on swaps or traders since the minting and redeeming of GLP are settled using the oracle price and are not dependent on liquidity pool balances or liquidity pool composition parameters. Even if the changing fees for swaps are dependent on pool compositions, the maximum benefit from a flash loan would be a zero-fee swap which adjusts the GLP token index toward the desired token weights.
The GMX contracts have been audited by various security groups. There is an active bug bounty as well on Immunefi.
The recommendations were provided by Chaos Labs in collaboration with GMX core contributors and focused on the protocol’s safety and security.
Methods used in obtaining the recommendations included executing millions of market stress scenarios and Monte Carlo simulations at scale. These simulations, to test the system’s robustness in a myriad of potential scenarios, included a wide array of variables, such as:
Subsequently, recommendations to the initial risk parameter for Arbitrum and Avalanche deployments were made.
Access Control parameters on the smart contracts are controlled by the team. Among these settings are permissions to:
On Avalanche, the oracle pricing model was exploited due to the thinner liquidity on-chain compared to centralized exchanges. By manipulating AVAX’s price off-chain on CEXs, a trader managed to gain $566,000 from the GLP pool. This example shows how off-chain price manipulation may allow traders to profit from the low slippage feature of GMX.
A trader could see an imbalance between the long/short liquidity on GMX, buy a token on GMX, then buy a smaller amount on a centralized exchange to move the price up and, afterward, close the long on GMX for a profit, open a short on GMX, and then sell the asset back on the centralized exchange to finally close the short on GMX for another profit. If the profits could cover the cost of price slippage for the position on the CEX, plus the platform fees on both the CEXexchange and GMX, traders with big amounts of money could maybe drain the GLP pool.
As long as the external liquidity to move up the price of any index asset is lower than the liquidity available in the GLP pool, there is room for traders to long/short the asset on GMX in advance to move the price up/down in CEXs and make a profit.
There is also risk from assets that are very illiquid. The price oracle for these assets might halt for some tokens during extreme market conditions, causing a loss for the protocol. As an example from the past, Venus Protocol lost over $11.2M when an attacker deposited 230M LUNA tokens to borrow $13.5M given that the last oracle price update reported a price of $0.107 for LUNA when, in reality, the market price was below $0.01.
Get a 10% discount on all trading fees at GMX by using our referral code. Click here https://app.gmx.io/ to start trading.
The risk platform was introduced on September 25, 2023 by Chaos Labs.
The V2 Risk Hub is integrated with both Arbitrum and Avalanche deployments, and provides both high-level and in-depth information about the protocol, including TVL, Fees, Trading Volume, and Open Interest.
The Risk Explorer tool empowers users to run simulations on one or multiple assets, allowing them to simulate price drops and assess the potential impact on protocol positions and expected profit and loss (PnL). This functionality proves valuable for understanding the risk exposure associated with a position, particularly in market volatility.
GMX has raised no funds from VC investments. GMX is the evolution from Gambit, a BSC (Binance Smart Chain) project that raised community funds and then migrated the liquidity to an equivalent of 6M GMX tokens.
From the GMX telegram chat and on-chain analysis, it is possible to discover investors that bought from the open market, such as:
Uses cases:
Protocols building on GMX:
Other protocols can integrate and make the GMX ecosystem stronger. For example, partnerships with DAO Jones Options, Rage Trade, Dopex, and more give traders more flexibility and access to other instruments to speculate on the market. These protocols can create a moat against other competitors.
Get a 10% discount on all trading fees at GMX by using our referral code. Click here https://app.gmx.io/ to start trading.
There is a tier system in place to prevent gaming the referral system through self-referrals. This ensures that referrers receive the rebates for the users that they brought to the platform.
Anyone can create a program by creating a referral code in Tier1. To upgrade to Tier2 or Tier3 there are more steps:
If an account fulfills the criteria, there is an application form available: https://forms.gle/8QF2bxdYhUHNo7c96. Once filled, the user should get in touch with https://t.me/GMXPartners for a follow-up.
Get a 10% discount on all trading fees at GMX by using our referral code. Click here https://app.gmx.io/ to start trading.