Meet The Narwhal

Introducing The Indexed Uni/Sushi Swap Router

Didn’t think through how you’re going to actually eat that, did you, buddy?

It’s always nice to have the luxury of choice. That holds especially true when it comes to DeFi: assets are often available on multiple DEX platforms, but the differences in liquidity between them often has you hopping back and forth to find the one with minimal slippage.

The Context

Example: minting DEFI5 with ETH through the Uniswap router.

The way that this works is that your ETH — or DAI, or USDT, etc. — is swapped for the asset within the index (e.g. MKR, UNI, CRV) with the best price on Uniswap, and that asset is then deposited into the underlying pool of funds in exchange for your index token.

More precisely, the minter:

  • Checks the amount of each underlying token needed to mint the desired amount of the index token,
  • Uses the Uniswap SDK to get the best swap route for those amounts, and
  • Returns the best combination of Uniswap route and pool token.

Similarly, when destroying tokens, you have the option of utilizing our Uniswap burner to one-shot your index tokens back into e.g. ETH. This is useful if liquidity for an underlying index disappears: you can still ‘trade’ back out by making an intermediate stop through one of the constituent assets — the minting process above, but in reverse.

The Problem

Moreover, if the liquidity for a token migrates heavily away from Uniswap, it may well be the case that that token is no longer viable as a minter/burner candidate relative to others within an index, since the Uniswap SDK would always find better routes with less slippage using different tokens. This is unlikely to happen for the largest assets such as MKR, but for smaller tokens such as those in the DEGEN index, it’s a possibility that we cannot discount.

The Solution

So, given the choice between the unicorn and the fish when it comes to selecting swap routes between assets… why not both?

Meet the Narwhal: the unicorn of the sea.

We are so sorry.

Narwhal is a fork of the Uniswap peripheral contract suite that supports both Uniswap and Sushiswap. It supports all of the typical Uniswap functions such as swapETHForExactTokens but allows the caller to specify which swaps in a trade path should use Sushiswap and which should use Uniswap. One significant feature is that Narwhal doesn’t care whether or not an asset is only listed on one of the two exchanges: if you provide a pair and it turns out that it’s only available on Sushiswap, no problem!

There’s one major change under the hood (horn?): Narwhal uses bytes32[] for the path parameter instead of address[], with each token address encoded alongside a boolean indicating whether the swap to the next token in the path should use Sushiswap or Uniswap. This only adds a small amount of gas to each transaction despite doubling the accessible liquidity.

On top of the Uniswap router functionality, we’ve also merged the features from our old mint and burn routers for Indexed into the Narwhal router so that users only have to approve a single contract to use all of these features.

The smart contracts for the Narwhal router are in this repository, and it’s been deployed to mainnet at 0x429302C74a0350410fC8B43E4839D459dEC4D050. We also made a fork of the Uniswap SDK to route orders using Uniswap and Sushiswap pairs, which is available here.

There are no additional fees imposed when using Narwhal, and it is available under an MIT license.

The Benefit

It’s a different story when you’re DEX-agnostic, as you are when minting and burning our index tokens. What we have done to start with is integrated Narwhal into our router, opening up a wider range of swap route options, leading to — on average — more efficient minting and burning of index tokens.

Narwhal is our first step towards closer integration with Sushiswap, and while it may be hard for you — as the reader — to get excited about “cheaper routing”, it’s a nontrivial step towards increasing the efficiency of Indexed Finance as a platform.

Also: don’t try putting actual narwhal in sushi. It’s disgusting. We tried.

Discord
Twitter
Github
Telegram
Reddit