Conic Omnipools

What is an Omnipool?

Omnipools are liquidity pools that Conic utilizes to allocate a single underlying asset across multiple Curve pools. For example the USDC Omnipool accepts deposits of USDC, and will allocate that to several Curve pools that have USDC as an underlying token.

How can a new Omnipool be created?

New Omnipools need to be proposed and approved via governance.

Which Curve pools are supported?

Conic supports v1 Curve (i.e., stableswap) pools that have a Chainlink Oracle for all underlying tokens of the Curve pool. This includes Meta pools.

In order to be usable by an Omnipool, a Curve pool must first be whitelisted via a Conic DAO vote.

How can I accrue CRV, CVX and CNC emissions?

CRV, CVX and CNC accrue to stakers of Omnipool LP tokens. By default, Omnipool LP tokens get staked and unstaked via the Conic UI when a deposit or withdrawal is made.

How do Omnipools rebalance funds across multiple Curve pools?

Omnipools rely on an incentivized and passive rebalancing system based on deposits to and withdrawals from them. When a user deposits into an Omnipool the deposit will always be made to the least allocated Curve Pool relative to the target distribution, and when a user withdraws it will come from the most over-allocated Curve Pool. This means that with regular deposits and withdrawals the pool will maintain a balanced state.

Rebalancing rewards for an Omnipool must be enabled via a Conic DAO vote.

To incentivize regular deposits and withdrawals, CNC emissions are given out to users who deposit into Omnipools while the pools are imbalanced and the rebalancing reward period is active. This period is activated after Curve pool weights have been updated in an Omnipool (i.e., after a LAV). The CNC received will be based on the amount deposited, and will also increase over time while a pool is imbalanced, and will stop when the pool is balanced again.

Once the Omnipool is balanced within an allowed deviation threshold, CNC emissions to incentivize deposits will be set to zero until the next rebalance period.

How much CNC is emitted during a rebalance?

The amount of CNC emitted depends on the deposit amount and increases with time. This incentivizes users to rebalance as soon as CNC emissions exceed the price impact incurred from making a deposit.

What is the rebalance function?

For bots and arbitrageurs who are looking to rebalance Omnipools for CNC rewards, they can do so by calling the rebalance function. Calling the rebalance function is more efficient than manually depositing and withdrawing from Omnipools and can result in a higher amount of CNC rewards for users.

How can I call the rebalance function?

Before calling the rebalance function, the caller must first approve spending for the reward handler to spend the underlying they are depositing. There is no change to how CNC rewards are distributed (emitted directly to the user’s wallet once the transaction completes). The rebalance function takes the underlyingAmount from the user, deposits it into the Omnipool, and then withdraws it. It then returns the remaining underlying to the user (which will likely be less than the original amount due to Curve swap fees). Users who call the rebalance function will only receive CNC rewards if rebalance rewards are active at that time.

The rebalance function takes two additional parameters; minUnderlyingReceived (which is the minimum underlying the user is willing to accept to receive back) and minCNCReceived (which is the minimum CNC rewards the user is willing to accept for their rebalance). It is recommended to use these values to protect against MEV bots sandwiching your transaction. Although the majority of rebalancing transactions will be done by bots, users wishing to call the rebalance function manually can do so through the contract on Etherscan.

When are rebalancing rewards paid out?

To incentivize regular deposits and withdrawals, CNC emissions are given out to users who deposit into Omnipools while the pools are imbalanced and the rebalancing reward period is active. Note that rewards are not paid out on withdrawals. For active LPs that wish to participate in the rebalancing process, they may want to use the rebalance function of an Omnipool.

What if someone deliberately imbalances an Omnipool?

By design, Omnipools do not allow to be imbalanced deliberately. When depositing into an Omnipool, the deposit will be made into the Curve pool that is the most under-allocated relative to its target allocation. Similarly, when withdrawing from an Omnipool, the withdrawal will always be made from the most over-allocated Curve pool. The exception to this is when the deposit or withdrawal is so large, that it would push the balance of that Curve pool the other way, resulting in it being more imbalanced than before and over a specified imbalance threshold. In this case, a full deposit is made, where the deposit is split over several Curve pools such that the Omnipool is relatively balanced after the deposit/withdrawal.

Does an Omnipool contain some idle funds to reduce gas costs on deposits?

All deposits into an Omnipool are always made directly to one or more Curve pools. However, the Curve pool LP tokens may not always get deposited (and subsequently staked) on Convex. This depends on a ratio of Curve LP tokens that may remain idle.

What can I do with my Omnipool LP tokens?

An LP may stake their Omnipool LP tokens to receive an amount of CNC that depends on the LP's value of staked LP tokens relative to the total Conic TVL. Additionally, stakers of LP tokens receive an "LP boost" on their vlCNC balance that is applied to the balance for voting and proposal creation. For more info, please refer to the voting and boosting section.

