Curve.fi

As impermanent loss is a result of a divergence in the price of token A vis-à-vis token B from the time of deposit to withdrawal, Curve Finance largely avoids the problem of impermanent loss by allowing trade between assets that do not fluctuate much in value relative to each other. At the time of writing, the Curve pools with the highest liquidity are those between stablecoins (e.g. Dai, USDT, USDC) or between Bitcoin derivatives (e.g. renBTC, sBTC, wBTC).
Additionally, Curve has modified the Uniswap approach to produce an invariant that approaches a constant-sum invariant[1] when the tokens are in balance and a constant-product invariant when they are out of balance. This greatly minimised slippage for traders where the tokens are in or near balance.
Source: StableSwap - efficient mechanism for Stablecoin liquidity (2019)
Nevertheless, the use of Curve is restricted to swaps between assets that are stable in price relative to each other.
[1] The constant-sum invariant can be expressed as x + y = k, where x and y are the tokens balances and k is a constant.