Multi-Pool Swaps

After implementing cross-tick swaps, we’ve got close to real Uniswap V3 swaps. One significant limitation of our implementation is that it allows only swaps within a pool–if there’s no pool for a pair of tokens, then swapping between these tokens is not possible. This is not so in Uniswap since it allows multi-pool swaps. In this chapter, we’re going to add multi-pool swaps to our implementation.

Here’s the plan:

  1. first, we’ll learn about and implement the Factory contract;
  2. then, we’ll see how chained or multi-pool swaps work and implement the Path library;
  3. then, we’ll update the front-end app to support multi-pool swaps;
  4. we’ll implement a basic router that finds a path between two tokens;
  5. along the way, we’ll also learn about tick spacing which is a way of optimizing swaps.

After finishing this chapter, our implementation will be able to handle multi-pool swaps, for example, swapping WBTC for WETH via different stablecoins: WETH → USDC → USDT → WBTC.

Let’s begin!

You’ll find the complete code of this chapter in this Github branch.

This milestone introduces a lot of code changes in existing contracts. Here you can see all changes since the last milestone

If you have any questions feel free to ask them in the GitHub Discussion of this milestone!