Can I provide liquidity for Omnipool LP tokens?

Yes, unstaked Omnipool LP tokens can be used to provide liquidity on an AMM, such as Curve, just like any other ERC-20 token. Note that Omnipool LP tokens that are not staked on Conic will not earn CNC rewards. However, they will earn fees from any trading volume that occurs. There is currently a Curve pool for crvUSD/cncCRVUSD that can be found here: https://curve.fi/#/ethereum/pools/factory-stable-ng-78/deposit

LPs may opt to acquire cncCRVUSD by swapping through this pool rather than depositing as it is, in most cases, significantly much cheaper in terms of gas costs.

To check if other Curve pools currently exist for Omnipool LP tokens search for them by LP token name on the Curve UI.

Who decides how much of an Omnipool's underlying asset a Curve pool should receive?

In an Omnipool, each supported Curve pool has a liquidity allocation weight, which determines the amount of liquidity that the Curve pool should receive. These weights get updated in biweekly liquidity allocation votes (LAVs).

Are CRV and CVX emissions compounded?

No. Omnipools distribute CRV and CVX as soon as the user claims their emissions. However, any "extra rewards" (e.g. SPELL or FXS) that a Curve pool receives will be compounded in CNC.

Why don't the CNC rewards I received match the APR on the UI?

The displayed APR on the Conic UI is the correct correct APR. However, when calculating the APR users might find a different return due to the fact that Conic uses a cached version of the TVL for each Omnipool. This is done as a measure to save on gas costs as calculating the TVL of each Omnipool is expensive. This cache is updated periodically via a permissionless contract call. An impact of this, is that during periods of high volatility between the TVL of Omnipools (usually around launch or when a new Omnipool is added), there can be times where the cache of the relative TVL is off from the actual TVL. This can cause the CNC rewards for each period to be higher or lower until the cache is updated. This is the cause of the discrepancy some users may notice between the UI displayed APR and the APR that they may manually calculate. Whereby the manually calculated APR could appear to be either higher or lower than the APR displayed on the Conic UI. As the relative TVL of Conic Omnipools stabilize, the received CNC will match more closely with the displayed APR.

How is the base APR calculated?

At their core, Omnipools derive their base APR from the trading fees earned from their underlying Curve pools. However, it is important to note that factors such as positive price impact, rebasing tokens (e.g. stETH for the ETH Omnipool), and positive exchange rates are also included in the base APR calculation. Often times when the base APR spikes to a higher than normal rate this is due to the pool realizing positive price impacts incurred from rebalances.

Why are deposits so expensive?

When funds are deposited into an Omnipool they can sometimes incur what is called a "full deposit." During a full deposit the provided liquidity gets distributed across all underlying Curve pools. This means that in one transaction an LP may need to pay the gas fees for depositing into 3 or more Curve pools as once as well as staking on Convex. As TVL grows full deposits become more unlikely and happen less often as Omnipools are able to allocate deposits to just a single Curve pool while maintaining liquidity allocation weights.

Is there a cheaper way to provide liquidity on Conic?

Yes. Omnipool LP tokens can be used to provide liquidity on AMMs like any other ERC-20 token. This enables users to swap for their LP tokens rather than making a deposit directly through Conic. Currently, there exists a cncCRVUSD / crvUSD pool on Curve. Users can swap crvUSD for cncCRVUSD here and then stake their cncCRVUSD LP tokens on Conic to earn rewards. Going through this route will, in the majority of cases, be significantly cheaper than depositing directly through Conic.

cncCRVUSD Curve pool: https://curve.fi/#/ethereum/swap?from=0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee&to=0x9961bdbe8b7091e584c2bf9d0a160c583f564a8c

Do Omnipools support Curve pools that do not directly hold the underlying asset?

Yes, Curve pools that do not directly hold the underlying asset are supported. For example, the USDC Omnipool could support tokens paired with the 3CRV pool. This is handled in the Omnipool contract by providing liquidity first to the 3CRV pool, and then to the pool it is paired with.

What happens if a token depegs in one of the Curve Pools used by an Omnipool?

In the event that a token depegs in one of the Curve Pools, an action can be triggered by anyone which helps to protect the Omnipool from the impact of the depegging. This action results in the weight of the Curve Pool being set to 0 and CNC rebalancing rewards being enabled again for deposits. The effect of this is that the Omnipool should withdraw funds from the depegged Curve Pool and move them to other Curve Pools on withdrawals.

Note that the handleDepeggedCurvePool function does not rebalance the pools automatically. This will still need to be done separately (e.g., via the rebalance function).

The definition of a Curve Pool being depegged is if the Curve LP Token has deviated by more than the depeg threshold since the last time the Omnipool weights were updated. The depeg threshold can be updated through governance, it is initialized to 3% on contract deployment.

Last updated