In curve stableswap an existing pool itself can be an asset of another pool. Then the pool is called a basepool and the pool who uses the basepool as asset is called a metapool. A basepool is a normal stableswap pool, over governance every pool can be turned into a basepool.
An Example:
USDC/USDT is the basepool, now we create a new metapool with USDC/USDT/crvUSD. To make it visible in the pool naming, I write this in (USDC/USDT)/crvUSD.
A video which explains this with the old interface: https://www.youtube.com/watch?v=VwJKioaAq_o
Existing basepools
3pool / 3crv DAI/USDC/USDT: https://www.curve.finance/dex/ethereum/pools/3pool/
Curve.fi Strategic USD Reserves / crv2pool : USDC/USDT https://www.curve.finance/dex/ethereum/pools/factory-stable-ng-355/
Some metapools, based on 3pool (DAI/USDC/USDT):
(DAI/USDC/USDT)/MIM https://www.curve.finance/dex/ethereum/pools/mim/deposit
In a perfectly balanced market 50% are in MIM and 16.6% each in DAI, USDC, and USDT.
(DAI/USDC/USDT)/gusd https://www.curve.finance/dex/ethereum/pools/gusd/deposit
To see all of them: https://www.curve.finance/dex/ethereum/pools?search=dai%2520usdc%2520usdt
One metapool, based on crv2pool:
MUSD/(USDC/USDT) https://www.curve.finance/dex/ethereum/pools/factory-stable-ng-518/deposit
In a perfectly balanced market 50% are in MIM and 16.6% each in DAI, USDC, and USDT.
A swap in this pool: https://etherscan.io/tx/0xb8858c1a31eca79033162c0e8830d8a5525b7e844ef628e39ba7a9401b75ab69
This is how a trade works in a metapool: USDC->MUSD
- USDC is deposited into the metapool
- The metapool deposits the USDC into the crv2pool and mints a crv2pool LP token with (USDC/USDT)
3.The crv2pool LP (USDC/USDT) token is swapped for MUSD in the metapool - The MUSD is sent to swapping address
Gas used is 317'793, native swap on USDC/USDT pool uses 205'497 GAS
Swap on USDC/USDT pool:
https://etherscan.io/tx/0x3469da6a80e944def9f2af7c777e51bbd1166805c90bdc64083164e961e3428c
This takes 50% more gas!
Benefits
- 50% of the token in the metapool is paired to 2 or more assets. Example: 1 $M TVL, so 0.5 $M in MUSD and 0.25 $M each in USDC and USDT. In two pools: 0.5 $M TVL = MUSD/USDC (0.25 $M each) and 0.5 $M TVL in MUSD/USDT (0.25 $M each). UX is better, as only one pool has to be managed, not two. On big swaps routing cost is better, as a bigger swap would go over both pools. (33% more gas with two pools)
- The basepool gets more TVL every time a metapool is created.
- The metapool earns the trading fee of the basepool, but this is not shown in the UX. (Can be fixed)
- The basepool LP token in the metapool always has the true market price, the same ratio of coins are the ones from the current price, even if not traded in the metapool itself
Neutral
- On a depeg of the base pool asset or metapool the risk for liquidty provider stays the same
USDM/(DAI/USDC/USDT) with depeg: https://www.curve.finance/dex/ethereum/pools/factory-v2-23/deposit
USDM is not related to MUSD, these are different stablecoins.
Trade-Offs
- To seed the pool, you need either the basepool LP token (Bad UX) or have all assets of the LP token.
- The basepool LP token cannot be staked in the gauge, and is not getting rewards. basepool LP tokens are added to the metapool and then only the metapool LP token can be staked and earn rewards. If the basepool is rewarded, this makes it economically discouraged to use it in the metapool.
- Confusing for asset issuers as they have more options to choose from.
- If a metapool exist, but the dominant route is always USDC<->MUSD, then USDT is iddle and takes the place at the cost of the USDC
- A swap over a metapool costs ~50% more in gas
Conclusions
Make basepool LP stakable to earn rewards from gauge in a metapool looks not feasible
It can't be fixed with current reward system. (stake in gauge). We would need to change how basepool works, basically autostake. But even then, as the metapool owns the basepool LP token, the reward is owned by the metapool. We hit the limits of staking.
For new chains with strong stablecoin preferences this could be a good solution
1) If they have a strong two USD stablecoins then it would make sense, as the base pool profits.
2) For the L2 who have their own stables and strong preference for USDT or USDC.
Example, garden chain has strong preference for USDC, so they make
gardenUSD/USDC as basepool, and encourage the the other stablecoins to pair as metapool. The basepool profits from this in growing TVL and so does the chain.
Link to docs around basepool and metapool:
https://docs.curve.finance/stableswap-exchange/stableswap-ng/pools/metapool/
https://docs.curve.finance/stableswap-exchange/stableswap/deposit_contracts/metapool_deposits/